quasar 2.8.4 → 2.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/api/QBreadcrumbsEl.json +52 -0
  2. package/dist/api/QBtn.json +41 -6
  3. package/dist/api/QBtnDropdown.json +1 -1
  4. package/dist/api/QChip.json +1 -1
  5. package/dist/api/QEditor.json +7 -0
  6. package/dist/api/QExpansionItem.json +1 -1
  7. package/dist/api/QItem.json +52 -0
  8. package/dist/api/QRating.json +13 -0
  9. package/dist/api/QRouteTab.json +42 -6
  10. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  11. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  12. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  13. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  14. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  15. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  16. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  17. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  18. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  19. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  20. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  21. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  22. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  23. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  24. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  25. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  26. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  27. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  28. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  40. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  41. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
  42. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  43. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
  44. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  45. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  46. package/dist/icon-set/themify.umd.prod.js +1 -1
  47. package/dist/lang/ar-TN.umd.prod.js +1 -1
  48. package/dist/lang/ar.umd.prod.js +1 -1
  49. package/dist/lang/az-Latn.umd.prod.js +1 -1
  50. package/dist/lang/bg.umd.prod.js +1 -1
  51. package/dist/lang/bn.umd.prod.js +1 -1
  52. package/dist/lang/ca.umd.prod.js +1 -1
  53. package/dist/lang/cs.umd.prod.js +1 -1
  54. package/dist/lang/da.umd.prod.js +1 -1
  55. package/dist/lang/de.umd.prod.js +1 -1
  56. package/dist/lang/el.umd.prod.js +1 -1
  57. package/dist/lang/en-GB.umd.prod.js +1 -1
  58. package/dist/lang/en-US.umd.prod.js +1 -1
  59. package/dist/lang/eo.umd.prod.js +1 -1
  60. package/dist/lang/es.umd.prod.js +1 -1
  61. package/dist/lang/et.umd.prod.js +1 -1
  62. package/dist/lang/eu.umd.prod.js +1 -1
  63. package/dist/lang/fa-IR.umd.prod.js +1 -1
  64. package/dist/lang/fa.umd.prod.js +1 -1
  65. package/dist/lang/fi.umd.prod.js +1 -1
  66. package/dist/lang/fr.umd.prod.js +1 -1
  67. package/dist/lang/gn.umd.prod.js +1 -1
  68. package/dist/lang/he.umd.prod.js +1 -1
  69. package/dist/lang/hr.umd.prod.js +1 -1
  70. package/dist/lang/hu.umd.prod.js +1 -1
  71. package/dist/lang/id.umd.prod.js +1 -1
  72. package/dist/lang/is.umd.prod.js +1 -1
  73. package/dist/lang/it.umd.prod.js +1 -1
  74. package/dist/lang/ja.umd.prod.js +1 -1
  75. package/dist/lang/km.umd.prod.js +1 -1
  76. package/dist/lang/ko-KR.umd.prod.js +1 -1
  77. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  78. package/dist/lang/kz.umd.prod.js +1 -1
  79. package/dist/lang/lt.umd.prod.js +1 -1
  80. package/dist/lang/lu.umd.prod.js +1 -1
  81. package/dist/lang/lv.umd.prod.js +1 -1
  82. package/dist/lang/ml.umd.prod.js +1 -1
  83. package/dist/lang/mm.umd.prod.js +1 -1
  84. package/dist/lang/ms.umd.prod.js +1 -1
  85. package/dist/lang/my.umd.prod.js +1 -1
  86. package/dist/lang/nb-NO.umd.prod.js +1 -1
  87. package/dist/lang/nl.umd.prod.js +2 -2
  88. package/dist/lang/pl.umd.prod.js +1 -1
  89. package/dist/lang/pt-BR.umd.prod.js +1 -1
  90. package/dist/lang/pt.umd.prod.js +1 -1
  91. package/dist/lang/ro.umd.prod.js +1 -1
  92. package/dist/lang/ru.umd.prod.js +1 -1
  93. package/dist/lang/sk.umd.prod.js +1 -1
  94. package/dist/lang/sl.umd.prod.js +1 -1
  95. package/dist/lang/sm.umd.prod.js +1 -1
  96. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  97. package/dist/lang/sr.umd.prod.js +1 -1
  98. package/dist/lang/sv.umd.prod.js +1 -1
  99. package/dist/lang/ta.umd.prod.js +1 -1
  100. package/dist/lang/th.umd.prod.js +1 -1
  101. package/dist/lang/tr.umd.prod.js +1 -1
  102. package/dist/lang/ug.umd.prod.js +1 -1
  103. package/dist/lang/uk.umd.prod.js +1 -1
  104. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  105. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  106. package/dist/lang/vi.umd.prod.js +1 -1
  107. package/dist/lang/zh-CN.umd.prod.js +1 -1
  108. package/dist/lang/zh-TW.umd.prod.js +1 -1
  109. package/dist/quasar.cjs.prod.js +2 -2
  110. package/dist/quasar.esm.js +533 -337
  111. package/dist/quasar.esm.prod.js +2 -2
  112. package/dist/quasar.sass +1 -1
  113. package/dist/quasar.umd.js +532 -336
  114. package/dist/quasar.umd.prod.js +2 -2
  115. package/dist/transforms/auto-import.json +7 -3
  116. package/dist/transforms/import-map.json +2 -0
  117. package/dist/types/api/qeditor.d.ts +17 -0
  118. package/dist/types/api.d.ts +1 -0
  119. package/dist/types/index.d.ts +93 -8
  120. package/dist/types/utils/run-sequential-promises.d.ts +1 -1
  121. package/dist/vetur/quasar-attributes.json +4 -0
  122. package/dist/vetur/quasar-tags.json +1 -0
  123. package/dist/web-types/web-types.json +60 -9
  124. package/lang/nl.js +2 -2
  125. package/lang/nl.mjs +2 -2
  126. package/package.json +5 -3
  127. package/src/components/banner/__tests__/QBanner.spec.js +107 -0
  128. package/src/components/bar/__tests__/QBar.spec.js +46 -0
  129. package/src/components/breadcrumbs/QBreadcrumbsEl.js +6 -7
  130. package/src/components/breadcrumbs/QBreadcrumbsEl.json +53 -0
  131. package/src/components/btn/QBtn.js +19 -19
  132. package/src/components/btn/QBtn.json +41 -6
  133. package/src/components/btn/use-btn.js +6 -4
  134. package/src/components/btn-dropdown/QBtnDropdown.json +1 -1
  135. package/src/components/checkbox/QCheckbox.js +1 -2
  136. package/src/components/checkbox/use-checkbox.js +2 -1
  137. package/src/components/chip/QChip.json +1 -1
  138. package/src/components/dialog/QDialog.js +6 -4
  139. package/src/components/drawer/QDrawer.js +7 -4
  140. package/src/components/editor/QEditor.json +9 -0
  141. package/src/components/expansion-item/QExpansionItem.json +1 -1
  142. package/src/components/item/QItem.js +4 -5
  143. package/src/components/item/QItem.json +53 -0
  144. package/src/components/menu/QMenu.js +4 -5
  145. package/src/components/menu/__tests__/QMenu.spec.js +7 -0
  146. package/src/components/popup-edit/QPopupEdit.js +2 -5
  147. package/src/components/radio/QRadio.js +3 -3
  148. package/src/components/rating/QRating.js +48 -10
  149. package/src/components/rating/QRating.json +11 -0
  150. package/src/components/stepper/QStep.js +5 -3
  151. package/src/components/table/QTable.js +3 -5
  152. package/src/components/tabs/QRouteTab.js +6 -4
  153. package/src/components/tabs/QRouteTab.json +42 -6
  154. package/src/components/tabs/QTabs.js +188 -108
  155. package/src/components/tabs/use-tab.js +62 -38
  156. package/src/components/tooltip/QTooltip.js +7 -13
  157. package/src/components/tree/QTree.js +1 -1
  158. package/src/composables/private/__tests__/use-model-toggle.spec.js +2 -0
  159. package/src/composables/private/__tests__/use-transition.spec.js +4 -0
  160. package/src/composables/private/use-router-link.js +80 -43
  161. package/src/composables/private/use-tick.js +15 -9
  162. package/src/composables/private/use-timeout.js +20 -7
  163. package/src/directives/TouchPan.js +1 -1
  164. package/src/directives/TouchRepeat.js +1 -1
  165. package/src/directives/TouchSwipe.js +1 -1
  166. package/src/utils/extend.js +19 -19
  167. package/src/utils/private/inject-obj-prop.js +2 -0
  168. package/src/utils/private/rtl.js +10 -7
  169. package/src/utils/run-sequential-promises.js +1 -1
