quasar 2.1.8 → 2.2.2

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 (145) hide show
  1. package/dist/api/QCarousel.json +19 -5
  2. package/dist/api/QColor.json +6 -0
  3. package/dist/api/QInnerLoading.json +32 -0
  4. package/dist/api/QOptionGroup.json +58 -1
  5. package/dist/api/QRange.json +10 -3
  6. package/dist/api/QSeparator.json +1 -1
  7. package/dist/api/QSkeleton.json +14 -0
  8. package/dist/api/QSlider.json +10 -3
  9. package/dist/api/QStepper.json +16 -2
  10. package/dist/api/QTabPanels.json +16 -2
  11. package/dist/api/QTable.json +5 -0
  12. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  13. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  14. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  15. package/dist/icon-set/fontawesome-v5.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/mdi-v3.umd.prod.js +1 -1
  23. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  24. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  25. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-mdi-v4.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-mdi-v5.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  40. package/dist/icon-set/themify.umd.prod.js +1 -1
  41. package/dist/lang/ar.umd.prod.js +1 -1
  42. package/dist/lang/az-Latn.umd.prod.js +1 -1
  43. package/dist/lang/bg.umd.prod.js +1 -1
  44. package/dist/lang/bn.umd.prod.js +1 -1
  45. package/dist/lang/ca.umd.prod.js +1 -1
  46. package/dist/lang/cs.umd.prod.js +1 -1
  47. package/dist/lang/da.umd.prod.js +1 -1
  48. package/dist/lang/de.umd.prod.js +1 -1
  49. package/dist/lang/el.umd.prod.js +1 -1
  50. package/dist/lang/en-GB.umd.prod.js +1 -1
  51. package/dist/lang/en-US.umd.prod.js +1 -1
  52. package/dist/lang/eo.umd.prod.js +1 -1
  53. package/dist/lang/es.umd.prod.js +1 -1
  54. package/dist/lang/et.umd.prod.js +1 -1
  55. package/dist/lang/fa-IR.umd.prod.js +1 -1
  56. package/dist/lang/fa.umd.prod.js +1 -1
  57. package/dist/lang/fi.umd.prod.js +1 -1
  58. package/dist/lang/fr.umd.prod.js +1 -1
  59. package/dist/lang/gn.umd.prod.js +1 -1
  60. package/dist/lang/he.umd.prod.js +1 -1
  61. package/dist/lang/hr.umd.prod.js +1 -1
  62. package/dist/lang/hu.umd.prod.js +1 -1
  63. package/dist/lang/id.umd.prod.js +1 -1
  64. package/dist/lang/is.umd.prod.js +1 -1
  65. package/dist/lang/it.umd.prod.js +1 -1
  66. package/dist/lang/ja.umd.prod.js +1 -1
  67. package/dist/lang/km.umd.prod.js +1 -1
  68. package/dist/lang/ko-KR.umd.prod.js +1 -1
  69. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  70. package/dist/lang/lt.umd.prod.js +6 -0
  71. package/dist/lang/lu.umd.prod.js +1 -1
  72. package/dist/lang/lv.umd.prod.js +1 -1
  73. package/dist/lang/ml.umd.prod.js +1 -1
  74. package/dist/lang/ms.umd.prod.js +1 -1
  75. package/dist/lang/nb-NO.umd.prod.js +1 -1
  76. package/dist/lang/nl.umd.prod.js +1 -1
  77. package/dist/lang/pl.umd.prod.js +1 -1
  78. package/dist/lang/pt-BR.umd.prod.js +1 -1
  79. package/dist/lang/pt.umd.prod.js +1 -1
  80. package/dist/lang/ro.umd.prod.js +1 -1
  81. package/dist/lang/ru.umd.prod.js +1 -1
  82. package/dist/lang/sk.umd.prod.js +1 -1
  83. package/dist/lang/sl.umd.prod.js +1 -1
  84. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  85. package/dist/lang/sr.umd.prod.js +1 -1
  86. package/dist/lang/sv.umd.prod.js +1 -1
  87. package/dist/lang/ta.umd.prod.js +1 -1
  88. package/dist/lang/th.umd.prod.js +1 -1
  89. package/dist/lang/tr.umd.prod.js +1 -1
  90. package/dist/lang/ug.umd.prod.js +2 -2
  91. package/dist/lang/uk.umd.prod.js +1 -1
  92. package/dist/lang/vi.umd.prod.js +1 -1
  93. package/dist/lang/zh-CN.umd.prod.js +1 -1
  94. package/dist/lang/zh-TW.umd.prod.js +1 -1
  95. package/dist/quasar.cjs.prod.js +2 -2
  96. package/dist/quasar.css +24 -17
  97. package/dist/quasar.esm.prod.js +2 -2
  98. package/dist/quasar.prod.css +1 -1
  99. package/dist/quasar.rtl.css +29 -22
  100. package/dist/quasar.rtl.prod.css +1 -1
  101. package/dist/quasar.sass +24 -16
  102. package/dist/quasar.umd.js +374 -242
  103. package/dist/quasar.umd.prod.js +2 -2
  104. package/dist/ssr-directives/Morph.js +1 -1
  105. package/dist/types/index.d.ts +81 -12
  106. package/dist/vetur/quasar-attributes.json +39 -7
  107. package/dist/vetur/quasar-tags.json +9 -1
  108. package/dist/web-types/web-types.json +101 -15
  109. package/lang/index.json +4 -0
  110. package/lang/lt.js +103 -0
  111. package/lang/ug.js +42 -42
  112. package/package.json +1 -1
  113. package/src/components/btn/QBtn.js +17 -20
  114. package/src/components/carousel/QCarousel.js +8 -1
  115. package/src/components/carousel/QCarousel.json +9 -1
  116. package/src/components/color/QColor.js +73 -61
  117. package/src/components/color/QColor.json +7 -0
  118. package/src/components/color/QColor.sass +5 -1
  119. package/src/components/dialog/QDialog.js +6 -0
  120. package/src/components/drawer/QDrawer.js +3 -0
  121. package/src/components/inner-loading/QInnerLoading.js +31 -7
  122. package/src/components/inner-loading/QInnerLoading.json +29 -0
  123. package/src/components/inner-loading/QInnerLoading.sass +4 -0
  124. package/src/components/option-group/QOptionGroup.js +29 -19
  125. package/src/components/option-group/QOptionGroup.json +50 -1
  126. package/src/components/range/QRange.js +1 -1
  127. package/src/components/range/QRange.json +7 -3
  128. package/src/components/rating/QRating.js +59 -39
  129. package/src/components/rating/QRating.sass +8 -6
  130. package/src/components/select/QSelect.js +1 -1
  131. package/src/components/separator/QSeparator.json +1 -1
  132. package/src/components/skeleton/QSkeleton.js +15 -5
  133. package/src/components/skeleton/QSkeleton.json +9 -0
  134. package/src/components/skeleton/QSkeleton.sass +7 -6
  135. package/src/components/slider/QSlider.js +1 -1
  136. package/src/components/slider/QSlider.json +7 -3
  137. package/src/components/slider/use-slider.js +7 -2
  138. package/src/components/stepper/StepHeader.js +10 -10
  139. package/src/components/table/QTable.json +1 -0
  140. package/src/components/tabs/use-tab.js +11 -9
  141. package/src/components/time/QTime.js +0 -2
  142. package/src/composables/private/use-panel.js +13 -8
  143. package/src/composables/private/use-panel.json +11 -2
  144. package/src/css/core/transitions.sass +4 -4
  145. package/src/utils/date.js +93 -60
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.1.8
2
+ * Quasar Framework v2.2.2
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -1437,7 +1437,7 @@
1437
1437
  }
