quasar 2.19.2 → 2.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/Lang.json +1 -1
- package/dist/api/QCarouselSlide.json +1 -1
- package/dist/api/QChatMessage.json +1 -1
- package/dist/api/QImg.json +1 -1
- package/dist/api/QParallax.json +1 -1
- package/dist/api/QRange.json +1 -1
- package/dist/api/QSlider.json +1 -1
- package/dist/api/QTimelineEntry.json +1 -1
- package/dist/api/QTree.json +1 -1
- package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
- package/dist/icon-set/eva-icons.umd.prod.js +2 -2
- package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +5 -5
- package/dist/icon-set/fontawesome-v5.umd.prod.js +5 -5
- package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +5 -5
- package/dist/icon-set/fontawesome-v6.umd.prod.js +5 -5
- package/dist/icon-set/fontawesome-v7-pro.umd.prod.js +6 -0
- package/dist/icon-set/fontawesome-v7.umd.prod.js +6 -0
- package/dist/icon-set/ionicons-v4.umd.prod.js +2 -2
- package/dist/icon-set/line-awesome.umd.prod.js +1 -1
- package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
- package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
- package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
- package/dist/icon-set/material-icons.umd.prod.js +1 -1
- package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
- package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
- package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
- package/dist/icon-set/mdi-v3.umd.prod.js +5 -5
- package/dist/icon-set/mdi-v4.umd.prod.js +5 -5
- package/dist/icon-set/mdi-v5.umd.prod.js +5 -5
- package/dist/icon-set/mdi-v6.umd.prod.js +5 -5
- package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
- package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
- package/dist/icon-set/svg-eva-icons.umd.prod.js +2 -2
- package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +5 -5
- package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +5 -5
- package/dist/icon-set/svg-fontawesome-v7.umd.prod.js +6 -0
- package/dist/icon-set/svg-ionicons-v4.umd.prod.js +2 -2
- package/dist/icon-set/svg-ionicons-v5.umd.prod.js +5 -5
- package/dist/icon-set/svg-ionicons-v6.umd.prod.js +5 -5
- package/dist/icon-set/svg-ionicons-v7.umd.prod.js +6 -0
- package/dist/icon-set/svg-ionicons-v8.umd.prod.js +6 -0
- package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +2 -2
- package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +2 -2
- package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +2 -2
- package/dist/icon-set/svg-mdi-v6.umd.prod.js +5 -5
- package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
- package/dist/icon-set/svg-themify.umd.prod.js +2 -2
- package/dist/icon-set/themify.umd.prod.js +2 -2
- package/dist/lang/ar-TN.umd.prod.js +2 -2
- package/dist/lang/ar.umd.prod.js +2 -2
- package/dist/lang/az-Latn.umd.prod.js +2 -2
- package/dist/lang/bg.umd.prod.js +2 -2
- package/dist/lang/bn.umd.prod.js +2 -2
- package/dist/lang/bs-BA.umd.prod.js +2 -2
- package/dist/lang/ca.umd.prod.js +2 -2
- package/dist/lang/cs.umd.prod.js +2 -2
- package/dist/lang/da.umd.prod.js +2 -2
- package/dist/lang/de-CH.umd.prod.js +2 -2
- package/dist/lang/de-DE.umd.prod.js +2 -2
- package/dist/lang/de.umd.prod.js +2 -2
- package/dist/lang/el.umd.prod.js +2 -2
- package/dist/lang/en-GB.umd.prod.js +2 -2
- package/dist/lang/en-US.umd.prod.js +2 -2
- package/dist/lang/eo.umd.prod.js +2 -2
- package/dist/lang/es.umd.prod.js +2 -2
- package/dist/lang/et.umd.prod.js +2 -2
- package/dist/lang/eu.umd.prod.js +2 -2
- package/dist/lang/fa-IR.umd.prod.js +2 -2
- package/dist/lang/fa.umd.prod.js +2 -2
- package/dist/lang/fi.umd.prod.js +2 -2
- package/dist/lang/fr.umd.prod.js +2 -2
- package/dist/lang/gn.umd.prod.js +2 -2
- package/dist/lang/he.umd.prod.js +2 -2
- package/dist/lang/hi.umd.prod.js +2 -2
- package/dist/lang/hr.umd.prod.js +2 -2
- package/dist/lang/hu.umd.prod.js +2 -2
- package/dist/lang/id.umd.prod.js +2 -2
- package/dist/lang/is.umd.prod.js +2 -2
- package/dist/lang/it.umd.prod.js +2 -2
- package/dist/lang/ja.umd.prod.js +2 -2
- package/dist/lang/kk.umd.prod.js +2 -2
- package/dist/lang/km.umd.prod.js +2 -2
- package/dist/lang/ko-KR.umd.prod.js +1 -1
- package/dist/lang/kur-CKB.umd.prod.js +2 -2
- package/dist/lang/lt.umd.prod.js +2 -2
- package/dist/lang/lu.umd.prod.js +2 -2
- package/dist/lang/lv.umd.prod.js +2 -2
- package/dist/lang/mk.umd.prod.js +2 -2
- package/dist/lang/ml.umd.prod.js +2 -2
- package/dist/lang/mm.umd.prod.js +2 -2
- package/dist/lang/ms-MY.umd.prod.js +2 -2
- package/dist/lang/ms.umd.prod.js +2 -2
- package/dist/lang/my.umd.prod.js +2 -2
- package/dist/lang/nb-NO.umd.prod.js +2 -2
- package/dist/lang/nl.umd.prod.js +2 -2
- package/dist/lang/pl.umd.prod.js +2 -2
- package/dist/lang/pt-BR.umd.prod.js +2 -2
- package/dist/lang/pt.umd.prod.js +2 -2
- package/dist/lang/ro.umd.prod.js +2 -2
- package/dist/lang/ru.umd.prod.js +2 -2
- package/dist/lang/sk.umd.prod.js +2 -2
- package/dist/lang/sl.umd.prod.js +2 -2
- package/dist/lang/sm.umd.prod.js +2 -2
- package/dist/lang/sq.umd.prod.js +2 -2
- package/dist/lang/sr-CYR.umd.prod.js +2 -2
- package/dist/lang/sr.umd.prod.js +2 -2
- package/dist/lang/sv.umd.prod.js +2 -2
- package/dist/lang/ta.umd.prod.js +2 -2
- package/dist/lang/th.umd.prod.js +2 -2
- package/dist/lang/tl.umd.prod.js +2 -2
- package/dist/lang/tr.umd.prod.js +2 -2
- package/dist/lang/ug.umd.prod.js +2 -2
- package/dist/lang/uk.umd.prod.js +2 -2
- package/dist/lang/ur-PK.umd.prod.js +2 -2
- package/dist/lang/uz-Cyrl.umd.prod.js +2 -2
- package/dist/lang/uz-Latn.umd.prod.js +2 -2
- package/dist/lang/vi.umd.prod.js +2 -2
- package/dist/lang/zh-CN.umd.prod.js +2 -2
- package/dist/lang/zh-TW.umd.prod.js +2 -2
- package/dist/quasar.client.js +2615 -2603
- package/dist/quasar.sass +1 -1
- package/dist/quasar.server.prod.cjs +11 -11
- package/dist/quasar.server.prod.js +25 -25
- package/dist/quasar.umd.js +2610 -2598
- package/dist/quasar.umd.prod.js +23 -23
- package/dist/types/api/dialog.d.ts +1 -1
- package/dist/types/api/qnotify.d.ts +1 -1
- package/dist/types/api/qpopupproxy.d.ts +1 -1
- package/dist/types/feature-flag.d.ts +2 -2
- package/dist/types/globals.d.ts +3 -3
- package/dist/types/{extras/icon-set.d.ts → icon-set.d.ts} +21 -16
- package/dist/types/index.d.ts +1 -1
- package/dist/types/plugin.d.ts +1 -1
- package/dist/types/shim-icon-set.d.ts +1 -2
- package/dist/types/shim-lang.d.ts +1 -2
- package/dist/types/ts-helpers.d.ts +3 -3
- package/dist/types/tsconfig.json +1 -1
- package/dist/types/utils/scroll.d.ts +1 -1
- package/dist/types/utils.d.ts +2 -2
- package/dist/web-types/web-types.json +1 -1
- package/icon-set/bootstrap-icons.js +1 -1
- package/icon-set/eva-icons.js +23 -23
- package/icon-set/fontawesome-v7-pro.js +128 -0
- package/icon-set/fontawesome-v7.js +128 -0
- package/icon-set/ionicons-v4.js +17 -17
- package/icon-set/svg-bootstrap-icons.js +1 -1
- package/icon-set/svg-eva-icons.js +23 -23
- package/icon-set/svg-fontawesome-v5.js +1 -1
- package/icon-set/svg-fontawesome-v7.js +197 -0
- package/icon-set/svg-ionicons-v4.js +17 -17
- package/icon-set/svg-ionicons-v5.js +1 -1
- package/icon-set/svg-ionicons-v6.js +1 -1
- package/icon-set/svg-ionicons-v7.js +224 -0
- package/icon-set/svg-ionicons-v8.js +224 -0
- package/icon-set/svg-themify.js +7 -7
- package/icon-set/themify.js +7 -7
- package/lang/ar-TN.js +1 -1
- package/lang/ar.js +1 -1
- package/lang/az-Latn.js +1 -1
- package/lang/bg.js +1 -1
- package/lang/bn.js +1 -1
- package/lang/bs-BA.js +1 -1
- package/lang/ca.js +1 -1
- package/lang/cs.js +11 -6
- package/lang/da.js +1 -1
- package/lang/de-CH.js +1 -1
- package/lang/de-DE.js +1 -1
- package/lang/de.js +1 -1
- package/lang/el.js +1 -1
- package/lang/en-GB.js +1 -1
- package/lang/en-US.js +1 -1
- package/lang/eo.js +1 -1
- package/lang/es.js +1 -1
- package/lang/et.js +1 -1
- package/lang/eu.js +1 -1
- package/lang/fa-IR.js +1 -1
- package/lang/fa.js +1 -1
- package/lang/fi.js +1 -1
- package/lang/fr.js +1 -1
- package/lang/gn.js +1 -1
- package/lang/he.js +1 -1
- package/lang/hi.js +1 -1
- package/lang/hr.js +1 -1
- package/lang/hu.js +1 -1
- package/lang/id.js +1 -1
- package/lang/is.js +1 -1
- package/lang/it.js +9 -9
- package/lang/ja.js +1 -1
- package/lang/kk.js +1 -1
- package/lang/km.js +1 -1
- package/lang/kur-CKB.js +1 -1
- package/lang/lt.js +2 -2
- package/lang/lu.js +1 -1
- package/lang/lv.js +1 -1
- package/lang/mk.js +1 -1
- package/lang/ml.js +1 -1
- package/lang/mm.js +1 -1
- package/lang/ms-MY.js +1 -1
- package/lang/ms.js +1 -1
- package/lang/my.js +1 -1
- package/lang/nb-NO.js +1 -1
- package/lang/nl.js +1 -1
- package/lang/pl.js +1 -1
- package/lang/pt-BR.js +1 -1
- package/lang/pt.js +1 -1
- package/lang/ro.js +1 -1
- package/lang/ru.js +1 -1
- package/lang/sk.js +1 -1
- package/lang/sl.js +1 -1
- package/lang/sm.js +1 -1
- package/lang/sq.js +1 -1
- package/lang/sr-CYR.js +1 -1
- package/lang/sr.js +1 -1
- package/lang/sv.js +1 -1
- package/lang/ta.js +1 -1
- package/lang/th.js +1 -1
- package/lang/tl.js +1 -1
- package/lang/tr.js +1 -1
- package/lang/ug.js +1 -1
- package/lang/uk.js +1 -1
- package/lang/ur-PK.js +1 -1
- package/lang/uz-Cyrl.js +1 -1
- package/lang/uz-Latn.js +1 -1
- package/lang/vi.js +1 -1
- package/lang/zh-CN.js +1 -1
- package/lang/zh-TW.js +1 -1
- package/package.json +13 -17
- package/src/components/ajax-bar/QAjaxBar.js +22 -25
- package/src/components/avatar/QAvatar.js +3 -3
- package/src/components/avatar/QAvatar.test.js +2 -2
- package/src/components/badge/QBadge.js +9 -10
- package/src/components/badge/QBadge.test.js +2 -2
- package/src/components/banner/QBanner.js +6 -6
- package/src/components/banner/QBanner.test.js +2 -2
- package/src/components/bar/QBar.js +3 -3
- package/src/components/bar/QBar.test.js +2 -2
- package/src/components/breadcrumbs/QBreadcrumbs.js +5 -4
- package/src/components/breadcrumbs/QBreadcrumbs.test.js +3 -3
- package/src/components/breadcrumbs/QBreadcrumbsEl.js +4 -4
- package/src/components/breadcrumbs/QBreadcrumbsEl.test.js +2 -2
- package/src/components/btn/QBtn.js +39 -44
- package/src/components/btn/QBtn.test.js +2 -2
- package/src/components/btn/use-btn.js +34 -47
- package/src/components/btn/use-btn.test.js +5 -5
- package/src/components/btn-dropdown/QBtnDropdown.js +15 -16
- package/src/components/btn-group/QBtnGroup.js +3 -3
- package/src/components/btn-toggle/QBtnToggle.js +5 -9
- package/src/components/card/QCard.js +5 -5
- package/src/components/card/QCardActions.js +2 -2
- package/src/components/card/QCardSection.js +2 -2
- package/src/components/carousel/QCarousel.js +32 -38
- package/src/components/carousel/QCarouselControl.js +1 -1
- package/src/components/carousel/QCarouselSlide.js +1 -1
- package/src/components/carousel/QCarouselSlide.json +1 -1
- package/src/components/chat/QChatMessage.js +13 -14
- package/src/components/chat/QChatMessage.json +1 -1
- package/src/components/checkbox/QCheckbox.js +5 -5
- package/src/components/checkbox/use-checkbox.js +38 -50
- package/src/components/chip/QChip.js +26 -34
- package/src/components/chip/QChip.test.js +2 -2
- package/src/components/circular-progress/QCircularProgress.js +8 -11
- package/src/components/circular-progress/circular-progress.test.js +1 -1
- package/src/components/color/QColor.js +75 -98
- package/src/components/date/QDate.js +128 -140
- package/src/components/date/use-datetime.js +3 -6
- package/src/components/dialog/QDialog.js +44 -50
- package/src/components/dialog/QDialog.test.js +7 -7
- package/src/components/drawer/QDrawer.js +110 -152
- package/src/components/editor/QEditor.js +44 -37
- package/src/components/editor/editor-caret.js +27 -31
- package/src/components/editor/editor-utils.js +9 -5
- package/src/components/expansion-item/QExpansionItem.js +36 -48
- package/src/components/fab/QFab.js +11 -11
- package/src/components/fab/QFabAction.js +2 -4
- package/src/components/fab/use-fab.js +6 -7
- package/src/components/field/QField.js +2 -2
- package/src/components/file/QFile.js +26 -33
- package/src/components/footer/QFooter.js +40 -53
- package/src/components/form/QForm.js +37 -43
- package/src/components/form/QFormChildMixin.js +3 -3
- package/src/components/header/QHeader.js +35 -47
- package/src/components/icon/QIcon.js +19 -19
- package/src/components/img/QImg.js +24 -24
- package/src/components/img/QImg.json +3 -3
- package/src/components/infinite-scroll/QInfiniteScroll.js +38 -52
- package/src/components/inner-loading/QInnerLoading.js +3 -3
- package/src/components/input/QInput.js +52 -52
- package/src/components/input/use-mask.js +56 -54
- package/src/components/intersection/QIntersection.js +6 -8
- package/src/components/item/QItem.js +20 -30
- package/src/components/item/QItemLabel.js +5 -7
- package/src/components/item/QItemSection.js +6 -6
- package/src/components/item/QList.js +6 -6
- package/src/components/item/QList.test.js +2 -2
- package/src/components/knob/QKnob.js +39 -44
- package/src/components/layout/QLayout.js +30 -34
- package/src/components/linear-progress/QLinearProgress.js +14 -23
- package/src/components/markup-table/QMarkupTable.js +7 -9
- package/src/components/menu/QMenu.js +36 -37
- package/src/components/no-ssr/QNoSsr.js +1 -1
- package/src/components/option-group/QOptionGroup.js +5 -5
- package/src/components/page/QPage.js +16 -18
- package/src/components/page/QPageContainer.js +9 -9
- package/src/components/page-scroller/QPageScroller.js +11 -13
- package/src/components/page-sticky/use-page-sticky.js +18 -18
- package/src/components/pagination/QPagination.js +24 -26
- package/src/components/parallax/QParallax.js +15 -9
- package/src/components/parallax/QParallax.json +1 -1
- package/src/components/popup-edit/QPopupEdit.js +10 -13
- package/src/components/popup-proxy/QPopupProxy.js +5 -7
- package/src/components/pull-to-refresh/QPullToRefresh.js +15 -17
- package/src/components/radio/QRadio.js +24 -29
- package/src/components/range/QRange.js +33 -37
- package/src/components/rating/QRating.js +59 -61
- package/src/components/resize-observer/QResizeObserver.js +55 -62
- package/src/components/scroll-area/QScrollArea.js +32 -36
- package/src/components/scroll-observer/QScrollObserver.js +3 -3
- package/src/components/select/QSelect.js +208 -269
- package/src/components/separator/QSeparator.js +7 -10
- package/src/components/skeleton/QSkeleton.js +4 -4
- package/src/components/slide-item/QSlideItem.js +7 -7
- package/src/components/slide-transition/QSlideTransition.js +4 -4
- package/src/components/slider/QSlider.js +13 -16
- package/src/components/slider/use-slider.js +53 -81
- package/src/components/slider/use-slider.json +3 -3
- package/src/components/space/QSpace.test.js +1 -1
- package/src/components/spinner/QSpinner.test.js +2 -2
- package/src/components/spinner/QSpinnerAudio.test.js +2 -2
- package/src/components/spinner/QSpinnerBall.test.js +2 -2
- package/src/components/spinner/QSpinnerBars.test.js +2 -2
- package/src/components/spinner/QSpinnerBox.test.js +2 -2
- package/src/components/spinner/QSpinnerClock.test.js +2 -2
- package/src/components/spinner/QSpinnerComment.test.js +2 -2
- package/src/components/spinner/QSpinnerCube.test.js +2 -2
- package/src/components/spinner/QSpinnerDots.test.js +2 -2
- package/src/components/spinner/QSpinnerFacebook.test.js +2 -2
- package/src/components/spinner/QSpinnerGears.test.js +2 -2
- package/src/components/spinner/QSpinnerGrid.test.js +2 -2
- package/src/components/spinner/QSpinnerHearts.test.js +2 -2
- package/src/components/spinner/QSpinnerHourglass.test.js +2 -2
- package/src/components/spinner/QSpinnerInfinity.test.js +2 -2
- package/src/components/spinner/QSpinnerIos.test.js +2 -2
- package/src/components/spinner/QSpinnerOrbit.test.js +2 -2
- package/src/components/spinner/QSpinnerOval.test.js +2 -2
- package/src/components/spinner/QSpinnerPie.test.js +2 -2
- package/src/components/spinner/QSpinnerPuff.test.js +2 -2
- package/src/components/spinner/QSpinnerRadio.test.js +2 -2
- package/src/components/spinner/QSpinnerRings.test.js +2 -2
- package/src/components/spinner/QSpinnerTail.test.js +2 -2
- package/src/components/spinner/use-spinner.test.js +1 -1
- package/src/components/splitter/QSplitter.js +19 -21
- package/src/components/stepper/QStep.js +12 -14
- package/src/components/stepper/QStepper.js +13 -14
- package/src/components/stepper/StepHeader.js +34 -35
- package/src/components/tab-panels/QTabPanels.js +3 -3
- package/src/components/table/QTable.js +82 -100
- package/src/components/table/QTd.js +3 -3
- package/src/components/table/QTh.js +5 -6
- package/src/components/table/QTr.js +3 -3
- package/src/components/table/table-column-selection.js +4 -6
- package/src/components/table/table-filter.js +2 -2
- package/src/components/table/table-pagination.js +14 -20
- package/src/components/table/table-row-expand.js +3 -3
- package/src/components/table/table-row-selection.js +10 -20
- package/src/components/table/table-sort.js +7 -7
- package/src/components/tabs/QRouteTab.js +1 -1
- package/src/components/tabs/QTab.js +1 -1
- package/src/components/tabs/QTabs.js +82 -109
- package/src/components/tabs/use-tab.js +36 -38
- package/src/components/time/QTime.js +109 -132
- package/src/components/timeline/QTimeline.js +7 -4
- package/src/components/timeline/QTimelineEntry.js +7 -6
- package/src/components/timeline/QTimelineEntry.json +1 -1
- package/src/components/toggle/QToggle.js +6 -8
- package/src/components/toolbar/QToolbar.js +2 -2
- package/src/components/toolbar/QToolbar.test.js +2 -2
- package/src/components/toolbar/QToolbarTitle.js +2 -4
- package/src/components/toolbar/QToolbarTitle.test.js +2 -2
- package/src/components/tooltip/QTooltip.js +27 -28
- package/src/components/tree/QTree.js +96 -114
- package/src/components/tree/QTree.json +1 -1
- package/src/components/uploader/QUploaderAddTrigger.js +2 -2
- package/src/components/uploader/uploader-core.js +44 -51
- package/src/components/uploader/xhr-uploader-plugin.js +13 -17
- package/src/components/video/QVideo.js +1 -1
- package/src/components/video/QVideo.test.js +2 -2
- package/src/components/virtual-scroll/QVirtualScroll.js +9 -10
- package/src/components/virtual-scroll/use-virtual-scroll.js +42 -50
- package/src/composables/private.use-align/use-align.js +2 -2
- package/src/composables/private.use-align/use-align.test.js +1 -1
- package/src/composables/private.use-anchor/use-anchor.js +23 -32
- package/src/composables/private.use-dark/use-dark.test.js +1 -1
- package/src/composables/private.use-field/use-field.js +79 -99
- package/src/composables/private.use-file/use-file-dom-props.js +2 -2
- package/src/composables/private.use-file/use-file.js +27 -27
- package/src/composables/private.use-fullscreen/use-fullscreen.js +15 -20
- package/src/composables/private.use-history/use-history.js +2 -2
- package/src/composables/private.use-history/use-history.test.js +1 -1
- package/src/composables/private.use-key-composition/use-key-composition.js +11 -12
- package/src/composables/private.use-model-toggle/use-model-toggle.js +16 -25
- package/src/composables/private.use-panel/use-panel.js +25 -27
- package/src/composables/private.use-portal/use-portal.js +11 -9
- package/src/composables/private.use-prevent-scroll/use-prevent-scroll.js +1 -4
- package/src/composables/private.use-ratio/use-ratio.js +6 -5
- package/src/composables/private.use-ratio/use-ratio.test.js +1 -1
- package/src/composables/private.use-refocus-target/use-refocus-target.js +2 -4
- package/src/composables/private.use-router-link/use-router-link.js +44 -55
- package/src/composables/private.use-scroll-target/use-scroll-target.js +1 -1
- package/src/composables/private.use-size/use-size.test.js +1 -1
- package/src/composables/private.use-transition/use-transition.test.js +1 -1
- package/src/composables/private.use-validate/use-validate.js +23 -36
- package/src/composables/use-dialog-plugin-component/use-dialog-plugin-component.js +1 -1
- package/src/composables/use-form/private.use-form.js +1 -1
- package/src/composables/use-form/private.use-form.test.js +3 -3
- package/src/composables/use-form/use-form-child.js +7 -7
- package/src/composables/use-hydration/use-hydration.js +2 -2
- package/src/composables/use-hydration/use-hydration.test.js +1 -1
- package/src/composables/use-id/use-id.js +4 -8
- package/src/composables/use-id/use-id.test.js +1 -1
- package/src/composables/use-interval/use-interval.js +3 -3
- package/src/composables/use-interval/use-interval.test.js +1 -1
- package/src/composables/use-meta/use-meta.js +3 -3
- package/src/composables/use-quasar/use-quasar.test.js +1 -1
- package/src/composables/use-render-cache/use-render-cache.js +1 -1
- package/src/composables/use-render-cache/use-render-cache.test.js +1 -1
- package/src/composables/use-split-attrs/use-split-attrs.js +3 -7
- package/src/composables/use-split-attrs/use-split-attrs.test.js +1 -1
- package/src/composables/use-tick/use-tick.js +3 -3
- package/src/composables/use-tick/use-tick.test.js +2 -2
- package/src/composables/use-timeout/use-timeout.js +2 -2
- package/src/composables/use-timeout/use-timeout.test.js +1 -1
- package/src/directives/close-popup/ClosePopup.js +4 -9
- package/src/directives/intersection/Intersection.js +5 -8
- package/src/directives/morph/Morph.js +12 -18
- package/src/directives/ripple/Ripple.js +19 -26
- package/src/directives/ripple/Ripple.test.js +2 -2
- package/src/directives/scroll/Scroll.js +2 -2
- package/src/directives/touch-hold/TouchHold.js +22 -28
- package/src/directives/touch-pan/TouchPan.js +68 -84
- package/src/directives/touch-repeat/TouchRepeat.js +28 -39
- package/src/directives/touch-swipe/TouchSwipe.js +30 -33
- package/src/index.ssr.js +2 -0
- package/src/index.umd.js +2 -0
- package/src/install-quasar.js +9 -9
- package/src/plugins/addressbar/AddressbarColor.js +9 -9
- package/src/plugins/addressbar/AddressbarColor.test.js +2 -2
- package/src/plugins/app-fullscreen/AppFullscreen.js +11 -10
- package/src/plugins/app-fullscreen/AppFullscreen.test.js +2 -2
- package/src/plugins/app-fullscreen/test/mock-fullscreen.js +2 -2
- package/src/plugins/app-visibility/AppVisibility.js +5 -5
- package/src/plugins/app-visibility/AppVisibility.test.js +2 -2
- package/src/plugins/bottom-sheet/BottomSheet.js +2 -2
- package/src/plugins/bottom-sheet/component/BottomSheetComponent.js +4 -4
- package/src/plugins/cookies/Cookies.js +50 -62
- package/src/plugins/dark/Dark.js +3 -5
- package/src/plugins/dark/Dark.test.js +1 -1
- package/src/plugins/dialog/Dialog.js +2 -2
- package/src/plugins/dialog/component/DialogPluginComponent.js +17 -20
- package/src/plugins/icon-set/IconSet.js +2 -4
- package/src/plugins/icon-set/IconSet.test.js +1 -1
- package/src/plugins/lang/Lang.js +7 -10
- package/src/plugins/lang/Lang.json +2 -2
- package/src/plugins/lang/Lang.test.js +2 -2
- package/src/plugins/loading/Loading.js +10 -12
- package/src/plugins/loading-bar/LoadingBar.js +4 -4
- package/src/plugins/meta/Meta.js +10 -11
- package/src/plugins/notify/Notify.js +67 -72
- package/src/plugins/platform/Platform.js +19 -21
- package/src/plugins/platform/Platform.test.js +1 -1
- package/src/plugins/private.body/Body.js +23 -29
- package/src/plugins/private.body/Body.test.js +1 -1
- package/src/plugins/private.history/History.js +17 -25
- package/src/plugins/private.history/History.test.js +1 -1
- package/src/plugins/screen/Screen.js +16 -16
- package/src/plugins/screen/Screen.test.js +1 -1
- package/src/plugins/storage/LocalStorage.js +3 -4
- package/src/plugins/storage/LocalStorage.test.js +2 -2
- package/src/plugins/storage/SessionStorage.js +3 -4
- package/src/plugins/storage/SessionStorage.test.js +2 -2
- package/src/plugins/storage/engine/web-storage.js +30 -23
- package/src/plugins/storage/engine/web-storage.test.js +1 -1
- package/src/utils/EventBus/EventBus.js +3 -4
- package/src/utils/EventBus/EventBus.test.js +1 -1
- package/src/utils/clone/clone.test.js +4 -8
- package/src/utils/colors/colors.js +38 -29
- package/src/utils/colors/colors.test.js +2 -2
- package/src/utils/copy-to-clipboard/copy-to-clipboard.js +6 -11
- package/src/utils/create-meta-mixin/create-meta-mixin.js +2 -2
- package/src/utils/create-uploader-component/create-uploader-component.js +12 -7
- package/src/utils/css-var/get-css-var.test.js +2 -2
- package/src/utils/css-var/set-css-var.test.js +2 -2
- package/src/utils/date/date.js +229 -172
- package/src/utils/date/private.persian.js +11 -11
- package/src/utils/debounce/debounce.js +3 -7
- package/src/utils/debounce/debounce.test.js +1 -1
- package/src/utils/dom/dom.js +2 -4
- package/src/utils/dom/dom.test.js +4 -4
- package/src/utils/event/event.js +21 -23
- package/src/utils/export-file/export-file.js +3 -3
- package/src/utils/extend/extend.js +15 -14
- package/src/utils/extend/extend.test.js +2 -2
- package/src/utils/format/format.js +4 -10
- package/src/utils/format/format.test.js +1 -1
- package/src/utils/frame-debounce/frame-debounce.js +23 -12
- package/src/utils/frame-debounce/frame-debounce.test.js +1 -1
- package/src/utils/is/is.js +15 -26
- package/src/utils/is/is.test.js +8 -7
- package/src/utils/morph/morph.js +57 -48
- package/src/utils/open-url/open-url.js +7 -7
- package/src/utils/patterns/patterns.js +26 -23
- package/src/utils/patterns/patterns.test.js +1 -1
- package/src/utils/private.click-outside/click-outside.js +5 -5
- package/src/utils/private.config/instance-config.js +2 -0
- package/src/utils/private.config/instance-config.test.js +4 -4
- package/src/utils/private.config/nodes.js +5 -5
- package/src/utils/private.config/nodes.test.js +4 -4
- package/src/utils/private.create/create.test.js +1 -1
- package/src/utils/private.dialog/create-dialog.js +9 -12
- package/src/utils/private.focus/focus-manager.js +1 -1
- package/src/utils/private.focus/focus-manager.test.js +4 -4
- package/src/utils/private.focus/focusout.js +2 -2
- package/src/utils/private.focus/focusout.test.js +1 -1
- package/src/utils/private.get-emits-object/get-emits-object.test.js +1 -1
- package/src/utils/private.inject-obj-prop/inject-obj-prop.test.js +2 -2
- package/src/utils/private.keyboard/escape-key.js +5 -5
- package/src/utils/private.keyboard/escape-key.test.js +1 -1
- package/src/utils/private.keyboard/key-composition.js +4 -6
- package/src/utils/private.noop-ssr-directive-transform/noop-ssr-directive-transform.js +3 -1
- package/src/utils/private.noop-ssr-directive-transform/noop-ssr-directive-transform.test.js +1 -1
- package/src/utils/private.portal/portal.js +5 -5
- package/src/utils/private.position-engine/position-engine.js +20 -22
- package/src/utils/private.render/render.js +5 -7
- package/src/utils/private.render/render.test.js +5 -5
- package/src/utils/private.rtl/rtl.js +3 -2
- package/src/utils/private.rtl/rtl.test.js +1 -1
- package/src/utils/private.selection/selection.js +1 -1
- package/src/utils/private.selection/selection.test.js +2 -2
- package/src/utils/private.sort/sort.test.js +2 -2
- package/src/utils/private.touch/touch.js +10 -14
- package/src/utils/private.touch/touch.test.js +1 -1
- package/src/utils/private.vm/vm.js +2 -2
- package/src/utils/private.vm/vm.test.js +4 -4
- package/src/utils/run-sequential-promises/run-sequential-promises.js +44 -54
- package/src/utils/run-sequential-promises/run-sequential-promises.test.js +183 -0
- package/src/utils/scroll/prevent-scroll.js +9 -9
- package/src/utils/scroll/scroll.js +11 -12
- package/src/utils/throttle/throttle.js +4 -3
- package/src/utils/throttle/throttle.test.js +1 -1
- package/src/utils/uid/uid.js +51 -77
- package/src/utils/uid/uid.test.js +3 -3
- package/wrappers/index.cjs +2 -2
- package/wrappers/index.js +2 -2
- package/dist/types/extras/animations.d.ts +0 -106
- package/dist/types/extras/fonts.d.ts +0 -1
- package/dist/types/extras.d.ts +0 -3
- package/dist/vetur/quasar-attributes.json +0 -1
- package/dist/vetur/quasar-tags.json +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
|
-
h,
|
|
3
|
-
ref,
|
|
4
2
|
computed,
|
|
5
|
-
|
|
3
|
+
getCurrentInstance,
|
|
4
|
+
h,
|
|
5
|
+
nextTick,
|
|
6
|
+
onBeforeUnmount,
|
|
6
7
|
onBeforeUpdate,
|
|
7
8
|
onUpdated,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
getCurrentInstance
|
|
9
|
+
ref,
|
|
10
|
+
watch
|
|
11
11
|
} from 'vue'
|
|
12
12
|
|
|
13
13
|
import QField from '../field/QField.js'
|
|
@@ -22,32 +22,33 @@ import QMenu from '../menu/QMenu.js'
|
|
|
22
22
|
import QDialog from '../dialog/QDialog.js'
|
|
23
23
|
|
|
24
24
|
import useField, {
|
|
25
|
-
|
|
26
|
-
useFieldProps,
|
|
25
|
+
fieldValueIsFilled,
|
|
27
26
|
useFieldEmits,
|
|
28
|
-
|
|
27
|
+
useFieldProps,
|
|
28
|
+
useFieldState
|
|
29
29
|
} from '../../composables/private.use-field/use-field.js'
|
|
30
30
|
import {
|
|
31
31
|
useVirtualScroll,
|
|
32
32
|
useVirtualScrollProps
|
|
33
33
|
} from '../virtual-scroll/use-virtual-scroll.js'
|
|
34
34
|
import {
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
useFormInputNameAttr,
|
|
36
|
+
useFormProps
|
|
37
37
|
} from '../../composables/use-form/private.use-form.js'
|
|
38
38
|
import useKeyComposition from '../../composables/private.use-key-composition/use-key-composition.js'
|
|
39
39
|
|
|
40
40
|
import { createComponent } from '../../utils/private.create/create.js'
|
|
41
41
|
import { isDeepEqual } from '../../utils/is/is.js'
|
|
42
|
-
import {
|
|
42
|
+
import { prevent, stop, stopAndPrevent } from '../../utils/event/event.js'
|
|
43
43
|
import { normalizeToInterval } from '../../utils/format/format.js'
|
|
44
44
|
import {
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
isKeyCode,
|
|
46
|
+
shouldIgnoreKey
|
|
47
47
|
} from '../../utils/private.keyboard/key-composition.js'
|
|
48
48
|
import { hMergeSlot } from '../../utils/private.render/render.js'
|
|
49
49
|
|
|
50
50
|
const validateNewValueMode = v => ['add', 'add-unique', 'toggle'].includes(v)
|
|
51
|
+
// oxlint-disable-next-line no-template-curly-in-string
|
|
51
52
|
const reEscapeList = '.*+?^${}()|[]\\'
|
|
52
53
|
const fieldPropsList = Object.keys(useFieldProps)
|
|
53
54
|
|
|
@@ -213,7 +214,7 @@ export default createComponent({
|
|
|
213
214
|
|
|
214
215
|
const virtualScrollItemSizeComputed = computed(() =>
|
|
215
216
|
props.virtualScrollItemSize === void 0
|
|
216
|
-
? props.optionsDense
|
|
217
|
+
? props.optionsDense
|
|
217
218
|
? 24
|
|
218
219
|
: 48
|
|
219
220
|
: props.virtualScrollItemSize
|
|
@@ -237,23 +238,20 @@ export default createComponent({
|
|
|
237
238
|
const state = useFieldState()
|
|
238
239
|
|
|
239
240
|
const innerValue = computed(() => {
|
|
240
|
-
const mapNull = props.mapOptions
|
|
241
|
+
const mapNull = props.mapOptions && !props.multiple,
|
|
241
242
|
val =
|
|
242
|
-
props.modelValue !== void 0 &&
|
|
243
|
-
|
|
244
|
-
? props.multiple === true && Array.isArray(props.modelValue)
|
|
243
|
+
props.modelValue !== void 0 && (props.modelValue !== null || mapNull)
|
|
244
|
+
? props.multiple && Array.isArray(props.modelValue)
|
|
245
245
|
? props.modelValue
|
|
246
246
|
: [props.modelValue]
|
|
247
247
|
: []
|
|
248
248
|
|
|
249
|
-
if (props.mapOptions
|
|
249
|
+
if (props.mapOptions && Array.isArray(props.options)) {
|
|
250
250
|
const cache =
|
|
251
|
-
props.mapOptions
|
|
252
|
-
? innerValueCache
|
|
253
|
-
: []
|
|
251
|
+
props.mapOptions && innerValueCache !== void 0 ? innerValueCache : []
|
|
254
252
|
const values = val.map(v => getOption(v, cache))
|
|
255
253
|
|
|
256
|
-
return props.modelValue === null && mapNull
|
|
254
|
+
return props.modelValue === null && mapNull
|
|
257
255
|
? values.filter(v => v !== null)
|
|
258
256
|
: values
|
|
259
257
|
}
|
|
@@ -281,7 +279,7 @@ export default createComponent({
|
|
|
281
279
|
const computedInputClass = computed(() => {
|
|
282
280
|
let cls = 'q-field__input q-placeholder col'
|
|
283
281
|
|
|
284
|
-
if (props.hideSelected
|
|
282
|
+
if (props.hideSelected || innerValue.value.length === 0) {
|
|
285
283
|
return [cls, props.inputClass]
|
|
286
284
|
}
|
|
287
285
|
|
|
@@ -292,9 +290,8 @@ export default createComponent({
|
|
|
292
290
|
|
|
293
291
|
const menuContentClass = computed(
|
|
294
292
|
() =>
|
|
295
|
-
(props.virtualScrollHorizontal
|
|
296
|
-
|
|
297
|
-
: '') + (props.popupContentClass ? ' ' + props.popupContentClass : '')
|
|
293
|
+
(props.virtualScrollHorizontal ? 'q-virtual-scroll--horizontal' : '') +
|
|
294
|
+
(props.popupContentClass ? ' ' + props.popupContentClass : '')
|
|
298
295
|
)
|
|
299
296
|
|
|
300
297
|
const noOptions = computed(() => virtualScrollLength.value === 0)
|
|
@@ -308,29 +305,26 @@ export default createComponent({
|
|
|
308
305
|
)
|
|
309
306
|
|
|
310
307
|
const needsHtmlFn = computed(() =>
|
|
311
|
-
props.optionsHtml
|
|
308
|
+
props.optionsHtml ? () => true : opt => opt?.html === true
|
|
312
309
|
)
|
|
313
310
|
|
|
314
311
|
const valueAsHtml = computed(
|
|
315
312
|
() =>
|
|
316
|
-
props.displayValueHtml
|
|
313
|
+
props.displayValueHtml ||
|
|
317
314
|
(props.displayValue === void 0 &&
|
|
318
|
-
(props.optionsHtml
|
|
319
|
-
innerValue.value.some(needsHtmlFn.value)))
|
|
315
|
+
(props.optionsHtml || innerValue.value.some(needsHtmlFn.value)))
|
|
320
316
|
)
|
|
321
317
|
|
|
322
|
-
const tabindex = computed(() =>
|
|
323
|
-
state.focused.value === true ? props.tabindex : -1
|
|
324
|
-
)
|
|
318
|
+
const tabindex = computed(() => (state.focused.value ? props.tabindex : -1))
|
|
325
319
|
|
|
326
320
|
const comboboxAttrs = computed(() => {
|
|
327
321
|
const attrs = {
|
|
328
322
|
tabindex: props.tabindex,
|
|
329
323
|
role: 'combobox',
|
|
330
324
|
'aria-label': props.label,
|
|
331
|
-
'aria-readonly': props.readonly
|
|
332
|
-
'aria-autocomplete': props.useInput
|
|
333
|
-
'aria-expanded': menu.value
|
|
325
|
+
'aria-readonly': props.readonly ? 'true' : 'false',
|
|
326
|
+
'aria-autocomplete': props.useInput ? 'list' : 'none',
|
|
327
|
+
'aria-expanded': menu.value ? 'true' : 'false',
|
|
334
328
|
'aria-controls': `${state.targetUid.value}_lb`
|
|
335
329
|
}
|
|
336
330
|
|
|
@@ -345,7 +339,7 @@ export default createComponent({
|
|
|
345
339
|
const listboxAttrs = computed(() => ({
|
|
346
340
|
id: `${state.targetUid.value}_lb`,
|
|
347
341
|
role: 'listbox',
|
|
348
|
-
'aria-multiselectable': props.multiple
|
|
342
|
+
'aria-multiselectable': props.multiple ? 'true' : 'false'
|
|
349
343
|
}))
|
|
350
344
|
|
|
351
345
|
const selectedScope = computed(() =>
|
|
@@ -361,15 +355,13 @@ export default createComponent({
|
|
|
361
355
|
)
|
|
362
356
|
|
|
363
357
|
const optionScope = computed(() => {
|
|
364
|
-
if (virtualScrollLength.value === 0)
|
|
365
|
-
return []
|
|
366
|
-
}
|
|
358
|
+
if (virtualScrollLength.value === 0) return []
|
|
367
359
|
|
|
368
360
|
const { from, to } = virtualScrollSliceRange.value
|
|
369
361
|
|
|
370
362
|
return props.options.slice(from, to).map((opt, i) => {
|
|
371
363
|
const disable = isOptionDisabled.value(opt) === true
|
|
372
|
-
const active = isOptionSelected(opt)
|
|
364
|
+
const active = isOptionSelected(opt)
|
|
373
365
|
const index = from + i
|
|
374
366
|
|
|
375
367
|
const itemProps = {
|
|
@@ -383,19 +375,19 @@ export default createComponent({
|
|
|
383
375
|
dense: props.optionsDense,
|
|
384
376
|
dark: isOptionsDark.value,
|
|
385
377
|
role: 'option',
|
|
386
|
-
'aria-selected': active
|
|
378
|
+
'aria-selected': active ? 'true' : 'false',
|
|
387
379
|
id: `${state.targetUid.value}_${index}`,
|
|
388
380
|
onClick: () => {
|
|
389
381
|
toggleOption(opt)
|
|
390
382
|
}
|
|
391
383
|
}
|
|
392
384
|
|
|
393
|
-
if (disable
|
|
385
|
+
if (!disable) {
|
|
394
386
|
if (optionIndex.value === index) itemProps.focused = true
|
|
395
387
|
|
|
396
|
-
if ($q.platform.is.desktop
|
|
388
|
+
if ($q.platform.is.desktop) {
|
|
397
389
|
itemProps.onMousemove = () => {
|
|
398
|
-
if (menu.value
|
|
390
|
+
if (menu.value) setOptionIndex(index)
|
|
399
391
|
}
|
|
400
392
|
}
|
|
401
393
|
}
|
|
@@ -422,11 +414,11 @@ export default createComponent({
|
|
|
422
414
|
|
|
423
415
|
const squaredMenu = computed(
|
|
424
416
|
() =>
|
|
425
|
-
props.optionsCover
|
|
426
|
-
props.outlined
|
|
427
|
-
props.standout
|
|
428
|
-
props.borderless
|
|
429
|
-
props.rounded
|
|
417
|
+
!props.optionsCover &&
|
|
418
|
+
!props.outlined &&
|
|
419
|
+
!props.standout &&
|
|
420
|
+
!props.borderless &&
|
|
421
|
+
!props.rounded
|
|
430
422
|
)
|
|
431
423
|
|
|
432
424
|
const computedOptionsSelectedClass = computed(() =>
|
|
@@ -450,7 +442,8 @@ export default createComponent({
|
|
|
450
442
|
)
|
|
451
443
|
|
|
452
444
|
// returns method to tell if an option is disabled;
|
|
453
|
-
// takes into account 'option-disable' prop
|
|
445
|
+
// takes into account 'option-disable' prop;
|
|
446
|
+
// must be compared strictly to boolean true
|
|
454
447
|
const isOptionDisabled = computed(() =>
|
|
455
448
|
getPropValueFn(props.optionDisable, 'disable')
|
|
456
449
|
)
|
|
@@ -472,7 +465,7 @@ export default createComponent({
|
|
|
472
465
|
onKeypress: onTargetKeypress,
|
|
473
466
|
onFocus: selectInputText,
|
|
474
467
|
onClick(e) {
|
|
475
|
-
if (hasDialog
|
|
468
|
+
if (hasDialog) stop(e)
|
|
476
469
|
}
|
|
477
470
|
}
|
|
478
471
|
|
|
@@ -490,19 +483,16 @@ export default createComponent({
|
|
|
490
483
|
innerValueCache = val
|
|
491
484
|
|
|
492
485
|
if (
|
|
493
|
-
props.useInput
|
|
494
|
-
props.fillInput
|
|
495
|
-
props.multiple
|
|
486
|
+
props.useInput &&
|
|
487
|
+
props.fillInput &&
|
|
488
|
+
!props.multiple &&
|
|
496
489
|
// Prevent re-entering in filter while filtering
|
|
497
490
|
// Also prevent clearing inputValue while filtering
|
|
498
|
-
state.innerLoading.value
|
|
499
|
-
((dialog.value
|
|
500
|
-
hasValue.value !== true)
|
|
491
|
+
!state.innerLoading.value &&
|
|
492
|
+
((!dialog.value && !menu.value) || !hasValue.value)
|
|
501
493
|
) {
|
|
502
|
-
if (userInputValue
|
|
503
|
-
if (dialog.value
|
|
504
|
-
filter('')
|
|
505
|
-
}
|
|
494
|
+
if (!userInputValue) resetInputValue()
|
|
495
|
+
if (dialog.value || menu.value) filter('')
|
|
506
496
|
}
|
|
507
497
|
},
|
|
508
498
|
{ immediate: true }
|
|
@@ -515,13 +505,13 @@ export default createComponent({
|
|
|
515
505
|
watch(virtualScrollLength, rerenderMenu)
|
|
516
506
|
|
|
517
507
|
function getEmittingOptionValue(opt) {
|
|
518
|
-
return props.emitValue
|
|
508
|
+
return props.emitValue ? getOptionValue.value(opt) : opt
|
|
519
509
|
}
|
|
520
510
|
|
|
521
511
|
function removeAtIndex(index) {
|
|
522
512
|
if (index !== -1 && index < innerValue.value.length) {
|
|
523
|
-
if (props.multiple
|
|
524
|
-
const model = props.modelValue
|
|
513
|
+
if (props.multiple) {
|
|
514
|
+
const model = [...props.modelValue]
|
|
525
515
|
emit('remove', { index, value: model.splice(index, 1)[0] })
|
|
526
516
|
emit('update:modelValue', model)
|
|
527
517
|
} else {
|
|
@@ -538,8 +528,8 @@ export default createComponent({
|
|
|
538
528
|
function add(opt, unique) {
|
|
539
529
|
const val = getEmittingOptionValue(opt)
|
|
540
530
|
|
|
541
|
-
if (props.multiple
|
|
542
|
-
if (props.fillInput
|
|
531
|
+
if (!props.multiple) {
|
|
532
|
+
if (props.fillInput) {
|
|
543
533
|
updateInputValue(getOptionLabel.value(opt), true, true)
|
|
544
534
|
}
|
|
545
535
|
|
|
@@ -549,11 +539,11 @@ export default createComponent({
|
|
|
549
539
|
|
|
550
540
|
if (innerValue.value.length === 0) {
|
|
551
541
|
emit('add', { index: 0, value: val })
|
|
552
|
-
emit('update:modelValue', props.multiple
|
|
542
|
+
emit('update:modelValue', props.multiple ? [val] : val)
|
|
553
543
|
return
|
|
554
544
|
}
|
|
555
545
|
|
|
556
|
-
if (unique
|
|
546
|
+
if (unique && isOptionSelected(opt)) return
|
|
557
547
|
|
|
558
548
|
if (
|
|
559
549
|
props.maxValues !== void 0 &&
|
|
@@ -562,7 +552,7 @@ export default createComponent({
|
|
|
562
552
|
return
|
|
563
553
|
}
|
|
564
554
|
|
|
565
|
-
const model = props.modelValue
|
|
555
|
+
const model = [...props.modelValue]
|
|
566
556
|
|
|
567
557
|
emit('add', { index: model.length, value: val })
|
|
568
558
|
model.push(val)
|
|
@@ -571,7 +561,7 @@ export default createComponent({
|
|
|
571
561
|
|
|
572
562
|
function toggleOption(opt, keepOpen) {
|
|
573
563
|
if (
|
|
574
|
-
state.editable.value
|
|
564
|
+
!state.editable.value ||
|
|
575
565
|
opt === void 0 ||
|
|
576
566
|
isOptionDisabled.value(opt) === true
|
|
577
567
|
) {
|
|
@@ -580,10 +570,10 @@ export default createComponent({
|
|
|
580
570
|
|
|
581
571
|
const optValue = getOptionValue.value(opt)
|
|
582
572
|
|
|
583
|
-
if (props.multiple
|
|
584
|
-
if (keepOpen
|
|
573
|
+
if (!props.multiple) {
|
|
574
|
+
if (!keepOpen) {
|
|
585
575
|
updateInputValue(
|
|
586
|
-
props.fillInput
|
|
576
|
+
props.fillInput ? getOptionLabel.value(opt) : '',
|
|
587
577
|
true,
|
|
588
578
|
true
|
|
589
579
|
)
|
|
@@ -595,29 +585,26 @@ export default createComponent({
|
|
|
595
585
|
|
|
596
586
|
if (
|
|
597
587
|
innerValue.value.length === 0 ||
|
|
598
|
-
isDeepEqual(getOptionValue.value(innerValue.value[0]), optValue)
|
|
599
|
-
true
|
|
588
|
+
!isDeepEqual(getOptionValue.value(innerValue.value[0]), optValue)
|
|
600
589
|
) {
|
|
601
|
-
emit('update:modelValue', props.emitValue
|
|
590
|
+
emit('update:modelValue', props.emitValue ? optValue : opt)
|
|
602
591
|
}
|
|
603
592
|
|
|
604
593
|
return
|
|
605
594
|
}
|
|
606
595
|
|
|
607
|
-
if (hasDialog
|
|
608
|
-
state.focus()
|
|
609
|
-
}
|
|
596
|
+
if (!hasDialog || dialogFieldFocused.value) state.focus()
|
|
610
597
|
|
|
611
598
|
selectInputText()
|
|
612
599
|
|
|
613
600
|
if (innerValue.value.length === 0) {
|
|
614
|
-
const val = props.emitValue
|
|
601
|
+
const val = props.emitValue ? optValue : opt
|
|
615
602
|
emit('add', { index: 0, value: val })
|
|
616
|
-
emit('update:modelValue', props.multiple
|
|
603
|
+
emit('update:modelValue', props.multiple ? [val] : val)
|
|
617
604
|
return
|
|
618
605
|
}
|
|
619
606
|
|
|
620
|
-
const model = props.modelValue
|
|
607
|
+
const model = [...props.modelValue],
|
|
621
608
|
index = innerOptionsValue.value.findIndex(v => isDeepEqual(v, optValue))
|
|
622
609
|
|
|
623
610
|
if (index !== -1) {
|
|
@@ -627,7 +614,7 @@ export default createComponent({
|
|
|
627
614
|
return
|
|
628
615
|
}
|
|
629
616
|
|
|
630
|
-
const val = props.emitValue
|
|
617
|
+
const val = props.emitValue ? optValue : opt
|
|
631
618
|
|
|
632
619
|
emit('add', { index: model.length, value: val })
|
|
633
620
|
model.push(val)
|
|
@@ -637,7 +624,7 @@ export default createComponent({
|
|
|
637
624
|
}
|
|
638
625
|
|
|
639
626
|
function setOptionIndex(index) {
|
|
640
|
-
if (
|
|
627
|
+
if (!$q.platform.is.desktop) return
|
|
641
628
|
|
|
642
629
|
const val = index !== -1 && index < virtualScrollLength.value ? index : -1
|
|
643
630
|
|
|
@@ -648,7 +635,7 @@ export default createComponent({
|
|
|
648
635
|
|
|
649
636
|
// oxlint-disable-next-line default-param-last
|
|
650
637
|
function moveOptionSelection(localOffset = 1, skipInputValue) {
|
|
651
|
-
if (menu.value
|
|
638
|
+
if (menu.value) {
|
|
652
639
|
let index = optionIndex.value
|
|
653
640
|
do {
|
|
654
641
|
index = normalizeToInterval(
|
|
@@ -666,11 +653,7 @@ export default createComponent({
|
|
|
666
653
|
setOptionIndex(index)
|
|
667
654
|
scrollTo(index)
|
|
668
655
|
|
|
669
|
-
if (
|
|
670
|
-
skipInputValue !== true &&
|
|
671
|
-
props.useInput === true &&
|
|
672
|
-
props.fillInput === true
|
|
673
|
-
) {
|
|
656
|
+
if (!skipInputValue && props.useInput && props.fillInput) {
|
|
674
657
|
setInputValue(
|
|
675
658
|
index >= 0
|
|
676
659
|
? getOptionLabel.value(props.options[index])
|
|
@@ -694,7 +677,7 @@ export default createComponent({
|
|
|
694
677
|
|
|
695
678
|
function selectInputText(e) {
|
|
696
679
|
if (
|
|
697
|
-
props.useInput
|
|
680
|
+
props.useInput &&
|
|
698
681
|
targetRef.value !== null &&
|
|
699
682
|
(e === void 0 ||
|
|
700
683
|
(targetRef.value === e.target &&
|
|
@@ -708,7 +691,7 @@ export default createComponent({
|
|
|
708
691
|
// if ESC and we have an opened menu
|
|
709
692
|
// then stop propagation (might be caught by a QDialog
|
|
710
693
|
// and so it will also close the QDialog, which is wrong)
|
|
711
|
-
if (isKeyCode(e, 27)
|
|
694
|
+
if (isKeyCode(e, 27) && menu.value) {
|
|
712
695
|
stop(e)
|
|
713
696
|
// on ESC we need to close the dialog also
|
|
714
697
|
hidePopup()
|
|
@@ -748,19 +731,16 @@ export default createComponent({
|
|
|
748
731
|
|
|
749
732
|
if (option === void 0) return false
|
|
750
733
|
|
|
751
|
-
if (innerValue.value.
|
|
752
|
-
|
|
753
|
-
} else {
|
|
754
|
-
hidePopup()
|
|
755
|
-
}
|
|
734
|
+
if (innerValue.value.includes(option)) hidePopup()
|
|
735
|
+
else toggleOption(option)
|
|
756
736
|
|
|
757
737
|
return true
|
|
758
738
|
}
|
|
759
739
|
const fillFn = afterFilter => {
|
|
760
740
|
if (
|
|
761
|
-
findFn(getOptionValue)
|
|
762
|
-
afterFilter
|
|
763
|
-
findFn(getOptionLabel)
|
|
741
|
+
!findFn(getOptionValue) &&
|
|
742
|
+
!afterFilter &&
|
|
743
|
+
!findFn(getOptionLabel)
|
|
764
744
|
) {
|
|
765
745
|
filter(value, true, () => fillFn(true))
|
|
766
746
|
}
|
|
@@ -779,17 +759,17 @@ export default createComponent({
|
|
|
779
759
|
function onTargetKeydown(e) {
|
|
780
760
|
emit('keydown', e)
|
|
781
761
|
|
|
782
|
-
if (shouldIgnoreKey(e)
|
|
762
|
+
if (shouldIgnoreKey(e)) return
|
|
783
763
|
|
|
784
764
|
const newValueModeValid =
|
|
785
765
|
inputValue.value.length !== 0 &&
|
|
786
766
|
(props.newValueMode !== void 0 || props.onNewValue !== void 0)
|
|
787
767
|
|
|
788
768
|
const tabShouldSelect =
|
|
789
|
-
e.shiftKey
|
|
790
|
-
props.disableTabSelection
|
|
791
|
-
props.multiple
|
|
792
|
-
(optionIndex.value !== -1 || newValueModeValid
|
|
769
|
+
!e.shiftKey &&
|
|
770
|
+
!props.disableTabSelection &&
|
|
771
|
+
!props.multiple &&
|
|
772
|
+
(optionIndex.value !== -1 || newValueModeValid)
|
|
793
773
|
|
|
794
774
|
// escape
|
|
795
775
|
if (e.keyCode === 27) {
|
|
@@ -798,7 +778,7 @@ export default createComponent({
|
|
|
798
778
|
}
|
|
799
779
|
|
|
800
780
|
// tab
|
|
801
|
-
if (e.keyCode === 9 && tabShouldSelect
|
|
781
|
+
if (e.keyCode === 9 && !tabShouldSelect) {
|
|
802
782
|
closeMenu()
|
|
803
783
|
return
|
|
804
784
|
}
|
|
@@ -806,17 +786,13 @@ export default createComponent({
|
|
|
806
786
|
if (
|
|
807
787
|
e.target === void 0 ||
|
|
808
788
|
e.target.id !== state.targetUid.value ||
|
|
809
|
-
state.editable.value
|
|
789
|
+
!state.editable.value
|
|
810
790
|
) {
|
|
811
791
|
return
|
|
812
792
|
}
|
|
813
793
|
|
|
814
794
|
// down
|
|
815
|
-
if (
|
|
816
|
-
e.keyCode === 40 &&
|
|
817
|
-
state.innerLoading.value !== true &&
|
|
818
|
-
menu.value === false
|
|
819
|
-
) {
|
|
795
|
+
if (e.keyCode === 40 && !state.innerLoading.value && !menu.value) {
|
|
820
796
|
stopAndPrevent(e)
|
|
821
797
|
showPopup()
|
|
822
798
|
return
|
|
@@ -825,16 +801,13 @@ export default createComponent({
|
|
|
825
801
|
// backspace
|
|
826
802
|
if (
|
|
827
803
|
e.keyCode === 8 &&
|
|
828
|
-
(props.useChips
|
|
829
|
-
props.hideSelected
|
|
804
|
+
(props.useChips || props.clearable) &&
|
|
805
|
+
!props.hideSelected &&
|
|
830
806
|
inputValue.value.length === 0
|
|
831
807
|
) {
|
|
832
|
-
if (
|
|
833
|
-
props.multiple === true &&
|
|
834
|
-
Array.isArray(props.modelValue) === true
|
|
835
|
-
) {
|
|
808
|
+
if (props.multiple && Array.isArray(props.modelValue)) {
|
|
836
809
|
removeAtIndex(props.modelValue.length - 1)
|
|
837
|
-
} else if (props.multiple
|
|
810
|
+
} else if (!props.multiple && props.modelValue !== null) {
|
|
838
811
|
emit('update:modelValue', null)
|
|
839
812
|
}
|
|
840
813
|
|
|
@@ -885,30 +858,29 @@ export default createComponent({
|
|
|
885
858
|
// keyboard search when not having use-input
|
|
886
859
|
if (
|
|
887
860
|
optionsLength > 0 &&
|
|
888
|
-
props.useInput
|
|
861
|
+
!props.useInput &&
|
|
889
862
|
e.key !== void 0 &&
|
|
890
863
|
e.key.length === 1 && // printable char
|
|
891
|
-
e.altKey
|
|
892
|
-
e.ctrlKey
|
|
893
|
-
e.metaKey
|
|
864
|
+
!e.altKey && // not kbd shortcut
|
|
865
|
+
!e.ctrlKey && // not kbd shortcut
|
|
866
|
+
!e.metaKey && // not kbd shortcut, especially on macOS with Command key
|
|
894
867
|
(e.keyCode !== 32 || searchBuffer.length !== 0) // space in middle of search
|
|
895
868
|
) {
|
|
896
|
-
if (menu.value
|
|
869
|
+
if (!menu.value) showPopup(e)
|
|
897
870
|
|
|
898
871
|
const char = e.key.toLocaleLowerCase(),
|
|
899
872
|
keyRepeat = searchBuffer.length === 1 && searchBuffer[0] === char
|
|
900
873
|
|
|
901
874
|
searchBufferExp = Date.now() + 1500
|
|
902
|
-
if (keyRepeat
|
|
875
|
+
if (!keyRepeat) {
|
|
903
876
|
stopAndPrevent(e)
|
|
904
877
|
searchBuffer += char
|
|
905
878
|
}
|
|
906
879
|
|
|
907
880
|
const searchRe = new RegExp(
|
|
908
881
|
'^' +
|
|
909
|
-
searchBuffer
|
|
910
|
-
.
|
|
911
|
-
.map(l => (reEscapeList.indexOf(l) !== -1 ? '\\' + l : l))
|
|
882
|
+
[...searchBuffer]
|
|
883
|
+
.map(l => (reEscapeList.includes(l) ? '\\' + l : l))
|
|
912
884
|
.join('.*'),
|
|
913
885
|
'i'
|
|
914
886
|
)
|
|
@@ -916,17 +888,16 @@ export default createComponent({
|
|
|
916
888
|
let index = optionIndex.value
|
|
917
889
|
|
|
918
890
|
if (
|
|
919
|
-
keyRepeat
|
|
891
|
+
keyRepeat ||
|
|
920
892
|
index < 0 ||
|
|
921
|
-
searchRe.test(getOptionLabel.value(props.options[index]))
|
|
893
|
+
!searchRe.test(getOptionLabel.value(props.options[index]))
|
|
922
894
|
) {
|
|
923
895
|
do {
|
|
924
896
|
index = normalizeToInterval(index + 1, -1, optionsLength - 1)
|
|
925
897
|
} while (
|
|
926
898
|
index !== optionIndex.value &&
|
|
927
899
|
(isOptionDisabled.value(props.options[index]) === true ||
|
|
928
|
-
searchRe.test(getOptionLabel.value(props.options[index]))
|
|
929
|
-
true)
|
|
900
|
+
!searchRe.test(getOptionLabel.value(props.options[index])))
|
|
930
901
|
)
|
|
931
902
|
}
|
|
932
903
|
|
|
@@ -935,11 +906,7 @@ export default createComponent({
|
|
|
935
906
|
setOptionIndex(index)
|
|
936
907
|
scrollTo(index)
|
|
937
908
|
|
|
938
|
-
if (
|
|
939
|
-
index >= 0 &&
|
|
940
|
-
props.useInput === true &&
|
|
941
|
-
props.fillInput === true
|
|
942
|
-
) {
|
|
909
|
+
if (index >= 0 && props.useInput && props.fillInput) {
|
|
943
910
|
setInputValue(getOptionLabel.value(props.options[index]), true)
|
|
944
911
|
}
|
|
945
912
|
})
|
|
@@ -948,12 +915,13 @@ export default createComponent({
|
|
|
948
915
|
return
|
|
949
916
|
}
|
|
950
917
|
|
|
951
|
-
// enter, space (when not using use-input and not in search),
|
|
918
|
+
// enter, space (when not using use-input and not in search),
|
|
919
|
+
// or tab (when not using multiple and option selected)
|
|
952
920
|
// same target is checked above
|
|
953
921
|
if (
|
|
954
922
|
e.keyCode !== 13 &&
|
|
955
|
-
(e.keyCode !== 32 || props.useInput
|
|
956
|
-
(e.keyCode !== 9 || tabShouldSelect
|
|
923
|
+
(e.keyCode !== 32 || props.useInput || searchBuffer !== '') &&
|
|
924
|
+
(e.keyCode !== 9 || !tabShouldSelect)
|
|
957
925
|
) {
|
|
958
926
|
return
|
|
959
927
|
}
|
|
@@ -965,22 +933,22 @@ export default createComponent({
|
|
|
965
933
|
return
|
|
966
934
|
}
|
|
967
935
|
|
|
968
|
-
if (newValueModeValid
|
|
936
|
+
if (newValueModeValid) {
|
|
969
937
|
const done = (val, mode) => {
|
|
970
938
|
if (mode) {
|
|
971
|
-
if (validateNewValueMode(mode)
|
|
939
|
+
if (!validateNewValueMode(mode)) return
|
|
972
940
|
} else {
|
|
973
941
|
mode = props.newValueMode
|
|
974
942
|
}
|
|
975
943
|
|
|
976
|
-
updateInputValue('', props.multiple
|
|
944
|
+
updateInputValue('', !props.multiple, true)
|
|
977
945
|
|
|
978
946
|
if (val === void 0 || val === null) return
|
|
979
947
|
|
|
980
948
|
const fn = mode === 'toggle' ? toggleOption : add
|
|
981
949
|
fn(val, mode === 'add-unique')
|
|
982
950
|
|
|
983
|
-
if (props.multiple
|
|
951
|
+
if (!props.multiple) {
|
|
984
952
|
targetRef.value?.focus()
|
|
985
953
|
hidePopup()
|
|
986
954
|
}
|
|
@@ -992,18 +960,18 @@ export default createComponent({
|
|
|
992
960
|
done(inputValue.value)
|
|
993
961
|
}
|
|
994
962
|
|
|
995
|
-
if (props.multiple
|
|
963
|
+
if (!props.multiple) return
|
|
996
964
|
}
|
|
997
965
|
|
|
998
|
-
if (menu.value
|
|
966
|
+
if (menu.value) {
|
|
999
967
|
closeMenu()
|
|
1000
|
-
} else if (state.innerLoading.value
|
|
968
|
+
} else if (!state.innerLoading.value) {
|
|
1001
969
|
showPopup()
|
|
1002
970
|
}
|
|
1003
971
|
}
|
|
1004
972
|
|
|
1005
973
|
function getVirtualScrollEl() {
|
|
1006
|
-
return hasDialog
|
|
974
|
+
return hasDialog
|
|
1007
975
|
? menuContentRef.value
|
|
1008
976
|
: menuRef.value !== null && menuRef.value.contentEl !== null
|
|
1009
977
|
? menuRef.value.contentEl
|
|
@@ -1015,28 +983,24 @@ export default createComponent({
|
|
|
1015
983
|
}
|
|
1016
984
|
|
|
1017
985
|
function getSelection() {
|
|
1018
|
-
if (props.hideSelected
|
|
1019
|
-
return []
|
|
1020
|
-
}
|
|
986
|
+
if (props.hideSelected) return []
|
|
1021
987
|
|
|
1022
988
|
if (slots['selected-item'] !== void 0) {
|
|
1023
|
-
return selectedScope.value
|
|
1024
|
-
.map(scope => slots['selected-item'](scope))
|
|
1025
|
-
.slice()
|
|
989
|
+
return selectedScope.value.map(scope => slots['selected-item'](scope))
|
|
1026
990
|
}
|
|
1027
991
|
|
|
1028
992
|
if (slots.selected !== void 0) {
|
|
1029
|
-
return [
|
|
993
|
+
return [slots.selected()].flat()
|
|
1030
994
|
}
|
|
1031
995
|
|
|
1032
|
-
if (props.useChips
|
|
996
|
+
if (props.useChips) {
|
|
1033
997
|
return selectedScope.value.map((scope, i) =>
|
|
1034
998
|
h(
|
|
1035
999
|
QChip,
|
|
1036
1000
|
{
|
|
1037
1001
|
key: 'option-' + i,
|
|
1038
1002
|
removable:
|
|
1039
|
-
state.editable.value
|
|
1003
|
+
state.editable.value &&
|
|
1040
1004
|
isOptionDisabled.value(scope.opt) !== true,
|
|
1041
1005
|
dense: true,
|
|
1042
1006
|
textColor: props.color,
|
|
@@ -1048,7 +1012,7 @@ export default createComponent({
|
|
|
1048
1012
|
() =>
|
|
1049
1013
|
h('span', {
|
|
1050
1014
|
class: 'ellipsis',
|
|
1051
|
-
[scope.html
|
|
1015
|
+
[scope.html ? 'innerHTML' : 'textContent']:
|
|
1052
1016
|
getOptionLabel.value(scope.opt)
|
|
1053
1017
|
})
|
|
1054
1018
|
)
|
|
@@ -1058,14 +1022,14 @@ export default createComponent({
|
|
|
1058
1022
|
return [
|
|
1059
1023
|
h('span', {
|
|
1060
1024
|
class: 'ellipsis',
|
|
1061
|
-
[valueAsHtml.value
|
|
1025
|
+
[valueAsHtml.value ? 'innerHTML' : 'textContent']:
|
|
1062
1026
|
ariaCurrentValue.value
|
|
1063
1027
|
})
|
|
1064
1028
|
]
|
|
1065
1029
|
}
|
|
1066
1030
|
|
|
1067
1031
|
function getAllOptions() {
|
|
1068
|
-
if (noOptions.value
|
|
1032
|
+
if (noOptions.value) {
|
|
1069
1033
|
return slots['no-option'] !== void 0
|
|
1070
1034
|
? slots['no-option']({ inputValue: inputValue.value })
|
|
1071
1035
|
: void 0
|
|
@@ -1085,8 +1049,7 @@ export default createComponent({
|
|
|
1085
1049
|
h(QItemSection, () =>
|
|
1086
1050
|
h(QItemLabel, () =>
|
|
1087
1051
|
h('span', {
|
|
1088
|
-
[scope.html
|
|
1089
|
-
scope.label
|
|
1052
|
+
[scope.html ? 'innerHTML' : 'textContent']: scope.label
|
|
1090
1053
|
})
|
|
1091
1054
|
)
|
|
1092
1055
|
)
|
|
@@ -1095,20 +1058,19 @@ export default createComponent({
|
|
|
1095
1058
|
let options = padVirtualScroll('div', optionScope.value.map(fn))
|
|
1096
1059
|
|
|
1097
1060
|
if (slots['before-options'] !== void 0) {
|
|
1098
|
-
options = slots['before-options']().
|
|
1061
|
+
options = [slots['before-options'](), ...options].flat()
|
|
1099
1062
|
}
|
|
1100
1063
|
|
|
1101
1064
|
return hMergeSlot(slots['after-options'], options)
|
|
1102
1065
|
}
|
|
1103
1066
|
|
|
1104
1067
|
function getInput(fromDialog, isTarget) {
|
|
1105
|
-
const attrs =
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
: void 0
|
|
1068
|
+
const attrs = isTarget
|
|
1069
|
+
? { ...comboboxAttrs.value, ...state.splitAttrs.attributes.value }
|
|
1070
|
+
: void 0
|
|
1109
1071
|
|
|
1110
1072
|
const data = {
|
|
1111
|
-
ref: isTarget
|
|
1073
|
+
ref: isTarget ? targetRef : void 0,
|
|
1112
1074
|
key: 'i_t',
|
|
1113
1075
|
class: computedInputClass.value,
|
|
1114
1076
|
style: props.inputStyle,
|
|
@@ -1116,18 +1078,17 @@ export default createComponent({
|
|
|
1116
1078
|
// required for Android in order to show ENTER key when in form
|
|
1117
1079
|
type: 'search',
|
|
1118
1080
|
...attrs,
|
|
1119
|
-
id: isTarget
|
|
1081
|
+
id: isTarget ? state.targetUid.value : void 0,
|
|
1120
1082
|
maxlength: props.maxlength,
|
|
1121
1083
|
autocomplete: props.autocomplete,
|
|
1122
|
-
'data-autofocus':
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
readonly: props.readonly === true,
|
|
1084
|
+
'data-autofocus': fromDialog === true || props.autofocus || void 0,
|
|
1085
|
+
disabled: props.disable,
|
|
1086
|
+
readonly: props.readonly,
|
|
1126
1087
|
...inputControlEvents.value
|
|
1127
1088
|
}
|
|
1128
1089
|
|
|
1129
|
-
if (fromDialog
|
|
1130
|
-
if (Array.isArray(data.class)
|
|
1090
|
+
if (!fromDialog && hasDialog) {
|
|
1091
|
+
if (Array.isArray(data.class)) {
|
|
1131
1092
|
data.class = [...data.class, 'no-pointer-events']
|
|
1132
1093
|
} else {
|
|
1133
1094
|
data.class += ' no-pointer-events'
|
|
@@ -1147,7 +1108,7 @@ export default createComponent({
|
|
|
1147
1108
|
inputValueTimer = null
|
|
1148
1109
|
}
|
|
1149
1110
|
|
|
1150
|
-
if (e
|
|
1111
|
+
if (e?.target?.qComposing) return
|
|
1151
1112
|
|
|
1152
1113
|
setInputValue(e.target.value || '')
|
|
1153
1114
|
// mark it here as user input so that if updateInputValue is called
|
|
@@ -1155,10 +1116,7 @@ export default createComponent({
|
|
|
1155
1116
|
userInputValue = true
|
|
1156
1117
|
defaultInputValue = inputValue.value
|
|
1157
1118
|
|
|
1158
|
-
if (
|
|
1159
|
-
state.focused.value !== true &&
|
|
1160
|
-
(hasDialog !== true || dialogFieldFocused.value === true)
|
|
1161
|
-
) {
|
|
1119
|
+
if (!state.focused.value && (!hasDialog || dialogFieldFocused.value)) {
|
|
1162
1120
|
state.focus()
|
|
1163
1121
|
}
|
|
1164
1122
|
|
|
@@ -1175,7 +1133,7 @@ export default createComponent({
|
|
|
1175
1133
|
inputValue.value = val
|
|
1176
1134
|
|
|
1177
1135
|
if (
|
|
1178
|
-
emitImmediately
|
|
1136
|
+
emitImmediately ||
|
|
1179
1137
|
props.inputDebounce === 0 ||
|
|
1180
1138
|
props.inputDebounce === '0'
|
|
1181
1139
|
) {
|
|
@@ -1192,26 +1150,23 @@ export default createComponent({
|
|
|
1192
1150
|
function updateInputValue(val, noFiltering, internal) {
|
|
1193
1151
|
userInputValue = internal !== true
|
|
1194
1152
|
|
|
1195
|
-
if (props.useInput
|
|
1153
|
+
if (props.useInput) {
|
|
1196
1154
|
setInputValue(val, true)
|
|
1197
1155
|
|
|
1198
|
-
if (noFiltering
|
|
1156
|
+
if (noFiltering || userInputValue) {
|
|
1199
1157
|
defaultInputValue = val
|
|
1200
1158
|
}
|
|
1201
1159
|
|
|
1202
|
-
if (noFiltering
|
|
1160
|
+
if (!noFiltering) filter(val)
|
|
1203
1161
|
}
|
|
1204
1162
|
}
|
|
1205
1163
|
|
|
1206
1164
|
function filter(val, keepClosed, afterUpdateFn) {
|
|
1207
|
-
if (
|
|
1208
|
-
props.onFilter === void 0 ||
|
|
1209
|
-
(keepClosed !== true && state.focused.value !== true)
|
|
1210
|
-
) {
|
|
1165
|
+
if (props.onFilter === void 0 || (!keepClosed && !state.focused.value)) {
|
|
1211
1166
|
return
|
|
1212
1167
|
}
|
|
1213
1168
|
|
|
1214
|
-
if (state.innerLoading.value
|
|
1169
|
+
if (state.innerLoading.value) {
|
|
1215
1170
|
emit('filterAbort')
|
|
1216
1171
|
} else {
|
|
1217
1172
|
state.innerLoading.value = true
|
|
@@ -1220,16 +1175,16 @@ export default createComponent({
|
|
|
1220
1175
|
|
|
1221
1176
|
if (
|
|
1222
1177
|
val !== '' &&
|
|
1223
|
-
props.multiple
|
|
1178
|
+
!props.multiple &&
|
|
1224
1179
|
innerValue.value.length !== 0 &&
|
|
1225
|
-
userInputValue
|
|
1180
|
+
!userInputValue &&
|
|
1226
1181
|
val === getOptionLabel.value(innerValue.value[0])
|
|
1227
1182
|
) {
|
|
1228
1183
|
val = ''
|
|
1229
1184
|
}
|
|
1230
1185
|
|
|
1231
1186
|
const localFilterId = setTimeout(() => {
|
|
1232
|
-
if (menu.value
|
|
1187
|
+
if (menu.value) menu.value = false
|
|
1233
1188
|
}, 10)
|
|
1234
1189
|
|
|
1235
1190
|
if (filterId !== null) clearTimeout(filterId)
|
|
@@ -1240,7 +1195,7 @@ export default createComponent({
|
|
|
1240
1195
|
val,
|
|
1241
1196
|
(fn, afterFn) => {
|
|
1242
1197
|
if (
|
|
1243
|
-
(keepClosed
|
|
1198
|
+
(keepClosed || state.focused.value) &&
|
|
1244
1199
|
filterId === localFilterId
|
|
1245
1200
|
) {
|
|
1246
1201
|
clearTimeout(filterId)
|
|
@@ -1253,10 +1208,10 @@ export default createComponent({
|
|
|
1253
1208
|
nextTick(() => {
|
|
1254
1209
|
state.innerLoading.value = false
|
|
1255
1210
|
|
|
1256
|
-
if (state.editable.value
|
|
1257
|
-
if (keepClosed
|
|
1258
|
-
if (menu.value
|
|
1259
|
-
} else if (menu.value
|
|
1211
|
+
if (state.editable.value) {
|
|
1212
|
+
if (keepClosed) {
|
|
1213
|
+
if (menu.value) hidePopup()
|
|
1214
|
+
} else if (menu.value) {
|
|
1260
1215
|
updateMenu(true)
|
|
1261
1216
|
} else {
|
|
1262
1217
|
menu.value = true
|
|
@@ -1278,13 +1233,13 @@ export default createComponent({
|
|
|
1278
1233
|
}
|
|
1279
1234
|
},
|
|
1280
1235
|
() => {
|
|
1281
|
-
if (state.focused.value
|
|
1236
|
+
if (state.focused.value && filterId === localFilterId) {
|
|
1282
1237
|
clearTimeout(filterId)
|
|
1283
1238
|
state.innerLoading.value = false
|
|
1284
1239
|
innerLoadingIndicator.value = false
|
|
1285
1240
|
}
|
|
1286
1241
|
|
|
1287
|
-
if (menu.value
|
|
1242
|
+
if (menu.value) menu.value = false
|
|
1288
1243
|
}
|
|
1289
1244
|
)
|
|
1290
1245
|
}
|
|
@@ -1297,11 +1252,8 @@ export default createComponent({
|
|
|
1297
1252
|
class: menuContentClass.value,
|
|
1298
1253
|
style: props.popupContentStyle,
|
|
1299
1254
|
modelValue: menu.value,
|
|
1300
|
-
fit: props.menuShrink
|
|
1301
|
-
cover:
|
|
1302
|
-
props.optionsCover === true &&
|
|
1303
|
-
noOptions.value !== true &&
|
|
1304
|
-
props.useInput !== true,
|
|
1255
|
+
fit: !props.menuShrink,
|
|
1256
|
+
cover: props.optionsCover && !noOptions.value && !props.useInput,
|
|
1305
1257
|
anchor: props.menuAnchor,
|
|
1306
1258
|
self: props.menuSelf,
|
|
1307
1259
|
offset: props.menuOffset,
|
|
@@ -1378,7 +1330,7 @@ export default createComponent({
|
|
|
1378
1330
|
)
|
|
1379
1331
|
]
|
|
1380
1332
|
|
|
1381
|
-
if (menu.value
|
|
1333
|
+
if (menu.value) {
|
|
1382
1334
|
content.push(
|
|
1383
1335
|
h(
|
|
1384
1336
|
'div',
|
|
@@ -1400,7 +1352,7 @@ export default createComponent({
|
|
|
1400
1352
|
{
|
|
1401
1353
|
ref: dialogRef,
|
|
1402
1354
|
modelValue: dialog.value,
|
|
1403
|
-
position: props.useInput
|
|
1355
|
+
position: props.useInput ? 'top' : void 0,
|
|
1404
1356
|
transitionShow: transitionShowComputed,
|
|
1405
1357
|
transitionHide: props.transitionHide,
|
|
1406
1358
|
transitionDuration: props.transitionDuration,
|
|
@@ -1416,12 +1368,8 @@ export default createComponent({
|
|
|
1416
1368
|
{
|
|
1417
1369
|
class:
|
|
1418
1370
|
'q-select__dialog' +
|
|
1419
|
-
(isOptionsDark.value
|
|
1420
|
-
|
|
1421
|
-
: '') +
|
|
1422
|
-
(dialogFieldFocused.value === true
|
|
1423
|
-
? ' q-select__dialog--focused'
|
|
1424
|
-
: '')
|
|
1371
|
+
(isOptionsDark.value ? ' q-select__dialog--dark q-dark' : '') +
|
|
1372
|
+
(dialogFieldFocused.value ? ' q-select__dialog--focused' : '')
|
|
1425
1373
|
},
|
|
1426
1374
|
content
|
|
1427
1375
|
)
|
|
@@ -1444,7 +1392,7 @@ export default createComponent({
|
|
|
1444
1392
|
|
|
1445
1393
|
function onDialogHide(e) {
|
|
1446
1394
|
hidePopup()
|
|
1447
|
-
if (state.focused.value
|
|
1395
|
+
if (!state.focused.value) emit('blur', e)
|
|
1448
1396
|
resetInputValue()
|
|
1449
1397
|
}
|
|
1450
1398
|
|
|
@@ -1462,21 +1410,21 @@ export default createComponent({
|
|
|
1462
1410
|
}
|
|
1463
1411
|
|
|
1464
1412
|
function closeMenu() {
|
|
1465
|
-
if (dialog.value
|
|
1413
|
+
if (dialog.value) return
|
|
1466
1414
|
|
|
1467
1415
|
optionIndex.value = -1
|
|
1468
1416
|
|
|
1469
|
-
if (menu.value
|
|
1417
|
+
if (menu.value) {
|
|
1470
1418
|
menu.value = false
|
|
1471
1419
|
}
|
|
1472
1420
|
|
|
1473
|
-
if (state.focused.value
|
|
1421
|
+
if (!state.focused.value) {
|
|
1474
1422
|
if (filterId !== null) {
|
|
1475
1423
|
clearTimeout(filterId)
|
|
1476
1424
|
filterId = null
|
|
1477
1425
|
}
|
|
1478
1426
|
|
|
1479
|
-
if (state.innerLoading.value
|
|
1427
|
+
if (state.innerLoading.value) {
|
|
1480
1428
|
emit('filterAbort')
|
|
1481
1429
|
state.innerLoading.value = false
|
|
1482
1430
|
innerLoadingIndicator.value = false
|
|
@@ -1485,9 +1433,9 @@ export default createComponent({
|
|
|
1485
1433
|
}
|
|
1486
1434
|
|
|
1487
1435
|
function showPopup(e) {
|
|
1488
|
-
if (state.editable.value
|
|
1436
|
+
if (!state.editable.value) return
|
|
1489
1437
|
|
|
1490
|
-
if (hasDialog
|
|
1438
|
+
if (hasDialog) {
|
|
1491
1439
|
state.onControlFocusin(e)
|
|
1492
1440
|
dialog.value = true
|
|
1493
1441
|
nextTick(() => {
|
|
@@ -1499,7 +1447,7 @@ export default createComponent({
|
|
|
1499
1447
|
|
|
1500
1448
|
if (props.onFilter !== void 0) {
|
|
1501
1449
|
filter(inputValue.value)
|
|
1502
|
-
} else if (noOptions.value
|
|
1450
|
+
} else if (!noOptions.value || slots['no-option'] !== void 0) {
|
|
1503
1451
|
menu.value = true
|
|
1504
1452
|
}
|
|
1505
1453
|
}
|
|
@@ -1510,11 +1458,9 @@ export default createComponent({
|
|
|
1510
1458
|
}
|
|
1511
1459
|
|
|
1512
1460
|
function resetInputValue() {
|
|
1513
|
-
if (props.useInput
|
|
1461
|
+
if (props.useInput) {
|
|
1514
1462
|
updateInputValue(
|
|
1515
|
-
props.multiple
|
|
1516
|
-
props.fillInput === true &&
|
|
1517
|
-
innerValue.value.length !== 0
|
|
1463
|
+
!props.multiple && props.fillInput && innerValue.value.length !== 0
|
|
1518
1464
|
? getOptionLabel.value(innerValue.value[0]) || ''
|
|
1519
1465
|
: '',
|
|
1520
1466
|
true,
|
|
@@ -1526,7 +1472,7 @@ export default createComponent({
|
|
|
1526
1472
|
function updateMenu(show) {
|
|
1527
1473
|
let localOptionIndex = -1
|
|
1528
1474
|
|
|
1529
|
-
if (show
|
|
1475
|
+
if (show) {
|
|
1530
1476
|
if (innerValue.value.length !== 0) {
|
|
1531
1477
|
const val = getOptionValue.value(innerValue.value[0])
|
|
1532
1478
|
localOptionIndex = props.options.findIndex(v =>
|
|
@@ -1541,11 +1487,11 @@ export default createComponent({
|
|
|
1541
1487
|
}
|
|
1542
1488
|
|
|
1543
1489
|
function rerenderMenu(newLength, oldLength) {
|
|
1544
|
-
if (menu.value
|
|
1490
|
+
if (menu.value && !state.innerLoading.value) {
|
|
1545
1491
|
localResetVirtualScroll(-1, true)
|
|
1546
1492
|
|
|
1547
1493
|
nextTick(() => {
|
|
1548
|
-
if (menu.value
|
|
1494
|
+
if (menu.value && !state.innerLoading.value) {
|
|
1549
1495
|
if (newLength > oldLength) {
|
|
1550
1496
|
localResetVirtualScroll()
|
|
1551
1497
|
} else {
|
|
@@ -1557,9 +1503,7 @@ export default createComponent({
|
|
|
1557
1503
|
}
|
|
1558
1504
|
|
|
1559
1505
|
function updateMenuPosition() {
|
|
1560
|
-
if (dialog.value
|
|
1561
|
-
menuRef.value.updatePosition()
|
|
1562
|
-
}
|
|
1506
|
+
if (!dialog.value) menuRef.value?.updatePosition()
|
|
1563
1507
|
}
|
|
1564
1508
|
|
|
1565
1509
|
function onControlPopupShow(e) {
|
|
@@ -1578,19 +1522,17 @@ export default createComponent({
|
|
|
1578
1522
|
|
|
1579
1523
|
function updatePreState() {
|
|
1580
1524
|
hasDialog =
|
|
1581
|
-
|
|
1525
|
+
!$q.platform.is.mobile && props.behavior !== 'dialog'
|
|
1582
1526
|
? false
|
|
1583
1527
|
: props.behavior !== 'menu' &&
|
|
1584
|
-
(props.useInput
|
|
1528
|
+
(props.useInput
|
|
1585
1529
|
? slots['no-option'] !== void 0 ||
|
|
1586
1530
|
props.onFilter !== void 0 ||
|
|
1587
|
-
noOptions.value
|
|
1531
|
+
!noOptions.value
|
|
1588
1532
|
: true)
|
|
1589
1533
|
|
|
1590
1534
|
transitionShowComputed =
|
|
1591
|
-
$q.platform.is.ios
|
|
1592
|
-
hasDialog === true &&
|
|
1593
|
-
props.useInput === true
|
|
1535
|
+
$q.platform.is.ios && hasDialog && props.useInput
|
|
1594
1536
|
? 'fade'
|
|
1595
1537
|
: props.transitionShow
|
|
1596
1538
|
}
|
|
@@ -1620,10 +1562,9 @@ export default createComponent({
|
|
|
1620
1562
|
updateInputValue,
|
|
1621
1563
|
isOptionSelected,
|
|
1622
1564
|
getEmittingOptionValue,
|
|
1623
|
-
isOptionDisabled: (...args) =>
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
getOptionLabel: (...args) => getOptionLabel.value.apply(null, args)
|
|
1565
|
+
isOptionDisabled: (...args) => isOptionDisabled.value(...args) === true,
|
|
1566
|
+
getOptionValue: (...args) => getOptionValue.value(...args),
|
|
1567
|
+
getOptionLabel: (...args) => getOptionLabel.value(...args)
|
|
1627
1568
|
})
|
|
1628
1569
|
|
|
1629
1570
|
Object.assign(state, {
|
|
@@ -1631,9 +1572,9 @@ export default createComponent({
|
|
|
1631
1572
|
|
|
1632
1573
|
fieldClass: computed(
|
|
1633
1574
|
() =>
|
|
1634
|
-
`q-select q-field--auto-height q-select--with${props.useInput
|
|
1635
|
-
` q-select--with${props.useChips
|
|
1636
|
-
` q-select--${props.multiple
|
|
1575
|
+
`q-select q-field--auto-height q-select--with${props.useInput ? '' : 'out'}-input` +
|
|
1576
|
+
` q-select--with${props.useChips ? '' : 'out'}-chips` +
|
|
1577
|
+
` q-select--${props.multiple ? 'multiple' : 'single'}`
|
|
1637
1578
|
),
|
|
1638
1579
|
|
|
1639
1580
|
inputRef,
|
|
@@ -1643,7 +1584,7 @@ export default createComponent({
|
|
|
1643
1584
|
|
|
1644
1585
|
floatingLabel: computed(
|
|
1645
1586
|
() =>
|
|
1646
|
-
(props.hideSelected
|
|
1587
|
+
(!props.hideSelected && hasValue.value) ||
|
|
1647
1588
|
typeof inputValue.value === 'number' ||
|
|
1648
1589
|
inputValue.value.length !== 0 ||
|
|
1649
1590
|
fieldValueIsFilled(props.displayValue)
|
|
@@ -1651,13 +1592,13 @@ export default createComponent({
|
|
|
1651
1592
|
|
|
1652
1593
|
getControlChild: () => {
|
|
1653
1594
|
if (
|
|
1654
|
-
state.editable.value
|
|
1655
|
-
(dialog.value
|
|
1656
|
-
noOptions.value
|
|
1595
|
+
state.editable.value &&
|
|
1596
|
+
(dialog.value || // dialog always has menu displayed, so need to render it
|
|
1597
|
+
!noOptions.value ||
|
|
1657
1598
|
slots['no-option'] !== void 0)
|
|
1658
1599
|
) {
|
|
1659
|
-
return hasDialog
|
|
1660
|
-
} else if (state.hasPopupOpen
|
|
1600
|
+
return hasDialog ? getDialog() : getMenu()
|
|
1601
|
+
} else if (state.hasPopupOpen) {
|
|
1661
1602
|
// explicitly set it otherwise TAB will not blur component
|
|
1662
1603
|
state.hasPopupOpen = false
|
|
1663
1604
|
}
|
|
@@ -1677,7 +1618,7 @@ export default createComponent({
|
|
|
1677
1618
|
// label from QField will propagate click on the input
|
|
1678
1619
|
prevent(e)
|
|
1679
1620
|
|
|
1680
|
-
if (hasDialog
|
|
1621
|
+
if (!hasDialog && menu.value) {
|
|
1681
1622
|
closeMenu()
|
|
1682
1623
|
targetRef.value?.focus()
|
|
1683
1624
|
return
|
|
@@ -1689,26 +1630,25 @@ export default createComponent({
|
|
|
1689
1630
|
|
|
1690
1631
|
getControl: fromDialog => {
|
|
1691
1632
|
const child = getSelection()
|
|
1692
|
-
const isTarget =
|
|
1693
|
-
fromDialog === true || dialog.value !== true || hasDialog !== true
|
|
1633
|
+
const isTarget = fromDialog === true || !dialog.value || !hasDialog
|
|
1694
1634
|
|
|
1695
|
-
if (props.useInput
|
|
1635
|
+
if (props.useInput) {
|
|
1696
1636
|
child.push(getInput(fromDialog, isTarget))
|
|
1697
1637
|
}
|
|
1698
1638
|
// there can be only one (when dialog is opened the control in dialog should be target)
|
|
1699
|
-
else if (state.editable.value
|
|
1700
|
-
const attrs = isTarget
|
|
1639
|
+
else if (state.editable.value) {
|
|
1640
|
+
const attrs = isTarget ? comboboxAttrs.value : void 0
|
|
1701
1641
|
|
|
1702
1642
|
child.push(
|
|
1703
1643
|
h('input', {
|
|
1704
|
-
ref: isTarget
|
|
1644
|
+
ref: isTarget ? targetRef : void 0,
|
|
1705
1645
|
key: 'd_t',
|
|
1706
1646
|
class: 'q-select__focus-target',
|
|
1707
|
-
id: isTarget
|
|
1647
|
+
id: isTarget ? state.targetUid.value : void 0,
|
|
1708
1648
|
value: ariaCurrentValue.value,
|
|
1709
1649
|
readonly: true,
|
|
1710
1650
|
'data-autofocus':
|
|
1711
|
-
fromDialog === true || props.autofocus
|
|
1651
|
+
fromDialog === true || props.autofocus || void 0,
|
|
1712
1652
|
...attrs,
|
|
1713
1653
|
onKeydown: onTargetKeydown,
|
|
1714
1654
|
onKeyup: onTargetKeyup,
|
|
@@ -1717,7 +1657,7 @@ export default createComponent({
|
|
|
1717
1657
|
)
|
|
1718
1658
|
|
|
1719
1659
|
if (
|
|
1720
|
-
isTarget
|
|
1660
|
+
isTarget &&
|
|
1721
1661
|
typeof props.autocomplete === 'string' &&
|
|
1722
1662
|
props.autocomplete.length !== 0
|
|
1723
1663
|
) {
|
|
@@ -1734,7 +1674,7 @@ export default createComponent({
|
|
|
1734
1674
|
|
|
1735
1675
|
if (
|
|
1736
1676
|
nameProp.value !== void 0 &&
|
|
1737
|
-
props.disable
|
|
1677
|
+
!props.disable &&
|
|
1738
1678
|
innerOptionsValue.value.length !== 0
|
|
1739
1679
|
) {
|
|
1740
1680
|
const opts = innerOptionsValue.value.map(value =>
|
|
@@ -1755,7 +1695,7 @@ export default createComponent({
|
|
|
1755
1695
|
}
|
|
1756
1696
|
|
|
1757
1697
|
const attrs =
|
|
1758
|
-
props.useInput
|
|
1698
|
+
props.useInput || !isTarget
|
|
1759
1699
|
? void 0
|
|
1760
1700
|
: state.splitAttrs.attributes.value
|
|
1761
1701
|
|
|
@@ -1771,14 +1711,13 @@ export default createComponent({
|
|
|
1771
1711
|
},
|
|
1772
1712
|
|
|
1773
1713
|
getInnerAppend: () =>
|
|
1774
|
-
props.loading
|
|
1775
|
-
innerLoadingIndicator.value
|
|
1776
|
-
props.hideDropdownIcon
|
|
1714
|
+
!props.loading &&
|
|
1715
|
+
!innerLoadingIndicator.value &&
|
|
1716
|
+
!props.hideDropdownIcon
|
|
1777
1717
|
? [
|
|
1778
1718
|
h(QIcon, {
|
|
1779
1719
|
class:
|
|
1780
|
-
'q-select__dropdown-icon' +
|
|
1781
|
-
(menu.value === true ? ' rotate-180' : ''),
|
|
1720
|
+
'q-select__dropdown-icon' + (menu.value ? ' rotate-180' : ''),
|
|
1782
1721
|
name: dropdownArrowIcon.value
|
|
1783
1722
|
})
|
|
1784
1723
|
]
|