@@ -10,8 +10,12 @@
10
10
  "q-badge.spec": "QBadge.spec",
11
11
  "QBadge": "QBadge",
12
12
  "q-badge": "QBadge",
13
+ "QBanner.spec": "QBanner.spec",
14
+ "q-banner.spec": "QBanner.spec",
13
15
  "QBanner": "QBanner",
14
16
  "q-banner": "QBanner",
17
+ "QBar.spec": "QBar.spec",
18
+ "q-bar.spec": "QBar.spec",
15
19
  "QBar": "QBar",
16
20
  "q-bar": "QBar",
17
21
  "QBreadcrumbs": "QBreadcrumbs",
@@ -295,9 +299,9 @@
295
299
  "v-touch-swipe": "TouchSwipe"
296
300
  },
297
301
  "regex": {
298
- "kebabComponents": "(q-uploader-add-trigger|q-stepper-navigation|q-circular-progress|q-spinner-hourglass|q-carousel-control|q-form-child-mixin|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-route-tab.spec|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.spec|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-avatar.spec|q-breadcrumbs|q-dialog.spec|q-editor.spec|q-page-sticky|q-popup-proxy|q-scroll-area|q-select.spec|q-spinner-box|q-spinner-ios|q-spinner-pie|q-badge.spec|q-btn-toggle|q-fab-action|q-input.spec|q-item-label|q-pagination|q-popup-edit|q-responsive|q-slide-item|q-tab-panels|q-table.spec|q-btn-group|q-chip.spec|q-date.spec|q-menu.spec|q-separator|q-tab-panel|q-tabs.spec|q-route-tab|q-ajax-bar|q-btn.spec|q-carousel|q-checkbox|q-parallax|q-skeleton|q-splitter|q-tab.spec|q-timeline|q-uploader|q-spinner|q-stepper|q-td.spec|q-th.spec|q-tr.spec|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)",
299
- "pascalComponents": "(QUploaderAddTrigger|QStepperNavigation|QCircularProgress|QSpinnerHourglass|QCarouselControl|QSlideTransition|QSpinnerFacebook|QSpinnerInfinity|QFormChildMixin|QInfiniteScroll|QLinearProgress|QResizeObserver|QScrollObserver|QSpinnerComment|QBreadcrumbsEl|QCarouselSlide|QExpansionItem|QPageContainer|QPullToRefresh|QSpinnerHearts|QRouteTab.spec|QTimelineEntry|QUploader.spec|QVirtualScroll|QInnerLoading|QIntersection|QPageScroller|QSpinnerAudio|QSpinnerClock|QSpinnerGears|QSpinnerOrbit|QSpinnerRadio|QSpinnerRings|QToolbarTitle|QAvatar.spec|QBreadcrumbs|QBtnDropdown|QCardActions|QCardSection|QChatMessage|QDialog.spec|QEditor.spec|QItemSection|QMarkupTable|QOptionGroup|QSelect.spec|QSpinnerBall|QSpinnerBars|QSpinnerCube|QSpinnerDots|QSpinnerGrid|QSpinnerOval|QSpinnerPuff|QSpinnerTail|QBadge.spec|QInput.spec|QPageSticky|QPagination|QPopupProxy|QResponsive|QScrollArea|QSpinnerBox|QSpinnerIos|QSpinnerPie|QTable.spec|QBtnToggle|QChip.spec|QDate.spec|QFabAction|QItemLabel|QMenu.spec|QPopupEdit|QSeparator|QSlideItem|QTabPanels|QTabs.spec|QBtnGroup|QBtn.spec|QCarousel|QCheckbox|QParallax|QSkeleton|QSplitter|QTabPanel|QTab.spec|QRouteTab|QTimeline|QUploader|QAjaxBar|QSpinner|QStepper|QTd.spec|QTh.spec|QTr.spec|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)",
300
- "components": "(q-uploader-add-trigger|q-stepper-navigation|q-circular-progress|q-spinner-hourglass|q-carousel-control|q-form-child-mixin|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-route-tab.spec|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.spec|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-avatar.spec|q-breadcrumbs|q-dialog.spec|q-editor.spec|q-page-sticky|q-popup-proxy|q-scroll-area|q-select.spec|q-spinner-box|q-spinner-ios|q-spinner-pie|q-badge.spec|q-btn-toggle|q-fab-action|q-input.spec|q-item-label|q-pagination|q-popup-edit|q-responsive|q-slide-item|q-tab-panels|q-table.spec|q-btn-group|q-chip.spec|q-date.spec|q-menu.spec|q-separator|q-tab-panel|q-tabs.spec|q-route-tab|q-ajax-bar|q-btn.spec|q-carousel|q-checkbox|q-parallax|q-skeleton|q-splitter|q-tab.spec|q-timeline|q-uploader|q-spinner|q-stepper|q-td.spec|q-th.spec|q-tr.spec|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|QFormChildMixin|QInfiniteScroll|QLinearProgress|QResizeObserver|QScrollObserver|QSpinnerComment|QBreadcrumbsEl|QCarouselSlide|QExpansionItem|QPageContainer|QPullToRefresh|QSpinnerHearts|QRouteTab.spec|QTimelineEntry|QUploader.spec|QVirtualScroll|QInnerLoading|QIntersection|QPageScroller|QSpinnerAudio|QSpinnerClock|QSpinnerGears|QSpinnerOrbit|QSpinnerRadio|QSpinnerRings|QToolbarTitle|QAvatar.spec|QBreadcrumbs|QBtnDropdown|QCardActions|QCardSection|QChatMessage|QDialog.spec|QEditor.spec|QItemSection|QMarkupTable|QOptionGroup|QSelect.spec|QSpinnerBall|QSpinnerBars|QSpinnerCube|QSpinnerDots|QSpinnerGrid|QSpinnerOval|QSpinnerPuff|QSpinnerTail|QBadge.spec|QInput.spec|QPageSticky|QPagination|QPopupProxy|QResponsive|QScrollArea|QSpinnerBox|QSpinnerIos|QSpinnerPie|QTable.spec|QBtnToggle|QChip.spec|QDate.spec|QFabAction|QItemLabel|QMenu.spec|QPopupEdit|QSeparator|QSlideItem|QTabPanels|QTabs.spec|QBtnGroup|QBtn.spec|QCarousel|QCheckbox|QParallax|QSkeleton|QSplitter|QTabPanel|QTab.spec|QRouteTab|QTimeline|QUploader|QAjaxBar|QSpinner|QStepper|QTd.spec|QTh.spec|QTr.spec|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)",
302
+ "kebabComponents": "(q-uploader-add-trigger|q-stepper-navigation|q-circular-progress|q-spinner-hourglass|q-carousel-control|q-form-child-mixin|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-route-tab.spec|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.spec|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-avatar.spec|q-banner.spec|q-breadcrumbs|q-dialog.spec|q-editor.spec|q-page-sticky|q-popup-proxy|q-scroll-area|q-select.spec|q-spinner-box|q-spinner-ios|q-spinner-pie|q-badge.spec|q-btn-toggle|q-fab-action|q-input.spec|q-item-label|q-pagination|q-popup-edit|q-responsive|q-slide-item|q-tab-panels|q-table.spec|q-btn-group|q-chip.spec|q-date.spec|q-menu.spec|q-separator|q-tab-panel|q-tabs.spec|q-route-tab|q-ajax-bar|q-bar.spec|q-btn.spec|q-carousel|q-checkbox|q-parallax|q-skeleton|q-splitter|q-tab.spec|q-timeline|q-uploader|q-spinner|q-stepper|q-td.spec|q-th.spec|q-tr.spec|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)",
303
+ "pascalComponents": "(QUploaderAddTrigger|QStepperNavigation|QCircularProgress|QSpinnerHourglass|QCarouselControl|QSlideTransition|QSpinnerFacebook|QSpinnerInfinity|QFormChildMixin|QInfiniteScroll|QLinearProgress|QResizeObserver|QScrollObserver|QSpinnerComment|QBreadcrumbsEl|QCarouselSlide|QExpansionItem|QPageContainer|QPullToRefresh|QSpinnerHearts|QRouteTab.spec|QTimelineEntry|QUploader.spec|QVirtualScroll|QInnerLoading|QIntersection|QPageScroller|QSpinnerAudio|QSpinnerClock|QSpinnerGears|QSpinnerOrbit|QSpinnerRadio|QSpinnerRings|QToolbarTitle|QAvatar.spec|QBanner.spec|QBreadcrumbs|QBtnDropdown|QCardActions|QCardSection|QChatMessage|QDialog.spec|QEditor.spec|QItemSection|QMarkupTable|QOptionGroup|QSelect.spec|QSpinnerBall|QSpinnerBars|QSpinnerCube|QSpinnerDots|QSpinnerGrid|QSpinnerOval|QSpinnerPuff|QSpinnerTail|QBadge.spec|QInput.spec|QPageSticky|QPagination|QPopupProxy|QResponsive|QScrollArea|QSpinnerBox|QSpinnerIos|QSpinnerPie|QTable.spec|QBtnToggle|QChip.spec|QDate.spec|QFabAction|QItemLabel|QMenu.spec|QPopupEdit|QSeparator|QSlideItem|QTabPanels|QTabs.spec|QBar.spec|QBtnGroup|QBtn.spec|QCarousel|QCheckbox|QParallax|QSkeleton|QSplitter|QTabPanel|QTab.spec|QRouteTab|QTimeline|QUploader|QAjaxBar|QSpinner|QStepper|QTd.spec|QTh.spec|QTr.spec|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)",
304
+ "components": "(q-uploader-add-trigger|q-stepper-navigation|q-circular-progress|q-spinner-hourglass|q-carousel-control|q-form-child-mixin|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-route-tab.spec|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.spec|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-avatar.spec|q-banner.spec|q-breadcrumbs|q-dialog.spec|q-editor.spec|q-page-sticky|q-popup-proxy|q-scroll-area|q-select.spec|q-spinner-box|q-spinner-ios|q-spinner-pie|q-badge.spec|q-btn-toggle|q-fab-action|q-input.spec|q-item-label|q-pagination|q-popup-edit|q-responsive|q-slide-item|q-tab-panels|q-table.spec|q-btn-group|q-chip.spec|q-date.spec|q-menu.spec|q-separator|q-tab-panel|q-tabs.spec|q-route-tab|q-ajax-bar|q-bar.spec|q-btn.spec|q-carousel|q-checkbox|q-parallax|q-skeleton|q-splitter|q-tab.spec|q-timeline|q-uploader|q-spinner|q-stepper|q-td.spec|q-th.spec|q-tr.spec|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|QFormChildMixin|QInfiniteScroll|QLinearProgress|QResizeObserver|QScrollObserver|QSpinnerComment|QBreadcrumbsEl|QCarouselSlide|QExpansionItem|QPageContainer|QPullToRefresh|QSpinnerHearts|QRouteTab.spec|QTimelineEntry|QUploader.spec|QVirtualScroll|QInnerLoading|QIntersection|QPageScroller|QSpinnerAudio|QSpinnerClock|QSpinnerGears|QSpinnerOrbit|QSpinnerRadio|QSpinnerRings|QToolbarTitle|QAvatar.spec|QBanner.spec|QBreadcrumbs|QBtnDropdown|QCardActions|QCardSection|QChatMessage|QDialog.spec|QEditor.spec|QItemSection|QMarkupTable|QOptionGroup|QSelect.spec|QSpinnerBall|QSpinnerBars|QSpinnerCube|QSpinnerDots|QSpinnerGrid|QSpinnerOval|QSpinnerPuff|QSpinnerTail|QBadge.spec|QInput.spec|QPageSticky|QPagination|QPopupProxy|QResponsive|QScrollArea|QSpinnerBox|QSpinnerIos|QSpinnerPie|QTable.spec|QBtnToggle|QChip.spec|QDate.spec|QFabAction|QItemLabel|QMenu.spec|QPopupEdit|QSeparator|QSlideItem|QTabPanels|QTabs.spec|QBar.spec|QBtnGroup|QBtn.spec|QCarousel|QCheckbox|QParallax|QSkeleton|QSplitter|QTabPanel|QTab.spec|QRouteTab|QTimeline|QUploader|QAjaxBar|QSpinner|QStepper|QTd.spec|QTh.spec|QTr.spec|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)",
301
305
  "directives": "(v-intersection|v-touch-repeat|v-close-popup|v-scroll-fire|v-touch-swipe|v-touch-hold|v-touch-pan|v-mutation|v-ripple|v-scroll|v-morph)"
302
306
  }