1438
1438
 
1439
1439
  var installQuasar = function (parentApp, opts = {}) {
1440
- const $q = { version: '2.1.8' };
1440
+ const $q = { version: '2.2.2' };
1441
1441
 
1442
1442
  if (globalConfigIsFrozen === false) {
1443
1443
  if (opts.config !== void 0) {
@@ -3218,7 +3218,7 @@
3218
3218
  );
3219
3219
 
3220
3220
  const ripple = vue.computed(() => (
3221
- props.ripple === false
3221
+ props.disable === true || props.ripple === false
3222
3222
  ? false
3223
3223
  : {
3224
3224
  keyCodes: isLink.value === true ? [ 13, 32 ] : [ 13 ],
@@ -3226,6 +3226,8 @@
3226
3226
  }
3227
3227
  ));
3228
3228
 
3229
+ const rippleProps = vue.computed(() => ({ center: props.round }));
3230
+
3229
3231
  const percentageStyle = vue.computed(() => {
3230
3232
  const val = Math.max(0, Math.min(100, props.percentage));
3231
3233
  return val > 0
@@ -3259,16 +3261,6 @@
3259
3261
  }
3260
3262
  });
3261
3263
 
3262
- const directives = vue.computed(() => {
3263
- // if props.disable !== true && props.ripple !== false
3264
- return [ [
3265
- Ripple,
3266
- ripple.value,
3267
- void 0,
3268
- { center: props.round }
3269
- ] ]
3270
- });
3271
-
3272
3264
  const nodeProps = vue.computed(() => ({
3273
3265
  ref: rootRef,
3274
3266
  class: 'q-btn q-btn-item non-selectable no-outline ' + classes.value,
@@ -3532,13 +3524,18 @@
3532
3524
  ))
3533
3525
  );
3534
3526
 
3535
- return hDir(
3536
- isLink.value === true ? 'a' : 'button',
3537
- nodeProps.value,
3538
- child,
3539
- 'ripple',
3540
- props.disable !== true && props.ripple !== false,
3541
- () => directives.value
3527
+ return vue.withDirectives(
3528
+ vue.h(
3529
+ isLink.value === true ? 'a' : 'button',
3530
+ nodeProps.value,
3531
+ child
3532
+ ),
3533
+ [ [
3534
+ Ripple,
3535
+ ripple.value,
3536
+ void 0,
3537
+ rippleProps.value
3538
+ ] ]
3542
3539
  )
3543
3540
  }
3544
3541
  }
@@ -6064,6 +6061,10 @@
6064
6061
 
6065
6062
  transitionPrev: String,
6066
6063
  transitionNext: String,
6064
+ transitionDuration: {
6065
+ type: [ String, Number ],
6066
+ default: 300
6067
+ },
6067
6068
 
6068
6069
  keepAlive: Boolean,
6069
6070
  keepAliveInclude: [ String, Array, RegExp ],
@@ -6109,6 +6110,10 @@
6109
6110
  props.transitionNext || `slide-${ props.vertical === true ? 'up' : 'left' }`
6110
6111
  );
6111
6112
 
6113
+ const transitionStyle = vue.computed(
6114
+ () => `--q-transition-duration: ${ props.transitionDuration }ms`
6115
+ );
6116
+
6112
6117
  const contentKey = vue.computed(() => (
6113
6118
  typeof props.modelValue === 'string' || typeof props.modelValue === 'number'
6114
6119
  ? props.modelValue
@@ -6228,7 +6233,7 @@
6228
6233
  }
6229
6234
 
6230
6235
  function getPanelContentChild () {
6231
- const panel = isValidPanelName(props.modelValue)
6236
+ const panel = isValidPanelName(props.modelValue) === true
6232
6237
  && updatePanelIndex()
6233
6238
  && panels[ panelIndex.value ];
6234
6239
 
@@ -6239,7 +6244,7 @@
6239
6244
  needsUniqueKeepAliveWrapper.value === true
6240
6245
  ? getCacheWithFn(contentKey.value, () => ({ ...PanelWrapper$1, name: contentKey.value }))
6241
6246
  : PanelWrapper$1,
6242
- { key: contentKey.value },
6247
+ { key: contentKey.value, style: transitionStyle.value },
6243
6248
  () => panel
6244
6249
  )
6245
6250
  ])
