quasar 2.3.1 → 2.4.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.
Files changed (315) hide show
  1. package/dist/api/AppFullscreen.json +15 -8
  2. package/dist/api/BottomSheet.json +6 -0
  3. package/dist/api/Cookies.json +4 -3
  4. package/dist/api/Dialog.json +24 -10
  5. package/dist/api/Loading.json +0 -2
  6. package/dist/api/LoadingBar.json +8 -3
  7. package/dist/api/Morph.json +14 -7
  8. package/dist/api/Mutation.json +1 -1
  9. package/dist/api/Notify.json +41 -27
  10. package/dist/api/QAjaxBar.json +6 -3
  11. package/dist/api/QBreadcrumbs.json +8 -4
  12. package/dist/api/QBreadcrumbsEl.json +35 -12
  13. package/dist/api/QBtn.json +36 -17
  14. package/dist/api/QBtnDropdown.json +41 -20
  15. package/dist/api/QBtnToggle.json +7 -2
  16. package/dist/api/QCard.json +2 -1
  17. package/dist/api/QCardActions.json +2 -1
  18. package/dist/api/QCardSection.json +2 -1
  19. package/dist/api/QCarousel.json +10 -5
  20. package/dist/api/QCarouselControl.json +4 -2
  21. package/dist/api/QChatMessage.json +0 -4
  22. package/dist/api/QCheckbox.json +8 -4
  23. package/dist/api/QChip.json +2 -1
  24. package/dist/api/QCircularProgress.json +14 -7
  25. package/dist/api/QColor.json +6 -3
  26. package/dist/api/QDate.json +33 -5
  27. package/dist/api/QDialog.json +8 -4
  28. package/dist/api/QDrawer.json +10 -5
  29. package/dist/api/QEditor.json +10 -5
  30. package/dist/api/QExpansionItem.json +36 -13
  31. package/dist/api/QFab.json +41 -6
  32. package/dist/api/QFabAction.json +12 -2
  33. package/dist/api/QField.json +3 -1
  34. package/dist/api/QFile.json +8 -2
  35. package/dist/api/QFooter.json +2 -1
  36. package/dist/api/QForm.json +1 -1
  37. package/dist/api/QHeader.json +4 -2
  38. package/dist/api/QIcon.json +2 -1
  39. package/dist/api/QImg.json +8 -4
  40. package/dist/api/QInfiniteScroll.json +6 -3
  41. package/dist/api/QInnerLoading.json +8 -4
  42. package/dist/api/QInput.json +3 -1
  43. package/dist/api/QIntersection.json +4 -2
  44. package/dist/api/QItem.json +33 -11
  45. package/dist/api/QKnob.json +8 -4
  46. package/dist/api/QLayout.json +9 -1
  47. package/dist/api/QLinearProgress.json +4 -2
  48. package/dist/api/QMarkupTable.json +2 -1
  49. package/dist/api/QMenu.json +8 -4
  50. package/dist/api/QNoSsr.json +2 -1
  51. package/dist/api/QOptionGroup.json +76 -5
  52. package/dist/api/QPage.json +2 -1
  53. package/dist/api/QPageScroller.json +8 -4
  54. package/dist/api/QPageSticky.json +2 -1
  55. package/dist/api/QPagination.json +10 -6
  56. package/dist/api/QParallax.json +2 -1
  57. package/dist/api/QPopupEdit.json +5 -2
  58. package/dist/api/QPopupProxy.json +7 -4
  59. package/dist/api/QRange.json +600 -111
  60. package/dist/api/QRating.json +5 -2
  61. package/dist/api/QResizeObserver.json +4 -1
  62. package/dist/api/QRouteTab.json +35 -13
  63. package/dist/api/QScrollArea.json +29 -6
  64. package/dist/api/QScrollObserver.json +13 -1
  65. package/dist/api/QSelect.json +76 -47
  66. package/dist/api/QSeparator.json +2 -1
  67. package/dist/api/QSkeleton.json +8 -4
  68. package/dist/api/QSlideItem.json +9 -0
  69. package/dist/api/QSlideTransition.json +2 -1
  70. package/dist/api/QSlider.json +512 -43
  71. package/dist/api/QSpinner.json +2 -1
  72. package/dist/api/QSplitter.json +4 -2
  73. package/dist/api/QStep.json +2 -1
  74. package/dist/api/QStepper.json +6 -3
  75. package/dist/api/QTab.json +4 -2
  76. package/dist/api/QTabPanels.json +6 -3
  77. package/dist/api/QTable.json +154 -88
  78. package/dist/api/QTabs.json +4 -2
  79. package/dist/api/QTime.json +16 -4
  80. package/dist/api/QTimeline.json +4 -2
  81. package/dist/api/QTimelineEntry.json +4 -2
  82. package/dist/api/QToggle.json +8 -4
  83. package/dist/api/QTooltip.json +18 -9
  84. package/dist/api/QTree.json +34 -19
  85. package/dist/api/QUploader.json +28 -6
  86. package/dist/api/QVirtualScroll.json +26 -11
  87. package/dist/api/ScrollFire.json +1 -1
  88. package/dist/api/TouchHold.json +2 -1
  89. package/dist/api/TouchRepeat.json +2 -1
  90. package/dist/api/TouchSwipe.json +2 -1
  91. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  92. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  93. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  94. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  95. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  96. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  97. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  98. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  99. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  100. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  101. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  102. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  103. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  104. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  105. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  106. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  107. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  108. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  109. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  110. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +6 -0
  111. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  112. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  113. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  114. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  115. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  116. package/dist/icon-set/svg-mdi-v4.umd.prod.js +1 -1
  117. package/dist/icon-set/svg-mdi-v5.umd.prod.js +1 -1
  118. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  119. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  120. package/dist/icon-set/themify.umd.prod.js +1 -1
  121. package/dist/lang/ar.umd.prod.js +1 -1
  122. package/dist/lang/az-Latn.umd.prod.js +1 -1
  123. package/dist/lang/bg.umd.prod.js +1 -1
  124. package/dist/lang/bn.umd.prod.js +1 -1
  125. package/dist/lang/ca.umd.prod.js +1 -1
  126. package/dist/lang/cs.umd.prod.js +1 -1
  127. package/dist/lang/da.umd.prod.js +1 -1
  128. package/dist/lang/de.umd.prod.js +1 -1
  129. package/dist/lang/el.umd.prod.js +1 -1
  130. package/dist/lang/en-GB.umd.prod.js +1 -1
  131. package/dist/lang/en-US.umd.prod.js +1 -1
  132. package/dist/lang/eo.umd.prod.js +1 -1
  133. package/dist/lang/es.umd.prod.js +1 -1
  134. package/dist/lang/et.umd.prod.js +1 -1
  135. package/dist/lang/fa-IR.umd.prod.js +1 -1
  136. package/dist/lang/fa.umd.prod.js +1 -1
  137. package/dist/lang/fi.umd.prod.js +1 -1
  138. package/dist/lang/fr.umd.prod.js +1 -1
  139. package/dist/lang/gn.umd.prod.js +1 -1
  140. package/dist/lang/he.umd.prod.js +1 -1
  141. package/dist/lang/hr.umd.prod.js +1 -1
  142. package/dist/lang/hu.umd.prod.js +1 -1
  143. package/dist/lang/id.umd.prod.js +1 -1
  144. package/dist/lang/is.umd.prod.js +1 -1
  145. package/dist/lang/it.umd.prod.js +1 -1
  146. package/dist/lang/ja.umd.prod.js +1 -1
  147. package/dist/lang/km.umd.prod.js +1 -1
  148. package/dist/lang/ko-KR.umd.prod.js +1 -1
  149. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  150. package/dist/lang/lt.umd.prod.js +1 -1
  151. package/dist/lang/lu.umd.prod.js +1 -1
  152. package/dist/lang/lv.umd.prod.js +1 -1
  153. package/dist/lang/ml.umd.prod.js +1 -1
  154. package/dist/lang/ms.umd.prod.js +1 -1
  155. package/dist/lang/nb-NO.umd.prod.js +1 -1
  156. package/dist/lang/nl.umd.prod.js +1 -1
  157. package/dist/lang/pl.umd.prod.js +1 -1
  158. package/dist/lang/pt-BR.umd.prod.js +1 -1
  159. package/dist/lang/pt.umd.prod.js +1 -1
  160. package/dist/lang/ro.umd.prod.js +1 -1
  161. package/dist/lang/ru.umd.prod.js +1 -1
  162. package/dist/lang/sk.umd.prod.js +1 -1
  163. package/dist/lang/sl.umd.prod.js +1 -1
  164. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  165. package/dist/lang/sr.umd.prod.js +1 -1
  166. package/dist/lang/sv.umd.prod.js +1 -1
  167. package/dist/lang/ta.umd.prod.js +1 -1
  168. package/dist/lang/th.umd.prod.js +1 -1
  169. package/dist/lang/tr.umd.prod.js +1 -1
  170. package/dist/lang/ug.umd.prod.js +1 -1
  171. package/dist/lang/uk.umd.prod.js +1 -1
  172. package/dist/lang/vi.umd.prod.js +1 -1
  173. package/dist/lang/zh-CN.umd.prod.js +1 -1
  174. package/dist/lang/zh-TW.umd.prod.js +1 -1
  175. package/dist/quasar.cjs.prod.js +2 -2
  176. package/dist/quasar.css +268 -184
  177. package/dist/quasar.esm.prod.js +2 -2
  178. package/dist/quasar.prod.css +1 -1
  179. package/dist/quasar.rtl.css +340 -263
  180. package/dist/quasar.rtl.prod.css +1 -1
  181. package/dist/quasar.sass +272 -212
  182. package/dist/quasar.umd.js +16532 -16216
  183. package/dist/quasar.umd.prod.js +2 -2
  184. package/dist/ssr-directives/Morph.js +1 -1
  185. package/dist/transforms/loader-asset-urls.json +20 -0
  186. package/dist/types/api/cookies.d.ts +1 -1
  187. package/dist/types/api/slider.d.ts +46 -0
  188. package/dist/types/api/validation.d.ts +4 -0
  189. package/dist/types/api.d.ts +2 -0
  190. package/dist/types/composables.d.ts +7 -3
  191. package/dist/types/extras/icon-set.d.ts +1 -0
  192. package/dist/types/index.d.ts +759 -177
  193. package/dist/vetur/quasar-attributes.json +251 -83
  194. package/dist/vetur/quasar-tags.json +59 -17
  195. package/dist/web-types/web-types.json +587 -155
  196. package/icon-set/svg-ionicons-v6.js +225 -0
  197. package/package.json +2 -2
  198. package/src/api.extends.json +0 -1
  199. package/src/components/breadcrumbs/QBreadcrumbs.js +7 -2
  200. package/src/components/breadcrumbs/QBreadcrumbs.sass +0 -3
  201. package/src/components/breadcrumbs/QBreadcrumbsEl.js +14 -8
  202. package/src/components/btn/QBtn.js +6 -5
  203. package/src/components/btn/use-btn.js +21 -21
  204. package/src/components/btn/use-btn.json +22 -13
  205. package/src/components/btn-dropdown/QBtnDropdown.json +1 -0
  206. package/src/components/btn-toggle/QBtnToggle.json +3 -0
  207. package/src/components/checkbox/use-checkbox.js +1 -1
  208. package/src/components/chip/QChip.json +1 -2
  209. package/src/components/color/QColor.js +32 -26
  210. package/src/components/color/QColor.sass +10 -23
  211. package/src/components/date/QDate.json +25 -1
  212. package/src/components/date/QDate.sass +2 -0
  213. package/src/components/drawer/QDrawer.js +18 -15
  214. package/src/components/editor/QEditor.js +3 -3
  215. package/src/components/editor/QEditor.sass +10 -1
  216. package/src/components/expansion-item/QExpansionItem.js +4 -1
  217. package/src/components/expansion-item/QExpansionItem.json +2 -1
  218. package/src/components/fab/QFab.js +18 -12
  219. package/src/components/fab/QFab.json +36 -1
  220. package/src/components/fab/QFab.sass +1 -1
  221. package/src/components/fab/QFabAction.js +14 -7
  222. package/src/components/fab/QFabAction.json +10 -0
  223. package/src/components/field/QField.json +3 -3
  224. package/src/components/file/QFile.js +12 -5
  225. package/src/components/file/QFile.json +9 -6
  226. package/src/components/file/QFile.sass +4 -2
  227. package/src/components/footer/QFooter.js +1 -1
  228. package/src/components/form/QForm.json +2 -3
  229. package/src/components/header/QHeader.js +1 -1
  230. package/src/components/icon/QIcon.js +2 -2
  231. package/src/components/infinite-scroll/QInfiniteScroll.js +4 -5
  232. package/src/components/item/QItem.js +2 -3
  233. package/src/components/layout/QLayout.json +8 -1
  234. package/src/components/linear-progress/QLinearProgress.js +3 -2
  235. package/src/components/linear-progress/QLinearProgress.sass +1 -1
  236. package/src/components/option-group/QOptionGroup.js +3 -0
  237. package/src/components/option-group/QOptionGroup.json +48 -2
  238. package/src/components/pagination/QPagination.json +0 -1
  239. package/src/components/parallax/QParallax.js +4 -2
  240. package/src/components/popup-edit/QPopupEdit.js +2 -5
  241. package/src/components/popup-edit/QPopupEdit.json +1 -0
  242. package/src/components/popup-proxy/QPopupProxy.json +2 -1
  243. package/src/components/radio/QRadio.js +2 -7
  244. package/src/components/range/QRange.js +103 -222
  245. package/src/components/range/QRange.json +11 -121
  246. package/src/components/rating/QRating.json +1 -1
  247. package/src/components/resize-observer/QResizeObserver.json +2 -0
  248. package/src/components/scroll-area/QScrollArea.js +11 -14
  249. package/src/components/scroll-area/QScrollArea.json +29 -9
  250. package/src/components/scroll-observer/QScrollObserver.json +11 -0
  251. package/src/components/select/QSelect.js +1 -1
  252. package/src/components/select/QSelect.json +41 -15
  253. package/src/components/slide-item/QSlideItem.json +9 -0
  254. package/src/components/slider/QSlider.js +46 -132
  255. package/src/components/slider/QSlider.json +1 -121
  256. package/src/components/slider/QSlider.sass +198 -132
  257. package/src/components/slider/use-slider.js +453 -109
  258. package/src/components/slider/use-slider.json +546 -0
  259. package/src/components/stepper/QStepper.js +3 -3
  260. package/src/components/stepper/QStepper.sass +24 -26
  261. package/src/components/table/QTable.js +27 -47
  262. package/src/components/table/QTable.json +104 -55
  263. package/src/components/table/table-pagination.js +4 -0
  264. package/src/components/tabs/QRouteTab.js +1 -2
  265. package/src/components/tabs/QRouteTab.json +0 -7
  266. package/src/components/tabs/QTabs.js +71 -20
  267. package/src/components/tabs/use-tab.js +26 -13
  268. package/src/components/time/QTime.json +8 -0
  269. package/src/components/tree/QTree.js +14 -12
  270. package/src/components/tree/QTree.json +26 -21
  271. package/src/components/tree/QTree.sass +45 -41
  272. package/src/components/uploader/QUploader.json +14 -2
  273. package/src/components/uploader/uploader-core.js +16 -9
  274. package/src/components/uploader/xhr-uploader-plugin.json +8 -3
  275. package/src/components/virtual-scroll/QVirtualScroll.json +15 -0
  276. package/src/components/virtual-scroll/QVirtualScroll.sass +1 -0
  277. package/src/components/virtual-scroll/use-virtual-scroll.js +30 -17
  278. package/src/components/virtual-scroll/use-virtual-scroll.json +7 -5
  279. package/src/composables/private/use-field.js +7 -7
  280. package/src/composables/private/use-file.js +20 -5
  281. package/src/composables/private/use-form.js +2 -3
  282. package/src/composables/private/use-fullscreen.js +15 -4
  283. package/src/composables/private/use-router-link.js +44 -23
  284. package/src/composables/private/use-router-link.json +26 -10
  285. package/src/composables/private/use-split-attrs.js +12 -9
  286. package/src/composables/private/use-validate.js +21 -15
  287. package/src/composables/private/use-validate.json +1 -0
  288. package/src/composables/use-dialog-plugin-component.js +1 -0
  289. package/src/css/core/helpers.sass +3 -0
  290. package/src/css/core/positioning.sass +5 -0
  291. package/src/directives/Mutation.json +2 -3
  292. package/src/directives/ScrollFire.js +1 -0
  293. package/src/directives/ScrollFire.json +2 -3
  294. package/src/icon-set.js +2 -4
  295. package/src/plugins/AppFullscreen.js +70 -53
  296. package/src/plugins/AppFullscreen.json +8 -8
  297. package/src/plugins/AppVisibility.js +2 -3
  298. package/src/plugins/BottomSheet.js +3 -5
  299. package/src/plugins/Cookies.json +2 -2
  300. package/src/plugins/Dialog.js +3 -5
  301. package/src/plugins/Dialog.json +6 -5
  302. package/src/plugins/LoadingBar.js +17 -18
  303. package/src/plugins/LoadingBar.json +4 -3
  304. package/src/plugins/Notify.js +296 -295
  305. package/src/plugins/Notify.json +13 -19
  306. package/src/plugins/Platform.js +14 -14
  307. package/src/utils/date.js +4 -4
  308. package/src/utils/dom.js +2 -2
  309. package/src/utils/open-url.js +2 -2
  310. package/src/utils/patterns.js +1 -0
  311. package/src/utils/private/define-reactive-plugin.js +10 -8
  312. package/src/utils/private/global-dialog.js +6 -8
  313. package/src/utils/private/global-dialog.json +6 -0
  314. package/src/utils/private/inject-obj-prop.js +13 -0
  315. package/src/utils/private/is.js +2 -2