303
307
  }
@@ -5,7 +5,9 @@
5
5
  "QAvatar": "src/components/avatar/QAvatar.js",
6
6
  "QBadge.spec": "src/components/badge/__tests__/QBadge.spec.js",
7
7
  "QBadge": "src/components/badge/QBadge.js",
8
+ "QBanner.spec": "src/components/banner/__tests__/QBanner.spec.js",
8
9
  "QBanner": "src/components/banner/QBanner.js",
10
+ "QBar.spec": "src/components/bar/__tests__/QBar.spec.js",
9
11
  "QBar": "src/components/bar/QBar.js",
10
12
  "QBreadcrumbs": "src/components/breadcrumbs/QBreadcrumbs.js",
11
13
  "QBreadcrumbsEl": "src/components/breadcrumbs/QBreadcrumbsEl.js",
@@ -0,0 +1,17 @@
1
+ // src/components/editor/editor-caret.js#Caret
2
+ // We are not exposing the whole API, just the ones that might be needed outside.
3
+ export interface QEditorCaret {
4
+ readonly selection: Selection | null;
5
+ readonly hasSelection: boolean;
6
+ readonly range: Range | null;
7
+ readonly parent: Element | null;
8
+ readonly blockParent: Element | null;
9
+
10
+ save(range: Range): void;
11
+ restore(range?: Range): void;
12
+ savePosition(): void;
13
+ restorePosition(length?: number): void;
14
+ is(commandId: string, param?: string): boolean;
15
+ can(commandId: string): boolean;
16
+ apply(commandId: string, param?: string, done?: () => void): boolean;
17
+ }
@@ -6,6 +6,7 @@ export * from "./api/qtable";
6
6
  export * from "./api/qtree";