@@ -6247,6 +6252,7 @@
6247
6252
  : [
6248
6253
  vue.h('div', {
6249
6254
  class: 'q-panel scroll',
6255
+ style: transitionStyle.value,
6250
6256
  key: contentKey.value,
6251
6257
  role: 'tabpanel'
6252
6258
  }, [ panel ])
@@ -6259,11 +6265,7 @@
6259
6265
  }
6260
6266
 
6261
6267
  return props.animated === true
6262
- ? [
6263
- vue.h(vue.Transition, {
6264
- name: panelTransition.value
6265
- }, getPanelContentChild)
6266
- ]
6268
+ ? [ vue.h(vue.Transition, { name: panelTransition.value }, getPanelContentChild) ]
6267
6269
  : getPanelContentChild()
6268
6270
  }
6269
6271
 
@@ -6273,7 +6275,7 @@
6273
6275
  ).filter(
6274
6276
  panel => panel.props !== null
6275
6277
  && panel.props.slot === void 0
6276
- && isValidPanelName(panel.props.name)
6278
+ && isValidPanelName(panel.props.name) === true
6277
6279
  );
6278
6280
 
6279
6281
  return panels.length
@@ -6661,7 +6663,14 @@
6661
6663
  });
6662
6664
 
6663
6665
  function startTimer () {
6664
- timer = setTimeout(nextPanel, isNumber(props.autoplay) ? props.autoplay : 5000);
6666
+ const duration = isNumber(props.autoplay) === true
6667
+ ? props.autoplay
6668
+ : 5000;
6669
+
6670
+ timer = setTimeout(
6671
+ duration >= 0 ? nextPanel : previousPanel,
6672
+ Math.abs(duration)
6673
+ );
6665
6674
  }
6666
6675
 