@@ -97,47 +97,34 @@
97
97
  border-radius: 50%
98
98
  transform: translate(-5px, -5px)
99
99
 
100
- &__hue .q-slider__track-container
100
+ &__hue .q-slider__track
101
101
  background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%) !important // @stylint ignore
102
102
  opacity: 1
103
103
 
104
- &__alpha .q-slider__track-container
105
- color: #fff
106
- opacity: 1
107
- height: 8px
108
- background-color: #fff !important
109
- background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==') !important
110
- &:after
104
+ &__alpha
105
+ .q-slider__track-container
106
+ padding-top: 0
107
+ .q-slider__track:before
111
108
  content: ''
112
109
  position: absolute
113
110
  top: 0
114
111
  right: 0
115
112
  bottom: 0
116
113
  left: 0
114
+ border-radius: inherit
117
115
  background: linear-gradient(90deg, rgba(255,255,255,0), $grey-7)
118
116
 
119
117
  &__sliders
120
- padding: 4px 16px 16px
121
-
122
- .q-slider__track-container
123
- height: 10px
124
- margin-top: -5px
125
-
126
- .q-slider__track
127
- display: none
118
+ padding: 0 16px
128
119
 
129
120
  .q-slider__thumb
121
+ color: $grey-9
130
122
  path
