quasar 1.16.3 → 1.17.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 (296) hide show
  1. package/dist/api/BottomSheet.json +2 -2
  2. package/dist/api/Loading.json +0 -2
  3. package/dist/api/Notify.json +15 -15
  4. package/dist/api/QAvatar.json +1 -1
  5. package/dist/api/QBreadcrumbsEl.json +32 -11
  6. package/dist/api/QBtn.json +35 -14
  7. package/dist/api/QBtnDropdown.json +36 -15
  8. package/dist/api/QBtnToggle.json +1 -1
  9. package/dist/api/QCarousel.json +7 -7
  10. package/dist/api/QCarouselSlide.json +2 -2
  11. package/dist/api/QChatMessage.json +1 -5
  12. package/dist/api/QChip.json +4 -4
  13. package/dist/api/QColor.json +6 -0
  14. package/dist/api/QDialog.json +7 -1
  15. package/dist/api/QExpansionItem.json +34 -13
  16. package/dist/api/QFab.json +34 -2
  17. package/dist/api/QFabAction.json +9 -1
  18. package/dist/api/QField.json +80 -6
  19. package/dist/api/QFile.json +80 -6
  20. package/dist/api/QImg.json +2 -2
  21. package/dist/api/QInnerLoading.json +32 -0
  22. package/dist/api/QInput.json +82 -6
  23. package/dist/api/QItem.json +31 -10
  24. package/dist/api/QOptionGroup.json +58 -1
  25. package/dist/api/QPagination.json +4 -4
  26. package/dist/api/QParallax.json +1 -1
  27. package/dist/api/QPopupEdit.json +14 -7
  28. package/dist/api/QPullToRefresh.json +1 -1
  29. package/dist/api/QRange.json +581 -96
  30. package/dist/api/QRating.json +3 -3
  31. package/dist/api/QRouteTab.json +32 -12
  32. package/dist/api/QScrollArea.json +188 -20
  33. package/dist/api/QSelect.json +81 -9
  34. package/dist/api/QSeparator.json +1 -1
  35. package/dist/api/QSlider.json +499 -34
  36. package/dist/api/QStep.json +4 -4
  37. package/dist/api/QStepper.json +4 -4
  38. package/dist/api/QTab.json +1 -1
  39. package/dist/api/QTable.json +4 -4
  40. package/dist/api/QTabs.json +9 -0
  41. package/dist/api/QTimelineEntry.json +2 -2
  42. package/dist/api/QToggle.json +1 -1
  43. package/dist/api/QTree.json +7 -1
  44. package/dist/api/QVideo.json +10 -0
  45. package/dist/icon-set/bootstrap-icons.umd.min.js +1 -1
  46. package/dist/icon-set/eva-icons.umd.min.js +1 -1
  47. package/dist/icon-set/fontawesome-v5-pro.umd.min.js +1 -1
  48. package/dist/icon-set/fontawesome-v5.umd.min.js +1 -1
  49. package/dist/icon-set/ionicons-v4.umd.min.js +1 -1
  50. package/dist/icon-set/line-awesome.umd.min.js +1 -1
  51. package/dist/icon-set/material-icons-outlined.umd.min.js +1 -1
  52. package/dist/icon-set/material-icons-round.umd.min.js +1 -1
  53. package/dist/icon-set/material-icons-sharp.umd.min.js +1 -1
  54. package/dist/icon-set/material-icons.umd.min.js +1 -1
  55. package/dist/icon-set/mdi-v3.umd.min.js +1 -1
  56. package/dist/icon-set/mdi-v4.umd.min.js +1 -1
  57. package/dist/icon-set/mdi-v5.umd.min.js +1 -1
  58. package/dist/icon-set/mdi-v6.umd.min.js +1 -1
  59. package/dist/icon-set/svg-bootstrap-icons.umd.min.js +1 -1
  60. package/dist/icon-set/svg-eva-icons.umd.min.js +1 -1
  61. package/dist/icon-set/svg-fontawesome-v5.umd.min.js +1 -1
  62. package/dist/icon-set/svg-ionicons-v4.umd.min.js +1 -1
  63. package/dist/icon-set/svg-ionicons-v5.umd.min.js +1 -1
  64. package/dist/icon-set/svg-ionicons-v6.umd.min.js +6 -0
  65. package/dist/icon-set/svg-line-awesome.umd.min.js +1 -1
  66. package/dist/icon-set/svg-material-icons-outlined.umd.min.js +1 -1
  67. package/dist/icon-set/svg-material-icons-round.umd.min.js +1 -1
  68. package/dist/icon-set/svg-material-icons-sharp.umd.min.js +1 -1
  69. package/dist/icon-set/svg-material-icons.umd.min.js +1 -1
  70. package/dist/icon-set/svg-mdi-v4.umd.min.js +1 -1
  71. package/dist/icon-set/svg-mdi-v5.umd.min.js +1 -1
  72. package/dist/icon-set/svg-mdi-v6.umd.min.js +1 -1
  73. package/dist/icon-set/svg-themify.umd.min.js +1 -1
  74. package/dist/icon-set/themify.umd.min.js +1 -1
  75. package/dist/lang/ar.umd.min.js +2 -2
  76. package/dist/lang/az-latn.umd.min.js +1 -1
  77. package/dist/lang/bg.umd.min.js +1 -1
  78. package/dist/lang/ca.umd.min.js +1 -1
  79. package/dist/lang/cs.umd.min.js +1 -1
  80. package/dist/lang/da.umd.min.js +1 -1
  81. package/dist/lang/de.umd.min.js +1 -1
  82. package/dist/lang/el.umd.min.js +1 -1
  83. package/dist/lang/en-gb.umd.min.js +1 -1
  84. package/dist/lang/en-us.umd.min.js +1 -1
  85. package/dist/lang/eo.umd.min.js +1 -1
  86. package/dist/lang/es.umd.min.js +1 -1
  87. package/dist/lang/et.umd.min.js +1 -1
  88. package/dist/lang/fa-ir.umd.min.js +1 -1
  89. package/dist/lang/fa.umd.min.js +1 -1
  90. package/dist/lang/fi.umd.min.js +1 -1
  91. package/dist/lang/fr.umd.min.js +2 -2
  92. package/dist/lang/gn.umd.min.js +1 -1
  93. package/dist/lang/he.umd.min.js +1 -1
  94. package/dist/lang/hr.umd.min.js +1 -1
  95. package/dist/lang/hu.umd.min.js +1 -1
  96. package/dist/lang/id.umd.min.js +1 -1
  97. package/dist/lang/is.umd.min.js +1 -1
  98. package/dist/lang/it.umd.min.js +1 -1
  99. package/dist/lang/ja.umd.min.js +1 -1
  100. package/dist/lang/km.umd.min.js +1 -1
  101. package/dist/lang/ko-kr.umd.min.js +1 -1
  102. package/dist/lang/kur-ckb.umd.min.js +1 -1
  103. package/dist/lang/lu.umd.min.js +1 -1
  104. package/dist/lang/lv.umd.min.js +1 -1
  105. package/dist/lang/ml.umd.min.js +1 -1
  106. package/dist/lang/ms.umd.min.js +1 -1
  107. package/dist/lang/nb-no.umd.min.js +1 -1
  108. package/dist/lang/nl.umd.min.js +1 -1
  109. package/dist/lang/pl.umd.min.js +1 -1
  110. package/dist/lang/pt-br.umd.min.js +1 -1
  111. package/dist/lang/pt.umd.min.js +1 -1
  112. package/dist/lang/ro.umd.min.js +1 -1
  113. package/dist/lang/ru.umd.min.js +1 -1
  114. package/dist/lang/sk.umd.min.js +1 -1
  115. package/dist/lang/sl.umd.min.js +1 -1
  116. package/dist/lang/sr.umd.min.js +2 -2
  117. package/dist/lang/sv.umd.min.js +1 -1
  118. package/dist/lang/ta.umd.min.js +1 -1
  119. package/dist/lang/th.umd.min.js +1 -1
  120. package/dist/lang/tr.umd.min.js +1 -1
  121. package/dist/lang/ug.umd.min.js +2 -2
  122. package/dist/lang/uk.umd.min.js +1 -1
  123. package/dist/lang/vi.umd.min.js +1 -1
  124. package/dist/lang/zh-hans.umd.min.js +2 -2
  125. package/dist/lang/zh-hant.umd.min.js +2 -2
  126. package/dist/quasar.addon.css +1 -1
  127. package/dist/quasar.addon.rtl.css +1 -1
  128. package/dist/quasar.common.js +2 -2
  129. package/dist/quasar.css +376 -225
  130. package/dist/quasar.esm.js +2 -2
  131. package/dist/quasar.ie.polyfills.js +1 -1
  132. package/dist/quasar.ie.polyfills.umd.min.js +1 -1
  133. package/dist/quasar.min.css +1 -1
  134. package/dist/quasar.rtl.css +508 -301
  135. package/dist/quasar.rtl.min.css +1 -1
  136. package/dist/quasar.sass +324 -208
  137. package/dist/quasar.styl +324 -208
  138. package/dist/quasar.umd.js +3098 -1836
  139. package/dist/quasar.umd.min.js +2 -2
  140. package/dist/quasar.umd.modern.js +3057 -1817
  141. package/dist/quasar.umd.modern.min.js +2 -2
  142. package/dist/transform-asset-urls.json +20 -0
  143. package/dist/types/index.d.ts +421 -103
  144. package/dist/types/utils/scroll.d.ts +1 -0
  145. package/dist/vetur/quasar-attributes.json +313 -89
  146. package/dist/vetur/quasar-tags.json +74 -18
  147. package/dist/web-types/web-types.json +1289 -259
  148. package/icon-set/svg-ionicons-v6.js +225 -0
  149. package/lang/ar.js +1 -1
  150. package/lang/fa-ir.js +3 -1
  151. package/lang/fa.js +3 -1
  152. package/lang/fr.js +1 -1
  153. package/lang/index.json +1 -1
  154. package/lang/kur-ckb.js +2 -2
  155. package/lang/sr.js +4 -4
  156. package/lang/ug.js +48 -46
  157. package/lang/zh-hans.js +1 -1
  158. package/lang/zh-hant.js +18 -18
  159. package/package.json +1 -1
  160. package/src/api.extends.json +1 -2
  161. package/src/components/breadcrumbs/QBreadcrumbs.js +15 -11
  162. package/src/components/breadcrumbs/QBreadcrumbs.sass +0 -3
  163. package/src/components/breadcrumbs/QBreadcrumbs.styl +0 -3
  164. package/src/components/breadcrumbs/QBreadcrumbsEl.js +25 -9
  165. package/src/components/btn/QBtn.js +3 -3
  166. package/src/components/btn-dropdown/QBtnDropdown.sass +2 -0
  167. package/src/components/btn-dropdown/QBtnDropdown.styl +2 -0
  168. package/src/components/carousel/QCarousel.js +6 -2
  169. package/src/components/carousel/QCarousel.json +9 -1
  170. package/src/components/carousel/QCarouselSlide.json +2 -2
  171. package/src/components/chat/QChatMessage.json +1 -1
  172. package/src/components/color/QColor.js +100 -85
  173. package/src/components/color/QColor.json +7 -0
  174. package/src/components/color/QColor.sass +14 -24
  175. package/src/components/color/QColor.styl +14 -24
  176. package/src/components/date/QDate.js +7 -1
  177. package/src/components/date/QDate.sass +2 -0
  178. package/src/components/date/QDate.styl +2 -0
  179. package/src/components/dialog/QDialog.js +8 -4
  180. package/src/components/dialog/QDialog.json +8 -1
  181. package/src/components/drawer/QDrawer.js +16 -15
  182. package/src/components/editor/QEditor.js +2 -2
  183. package/src/components/editor/QEditor.sass +13 -1
  184. package/src/components/editor/QEditor.styl +13 -1
  185. package/src/components/expansion-item/QExpansionItem.js +13 -11
  186. package/src/components/fab/QFab.js +20 -11
  187. package/src/components/fab/QFab.json +35 -0
  188. package/src/components/fab/QFabAction.js +16 -9
  189. package/src/components/fab/QFabAction.json +10 -0
  190. package/src/components/field/QField.js +28 -23
  191. package/src/components/field/__QField.json +72 -8
  192. package/src/components/file/QFile.js +12 -4
  193. package/src/components/file/QFile.sass +4 -3
  194. package/src/components/file/QFile.styl +4 -3
  195. package/src/components/footer/QFooter.js +1 -1
  196. package/src/components/form/QForm.js +1 -1
  197. package/src/components/header/QHeader.js +1 -1
  198. package/src/components/icon/QIcon.js +54 -49
  199. package/src/components/img/QImg.json +2 -2
  200. package/src/components/infinite-scroll/QInfiniteScroll.js +49 -36
  201. package/src/components/inner-loading/QInnerLoading.js +54 -22
  202. package/src/components/inner-loading/QInnerLoading.json +29 -0
  203. package/src/components/inner-loading/QInnerLoading.sass +3 -0
  204. package/src/components/inner-loading/QInnerLoading.styl +3 -0
  205. package/src/components/item/QItem.js +9 -15
  206. package/src/components/linear-progress/QLinearProgress.js +6 -2
  207. package/src/components/menu/QMenu.js +5 -1
  208. package/src/components/option-group/QOptionGroup.js +32 -22
  209. package/src/components/option-group/QOptionGroup.json +50 -1
  210. package/src/components/parallax/QParallax.js +3 -0
  211. package/src/components/parallax/QParallax.json +1 -1
  212. package/src/components/popup-edit/QPopupEdit.js +41 -16
  213. package/src/components/popup-edit/QPopupEdit.json +15 -8
  214. package/src/components/range/QRange.js +223 -278
  215. package/src/components/range/QRange.json +11 -122
  216. package/src/components/rating/QRating.js +56 -38
  217. package/src/components/rating/QRating.json +3 -3
  218. package/src/components/rating/QRating.sass +8 -6
  219. package/src/components/rating/QRating.styl +8 -6
  220. package/src/components/resize-observer/QResizeObserver.js +15 -10
  221. package/src/components/scroll-area/QScrollArea.js +342 -126
  222. package/src/components/scroll-area/QScrollArea.json +164 -20
  223. package/src/components/scroll-area/QScrollArea.sass +4 -0
  224. package/src/components/scroll-area/QScrollArea.styl +4 -0
  225. package/src/components/scroll-observer/QScrollObserver.js +9 -2
  226. package/src/components/select/QSelect.js +8 -2
  227. package/src/components/separator/QSeparator.js +0 -1
  228. package/src/components/separator/QSeparator.json +1 -1
  229. package/src/components/slider/QSlider.js +97 -140
  230. package/src/components/slider/QSlider.json +1 -122
  231. package/src/components/slider/QSlider.sass +205 -139
  232. package/src/components/slider/QSlider.styl +205 -139
  233. package/src/components/slider/slider-utils.js +468 -123
  234. package/src/components/slider/slider-utils.json +546 -0
  235. package/src/components/stepper/QStepper.js +1 -1
  236. package/src/components/stepper/QStepper.sass +25 -26
  237. package/src/components/stepper/QStepper.styl +25 -26
  238. package/src/components/table/QTable.sass +3 -0
  239. package/src/components/table/QTable.styl +3 -0
  240. package/src/components/tabs/QRouteTab.js +13 -13
  241. package/src/components/tabs/QRouteTab.json +0 -7
  242. package/src/components/tabs/QTab.js +71 -20
  243. package/src/components/tabs/QTabs.js +237 -52
  244. package/src/components/tabs/QTabs.json +8 -0
  245. package/src/components/tabs/QTabs.sass +6 -6
  246. package/src/components/tabs/QTabs.styl +6 -6
  247. package/src/components/time/QTime.js +6 -2
  248. package/src/components/timeline/QTimelineEntry.json +1 -1
  249. package/src/components/tree/QTree.js +10 -6
  250. package/src/components/tree/QTree.json +5 -0
  251. package/src/components/tree/QTree.sass +58 -4
  252. package/src/components/tree/QTree.styl +58 -4
  253. package/src/components/uploader/QUploaderBase.js +15 -19
  254. package/src/components/video/QVideo.js +4 -1
  255. package/src/components/video/QVideo.json +11 -0
  256. package/src/components/virtual-scroll/QVirtualScroll.sass +1 -0
  257. package/src/components/virtual-scroll/QVirtualScroll.styl +1 -0
  258. package/src/css/core/helpers.sass +3 -0
  259. package/src/css/core/helpers.styl +3 -0
  260. package/src/css/core/positioning.sass +5 -0
  261. package/src/css/core/positioning.styl +5 -0
  262. package/src/css/variables.sass +4 -6
  263. package/src/css/variables.styl +4 -6
  264. package/src/directives/Scroll.js +2 -2
  265. package/src/directives/ScrollFire.js +1 -0
  266. package/src/ie-compat/ie.js +13 -13
  267. package/src/install.js +1 -1
  268. package/src/lang.js +7 -4
  269. package/src/mixins/anchor.js +3 -13
  270. package/src/mixins/btn.js +30 -38
  271. package/src/mixins/btn.json +26 -11
  272. package/src/mixins/file.js +27 -5
  273. package/src/mixins/fullscreen.js +16 -4
  274. package/src/mixins/portal.js +10 -10
  275. package/src/mixins/router-link.js +88 -14
  276. package/src/mixins/router-link.json +26 -10
  277. package/src/mixins/validate.js +33 -15
  278. package/src/mixins/virtual-scroll.js +40 -42
  279. package/src/plugins/AppFullscreen.js +41 -16
  280. package/src/plugins/BottomSheet.json +1 -1
  281. package/src/plugins/Cookies.js +1 -1
  282. package/src/plugins/Loading.js +8 -0
  283. package/src/plugins/LoadingBar.js +9 -0
  284. package/src/plugins/Notify.js +351 -333
  285. package/src/plugins/Notify.json +10 -10
  286. package/src/plugins/Notify.sass +9 -3
  287. package/src/plugins/Notify.styl +9 -3
  288. package/src/utils/clone.js +53 -4
  289. package/src/utils/date.js +134 -69
  290. package/src/utils/dom.js +28 -9
  291. package/src/utils/extend.js +2 -2
  292. package/src/utils/focus-manager.js +8 -10
  293. package/src/utils/global-dialog.js +18 -1
  294. package/src/utils/is.js +2 -2
  295. package/src/utils/morph.js +2 -12
  296. package/src/utils/scroll.js +71 -35