6667
6676
  vue.onMounted(() => {
@@ -8117,7 +8126,7 @@
8117
8126
 
8118
8127
  label: Boolean,
8119
8128
  labelAlways: Boolean,
8120
- markers: Boolean,
8129
+ markers: [ Boolean, Number ],
8121
8130
  snap: Boolean,
8122
8131
 
8123
8132
  vertical: Boolean,
@@ -8170,9 +8179,13 @@
8170
8179
  const step = vue.computed(() => (props.step === 0 ? 1 : props.step));
8171
8180
  const minMaxDiff = vue.computed(() => props.max - props.min);
8172
8181
 
8182
+ const markerStep = vue.computed(() => (
8183
+ isNumber(props.markers) === true ? props.markers : step.value)
8184
+ );
8185
+
8173
8186
  const markerStyle = vue.computed(() => {
8174
8187
  if (minMaxDiff.value !== 0) {
8175
- const size = 100 * step.value / minMaxDiff.value;
8188
+ const size = 100 * markerStep.value / minMaxDiff.value;
8176
8189
 
8177
8190
  return {
8178
8191
  backgroundSize: props.vertical === true
@@ -8552,7 +8565,7 @@
8552
8565
  })
8553
8566
  ];
8554
8567
 
8555
- props.markers === true && track.push(
8568
+ props.markers !== false && track.push(
8556
8569
  vue.h('div', {
8557
8570
  class: `q-slider__track-markers q-slider__track-markers${ state.axis.value } absolute-full fit`,
8558
8571
  style: state.markerStyle.value
@@ -9328,6 +9341,12 @@
9328
9341
  const rootRef = vue.ref(null);
9329
9342
  const tabIndicatorRef = vue.ref(null);
9330
9343
 
9344
+ const ripple = vue.computed(() => (
9345
+ props.disable === true
9346
+ ? false
9347
+ : props.ripple
9348
+ ));
9349
+
9331
9350
  const isActive = vue.computed(() => $tabs.currentModel.value === props.name);
9332
9351
 
9333
9352
  const classes = vue.computed(() =>
@@ -9484,13 +9503,9 @@
9484
9503
  ...customData
9485
9504
  };
9486
9505
 
9487
- return hDir(
9488
- tag,
9489
- data,
9490
- getContent(),
9491
- 'main',
9492
- props.ripple !== false && props.disable === false,
9493
- () => [ [ Ripple, props.ripple ] ]
9506
+ return vue.withDirectives(
9507
+ vue.h(tag, data, getContent()),
9508
+ [ [ Ripple, ripple.value ] ]
9494
9509
  )
9495
9510
  }
9496
9511
 
@@ -9924,6 +9939,7 @@
9924
9939
  palette: Array,
9925
9940
 
9926
9941
  noHeader: Boolean,
9942
+ noHeaderTabs: Boolean,
9927
9943
  noFooter: Boolean,
9928
9944
 
9929
9945
  square: Boolean,
@@ -10009,7 +10025,7 @@
10009
10025
  ? true
10010
10026
  : luminosity(model.value) > 0.4;
10011
10027
 
10012
- return 'q-color-picker__header-content absolute-full'
10028
+ return 'q-color-picker__header-content'
10013
10029
  + ` q-color-picker__header-content--${ light ? 'light' : 'dark' }`
10014
10030
  });
10015
10031
 
@@ -10360,6 +10376,63 @@
10360
10376
  }
10361
10377
 
10362
10378
  function getHeader () {
10379
+ const child = [];
10380
+
10381
+ props.noHeaderTabs !== true && child.push(
10382
+ vue.h(QTabs, {
10383
+ class: 'q-color-picker__header-tabs',
10384
+ modelValue: topView.value,
10385
+ dense: true,
10386
+ align: 'justify',
10387
+ ...getCache('topVTab', {
10388
+ 'onUpdate:modelValue': val => { topView.value = val; }
10389
+ })
10390
+ }, () => [
10391
+ vue.h(QTab, {
10392
+ label: 'HEX' + (hasAlpha.value === true ? 'A' : ''),
10393
+ name: 'hex',
10394
+ ripple: false
10395
+ }),
10396
+
10397
+ vue.h(QTab, {
10398
+ label: 'RGB' + (hasAlpha.value === true ? 'A' : ''),
10399
+ name: 'rgb',
10400
+ ripple: false
10401
+ })
10402
+ ])
10403
+ );
10404
+
10405
+ child.push(
10406
+ vue.h('div', {
10407
+ class: 'q-color-picker__header-banner row flex-center no-wrap'
10408
+ }, [
10409
+ vue.h('input', {
10410
+ class: 'fit',
10411
+ value: model.value[ topView.value ],
10412
+ ...(editable.value !== true
10413
+ ? { readonly: true }
10414
+ : {}
10415
+ ),
10416
+ ...getCache('topIn', {
10417
+ onInput: evt => {
10418
+ updateErrorIcon(onEditorChange(evt) === true);
10419
+ },
10420
+ onChange: stop,
10421
+ onBlur: evt => {
10422
+ onEditorChange(evt, true) === true && proxy.$forceUpdate();
10423
+ updateErrorIcon(false);
10424
+ }
10425
+ })
10426
+ }),
10427
+
10428
+ vue.h(QIcon, {
10429
+ ref: errorIconRef,
10430
+ class: 'q-color-picker__error-icon absolute no-pointer-events',
10431
+ name: $q.iconSet.type.negative
10432
+ })
10433
+ ])
10434
+ );
10435
+
10363
10436
  return vue.h('div', {
10364
10437
  class: 'q-color-picker__header relative-position overflow-hidden'
10365
10438
  }, [
@@ -10368,57 +10441,7 @@
10368
10441
  vue.h('div', {
10369
10442
  class: headerClass.value,
10370
10443
  style: currentBgColor.value
10371
- }, [
10372
- vue.h(QTabs, {
10373
- modelValue: topView.value,
10374
- dense: true,
10375
- align: 'justify',
10376
- ...getCache('topVTab', {
10377
- 'onUpdate:modelValue': val => { topView.value = val; }
10378
- })
10379
- }, () => [
10380
- vue.h(QTab, {
10381
- label: 'HEX' + (hasAlpha.value === true ? 'A' : ''),
10382
- name: 'hex',
10383
- ripple: false
10384
- }),
10385
-
10386
- vue.h(QTab, {
10387
- label: 'RGB' + (hasAlpha.value === true ? 'A' : ''),
10388
- name: 'rgb',
10389
- ripple: false
10390
- })
10391
- ]),
10392
-
10393
- vue.h('div', {
10394
- class: 'q-color-picker__header-banner row flex-center no-wrap'
10395
- }, [
10396
- vue.h('input', {
10397
- class: 'fit',
10398
- value: model.value[ topView.value ],
10399
- ...(editable.value !== true
10400
- ? { readonly: true }
10401
- : {}
10402
- ),
10403
- ...getCache('topIn', {
10404
- onInput: evt => {
10405
- updateErrorIcon(onEditorChange(evt) === true);
10406
- },
10407
- onChange: stop,
10408
- onBlur: evt => {
10409
- onEditorChange(evt, true) === true && proxy.$forceUpdate();
10410
- updateErrorIcon(false);
10411
- }
10412
- })
10413
- }),
10414
-
10415
- vue.h(QIcon, {
10416
- ref: errorIconRef,
10417
- class: 'q-color-picker__error-icon absolute no-pointer-events',
10418
- name: $q.iconSet.type.negative
10419
- })
10420
- ])
10421
- ])
10444
+ }, child)
10422
10445
  ])
10423
10446
  }
10424
10447
 
@@ -10654,19 +10677,23 @@
10654
10677
  }
10655
10678
 
10656
10679
  function getPaletteTab () {
10680
+ const fn = color => vue.h('div', {
10681
+ class: 'q-color-picker__cube col-auto',
10682
+ style: { backgroundColor: color },
10683
+ ...(
10684
+ editable.value === true
10685
+ ? getCache('palette#' + color, {
10686
+ onClick: () => { onPalettePick(color); }
10687
+ })
10688
+ : {}
10689
+ )
10690
+ });
10691
+
10657
10692
  return [
10658
10693
  vue.h('div', {
10659
10694
  class: 'row items-center q-color-picker__palette-rows'
10660
10695
  + (editable.value === true ? ' q-color-picker__palette-rows--editable' : '')
10661
- }, computedPalette.value.map(color => vue.h('div', {
10662
- class: 'q-color-picker__cube col-auto',
10663
- style: { backgroundColor: color },
10664
- ...(editable.value === true ? getCache('palette#' + color, {
10665
- onClick: () => {
10666
- onPalettePick(color);
10667
- }
10668
- }) : {})
10669
- })))
10696
+ }, computedPalette.value.map(fn))
10670
10697
  ]
10671
10698
  }
10672
10699
 
@@ -11215,6 +11242,96 @@
11215
11242
  )
11216
11243
  }
11217
11244
 