7
7
  export * from "./api/quploader";
8
8
  export * from "./api/qnotify";
9
+ export * from "./api/qeditor";
9
10
  export * from "./api/qloading";
10
11
  export * from "./api/touchswipe";
11
12
  export * from "./api/web-storage";
@@ -1110,6 +1110,28 @@ export interface QBreadcrumbsElProps {
1110
1110
  * Default value: true
1111
1111
  */
1112
1112
  ripple?: boolean | any | undefined;
1113
+ /**
1114
+ * Emitted when the component is clicked
1115
+ * @param evt JS event object; If you are using route navigation ('to'/'replace' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler
1116
+ * @param go Available ONLY if you are using route navigation ('to'/'replace' 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
1117
+ */
1118
+ onClick?: (
1119
+ evt: Event,
1120
+ go?: (opts?: {
1121
+ /**
1122
+ * Equivalent to Vue Router <router-link> 'to' property; Specify it explicitly otherwise it will be set with same value as component's 'to' prop
1123
+ */
1124
+ to?: string | any;
1125
+ /**
1126
+ * Equivalent to Vue Router <router-link> 'replace' property; Specify it explicitly otherwise it will be set with same value as component's 'replace' prop
1127
+ */
1128
+ replace?: boolean;
1129
+ /**
1130
+ * Return the router error, if any; Otherwise the returned Promise will always fulfill
1131
+ */
1132
+ returnRouterError?: boolean;
1133
+ }) => Promise<any>
1134
+ ) => void;
1113
1135
  }