131
123
  stroke-width: 2px
132
124
  fill: transparent
133
125
  .q-slider--active path
134
126
  stroke-width: 3px
135
127
 
136
- .q-slider
137
- height: 16px
138
- margin-top: 8px
139
- color: $grey-9
140
-
141
128
  /* Tune Tab */
142
129
 
143
130
  &__tune-tab
@@ -188,5 +175,5 @@
188
175
  .q-color-picker__tune-tab input
189
176
  border: 1px solid rgba(#fff, .3)
190
177
 
191
- .q-slider
192
- color: $grey-5
178
+ .q-slider__thumb
179
+ color: $grey-1
@@ -209,35 +209,42 @@
209
209
  "definition": {
210
210
  "year": {
211
211
  "type": "Number",
212
+ "required": true,
212
213
  "desc": "The year of the date that the user has clicked/tapped on",
213
214
  "__exemption": [ "examples" ]
214
215
  },
215
216
  "month": {
216
217
  "type": "Number",
218
+ "required": true,
217
219
  "desc": "The month of the date that the user has clicked/tapped on",
218
220
  "__exemption": [ "examples" ]
219
221
  },
220
222
  "day": {
221
223
  "type": "Number",
224
+ "required": true,
222
225
  "desc": "The day of the month that the user has clicked/tapped on",
223
226
  "__exemption": [ "examples" ]
224
227
  },
225
228
  "from": {
226
229
  "type": "Object",
230
+ "required": false,
227
231
  "desc": "Object of properties of the range starting point (only if range)",
228
232
  "definition": {
229
233
  "year": {
230
234
  "type": "Number",
235
+ "required": true,
231
236
  "desc": "The year",
232
237
  "__exemption": [ "examples" ]
233
238
  },
234
239
  "month": {
235
240
  "type": "Number",
241
+ "required": true,
236
242
  "desc": "The month",
237
243
  "__exemption": [ "examples" ]
238
244
  },
239
245
  "day": {
240
246
  "type": "Number",
247
+ "required": true,
241
248
  "desc": "The day of month",
242
249
  "__exemption": [ "examples" ]
243
250
  }
@@ -245,20 +252,24 @@
245
252
  },
246
253
  "to": {
247
254
  "type": "Object",
255
+ "required": false,
248
256
  "desc": "Object of properties of the range ending point (only if range)",
249
257
  "definition": {
250
258
  "year": {
251
259
  "type": "Number",
260
+ "required": true,
252
261
  "desc": "The year",
253
262
  "__exemption": [ "examples" ]
254
263
  },
255
264
  "month": {
256
265
  "type": "Number",
266
+ "required": true,
257
267
  "desc": "The month",
258
268
  "__exemption": [ "examples" ]
259
269
  },
260
270
  "day": {
261
271
  "type": "Number",
272
+ "required": true,
262
273
  "desc": "The day of month",
263
274
  "__exemption": [ "examples" ]
264
275
  }
@@ -278,11 +289,13 @@
278
289
  "definition": {
279
290
  "year": {
280
291
  "type": "Number",
292
+ "required": true,
281
293
  "desc": "The year",
282
294
  "__exemption": [ "examples" ]
283
295
  },
284
296
  "month": {
285
297
  "type": "Number",
298
+ "required": true,
286
299
  "desc": "The month",
287
300
  "__exemption": [ "examples" ]
288
301
  }
@@ -300,16 +313,19 @@
300
313
  "definition": {
301
314
  "year": {
302
315
  "type": "Number",
316
+ "required": true,
303
317
  "desc": "The year",
304
318
  "__exemption": [ "examples" ]
305
319
  },
306
320
  "month": {
307
321
  "type": "Number",
322
+ "required": true,
308
323
  "desc": "The month",
309
324
  "__exemption": [ "examples" ]
310
325
  },
311
326
  "day": {
312
327
  "type": "Number",
328
+ "required": true,
313
329
  "desc": "The day of month",
314
330
  "__exemption": [ "examples" ]
315
331
  }
@@ -327,20 +343,24 @@
327
343
  "definition": {
328
344
  "from": {
329
345
  "type": "Object",
346
+ "required": true,
330
347
  "desc": "Definition of date from where the range begins",
331
348
  "definition": {
332
349
  "year": {
333
350
  "type": "Number",
351
+ "required": true,
334
352
  "desc": "The year",
335
353
  "__exemption": [ "examples" ]
336
354
  },
337
355
  "month": {
338
356
  "type": "Number",
357
+ "required": true,
339
358
  "desc": "The month",
340
359
  "__exemption": [ "examples" ]
341
360
  },
342
361
  "day": {
343
362
  "type": "Number",
363
+ "required": true,
344
364
  "desc": "The day of month",
345
365
  "__exemption": [ "examples" ]
346
366
  }
@@ -348,20 +368,24 @@
348
368
  },
349
369
  "to": {
350
370
  "type": "Object",
371
+ "required": true,
351
372
  "desc": "Definition of date to where the range ends",
352
373
  "definition": {
353
374
  "year": {
354
375
  "type": "Number",
376
+ "required": true,
355
377
  "desc": "The year",
356
378
  "__exemption": [ "examples" ]
357
379
  },
358
380
  "month": {
359
381
  "type": "Number",
382
+ "required": true,
360
383
  "desc": "The month",
361
384
  "__exemption": [ "examples" ]
362
385
  },
363
386
  "day": {
364
387
  "type": "Number",
388
+ "required": true,
365
389
  "desc": "The day of month",
366
390
  "__exemption": [ "examples" ]
367
391
  }
@@ -383,8 +407,8 @@
383
407
  "params": {
384
408
  "view": {
385
409
  "type": "String",
386
- "desc": "QDate view name",
387
410
  "required": true,
411
+ "desc": "QDate view name",
388
412
  "values": [ "Calendar", "Months", "Years" ]
389
413
  }
390
414
  }
@@ -95,6 +95,8 @@
95
95
  > div
96
96
  line-height: 30px
97
97
  text-align: center
98
+ > button
99
+ line-height: 22px
98
100
 
99
101
  &--out
100
102
  opacity: .18
@@ -330,6 +330,13 @@ export default createComponent({
330
330
  ] ]
331
331
  })
332
332
 
333
+ function updateBelowBreakpoint () {
334
+ updateLocal(belowBreakpoint, (
335
+ props.behavior === 'mobile'
336
+ || (props.behavior !== 'desktop' && $layout.totalWidth.value <= props.breakpoint)
337
+ ))
338
+ }
339
+
333
340
  watch(belowBreakpoint, val => {
334
341
  if (val === true) { // from lg to xs
335
342
  lastDesktopState = showing.value
@@ -351,13 +358,6 @@ export default createComponent({
351
358
  }
352
359
  })
353
360
 
354
- watch($layout.totalWidth, val => {
355
- updateLocal(belowBreakpoint, (
356
- props.behavior === 'mobile'
357
- || (props.behavior !== 'desktop' && val <= props.breakpoint)
358
- ))
359
- })
360
-
361
361
  watch(() => props.side, (newSide, oldSide) => {
362
362
  if ($layout.instances[ oldSide ] === instance) {
363
363
  $layout.instances[ oldSide ] = void 0
@@ -371,10 +371,20 @@ export default createComponent({
371
371
  $layout[ newSide ].offset = offset.value
372
372
  })
373
373
 
374
- watch(() => props.behavior + props.breakpoint, updateBelowBreakpoint)
374
+ watch($layout.totalWidth, () => {
375
+ if ($layout.isContainer.value === true || document.qScrollPrevented !== true) {
376
+ updateBelowBreakpoint()
377
+ }
378
+ })
379
+
380
+ watch(
381
+ () => props.behavior + props.breakpoint,
382
+ updateBelowBreakpoint
383
+ )
375
384
 
376
385
  watch($layout.isContainer, val => {
377
386
  showing.value === true && preventBodyScroll(val !== true)
387
+ val === true && updateBelowBreakpoint()
378
388
  })
379
389
 
380
390
  watch($layout.scrollbarWidth, () => {
@@ -430,13 +440,6 @@ export default createComponent({
430
440
  }
431
441
  }
432
442
 
433
- function updateBelowBreakpoint () {
434
- updateLocal(belowBreakpoint, (
435
- props.behavior === 'mobile'
436
- || (props.behavior !== 'desktop' && $layout.totalWidth.value <= props.breakpoint)
437
- ))
438
- }
439
-
440
443
  function applyBackdrop (x) {
441
444
  flagBackdropBg.value = x
442
445
  }
@@ -80,12 +80,12 @@ export default createComponent({
80
80
  ],
81
81
 
82
82
  setup (props, { slots, emit, attrs }) {
83
- const { proxy } = getCurrentInstance()
83
+ const { proxy, vnode } = getCurrentInstance()
84
84
  const { $q } = proxy
85
85
 
86
86
  const isDark = useDark(props, $q)
87
87
  const { inFullscreen, toggleFullscreen } = useFullscreen()
88
- const splitAttrs = useSplitAttrs(attrs)
88
+ const splitAttrs = useSplitAttrs(attrs, vnode)
89
89
 
90
90
  const rootRef = ref(null)
91
91
  const contentRef = ref(null)
@@ -502,7 +502,7 @@ export default createComponent({
502
502
  return h('div', {
503
503
  ref: rootRef,
504
504
  class: classes.value,
505
- style: { height: inFullscreen.value === true ? '100vh' : null },
505
+ style: { height: inFullscreen.value === true ? '100%' : null },
506
506
  ...attributes.value,
507
507
  onFocusin,
508
508
  onFocusout
@@ -6,7 +6,9 @@
6
6
  &.disabled
7
7
  border-style: dashed
8
8
 
9
- > div:first-child, &__toolbars-container, &__toolbars-container > div:first-child
9
+ > div:first-child,
10
+ &__toolbars-container,
11
+ &__toolbars-container > div:first-child
10
12
  border-top-left-radius: inherit
11
13
  border-top-right-radius: inherit
12
14
 
@@ -17,14 +19,18 @@
17
19
  border-bottom-left-radius: inherit
18
20
  border-bottom-right-radius: inherit
19
21
  overflow: auto
22
+ max-width: 100%
23
+
20
24
  pre
21
25
  white-space: pre-wrap
26
+
22
27
  hr
23
28
  border: 0
24
29
  outline: 0
25
30
  margin: 1px
26
31
  height: 1px
27
32
  background: $editor-hr-color
33
+
28
34
  &:empty:not(:focus):before
29
35
  content: attr(placeholder)
30
36
  opacity: .7
@@ -33,6 +39,9 @@
33
39
  border-bottom: 1px solid $editor-border-color
34
40
  min-height: 32px
35
41
 
42
+ &__toolbars-container
43
+ max-width: 100%
44
+
36
45
  .q-btn
37
46
  margin: $editor-button-gutter
38
47
 
@@ -96,7 +96,10 @@ export default createComponent({
96
96
  })
97
97
 
98
98
  const hasLink = computed(() =>
99
- props.disable !== true && props.to !== void 0 && props.to !== null && props.to !== ''
99
+ props.disable !== true && (
100
+ props.href !== void 0
101
+ || (props.to !== void 0 && props.to !== null && props.to !== '')
102
+ )
100
103
  )
101
104
 
102
105
  const linkProps = computed(() => {
@@ -7,8 +7,9 @@
7
7
 
8
8
  "props": {
9
9
  "model-value": {
10
+ "extends": "model-value",
10
11
  "desc": "Model of the component defining 'open' state; Either use this property (along with a listener for 'update:modelValue' event) OR use v-model directive",
11
- "category": "model"
12
+ "required": false
12
13
  },
13
14
 
14
15
  "icon": {
@@ -59,6 +59,8 @@ export default createComponent({
59
59
  hideOnRouteChange
60
60
  })
61
61
 
62
+ const slotScope = computed(() => ({ opened: showing.value }))
63
+
62
64
  const classes = computed(() =>
63
65
  'q-fab z-fab row inline justify-center'
64
66
  + ` q-fab--align-${ props.verticalActionsAlign } ${ formClass.value }`
@@ -76,26 +78,30 @@ export default createComponent({
76
78
  + ` q-fab__icon-holder--${ showing.value === true ? 'opened' : 'closed' }`
77
79
  )
78
80
 
81
+ function getIcon (kebab, camel) {
82
+ const slotFn = slots[ kebab ]
83
+ const classes = `q-fab__${ kebab } absolute-full`
84
+
85
+ return slotFn === void 0
86
+ ? h(QIcon, { class: classes, name: props[ kebab ] || $q.iconSet.fab[ camel ] })
87
+ : h('div', { class: classes }, slotFn(slotScope.value))
88
+ }
89
+
79
90
  function getTriggerContent () {
80
91
  const child = []
81
92
 
82
93
  props.hideIcon !== true && child.push(
83
94
  h('div', { class: iconHolderClass.value }, [
84
- h(QIcon, {
85
- class: 'q-fab__icon absolute-full',
86
- name: props.icon || $q.iconSet.fab.icon
87
- }),
88
-
89
- h(QIcon, {
90
- class: 'q-fab__active-icon absolute-full',
91
- name: props.activeIcon || $q.iconSet.fab.activeIcon
92
- })
95
+ getIcon('icon', 'icon'),
96
+ getIcon('active-icon', 'activeIcon')
93
97
  ])
94
98
  )
95
99
 
96
- props.label !== '' && child[ labelProps.value.action ](
97
- h('div', labelProps.value.data, [ props.label ])
98
- )
100
+ if (props.label !== '' || slots.label !== void 0) {
101
+ child[ labelProps.value.action ](
102
+ h('div', labelProps.value.data, slots.label !== void 0 ? slots.label(slotScope.value) : [ props.label ])
103
+ )
104
+ }
99
105
 
100
106
  return hMergeSlot(slots.tooltip, child)
101
107
  }
@@ -3,8 +3,10 @@
3
3
 
4
4
  "props": {
5
5
  "model-value": {
6
+ "extends": "model-value",
6
7
  "desc": "Controls state of fab actions (showing/hidden); Works best with v-model directive, otherwise use along listening to 'update:modelValue' event",
7
- "category": "model"
8
+ "category": "model",
9
+ "required": false
8
10
  },
9
11
 
10
12
  "icon": {
@@ -52,6 +54,39 @@
52
54
 
53
55
  "tooltip": {
54
56
  "desc": "Slot specifically designed for a QTooltip"
57
+ },
58
+
59
+ "icon": {
60
+ "desc": "Slot for icon shown when FAB is closed; Suggestion: QIcon",
61
+ "scope": {
62
+ "opened": {
63
+ "type": "Boolean",
64
+ "desc": "FAB is opened"
65
+ }
66
+ },
67
+ "addedIn": "v2.4"
68
+ },
69
+
70
+ "active-icon": {
71
+ "desc": "Slot for icon shown when FAB is opened; Suggestion: QIcon",
72
+ "scope": {
73
+ "opened": {
74
+ "type": "Boolean",
75
+ "desc": "FAB is opened"
76
+ }
77
+ },
78
+ "addedIn": "v2.4"
79
+ },
80
+
81
+ "label": {
82
+ "desc": "Slot for label",
83
+ "scope": {
84
+ "opened": {
85
+ "type": "Boolean",
86
+ "desc": "FAB is opened"
87
+ }
88
+ },
89
+ "addedIn": "v2.4"
55
90
  }
56
91
  },
57
92
 
@@ -134,7 +134,7 @@
134
134
  &--up, &--down
135
135
  left: 50%
136
136
  margin-left: -28px
137
-
137
+
138
138
  &--opened
139
139
  opacity: 1
140
140
  transform: scale(1) translate(0, 0)
@@ -66,13 +66,20 @@ export default createComponent({
66
66
  function getContent () {
67
67
  const child = []
68
68
 
69
- props.icon !== '' && child.push(
70
- h(QIcon, { name: props.icon })
71
- )
72
-
73
- props.label !== '' && child[ labelProps.value.action ](
74
- h('div', labelProps.value.data, [ props.label ])
75
- )
69
+ if (slots.icon !== void 0) {
70
+ child.push(slots.icon())
71
+ }
72
+ else if (props.icon !== '') {
73
+ child.push(
74
+ h(QIcon, { name: props.icon })
75
+ )
76
+ }
77
+
78
+ if (props.label !== '' || slots.label !== void 0) {
79
+ child[ labelProps.value.action ](
80
+ h('div', labelProps.value.data, slots.label !== void 0 ? slots.label() : [ props.label ])
81
+ )
82
+ }
76
83
 
77
84
  return hMergeSlot(slots.default, child)
78
85
  }
@@ -35,6 +35,16 @@
35
35
  "slots": {
36
36
  "default": {
37
37
  "desc": "Suggestion for this slot: QTooltip"
38
+ },
39
+
40
+ "icon": {
41
+ "desc": "Slot for icon; Suggestion: QIcon",
42
+ "addedIn": "v2.4"
43
+ },
44
+
45
+ "label": {
46
+ "desc": "Slot for label",
47
+ "addedIn": "v2.4"
38
48
  }
39
49
  },
40
50
 
@@ -30,9 +30,8 @@
30
30
  "examples": [ "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" ]
31
31
  },
32
32
  "field": {
33
- "type": "Object",
34
- "desc": "DOM element of the field",
35
- "__exemption": [ "examples" ]
33
+ "type": "Element",
34
+ "desc": "DOM element of the field"
36
35
  },
37
36
  "editable": {
38
37
  "type": "Boolean",
@@ -57,6 +56,7 @@
57
56
  "params": {
58
57
  "value": {
59
58
  "type": "Any",
59
+ "required": true,
60
60
  "desc": "Value to be emitted",
61
61
  "examples": [ 0, "Changed text" ]
62
62
  }
@@ -9,6 +9,7 @@ import useFileFormDomProps from '../../composables/private/use-file-dom-props.js
9
9
 
10
10
  import { createComponent } from '../../utils/private/create.js'
11
11
  import { humanStorageSize } from '../../utils/format.js'
12
+ import { prevent } from '../../utils/event.js'
12
13
 
13
14
  export default createComponent({
14
15
  name: 'QFile',
@@ -122,9 +123,16 @@ export default createComponent({
122
123
  emit('update:modelValue', props.multiple === true ? files : files[ 0 ])
123
124
  }
124
125
 
126
+ function onKeydown (e) {
127
+ // prevent form submit if ENTER is pressed
128
+ e.keyCode === 13 && prevent(e)
129
+ }
130
+
125
131
  function onKeyup (e) {
126
- // only on ENTER
127
- e.keyCode === 13 && pickFiles(e)
132
+ // only on ENTER and SPACE to match native input field
133
+ if (e.keyCode === 13 || e.keyCode === 32) {
134
+ pickFiles(e)
135
+ }
128
136
  }
129
137
 
130
138
  function getFileInput () {
@@ -158,8 +166,7 @@ export default createComponent({
158
166
  return [
159
167
  h('input', {
160
168
  class: [ props.inputClass, 'q-file__filler' ],
161
- style: props.inputStyle,
162
- tabindex: -1
169
+ style: props.inputStyle
163
170
  })
164
171
  ]
165
172
  }
@@ -256,7 +263,7 @@ export default createComponent({
256
263
  }
257
264
 
258
265
  if (state.editable.value === true) {
259
- Object.assign(data, { onDragover, onKeyup })
266
+ Object.assign(data, { onDragover, onKeydown, onKeyup })
260
267
  }
261
268
 
262
269
  return h('div', data, [ getInput() ].concat(getSelection()))
@@ -42,16 +42,19 @@
42
42
  "definition": {
43
43
  "totalSize": {
44
44
  "type": "String",
45
+ "required": true,
45
46
  "desc": "The total size of files in human readable format",
46
47
  "examples": [ "1.42MB" ]
47
48
  },
48
49
  "filesNumber": {
49
50
  "type": "Number",
51
+ "required": true,
50
52
  "desc": "Number of picked files",
51
53
  "examples": [ 5 ]
52
54
  },
53
55
  "maxFiles": {
54
56
  "type": [ "Number", "String" ],
57
+ "required": true,
55
58
  "desc": "Maximum number of files (same as 'max-files' prop, if specified); When 'max-files' is not specified, this has 'void 0' as value",
56
59
  "examples": [ 5 ]
57
60
  }
@@ -111,9 +114,9 @@
111
114
  },
112
115
 
113
116
  "ref": {
114
- "type": "Object",
115
- "desc": "Reference to the QFile component",
116
- "__exemption": [ "examples" ]
117
+ "type": "Component",
118
+ "tsType": "QFile",
119
+ "desc": "Reference to the QFile component"
117
120
  }
118
121
  }
119
122
  },
@@ -128,9 +131,9 @@
128
131
  },
129
132
 
130
133
  "ref": {
131
- "type": "Object",
132
- "desc": "Reference to the QFile component",
133
- "__exemption": [ "examples" ]
134
+ "type": "Component",
135
+ "tsType": "QFile",
136
+ "desc": "Reference to the QFile component"
134
137
  }
135
138
  }
136
139
  }
@@ -11,8 +11,10 @@
11
11
  cursor: pointer
12
12
 
13
13
  &__filler
14
- opacity: 0
15
- pointer-events: none
14
+ visibility: hidden
15
+ width: 100%
16
+ border: none
17
+ padding: 0
16
18
 
17
19
  &__dnd
18
20
  outline: 1px dashed currentColor