11245
+ function formatTimezone (offset, delimeter = '') {
11246
+ const
11247
+ sign = offset > 0 ? '-' : '+',
11248
+ absOffset = Math.abs(offset),
11249
+ hours = Math.floor(absOffset / 60),
11250
+ minutes = absOffset % 60;
11251
+
11252
+ return sign + pad(hours) + delimeter + pad(minutes)
11253
+ }
11254
+
11255
+ function applyYearMonthDayChange (date, mod, sign) {
11256
+ let
11257
+ year = date.getFullYear(),
11258
+ month = date.getMonth(),
11259
+ day = date.getDate();
11260
+
11261
+ if (mod.years !== void 0) {
11262
+ year += sign * mod.years;
11263
+ }
11264
+
11265
+ if (mod.months !== void 0) {
11266
+ month += sign * mod.months;
11267
+ }
11268
+
11269
+ if (mod.days !== void 0) {
11270
+ day += sign * mod.days;
11271
+ }
11272
+
11273
+ date.setDate(1);
11274
+ date.setMonth(2);
11275
+
11276
+ date.setFullYear(year);
11277
+ date.setMonth(month);
11278
+ date.setDate(day);
11279
+
11280
+ return date
11281
+ }
11282
+
11283
+ function getChange (date, mod, sign) {
11284
+ const
11285
+ d = new Date(date),
11286
+ t = mod.years !== void 0 || mod.months !== void 0 || mod.days !== void 0
11287
+ ? applyYearMonthDayChange(d, mod, sign)
11288
+ : d;
11289
+
11290
+ Object.keys(mod).forEach(key => {
11291
+ if (key !== 'years' && key !== 'months' && key !== 'days') {
11292
+ const op = capitalize(key);
11293
+ t[ `set${ op }` ](t[ `get${ op }` ]() + sign * mod[ key ]);
11294
+ }
11295
+ });
11296
+
11297
+ return t
11298
+ }
11299
+
11300
+ function applyYearMonthDay (date, mod, middle) {
11301
+ const
11302
+ year = mod.year !== void 0 ? mod.year : date[ `get${ middle }FullYear` ](),
11303
+ month = mod.month !== void 0 ? mod.month - 1 : date[ `get${ middle }Month` ](),
11304
+ maxDay = (new Date(year, month + 1, 0)).getDate(),
11305
+ day = Math.min(maxDay, mod.date !== void 0 ? mod.date : date[ `get${ middle }Date` ]());
11306
+
11307
+ date[ `set${ middle }Date` ](1);
11308
+ date[ `set${ middle }Month` ](2);
11309
+
11310
+ date[ `set${ middle }FullYear` ](year);
11311
+ date[ `set${ middle }Month` ](month);
11312
+ date[ `set${ middle }Date` ](day);
11313
+
11314
+ return date
11315
+ }
11316
+
11317
+ function adjustDate (date, mod, utc) {
11318
+ const
11319
+ middle = utc === true ? 'UTC' : '',
11320
+ d = new Date(date),
11321
+ t = mod.year !== void 0 || mod.month !== void 0 || mod.date !== void 0
11322
+ ? applyYearMonthDay(d, mod, middle)
11323
+ : d;
11324
+
11325
+ Object.keys(mod).forEach(key => {
11326
+ if (key !== 'year' && key !== 'month' && key !== 'date') {
11327
+ const op = key.charAt(0).toUpperCase() + key.slice(1);
11328
+ t[ `set${ middle }${ op }` ](mod[ key ]);
11329
+ }
11330
+ });
11331
+
11332
+ return t
11333
+ }
11334
+
11218
11335
  function extractDate (str, mask, dateLocale) {
11219
11336
  const d = __splitDate(str, mask, dateLocale);
11220
11337
 
@@ -11232,7 +11349,7 @@
11232
11349
 
11233
11350
  return d.timezoneOffset === null || d.timezoneOffset === tzOffset
11234
11351
  ? date
11235
- : getChange(date, { minutes: d.timezoneOffset - tzOffset }, true)
11352
+ : getChange(date, { minutes: d.timezoneOffset - tzOffset }, 1)
11236
11353
  }
11237
11354
 
11238
11355
  function __splitDate (str, mask, dateLocale, calendar, defaultModel) {
@@ -11373,43 +11490,6 @@
11373
11490
  return date
11374
11491
  }
11375
11492
 
11376
- function formatTimezone (offset, delimeter = '') {
11377
- const
11378
- sign = offset > 0 ? '-' : '+',
11379
- absOffset = Math.abs(offset),
11380
- hours = Math.floor(absOffset / 60),
11381
- minutes = absOffset % 60;
11382
-
11383
- return sign + pad(hours) + delimeter + pad(minutes)
11384
- }
11385
-
11386
- function setMonth (date, newMonth /* 1-based */) {
11387
- const
11388
- test = new Date(date.getFullYear(), newMonth, 0, 0, 0, 0, 0),
11389
- days = test.getDate();
11390
-
11391
- date.setMonth(newMonth - 1, Math.min(days, date.getDate()));
11392
- }
11393
-
11394
- function getChange (date, mod, add) {
11395
- const
11396
- t = new Date(date),
11397
- sign = (add ? 1 : -1);
11398
-
11399
- Object.keys(mod).forEach(key => {
11400
- if (key === 'months') {
11401
- setMonth(t, t.getMonth() + 1 + sign * mod.months);
11402
- return
11403
- }
11404
-
11405
- const op = key === 'years'
11406
- ? 'FullYear'
11407
- : capitalize(key === 'days' ? 'date' : key);
11408
- t[ `set${ op }` ](t[ `get${ op }` ]() + sign * mod[ key ]);
11409
- });
11410
- return t
11411
- }
11412
-
11413
11493
  function isValid (date) {
11414
11494
  return typeof date === 'number'
11415
11495
  ? true
@@ -11467,30 +11547,10 @@
11467
11547
  }
11468
11548
 
11469
11549
  function addToDate (date, mod) {
11470
- return getChange(date, mod, true)
11550
+ return getChange(date, mod, 1)
11471
11551
  }