1114
1136
 
1115
1137
  export interface QBreadcrumbsElSlots {
@@ -1769,11 +1791,27 @@ export interface QBtnProps {
1769
1791
  */
1770
1792
  darkPercentage?: boolean | undefined;
1771
1793
  /**
1772
- * Emitted when component is clicked (activated)
1773
- * @param evt JS event object; If you want to cancel navigation set synchronously 'evt.navigate' to false
1774
- * @param navigateFn When you need to control the time at which the button should trigger the route navigation then set 'evt.navigate' to false and call this function; Useful if you have async work to be done before the actual route navigation
1794
+ * Emitted when the component is clicked
1795
+ * @param evt JS event object; If you are using route navigation ('to'/'replace' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler
1796
+ * @param go Available ONLY if you are using route navigation ('to'/'replace' 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
1775
1797
  */
1776
- onClick?: (evt: Event, navigateFn: () => void) => void;
1798
+ onClick?: (
1799
+ evt: Event,
1800
+ go?: (opts?: {
1801
+ /**
1802
+ * Equivalent to Vue Router <router-link> 'to' property; Specify it explicitly otherwise it will be set with same value as component's 'to' prop
1803
+ */
1804
+ to?: string | any;
1805
+ /**
1806
+ * Equivalent to Vue Router <router-link> 'replace' property; Specify it explicitly otherwise it will be set with same value as component's 'replace' prop
1807
+ */
1808
+ replace?: boolean;
1809
+ /**
1810
+ * Return the router error, if any; Otherwise the returned Promise will always fulfill
1811
+ */
1812
+ returnRouterError?: boolean;
1813
+ }) => Promise<any>
1814
+ ) => void;
1777
1815
  }
1778
1816
 
1779
1817
  export interface QBtnSlots {
@@ -3435,6 +3473,10 @@ export interface QEditor extends ComponentPublicInstance<QEditorProps> {
3435
3473
  * @returns Provides the pure HTML within the editable area
3436
3474
  */
3437
3475
  getContentEl: () => Element;
3476
+ /**
3477
+ * The current caret state
3478
+ */
3479
+ readonly caret: QEditorCaret;
3438
3480
  }
3439
3481
 
3440
3482
  export interface QExpansionItemProps {
@@ -5538,6 +5580,28 @@ export interface QItemProps {
5538
5580
  * Determines focus state, ONLY if 'manual-focus' is enabled / set to true
5539
5581
  */
5540
5582
  focused?: boolean | undefined;
5583
+ /**
5584
+ * Emitted when the component is clicked
5585
+ * @param evt JS event object; If you are using route navigation ('to'/'replace' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler
5586
+ * @param go Available ONLY if you are using route navigation ('to'/'replace' 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
5587
+ */
5588
+ onClick?: (
5589
+ evt: Event,
5590
+ go?: (opts?: {
5591
+ /**
5592
+ * Equivalent to Vue Router <router-link> 'to' property; Specify it explicitly otherwise it will be set with same value as component's 'to' prop
5593
+ */
5594
+ to?: string | any;
5595
+ /**
5596
+ * Equivalent to Vue Router <router-link> 'replace' property; Specify it explicitly otherwise it will be set with same value as component's 'replace' prop
5597
+ */
5598
+ replace?: boolean;
5599
+ /**
5600
+ * Return the router error, if any; Otherwise the returned Promise will always fulfill
5601
+ */
5602
+ returnRouterError?: boolean;
5603
+ }) => Promise<any>
5604
+ ) => void;
5541
5605
  }
5542
5606
 
5543
5607
  export interface QItemSlots {
@@ -7325,6 +7389,10 @@ export interface QRatingProps {
7325
7389
  * 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)
7326
7390
  */
7327
7391
  iconHalf?: string | readonly any[] | undefined;
7392
+ /**
7393
+ * 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
7394
+ */
7395
+ iconAriaLabel?: string | readonly any[] | undefined;
7328
7396
  /**
7329
7397
  * 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)
7330
7398
  */
@@ -11490,11 +11558,27 @@ export interface QRouteTabProps {
11490
11558
  */
11491
11559
  tabindex?: number | string | undefined;
11492
11560
  /**
11493
- * Emitted when component is clicked (activated)
11494
- * @param evt JS event object; If you want to cancel navigation set synchronously 'evt.navigate' to false
11495
- * @param navigateFn 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; Useful if you have async work to be done before the actual route navigation
11561
+ * Emitted when the component is clicked
11562
+ * @param evt JS event object; If you want to cancel navigation then call evt.preventDefault() synchronously in your event handler
11563
+ * @param go 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
11496
11564
  */
11497
- onClick?: (evt: Event, navigateFn: () => void) => void;
11565
+ onClick?: (
11566
+ evt: Event,
11567
+ go?: (opts?: {
11568
+ /**
11569
+ * Equivalent to Vue Router <router-link> 'to' property; Specify it explicitly otherwise it will be set with same value as component's 'to' prop
11570
+ */
11571
+ to?: string | any;
11572
+ /**
11573
+ * Equivalent to Vue Router <router-link> 'replace' property; Specify it explicitly otherwise it will be set with same value as component's 'replace' prop
11574
+ */
11575
+ replace?: boolean;
11576
+ /**
11577
+ * Return the router error, if any; Otherwise the returned Promise will always fulfill
11578
+ */
11579
+ returnRouterError?: boolean;
11580
+ }) => Promise<any>
11581
+ ) => void;
11498
11582
  }
11499
11583
 
11500
11584
  export interface QRouteTabSlots {
@@ -13612,6 +13696,7 @@ export interface QEditorCommand {
13612
13696
  }
13613
13697
 
13614
13698
  import { VueStyleObjectProp } from "./api";
13699
+ import { QEditorCaret } from "./api";
13615
13700
  import { ValidationRule } from "./api";
13616
13701
  import { QRejectedEntry } from "./api";
13617
13702
  import { SliderMarkerLabels } from "./api";
@@ -43,7 +43,7 @@ export type RunSequentialPromisesResult<TKey extends number | string, TValue> =
43
43
  export interface RunSequentialPromisesOptions {
44
44
  /**
45
45
  * When making HTTP requests, be aware of the maximum threads that
46
- * the hosting browser supports (usually 3). Any number of threads
46
+ * the hosting browser supports (usually 5). Any number of threads
47
47
  * above that won't add any real benefits.
48
48
  *
49
49
  * @default 1
@@ -3691,6 +3691,10 @@
3691
3691
  "type": "string|array",
3692
3692
  "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)"
3693
3693
  },
3694
+ "q-rating/icon-aria-label": {
3695
+ "type": "string|array",
3696
+ "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"
3697
+ },
3694
3698
  "q-rating/color": {
3695
3699
  "type": "string|array",
3696
3700
  "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)"
@@ -1237,6 +1237,7 @@
1237
1237
  "icon",
1238
1238
  "icon-selected",
1239
1239
  "icon-half",
1240
+ "icon-aria-label",
1240
1241
  "color",
1241
1242
  "color-selected",
1242
1243
  "color-half",
@@ -2,7 +2,7 @@
2
2
  "$schema": "",
3
3
  "framework": "vue",
4
4
  "name": "quasar",
5
- "version": "2.8.4",
5
+ "version": "2.9.1",
6
6
  "contributions": {
7
7
  "html": {
8
8
  "types-syntax": "typescript",
@@ -575,6 +575,27 @@
575
575
  "default": "true"
576
576
  }
577
577
  ],
578
+ "events": [
579
+ {
580
+ "name": "click",
581
+ "arguments": [
582
+ {
583
+ "name": "evt",
584
+ "type": "Event",
585
+ "description": "JS event object; If you are using route navigation ('to'/'replace' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler",
586
+ "doc-url": "https://v2.quasar.dev/vue-components/breadcrumbs"
587
+ },
588
+ {
589
+ "name": "go",
590
+ "type": "Function",
591
+ "description": "Available ONLY if you are using route navigation ('to'/'replace' 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",
592
+ "doc-url": "https://v2.quasar.dev/vue-components/breadcrumbs"
593
+ }
594
+ ],
595
+ "description": "Emitted when the component is clicked",
596
+ "doc-url": "https://v2.quasar.dev/vue-components/breadcrumbs"
597
+ }
598
+ ],
578
599
  "slots": [
579
600
  {
580
601
  "name": "default",
@@ -1885,17 +1906,17 @@
1885
1906
  {
1886
1907
  "name": "evt",
1887
1908
  "type": "Event",
1888
- "description": "JS event object; If you want to cancel navigation set synchronously 'evt.navigate' to false",
1909
+ "description": "JS event object; If you are using route navigation ('to'/'replace' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler",
1889
1910
  "doc-url": "https://v2.quasar.dev/vue-components/button"
1890
1911
  },
1891
1912
  {
1892
- "name": "navigateFn",
1913
+ "name": "go",
1893
1914
  "type": "Function",
1894
- "description": "When you need to control the time at which the button should trigger the route navigation then set 'evt.navigate' to false and call this function; Useful if you have async work to be done before the actual route navigation",
1915
+ "description": "Available ONLY if you are using route navigation ('to'/'replace' 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",
1895
1916
  "doc-url": "https://v2.quasar.dev/vue-components/button"
1896
1917
  }
1897
1918
  ],
1898
- "description": "Emitted when component is clicked (activated)",
1919
+ "description": "Emitted when the component is clicked",
1899
1920
  "doc-url": "https://v2.quasar.dev/vue-components/button"
1900
1921
  }
1901
1922
  ],
@@ -8591,6 +8612,27 @@
8591
8612
  "type": "boolean"
8592
8613
  }
8593
8614
  ],
8615
+ "events": [
8616
+ {
8617
+ "name": "click",
8618
+ "arguments": [
8619
+ {
8620
+ "name": "evt",
8621
+ "type": "Event",
8622
+ "description": "JS event object; If you are using route navigation ('to'/'replace' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler",
8623
+ "doc-url": "https://v2.quasar.dev/vue-components/list-and-list-items"
8624
+ },
8625
+ {
8626
+ "name": "go",
8627
+ "type": "Function",
8628
+ "description": "Available ONLY if you are using route navigation ('to'/'replace' 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",
8629
+ "doc-url": "https://v2.quasar.dev/vue-components/list-and-list-items"
8630
+ }
8631
+ ],
8632
+ "description": "Emitted when the component is clicked",
8633
+ "doc-url": "https://v2.quasar.dev/vue-components/list-and-list-items"
8634
+ }
8635
+ ],
8594
8636
  "slots": [
8595
8637
  {
8596
8638
  "name": "default",
@@ -11720,6 +11762,15 @@
11720
11762
  "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)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo-v2/svg/logo.svg\nimg:path/to/some_image.png",
11721
11763
  "doc-url": "https://v2.quasar.dev/vue-components/rating"
11722
11764
  },
11765
+ {
11766
+ "name": "icon-aria-label",
11767
+ "value": {
11768
+ "kind": "expression",
11769
+ "type": "string|any[]"
11770
+ },
11771
+ "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\n\nExamples:\nRating\n[\"Bad\", \"Normal\", \"Good\"]",
11772
+ "doc-url": "https://v2.quasar.dev/vue-components/rating"
11773
+ },
11723
11774
  {
11724
11775
  "name": "color",
11725
11776
  "value": {
@@ -16693,17 +16744,17 @@
16693
16744
  {
16694
16745
  "name": "evt",
16695
16746
  "type": "Event",
16696
- "description": "JS event object; If you want to cancel navigation set synchronously 'evt.navigate' to false",
16747
+ "description": "JS event object; If you want to cancel navigation then call evt.preventDefault() synchronously in your event handler",
16697
16748
  "doc-url": "https://v2.quasar.dev/vue-components/tabs"
16698
16749
  },
16699
16750
  {
16700
- "name": "navigateFn",
16751
+ "name": "go",
16701
16752
  "type": "Function",
16702
- "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; Useful if you have async work to be done before the actual route navigation",
16753
+ "description": "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",
16703
16754
  "doc-url": "https://v2.quasar.dev/vue-components/tabs"
16704
16755
  }
16705
16756
  ],
16706
- "description": "Emitted when component is clicked (activated)",
16757
+ "description": "Emitted when the component is clicked",
16707
16758
  "doc-url": "https://v2.quasar.dev/vue-components/tabs"
16708
16759
  }
16709
16760
  ],
package/lang/nl.js CHANGED
@@ -20,8 +20,8 @@ module.exports = {
20
20
  search: 'Zoek',
21
21
  filter: 'Filter',
22
22
  refresh: 'Ververs',
23
- expand: label => (label ? `Vouw "${ label }" uit` : 'Uitbreiden'),
24
- collapse: label => (label ? `"${ label }" samenvouwen` : 'Instorten')
23
+ expand: label => (label ? `"${ label }" uitklappen` : 'Uitklappen'),
24
+ collapse: label => (label ? `"${ label }" inklappen` : 'Inklappen')
25
25
  },
26
26
  date: {
27
27
  days: 'Zondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrijdag_Zaterdag'.split('_'),
package/lang/nl.mjs CHANGED
@@ -15,8 +15,8 @@ export default {
15
15
  search: 'Zoek',
16
16
  filter: 'Filter',
17
17
  refresh: 'Ververs',
18
- expand: label => (label ? `Vouw "${ label }" uit` : 'Uitbreiden'),
19
- collapse: label => (label ? `"${ label }" samenvouwen` : 'Instorten')
18
+ expand: label => (label ? `"${ label }" uitklappen` : 'Uitklappen'),
19
+ collapse: label => (label ? `"${ label }" inklappen` : 'Inklappen')
20
20
  },
21
21
  date: {
22
22
  days: 'Zondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrijdag_Zaterdag'.split('_'),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quasar",
3
- "version": "2.8.4",
3
+ "version": "2.9.1",
4
4
  "description": "Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time",
5
5
  "main": "dist/quasar.cjs.prod.js",
6
6
  "module": "dist/quasar.esm.prod.js",
@@ -29,8 +29,10 @@
29
29
  "build": "node build/script.build.js",
30
30
  "lint": "eslint --ext .js,.vue src dev",
31
31
  "lint-fix": "eslint --ext .js,.vue src dev --fix",
32
- "test:component": "node build/script.build.js && cd ./dev && cypress open-ct && cd ..",
33
- "test:component:ci": "node build/script.build.js && cd ./dev && cypress run-ct --record --parallel && cd ..",
32
+ "test:build": "node build/script.build.js js api && node build/script.build.js js transforms",
33
+ "test:component": "yarn test:build && cd ./dev && cypress open-ct && cd ..",
34
+ "test:component:run": "yarn test:build && cd ./dev && cypress run-ct && cd ..",
35
+ "test:component:ci": "yarn test:build && cd ./dev && cypress run-ct --record --parallel && cd ..",
34
36
  "test:create": "node ./test/cypress/helpers/create-spec.js -c"
35
37
  },
36
38
  "repository": {
@@ -0,0 +1,107 @@
1
+ import { mount } from '@cypress/vue'
2
+ import QBanner from '../QBanner.js'
3
+
4
+ describe('Banner API', () => {
5
+ describe('Props', () => {
6
+ describe('Category: content', () => {
7
+ describe('(prop): inline-actions', () => {
8
+ it('should render the actions in the same row as the content', () => {
9
+ mount(QBanner, {
10
+ slots: {
11
+ default: 'Banner content',
12
+ action: 'Banner action'
13
+ },
14
+ props: {
15
+ inlineActions: true
16
+ }
17
+ })
18
+
19
+ cy.get('.q-banner').get('.q-banner__actions')
20
+ .should('have.class', 'col-auto')
21
+ })
22
+ })
23
+ })
24
+
25
+ describe('Category: style', () => {
26
+ describe('(prop): dense', () => {
27
+ it('should have a dense style when "dense" prop is true', () => {
28
+ mount(QBanner, {
29
+ props: {
30
+ dense: true
31
+ }
32
+
33
+ })
34
+ cy.get('.q-banner')
35
+ .should('have.class', 'q-banner--dense')
36
+ })
37
+ })
38
+
39
+ describe('(prop): rounded', () => {
40
+ it('should have a rounded style when "rounded" prop is true', () => {
41
+ mount(QBanner, {
42
+ props: {
43
+ rounded: true
44
+ }
45
+ })
46
+
47
+ cy.get('.q-banner')
48
+ .should('have.class', 'rounded-borders')
49
+ })
50
+ })
51
+
52
+ describe('(prop): dark', () => {
53
+ it('should have a dark style when "dark" prop is true', () => {
54
+ mount(QBanner, {
55
+ props: {
56
+ dark: true
57
+ }
58
+ })
59
+
60
+ cy.get('.q-banner')
61
+ .should('have.class', 'q-banner--dark')
62
+ })
63
+ })
64
+ })
65
+ })
66
+
67
+ describe('Slots', () => {
68
+ describe('(slot): default', () => {
69
+ it('should render the default content', () => {
70
+ mount(QBanner, {
71
+ slots: {
72
+ default: 'Banner content'
73
+ }
74
+ })
75
+
76
+ cy.get('.q-banner').get('.q-banner__content')
77
+ .should('contain', 'Banner content')
78
+ })
79
+ })
80
+
81
+ describe('(slot): avatar', () => {
82
+ it('should render the avatar content', () => {
83
+ mount(QBanner, {
84
+ slots: {
85
+ avatar: 'Banner avatar'
86
+ }
87
+ })
88
+
89
+ cy.get('.q-banner').get('.q-banner__avatar')
90
+ .should('contain', 'Banner avatar')
91
+ })
92
+ })
93
+
94
+ describe('(slot): action', () => {
95
+ it('should render the action content', () => {
96
+ mount(QBanner, {
97
+ slots: {
98
+ action: 'Banner action'
99
+ }
100
+ })
101
+
102
+ cy.get('.q-banner').get('.q-banner__actions')
103
+ .should('contain', 'Banner action')
104
+ })
105
+ })
106
+ })
107
+ })
@@ -0,0 +1,46 @@
1
+ import { mount } from '@cypress/vue'
2
+ import QBar from '../QBar.js'
3
+
4
+ describe('Bar API', () => {
5
+ describe('Props', () => {
6
+ describe('Category: style', () => {
7
+ describe('(prop): dense', () => {
8
+ it('should have a dense style when "dense" prop is true', () => {
9
+ mount(QBar, {
10
+ propsData: {
11
+ dense: true
12
+ }
13
+ })
14
+ cy.get('.q-bar')
15
+ .should('have.class', 'q-bar--dense')
16
+ })
17
+ })
18
+
19
+ describe('(prop): dark', () => {
20
+ it('should have a dark style when "dark" prop is true', () => {
21
+ mount(QBar, {
22
+ propsData: {
23
+ dark: true
24
+ }
25
+ })
26
+ cy.get('.q-bar')
27
+ .should('have.class', 'q-bar--dark')
28
+ })
29
+ })
30
+ })
31
+ })
32
+
33
+ describe('Slots', () => {
34
+ describe('(slot): default', () => {
35
+ it('should render the default slot', () => {
36
+ mount(QBar, {
37
+ slots: {
38
+ default: 'default bar slot'
39
+ }
40
+ })
41
+ cy.get('.q-bar')
42
+ .should('contain', 'default bar slot')
43
+ })
44
+ })
45
+ })
46
+ })
@@ -21,20 +21,19 @@ export default createComponent({
21
21
  }
22
22
  },
23
23
 
24
+ emits: [ 'click' ],
25
+
24
26
  setup (props, { slots }) {
25
- const { linkTag, linkProps, linkClass, hasRouterLink, navigateToRouterLink } = useRouterLink()
27
+ const { linkTag, linkAttrs, linkClass, navigateOnClick } = useRouterLink()
26
28
 
27
29
  const data = computed(() => {
28
- const acc = {
30
+ return {
29
31
  class: 'q-breadcrumbs__el q-link '
30
32
  + 'flex inline items-center relative-position '
31
33
  + (props.disable !== true ? 'q-link--focusable' + linkClass.value : 'q-breadcrumbs__el--disable'),
32
- ...linkProps.value
33
- }
34
- if (hasRouterLink.value === true) {
35
- acc.onClick = navigateToRouterLink
34
+ ...linkAttrs.value,
35
+ onClick: navigateOnClick
36
36
  }
37
- return acc
38
37
  })
39
38
 
40
39
  const iconClass = computed(() =>