@@ -47,9 +47,9 @@
47
47
 
48
48
  "avatar": {
49
49
  "type": "String",
50
- "desc": "URL to an avatar/image; Suggestion: use statics folder",
50
+ "desc": "URL to an avatar/image; Suggestion: use public folder",
51
51
  "examples": [
52
- "(statics folder) statics/img/something.png",
52
+ "(public folder) img/something.png",
53
53
  "(relative path format) require('./my_img.jpg')",
54
54
  "(URL) https://some-site.net/some-img.gif"
55
55
  ]
@@ -217,9 +217,9 @@
217
217
 
218
218
  "avatar": {
219
219
  "type": "String",
220
- "desc": "URL to an avatar/image; Suggestion: use statics folder",
220
+ "desc": "URL to an avatar/image; Suggestion: use public folder",
221
221
  "examples": [
222
- "(statics folder) statics/img/something.png",
222
+ "(public folder) img/something.png",
223
223
  "(relative path format) require('./my_img.jpg')",
224
224
  "(URL) https://some-site.net/some-img.gif"
225
225
  ]
@@ -415,9 +415,9 @@
415
415
 
416
416
  "avatar": {
417
417
  "type": "String",
418
- "desc": "URL to an avatar/image; Suggestion: use statics folder",
418
+ "desc": "URL to an avatar/image; Suggestion: use public folder",
419
419
  "examples": [
420
- "(statics folder) statics/img/something.png",
420
+ "(public folder) img/something.png",
421
421
  "(relative path format) require('./my_img.jpg')",
422
422
  "(URL) https://some-site.net/some-img.gif"
423
423
  ]
@@ -556,9 +556,9 @@
556
556
 
557
557
  "avatar": {
558
558
  "type": "String",
559
- "desc": "URL to an avatar/image; Suggestion: use statics folder",
559
+ "desc": "URL to an avatar/image; Suggestion: use public folder",
560
560
  "examples": [
561
- "(statics folder) statics/img/something.png",
561
+ "(public folder) img/something.png",
562
562
  "(relative path format) require('./my_img.jpg')",
563
563
  "(URL) https://some-site.net/some-img.gif"
564
564
  ]
@@ -750,9 +750,9 @@
750
750
 
751
751
  "avatar": {
752
752
  "type": "String",
753
- "desc": "URL to an avatar/image; Suggestion: use statics folder",
753
+ "desc": "URL to an avatar/image; Suggestion: use public folder",
754
754
  "examples": [
755
- "(statics folder) statics/img/something.png",
755
+ "(public folder) img/something.png",
756
756
  "(relative path format) require('./my_img.jpg')",
757
757
  "(URL) https://some-site.net/some-img.gif"
758
758
  ]
@@ -40,16 +40,22 @@ body.q-ios-padding .q-notifications__list
40
40
 
41
41
  &__icon
42
42
  font-size: 24px
43
- margin-right: 16px
44
43
  flex: 0 0 1em
45
44
 
45
+ &--additional
46
+ margin-right: 16px
47
+
46
48
  &__avatar
47
49
  font-size: 32px
48
- margin-right: 8px
50
+
51
+ &--additional
52
+ margin-right: 8px
49
53
 
50
54
  &__spinner
51
55
  font-size: 32px
52
- margin-right: 8px
56
+
57
+ &--additional
58
+ margin-right: 8px
53
59
 
54
60
  &__message
55
61
  padding: 8px 0
@@ -40,16 +40,22 @@ body.q-ios-padding .q-notifications__list
40
40
 
41
41
  &__icon
42
42
  font-size: 24px
43
- margin-right: 16px
44
43
  flex: 0 0 1em
45
44
 
45
+ &--additional
46
+ margin-right: 16px
47
+
46
48
  &__avatar
47
49
  font-size: 32px
48
- margin-right: 8px
50
+
51
+ &--additional
52
+ margin-right: 8px
49
53
 
50
54
  &__spinner
51
55
  font-size: 32px
52
- margin-right: 8px
56
+
57
+ &--additional
58
+ margin-right: 8px
53
59
 
54
60
  &__message
55
61
  padding: 8px 0
@@ -1,6 +1,55 @@
1
- export default function (data) {
2
- const s = JSON.stringify(data)
3
- if (s) {
4
- return JSON.parse(s)
1
+ // adapted from https://stackoverflow.com/a/40294058
2
+
3
+ export default function cloneDeep (data, hash = new WeakMap()) {
4
+ if (Object(data) !== data) return data
5
+ if (hash.has(data)) return hash.get(data)
6
+
7
+ const result = data instanceof Date
8
+ ? new Date(data)
9
+ : (data instanceof RegExp
10
+ ? new RegExp(data.source, data.flags)
11
+ : (data instanceof Set
12
+ ? new Set()
13
+ : (data instanceof Map
14
+ ? new Map()
15
+ : (typeof data.constructor !== 'function'
16
+ ? Object.create(null)
17
+ : (data.prototype !== void 0 && typeof data.prototype.constructor === 'function'
18
+ ? data
19
+ : new data.constructor()
20
+ )
21
+ )
22
+ )
23
+ )
24
+ )
25
+
26
+ if (typeof data.constructor === 'function' && typeof data.valueOf === 'function') {
27
+ const val = data.valueOf()
28
+
29
+ if (Object(val) !== val) {
30
+ const result = new data.constructor(val)
31
+
32
+ hash.set(data, result)
33
+
34
+ return result
35
+ }
5
36
  }
37
+
38
+ hash.set(data, result)
39
+
40
+ if (data instanceof Set) {
41
+ data.forEach(val => {
42
+ result.add(cloneDeep(val, hash))
43
+ })
44
+ }
45
+ else if (data instanceof Map) {
46
+ data.forEach((val, key) => {
47
+ result.set(key, cloneDeep(val, hash))
48
+ })
49
+ }
50
+
51
+ return Object.assign(
52
+ result,
53
+ ...Object.keys(data).map(key => ({ [key]: cloneDeep(data[key], hash) }))
54
+ )
6
55
  }
package/src/utils/date.js CHANGED
@@ -3,7 +3,7 @@
3
3
  import { isDate } from './is.js'
4
4
  import { pad, capitalize } from './format.js'
5
5
  import { jalaaliMonthLength } from './date-persian.js'
6
- import lang from '../lang.js'
6
+ import lang, { defaultLang } from '../lang.js'
7
7
 
8
8
  const
9
9
  MILLISECONDS_IN_DAY = 86400000,
@@ -151,6 +151,128 @@ function getRegexData (mask, dateLocale) {
151
151
  return res
152
152
  }
153
153
 
154
+ function getDateLocale (paramDateLocale, langProps) {
155
+ return paramDateLocale !== void 0
156
+ ? paramDateLocale
157
+ : (
158
+ langProps !== void 0
159
+ ? langProps.date
160
+ : defaultLang.date
161
+ )
162
+ }
163
+
164
+ function formatTimezone (offset, delimeter = '') {
165
+ const
166
+ sign = offset > 0 ? '-' : '+',
167
+ absOffset = Math.abs(offset),
168
+ hours = Math.floor(absOffset / 60),
169
+ minutes = absOffset % 60
170
+
171
+ return sign + pad(hours) + delimeter + pad(minutes)
172
+ }
173
+
174
+ function applyYearMonthDayChange (date, mod, sign) {
175
+ let
176
+ year = date.getFullYear(),
177
+ month = date.getMonth(),
178
+ day = date.getDate()
179
+
180
+ if (mod.years !== void 0) {
181
+ year += sign * mod.years
182
+ }
183
+ else if (mod.year !== void 0) {
184
+ year += sign * mod.year
185
+ }
186
+
187
+ if (mod.months !== void 0) {
188
+ month += sign * mod.months
189
+ }
190
+ else if (mod.month !== void 0) {
191
+ month += sign * mod.month
192
+ }
193
+
194
+ if (mod.days !== void 0) {
195
+ day += sign * mod.days
196
+ }
197
+
198
+ date.setDate(1)
199
+ date.setMonth(2)
200
+
201
+ date.setFullYear(year)
202
+ date.setMonth(month)
203
+ date.setDate(day)
204
+
205
+ return date
206
+ }
207
+
208
+ const yearMonDay = [ 'years', 'year', 'months', 'month', 'days' ]
209
+
210
+ function getChange (date, mod, sign) {
211
+ const
212
+ d = new Date(date),
213
+ t = (
214
+ mod.years !== void 0 || mod.year !== void 0 ||
215
+ mod.months !== void 0 || mod.month !== void 0 ||
216
+ mod.days !== void 0
217
+ )
218
+ ? applyYearMonthDayChange(d, mod, sign)
219
+ : d
220
+
221
+ for (const key in mod) {
222
+ if (yearMonDay.includes(key) === false) {
223
+ const op = capitalize(key)
224
+ t[`set${op}`](t[`get${op}`]() + sign * mod[key])
225
+ }
226
+ }
227
+
228
+ return t
229
+ }
230
+
231
+ function applyYearMonthDay (date, mod, middle) {
232
+ const
233
+ year = mod.year !== void 0
234
+ ? mod.year
235
+ : (mod.years !== void 0 ? mod.years : date[`get${middle}FullYear`]()),
236
+ month = mod.month !== void 0
237
+ ? mod.month - 1
238
+ : (mod.months !== void 0 ? mod.months : date[`get${middle}Month`]()),
239
+ maxDay = (new Date(year, month + 1, 0)).getDate(),
240
+ day = Math.min(maxDay, mod.date !== void 0 ? mod.date : date[`get${middle}Date`]())
241
+
242
+ date[`set${middle}Date`](1)
243
+ date[`set${middle}Month`](2)
244
+
245
+ date[`set${middle}FullYear`](year)
246
+ date[`set${middle}Month`](month)
247
+ date[`set${middle}Date`](day)
248
+
249
+ return date
250
+ }
251
+
252
+ const yearMonDayAdj = [ 'years', 'year', 'months', 'month', 'days' ]
253
+
254
+ export function adjustDate (date, mod, utc) {
255
+ const
256
+ middle = utc === true ? 'UTC' : '',
257
+ d = new Date(date),
258
+ t = (
259
+ mod.years !== void 0 || mod.year !== void 0 ||
260
+ mod.months !== void 0 || mod.month !== void 0 ||
261
+ mod.days !== void 0
262
+ )
263
+ ? applyYearMonthDay(d, mod, middle)
264
+ : d
265
+
266
+ for (const key in mod) {
267
+ if (yearMonDayAdj.includes(key) === false) {
268
+ const op = key.charAt(0).toUpperCase() + key.slice(1)
269
+ t[`set${middle}${op}`](mod[key])
270
+ }
271
+ }
272
+
273
+ return t
274
+ }
275
+
154
276
  export function extractDate (str, mask, dateLocale) {
155
277
  const d = __splitDate(str, mask, dateLocale)
156
278
 
@@ -168,7 +290,7 @@ export function extractDate (str, mask, dateLocale) {
168
290
 
169
291
  return d.timezoneOffset === null || d.timezoneOffset === tzOffset
170
292
  ? date
171
- : getChange(date, { minutes: d.timezoneOffset - tzOffset }, true)
293
+ : getChange(date, { minutes: d.timezoneOffset - tzOffset }, 1)
172
294
  }
173
295
 
174
296
  export function __splitDate (str, mask, dateLocale, calendar, defaultModel) {
@@ -201,7 +323,7 @@ export function __splitDate (str, mask, dateLocale, calendar, defaultModel) {
201
323
  }
202
324
 
203
325
  const
204
- langOpts = dateLocale !== void 0 ? dateLocale : lang.props.date,
326
+ langOpts = getDateLocale(dateLocale, lang.props),
205
327
  months = langOpts.months,
206
328
  monthsShort = langOpts.monthsShort
207
329
 
@@ -303,49 +425,12 @@ export function __splitDate (str, mask, dateLocale, calendar, defaultModel) {
303
425
  }
304
426
  }
305
427
 
306
- date.dateHash = date.year + '/' + pad(date.month) + '/' + pad(date.day)
428
+ date.dateHash = pad(date.year, 6) + '/' + pad(date.month) + '/' + pad(date.day)
307
429
  date.timeHash = pad(date.hour) + ':' + pad(date.minute) + ':' + pad(date.second) + tzString
308
430
 
309
431
  return date
310
432
  }
311
433
 
312
- function formatTimezone (offset, delimeter = '') {
313
- const
314
- sign = offset > 0 ? '-' : '+',
315
- absOffset = Math.abs(offset),
316
- hours = Math.floor(absOffset / 60),
317
- minutes = absOffset % 60
318
-
319
- return sign + pad(hours) + delimeter + pad(minutes)
320
- }
321
-
322
- function setMonth (date, newMonth /* 1-based */) {
323
- const
324
- test = new Date(date.getFullYear(), newMonth, 0, 0, 0, 0, 0),
325
- days = test.getDate()
326
-
327
- date.setMonth(newMonth - 1, Math.min(days, date.getDate()))
328
- }
329
-
330
- function getChange (date, mod, add) {
331
- const
332
- t = new Date(date),
333
- sign = (add ? 1 : -1)
334
-
335
- Object.keys(mod).forEach(key => {
336
- if (key === 'month') {
337
- setMonth(t, t.getMonth() + 1 + sign * mod.month)
338
- return
339
- }
340
-
341
- const op = key === 'year'
342
- ? 'FullYear'
343
- : capitalize(key === 'days' ? 'date' : key)
344
- t[`set${op}`](t[`get${op}`]() + sign * mod[key])
345
- })
346
- return t
347
- }
348
-
349
434
  export function isValid (date) {
350
435
  return typeof date === 'number'
351
436
  ? true
@@ -403,30 +488,10 @@ export function isBetweenDates (date, from, to, opts = {}) {
403
488
  }
404
489
 
405
490
  export function addToDate (date, mod) {
406
- return getChange(date, mod, true)
491
+ return getChange(date, mod, 1)
407
492
  }
408
493
  export function subtractFromDate (date, mod) {
409
- return getChange(date, mod, false)
410
- }
411
-
412
- export function adjustDate (date, mod, utc) {
413
- const
414
- t = new Date(date),
415
- prefix = `set${utc === true ? 'UTC' : ''}`
416
-
417
- Object.keys(mod).forEach(key => {
418
- if (key === 'month') {
419
- setMonth(t, mod.month)
420
- return
421
- }
422
-
423
- const op = key === 'year'
424
- ? 'FullYear'
425
- : key.charAt(0).toUpperCase() + key.slice(1)
426
- t[`${prefix}${op}`](mod[key])
427
- })
428
-
429
- return t
494
+ return getChange(date, mod, -1)
430
495
  }
431
496
 
432
497
  export function startOfDate (date, unit, utc) {
@@ -843,15 +908,15 @@ export function formatDate (val, mask, dateLocale, __forcedYear, __forcedTimezon
843
908
  mask = defaultMask
844
909
  }
845
910
 
846
- const locale = dateLocale !== void 0
847
- ? dateLocale
848
- : lang.props.date
911
+ const locale = getDateLocale(dateLocale, lang.props)
849
912
 
850
913
  return mask.replace(
851
914
  token,
852
- (match, text) => match in formatter
853
- ? formatter[match](date, locale, __forcedYear, __forcedTimezoneOffset)
854
- : (text === void 0 ? match : text.split('\\]').join(']'))
915
+ (match, text) => (
916
+ match in formatter
917
+ ? formatter[match](date, locale, __forcedYear, __forcedTimezoneOffset)
918
+ : (text === void 0 ? match : text.split('\\]').join(']'))
919
+ )
855
920
  )
856
921
  }
857
922
 
package/src/utils/dom.js CHANGED
@@ -46,6 +46,30 @@ export function ready (fn) {
46
46
  document.addEventListener('DOMContentLoaded', fn, false)
47
47
  }
48
48
 
49
+ // internal
50
+ export function getElement (el) {
51
+ const type = typeof el
52
+
53
+ if (type === 'function') {
54
+ el = el()
55
+ }
56
+
57
+ if (type === 'string') {
58
+ try {
59
+ el = document.querySelector(el)
60
+ }
61
+ catch (err) {}
62
+ }
63
+
64
+ if (el !== Object(el)) {
65
+ return null
66
+ }
67
+
68
+ return el._isVue === true && el.$el !== void 0
69
+ ? el.$el
70
+ : el
71
+ }
72
+
49
73
  // internal
50
74
  export function childHasFocus (el, focusedEl) {
51
75
  if (el === void 0 || el.contains(focusedEl) === true) {
@@ -62,15 +86,10 @@ export function childHasFocus (el, focusedEl) {
62
86
  }
63
87
 
64
88
  // internal
65
- export function getBodyFullscreenElement (isFullscreen, activeEl) {
66
- return isFullscreen === true
67
- ? (
68
- // when a video tag enters fullscreen activeEl is null
69
- activeEl === document.documentElement || activeEl === null
70
- ? document.body
71
- : activeEl
72
- )
73
- : document.body
89
+ export function getBodyFullscreenElement (activeEl) {
90
+ return activeEl === document.documentElement || activeEl === null
91
+ ? document.body
92
+ : activeEl
74
93
  }
75
94
 
76
95
  export default {
@@ -25,7 +25,7 @@ function isPlainObject (obj) {
25
25
  let key
26
26
  for (key in obj) {}
27
27
 
28
- return key === undefined || hasOwn.call(obj, key)
28
+ return key === void 0 || hasOwn.call(obj, key)
29
29
  }
30
30
 
31
31
  export default function extend () {
@@ -72,7 +72,7 @@ export default function extend () {
72
72
 
73
73
  target[name] = extend(deep, clone, copy)
74
74
  }
75
- else if (copy !== undefined) {
75
+ else if (copy !== void 0) {
76
76
  target[name] = copy
77
77
  }
78
78
  }
@@ -1,15 +1,17 @@
1
1
  let queue = []
2
- const waitFlags = []
2
+ let waitFlags = []
3
+
4
+ function clearFlag (flag) {
5
+ waitFlags = waitFlags.filter(entry => entry !== flag)
6
+ }
3
7
 
4
8
  export function addFocusWaitFlag (flag) {
9
+ clearFlag(flag)
5
10
  waitFlags.push(flag)
6
11
  }
7
12
 
8
13
  export function removeFocusWaitFlag (flag) {
9
- const index = waitFlags.indexOf(flag)
10
- if (index !== -1) {
11
- waitFlags.splice(index, 1)
12
- }
14
+ clearFlag(flag)
13
15
 
14
16
  if (waitFlags.length === 0 && queue.length > 0) {
15
17
  // only call last focus handler (can't focus multiple things at once)
@@ -24,13 +26,9 @@ export function addFocusFn (fn) {
24
26
  }
25
27
  else {
26
28
  queue.push(fn)
27
- return fn
28
29
  }
29
30
  }
30
31
 
31
32
  export function removeFocusFn (fn) {
32
- const index = queue.indexOf(fn)
33
- if (index !== -1) {
34
- queue.splice(index, 1)
35
- }
33
+ queue = queue.filter(entry => entry !== fn)
36
34
  }
@@ -24,6 +24,23 @@ export function merge (target, source) {
24
24
  }
25
25
  }
26
26
 
27
+ let appRoot
28
+
29
+ function getDialogParent (parent, root) {
30
+ if (parent !== void 0) { return parent }
31
+ if (root !== void 0) { return root }
32
+
33
+ if (appRoot === void 0) {
34
+ const elRoot = document.getElementById('q-app')
35
+
36
+ if (elRoot && elRoot.__vue__) {
37
+ appRoot = elRoot.__vue__.$root
38
+ }
39
+ }
40
+
41
+ return appRoot
42
+ }
43
+
27
44
  export default function (DefaultComponent) {
28
45
  return ({ className, class: klass, style, component, root, parent, ...props }) => {
29
46
  if (isSSR === true) { return ssrAPI }
@@ -113,7 +130,7 @@ export default function (DefaultComponent) {
113
130
  name: 'QGlobalDialog',
114
131
 
115
132
  el: node,
116
- parent: parent === void 0 ? root : parent,
133
+ parent: getDialogParent(parent, root),
117
134
 
118
135
  render (h) {
119
136
  return h(DialogComponent, {
package/src/utils/is.js CHANGED
@@ -99,10 +99,10 @@ export function isDeepEqual (a, b) {
99
99
  return a.toString() === b.toString()
100
100
  }
101
101
 
102
- const keys = Object.keys(a)
102
+ const keys = Object.keys(a).filter(key => a[key] !== void 0)
103
103
  length = keys.length
104
104
 
105
- if (length !== Object.keys(b).length) {
105
+ if (length !== Object.keys(b).filter(key => b[key] !== void 0).length) {
106
106
  return false
107
107
  }
108
108
 
@@ -1,3 +1,5 @@
1
+ import { getElement } from './dom.js'
2
+
1
3
  let id = 0
2
4
  let offsetBase = void 0
3
5
 
@@ -162,18 +164,6 @@ function normalizeOptions (options) {
162
164
  }
163
165
  }
164
166
 
165
- function getElement (element) {
166
- const type = typeof element
167
-
168
- return type === 'function'
169
- ? element()
170
- : (
171
- type === 'string'
172
- ? document.querySelector(element)
173
- : element
174
- )
175
- }
176
-
177
167
  function isValidElement (element) {
178
168
  return element &&
179
169
  element.ownerDocument === document &&