11472
11552
  function subtractFromDate (date, mod) {
11473
- return getChange(date, mod, false)
11474
- }
11475
-
11476
- function adjustDate (date, mod, utc) {
11477
- const
11478
- t = new Date(date),
11479
- prefix = `set${ utc === true ? 'UTC' : '' }`;
11480
-
11481
- Object.keys(mod).forEach(key => {
11482
- if (key === 'month') {
11483
- setMonth(t, mod.month);
11484
- return
11485
- }
11486
-
11487
- const op = key === 'year'
11488
- ? 'FullYear'
11489
- : key.charAt(0).toUpperCase() + key.slice(1);
11490
- t[ `${ prefix }${ op }` ](mod[ key ]);
11491
- });
11492
-
11493
- return t
11553
+ return getChange(date, mod, -1)
11494
11554
  }
11495
11555
 
11496
11556
  function startOfDate (date, unit, utc) {
@@ -13749,6 +13809,10 @@
13749
13809
  : transitionShow.value
13750
13810
  ));
13751
13811
 
13812
+ const transitionStyle = vue.computed(
13813
+ () => `--q-transition-duration: ${ props.transitionDuration }ms`
13814
+ );
13815
+
13752
13816
  const useBackdrop = vue.computed(() => showing.value === true && props.seamless !== true);
13753
13817
 
13754
13818
  const onEvents = vue.computed(() => (
@@ -13989,6 +14053,7 @@
13989
14053
  useBackdrop.value === true
13990
14054
  ? vue.h('div', {
13991
14055
  class: 'q-dialog__backdrop fixed-full',
14056
+ style: transitionStyle.value,
13992
14057
  'aria-hidden': 'true',
13993
14058
  onMousedown: onBackdropClick
13994
14059
  })
@@ -14003,6 +14068,7 @@
14003
14068
  ? vue.h('div', {
14004
14069
  ref: innerRef,
14005
14070
  class: classes.value,
14071
+ style: transitionStyle.value,
14006
14072
  tabindex: -1,
14007
14073
  ...onEvents.value
14008
14074
  }, hSlot(slots.default))
@@ -14464,6 +14530,9 @@
14464
14530
  flagMiniAnimate.value = true;
14465
14531
  timerMini = setTimeout(() => {
14466
14532
  flagMiniAnimate.value = false;
14533
+ if (vm && vm.proxy && vm.proxy.$el) {
14534
+ vm.proxy.$el.classList.remove('q-drawer--mini-animate');
14535
+ }
14467
14536
  }, 150);
14468
14537
  }
14469
14538
 
@@ -19790,7 +19859,11 @@
19790
19859
  size: {
19791
19860
  type: [ String, Number ],
19792
19861
  default: 42
19793
- }
19862
+ },
19863
+
19864
+ label: String,
19865
+ labelClass: String,
19866
+ labelStyle: [ String, Array, Object ]
19794
19867
  },
19795
19868
 
19796
19869
  setup (props, { slots }) {
@@ -19804,6 +19877,31 @@
19804
19877
  + (isDark.value === true ? ' q-inner-loading--dark' : '')
19805
19878
  );
19806
19879
 
19880
+ const labelClass = vue.computed(() =>
19881
+ 'q-inner-loading__label'
19882
+ + (props.labelClass !== void 0 ? ` ${ props.labelClass}` : '')
19883
+ );
19884
+
19885
+ function getInner () {
19886
+ const child = [
19887
+ vue.h(QSpinner, {
19888
+ size: props.size,
19889
+ color: props.color
19890
+ })
19891
+ ];
19892
+
19893
+ if (props.label !== void 0) {
19894
+ child.push(
19895
+ vue.h('div', {
19896
+ class: labelClass.value,
19897
+ style: props.labelStyle
19898
+ }, [ props.label ])
19899
+ );
19900
+ }
19901
+
19902
+ return child
19903
+ }
19904
+
19807
19905
  function getContent () {
19808
19906
  return props.showing === true
19809
19907
  ? vue.h(
@@ -19811,12 +19909,7 @@
19811
19909
  { class: classes.value, style: transitionStyle.value },
19812
19910
  slots.default !== void 0
19813
19911
  ? slots.default()
19814
- : [
19815
- vue.h(QSpinner, {
19816
- size: props.size,
19817
- color: props.color
19818
- })
19819
- ]
19912
+ : getInner()
19820
19913
  )
19821
19914
  : null
19822
19915
  }
@@ -21929,7 +22022,7 @@
21929
22022
 
21930
22023
  emits: [ 'update:modelValue' ],
21931
22024
 
21932
- setup (props, { emit }) {
22025
+ setup (props, { emit, slots }) {
21933
22026
  const { proxy: { $q } } = vue.getCurrentInstance();
21934
22027
 
21935
22028
  const arrayModel = Array.isArray(props.modelValue);
@@ -21973,24 +22066,34 @@
21973
22066
  return () => vue.h('div', {
21974
22067
  class: classes.value,
21975
22068
  ...attrs.value
21976
- }, props.options.map(opt => vue.h('div', [
21977
- vue.h(component.value, {
21978
- modelValue: props.modelValue,
21979
- val: opt.value,
21980
- name: opt.name === void 0 ? props.name : opt.name,
21981
- disable: props.disable || opt.disable,
21982
- label: opt.label,
21983
- leftLabel: opt.leftLabel === void 0 ? props.leftLabel : opt.leftLabel,
21984
- color: opt.color === void 0 ? props.color : opt.color,
21985
- checkedIcon: opt.checkedIcon,
21986
- uncheckedIcon: opt.uncheckedIcon,
21987
- dark: opt.dark || isDark.value,
21988
- size: opt.size === void 0 ? props.size : opt.size,
21989
- dense: props.dense,
21990
- keepColor: opt.keepColor === void 0 ? props.keepColor : opt.keepColor,
21991
- 'onUpdate:modelValue': onUpdateModelValue
21992
- })
21993
- ])))
22069
+ }, props.options.map((opt, i) => {
22070
+ const child = slots[ 'label-' + i ] !== void 0
22071
+ ? () => slots[ 'label-' + i ](opt)
22072
+ : (
22073
+ slots.label !== void 0
22074
+ ? () => slots.label(opt)
22075
+ : void 0
22076
+ );
22077
+
22078
+ return vue.h('div', [
22079
+ vue.h(component.value, {
22080
+ modelValue: props.modelValue,
22081
+ val: opt.value,
22082
+ name: opt.name === void 0 ? props.name : opt.name,
22083
+ disable: props.disable || opt.disable,
22084
+ label: child === void 0 ? opt.label : null,
22085
+ leftLabel: opt.leftLabel === void 0 ? props.leftLabel : opt.leftLabel,
22086
+ color: opt.color === void 0 ? props.color : opt.color,
22087
+ checkedIcon: opt.checkedIcon,
22088
+ uncheckedIcon: opt.uncheckedIcon,
22089
+ dark: opt.dark || isDark.value,
22090
+ size: opt.size === void 0 ? props.size : opt.size,
22091
+ dense: props.dense,
22092
+ keepColor: opt.keepColor === void 0 ? props.keepColor : opt.keepColor,
22093
+ 'onUpdate:modelValue': onUpdateModelValue
22094
+ }, child)
22095
+ ])
22096
+ }))
21994
22097
  }
21995
22098
  });
21996
22099
 
@@ -23942,7 +24045,7 @@
23942
24045
  })
23943
24046
  ];
23944
24047
 
23945
- props.markers === true && track.push(
24048
+ props.markers !== false && track.push(
23946
24049
  vue.h('div', {
23947
24050
  class: `q-slider__track-markers q-slider__track-markers${ state.axis.value } absolute-full fit`,
23948
24051
  style: state.markerStyle.value
@@ -24068,6 +24171,51 @@
24068
24171
  }
24069
24172
  });
24070
24173
 
24174
+ const stars = vue.computed(() => {
24175
+ const
24176
+ acc = [],
24177
+ icons = iconData.value,
24178
+ ceil = Math.ceil(props.modelValue);
24179
+
24180
+ const halfIndex = props.iconHalf === void 0 || ceil === props.modelValue
24181
+ ? -1
24182
+ : ceil;
24183
+
24184
+ for (let i = 1; i <= props.max; i++) {
24185
+ const
24186
+ active = (mouseModel.value === 0 && props.modelValue >= i) || (mouseModel.value > 0 && mouseModel.value >= i),
24187
+ half = halfIndex === i && mouseModel.value < i,
24188
+ exSelected = mouseModel.value > 0 && (half === true ? ceil : props.modelValue) >= i && mouseModel.value < i,
24189
+ color = half === true
24190
+ ? (i <= icons.halfColorLen ? props.colorHalf[ i - 1 ] : icons.halfColor)
24191
+ : (
24192
+ icons.selColor !== void 0 && active === true
24193
+ ? (i <= icons.selColorLen ? props.colorSelected[ i - 1 ] : icons.selColor)
24194
+ : (i <= icons.colorLen ? props.color[ i - 1 ] : icons.color)
24195
+ );
24196
+
24197
+ acc.push({
24198
+ name: (
24199
+ half === true
24200
+ ? (i <= icons.halfIconLen ? props.iconHalf[ i - 1 ] : icons.halfIcon)
24201
+ : (
24202
+ icons.selIcon !== void 0 && (active === true || exSelected === true)
24203
+ ? (i <= icons.selIconLen ? props.iconSelected[ i - 1 ] : icons.selIcon)
24204
+ : (i <= icons.iconLen ? props.icon[ i - 1 ] : icons.icon)
24205
+ )
24206
+ ) || $q.iconSet.rating.icon,
24207
+
24208
+ classes: 'q-rating__icon'
24209
+ + (active === true || half === true ? ' q-rating__icon--active' : '')
24210
+ + (exSelected === true ? ' q-rating__icon--exselected' : '')
24211
+ + (mouseModel.value === i ? ' q-rating__icon--hovered' : '')
24212
+ + (color !== void 0 ? ` text-${ color }` : '')
24213
+ });
24214
+ }
24215
+
24216
+ return acc
24217
+ });
24218
+
24071
24219
  const attributes = vue.computed(() => {
24072
24220
  if (props.disable === true) {
24073
24221
  return { 'aria-disabled': 'true' }
@@ -24077,6 +24225,8 @@
24077
24225
  }
24078
24226
  });
24079
24227
 
24228
+ const tabindex = vue.computed(() => (editable.value === true ? 0 : null));
24229
+
24080
24230
  function set (value) {
24081
24231
  if (editable.value === true) {
24082
24232
  const
@@ -24124,57 +24274,29 @@
24124
24274
  });
24125
24275
 
24126
24276
  return () => {
24127
- const
24128
- child = [],
24129
- tabindex = editable.value === true ? 0 : null,
24130
- icons = iconData.value,
24131
- ceil = Math.ceil(props.modelValue);
24277
+ const child = [];
24132
24278
 
24133
- const halfIndex = props.iconHalf === void 0 || ceil === props.modelValue
24134
- ? -1
24135
- : ceil;
24136
-
24137
- for (let i = 1; i <= props.max; i++) {
24138
- const
24139
- active = (mouseModel.value === 0 && props.modelValue >= i) || (mouseModel.value > 0 && mouseModel.value >= i),
24140
- half = halfIndex === i && mouseModel.value < i,
24141
- exSelected = mouseModel.value > 0 && (half === true ? ceil : props.modelValue) >= i && mouseModel.value < i,
24142
- name = half === true
24143
- ? (i <= icons.halfIconLen ? props.iconHalf[ i - 1 ] : icons.halfIcon)
24144
- : (
24145
- icons.selIcon !== void 0 && (active === true || exSelected === true)
24146
- ? (i <= icons.selIconLen ? props.iconSelected[ i - 1 ] : icons.selIcon)
24147
- : (i <= icons.iconLen ? props.icon[ i - 1 ] : icons.icon)
24148
- ),
24149
- color = half === true
24150
- ? (i <= icons.halfColorLen ? props.colorHalf[ i - 1 ] : icons.halfColor)
24151
- : (
24152
- icons.selColor !== void 0 && active === true
24153
- ? (i <= icons.selColorLen ? props.colorSelected[ i - 1 ] : icons.selColor)
24154
- : (i <= icons.colorLen ? props.color[ i - 1 ] : icons.color)
24155
- ),
24156
- classes = 'q-rating__icon'
24157
- + (active === true || half === true ? ' q-rating__icon--active' : '')
24158
- + (exSelected === true ? ' q-rating__icon--exselected' : '')
24159
- + (mouseModel.value === i ? ' q-rating__icon--hovered' : '')
24160
- + (color !== void 0 ? ` text-${ color }` : '');
24279
+ stars.value.forEach(({ classes, name }, index) => {
24280
+ const i = index + 1;
24161
24281
 
24162
24282
  child.push(
24163
- vue.h(QIcon, {
24283
+ vue.h('div', {
24164
24284
  key: i,
24165
24285
  ref: vm => { iconRefs[ `rt${ i }` ] = vm; },
24166
- class: classes,
24167
- name: name || $q.iconSet.rating.icon,
24168
- tabindex,
24286
+ class: 'q-rating__icon-container flex flex-center',
24287
+ tabindex: tabindex.value,
24169
24288
  onClick () { set(i); },
24170
24289
  onMouseover () { setHoverValue(i); },
24171
24290
  onMouseout: resetMouseModel,
24172
24291
  onFocus () { setHoverValue(i); },
24173
24292
  onBlur: resetMouseModel,
24174
24293
  onKeyup (e) { onKeyup(e, i); }
24175
- }, slots[ `tip-${ i }` ])
24294
+ }, hMergeSlot(
24295
+ slots[ `tip-${ i }` ],
24296
+ [ vue.h(QIcon, { class: classes, name }) ]
24297
+ ))
24176
24298
  );
24177
- }
24299
+ });
24178
24300
 
24179
24301
  if (props.name !== void 0 && props.disable !== true) {
24180
24302
  injectFormInput(child, 'push');
@@ -25590,7 +25712,7 @@
25590
25712
  const tabindex = vue.computed(() => (state.focused.value === true ? props.tabindex : -1));
25591
25713
 
25592
25714
  const comboboxAttrs = vue.computed(() => ({
25593
- tabindex: tabindex.value,
25715
+ tabindex: props.tabindex,
25594
25716
  role: 'combobox',
25595
25717
  'aria-label': props.label,
25596
25718
  'aria-autocomplete': props.useInput === true ? 'list' : 'none',
@@ -26874,6 +26996,10 @@
26874
26996
  validator: v => skeletonAnimations.includes(v),
26875
26997
  default: 'wave'
26876
26998
  },
26999
+ animationSpeed: {
27000
+ type: [ String, Number ],
27001
+ default: 1500
27002
+ },
26877
27003
 
26878
27004
  square: Boolean,
26879
27005
  bordered: Boolean,
@@ -26887,11 +27013,17 @@
26887
27013
  const vm = vue.getCurrentInstance();
26888
27014
  const isDark = useDark(props, vm.proxy.$q);
26889
27015
 
26890
- const style = vue.computed(() => (
26891
- props.size !== void 0
26892
- ? { width: props.size, height: props.size }
26893
- : { width: props.width, height: props.height }
26894
- ));
27016
+ const style = vue.computed(() => {
27017
+ const size = props.size !== void 0
27018
+ ? [ props.size, props.size ]
27019
+ : [ props.width, props.height ];
27020
+
27021
+ return {
27022
+ '--q-skeleton-speed': `${ props.animationSpeed }ms`,
27023
+ width: size[ 0 ],
27024
+ height: size[ 1 ]
27025
+ }
27026
+ });
26895
27027
 
26896
27028
  const classes = vue.computed(() =>
26897
27029
  `q-skeleton q-skeleton--${ isDark.value === true ? 'dark' : 'light' } q-skeleton--type-${ props.type }`
@@ -29379,6 +29511,12 @@
29379
29511
  + (isDisable.value === true ? ' q-stepper__tab--disabled' : '')
29380
29512
  });
29381
29513
 
29514
+ const ripple = vue.computed(() => (
29515
+ props.stepper.headerNav !== true
29516
+ ? false
29517
+ : headerNav.value
29518
+ ));
29519
+
29382
29520
  function onActivate () {
29383
29521
  blurRef.value !== null && blurRef.value.focus();
29384
29522
  isActive.value === false && props.goToPanel(props.step.name);
@@ -29434,13 +29572,9 @@
29434
29572
  );
29435
29573
  }
29436
29574
 
29437
- return hDir(
29438
- 'div',
29439
- data,
29440
- child,
29441
- 'head',
29442
- props.stepper.headerNav === true && headerNav.value !== false,
29443
- () => [ [ Ripple, headerNav.value ] ]
29575
+ return vue.withDirectives(
29576
+ vue.h('div', data, child),
29577
+ [ [ Ripple, ripple.value ] ]
29444
29578
  )
29445
29579
  }
29446
29580
  }
@@ -31927,8 +32061,6 @@
31927
32061
  defaultDateModel.value
31928
32062
  );
31929
32063
 
31930
- console.log({ ...model });
31931
-
31932
32064
  if (
31933
32065
  model.dateHash !== innerModel.value.dateHash
31934
32066
  || model.timeHash !== innerModel.value.timeHash
@@ -38587,7 +38719,7 @@
38587
38719
  });
38588
38720
 
38589
38721
  var index_umd = {
38590
- version: '2.1.8',
38722
+ version: '2.2.2',
38591
38723
  install (app, opts) {
38592
38724
  installQuasar(app, {
38593
38725
  components,