quasar 2.1.6 → 2.2.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 (146) hide show
  1. package/dist/api/QCarousel.json +19 -5
  2. package/dist/api/QColor.json +8 -1
  3. package/dist/api/QDate.json +2 -1
  4. package/dist/api/QFile.json +2 -1
  5. package/dist/api/QInnerLoading.json +32 -0
  6. package/dist/api/QInput.json +2 -1
  7. package/dist/api/QOptionGroup.json +22 -0
  8. package/dist/api/QRadio.json +2 -1
  9. package/dist/api/QRange.json +5 -1
  10. package/dist/api/QSelect.json +2 -1
  11. package/dist/api/QSkeleton.json +14 -0
  12. package/dist/api/QSlider.json +2 -1
  13. package/dist/api/QStepper.json +16 -2
  14. package/dist/api/QTabPanels.json +16 -2
  15. package/dist/api/QTabs.json +2 -1
  16. package/dist/api/QTime.json +2 -1
  17. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  18. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  19. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  20. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  21. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  22. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  23. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  24. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  25. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  26. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  27. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  28. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  29. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  30. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  40. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  41. package/dist/icon-set/svg-mdi-v4.umd.prod.js +1 -1
  42. package/dist/icon-set/svg-mdi-v5.umd.prod.js +1 -1
  43. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  44. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  45. package/dist/icon-set/themify.umd.prod.js +1 -1
  46. package/dist/lang/ar.umd.prod.js +1 -1
  47. package/dist/lang/az-Latn.umd.prod.js +1 -1
  48. package/dist/lang/bg.umd.prod.js +1 -1
  49. package/dist/lang/bn.umd.prod.js +1 -1
  50. package/dist/lang/ca.umd.prod.js +1 -1
  51. package/dist/lang/cs.umd.prod.js +1 -1
  52. package/dist/lang/da.umd.prod.js +1 -1
  53. package/dist/lang/de.umd.prod.js +1 -1
  54. package/dist/lang/el.umd.prod.js +1 -1
  55. package/dist/lang/en-GB.umd.prod.js +1 -1
  56. package/dist/lang/en-US.umd.prod.js +1 -1
  57. package/dist/lang/eo.umd.prod.js +1 -1
  58. package/dist/lang/es.umd.prod.js +1 -1
  59. package/dist/lang/et.umd.prod.js +1 -1
  60. package/dist/lang/fa-IR.umd.prod.js +1 -1
  61. package/dist/lang/fa.umd.prod.js +1 -1
  62. package/dist/lang/fi.umd.prod.js +1 -1
  63. package/dist/lang/fr.umd.prod.js +1 -1
  64. package/dist/lang/gn.umd.prod.js +1 -1
  65. package/dist/lang/he.umd.prod.js +1 -1
  66. package/dist/lang/hr.umd.prod.js +1 -1
  67. package/dist/lang/hu.umd.prod.js +1 -1
  68. package/dist/lang/id.umd.prod.js +1 -1
  69. package/dist/lang/is.umd.prod.js +1 -1
  70. package/dist/lang/it.umd.prod.js +1 -1
  71. package/dist/lang/ja.umd.prod.js +1 -1
  72. package/dist/lang/km.umd.prod.js +1 -1
  73. package/dist/lang/ko-KR.umd.prod.js +1 -1
  74. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  75. package/dist/lang/lt.umd.prod.js +6 -0
  76. package/dist/lang/lu.umd.prod.js +1 -1
  77. package/dist/lang/lv.umd.prod.js +1 -1
  78. package/dist/lang/ml.umd.prod.js +1 -1
  79. package/dist/lang/ms.umd.prod.js +1 -1
  80. package/dist/lang/nb-NO.umd.prod.js +1 -1
  81. package/dist/lang/nl.umd.prod.js +1 -1
  82. package/dist/lang/pl.umd.prod.js +1 -1
  83. package/dist/lang/pt-BR.umd.prod.js +1 -1
  84. package/dist/lang/pt.umd.prod.js +1 -1
  85. package/dist/lang/ro.umd.prod.js +1 -1
  86. package/dist/lang/ru.umd.prod.js +1 -1
  87. package/dist/lang/sk.umd.prod.js +1 -1
  88. package/dist/lang/sl.umd.prod.js +1 -1
  89. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  90. package/dist/lang/sr.umd.prod.js +1 -1
  91. package/dist/lang/sv.umd.prod.js +1 -1
  92. package/dist/lang/ta.umd.prod.js +1 -1
  93. package/dist/lang/th.umd.prod.js +1 -1
  94. package/dist/lang/tr.umd.prod.js +1 -1
  95. package/dist/lang/ug.umd.prod.js +2 -2
  96. package/dist/lang/uk.umd.prod.js +1 -1
  97. package/dist/lang/vi.umd.prod.js +1 -1
  98. package/dist/lang/zh-CN.umd.prod.js +1 -1
  99. package/dist/lang/zh-TW.umd.prod.js +1 -1
  100. package/dist/quasar.cjs.prod.js +2 -2
  101. package/dist/quasar.css +24 -17
  102. package/dist/quasar.esm.prod.js +2 -2
  103. package/dist/quasar.prod.css +1 -1
  104. package/dist/quasar.rtl.css +29 -22
  105. package/dist/quasar.rtl.prod.css +1 -1
  106. package/dist/quasar.sass +24 -16
  107. package/dist/quasar.umd.js +240 -195
  108. package/dist/quasar.umd.prod.js +2 -2
  109. package/dist/ssr-directives/Morph.js +1 -1
  110. package/dist/types/index.d.ts +1868 -1521
  111. package/dist/vetur/quasar-attributes.json +43 -11
  112. package/dist/vetur/quasar-tags.json +9 -1
  113. package/dist/web-types/web-types.json +103 -15
  114. package/lang/index.json +4 -0
  115. package/lang/lt.js +103 -0
  116. package/lang/ug.js +42 -42
  117. package/package.json +1 -1
  118. package/src/components/carousel/QCarousel.js +8 -1
  119. package/src/components/carousel/QCarousel.json +9 -1
  120. package/src/components/color/QColor.js +73 -61
  121. package/src/components/color/QColor.json +8 -1
  122. package/src/components/color/QColor.sass +5 -1
  123. package/src/components/date/QDate.json +1 -1
  124. package/src/components/dialog/QDialog.js +6 -0
  125. package/src/components/file/QFile.json +1 -1
  126. package/src/components/inner-loading/QInnerLoading.js +31 -7
  127. package/src/components/inner-loading/QInnerLoading.json +29 -0
  128. package/src/components/inner-loading/QInnerLoading.sass +4 -0
  129. package/src/components/input/QInput.json +1 -1
  130. package/src/components/option-group/QOptionGroup.js +29 -19
  131. package/src/components/option-group/QOptionGroup.json +26 -0
  132. package/src/components/radio/QRadio.json +1 -1
  133. package/src/components/range/QRange.json +1 -1
  134. package/src/components/rating/QRating.js +59 -39
  135. package/src/components/rating/QRating.sass +8 -6
  136. package/src/components/select/QSelect.js +5 -53
  137. package/src/components/select/QSelect.json +1 -1
  138. package/src/components/skeleton/QSkeleton.js +15 -5
  139. package/src/components/skeleton/QSkeleton.json +9 -0
  140. package/src/components/skeleton/QSkeleton.sass +7 -6
  141. package/src/components/slider/QSlider.json +1 -1
  142. package/src/components/tabs/QTabs.json +1 -1
  143. package/src/components/time/QTime.json +1 -1
  144. package/src/composables/private/use-panel.js +13 -8
  145. package/src/composables/private/use-panel.json +11 -2
  146. package/src/css/core/transitions.sass +4 -4
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.1.6
2
+ * Quasar Framework v2.2.0
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.6' };
1440
+ const $q = { version: '2.2.0' };
1441
1441
 
1442
1442
  if (globalConfigIsFrozen === false) {
1443
1443
  if (opts.config !== void 0) {
@@ -6064,6 +6064,10 @@
6064
6064
 
6065
6065
  transitionPrev: String,
6066
6066
  transitionNext: String,
6067
+ transitionDuration: {
6068
+ type: [ String, Number ],
6069
+ default: 300
6070
+ },
6067
6071
 
6068
6072
  keepAlive: Boolean,
6069
6073
  keepAliveInclude: [ String, Array, RegExp ],
@@ -6109,6 +6113,10 @@
6109
6113
  props.transitionNext || `slide-${ props.vertical === true ? 'up' : 'left' }`
6110
6114
  );
6111
6115
 
6116
+ const transitionStyle = vue.computed(
6117
+ () => `--q-transition-duration: ${ props.transitionDuration }ms`
6118
+ );
6119
+
6112
6120
  const contentKey = vue.computed(() => (
6113
6121
  typeof props.modelValue === 'string' || typeof props.modelValue === 'number'
6114
6122
  ? props.modelValue
@@ -6228,7 +6236,7 @@
6228
6236
  }
6229
6237
 
6230
6238
  function getPanelContentChild () {
6231
- const panel = isValidPanelName(props.modelValue)
6239
+ const panel = isValidPanelName(props.modelValue) === true
6232
6240
  && updatePanelIndex()
6233
6241
  && panels[ panelIndex.value ];
6234
6242
 
@@ -6239,7 +6247,7 @@
6239
6247
  needsUniqueKeepAliveWrapper.value === true
6240
6248
  ? getCacheWithFn(contentKey.value, () => ({ ...PanelWrapper$1, name: contentKey.value }))
6241
6249
  : PanelWrapper$1,
6242
- { key: contentKey.value },
6250
+ { key: contentKey.value, style: transitionStyle.value },
6243
6251
  () => panel
6244
6252
  )
6245
6253
  ])
@@ -6247,6 +6255,7 @@
6247
6255
  : [
6248
6256
  vue.h('div', {
6249
6257
  class: 'q-panel scroll',
6258
+ style: transitionStyle.value,
6250
6259
  key: contentKey.value,
6251
6260
  role: 'tabpanel'
6252
6261
  }, [ panel ])
@@ -6259,11 +6268,7 @@
6259
6268
  }
6260
6269
 
6261
6270
  return props.animated === true
6262
- ? [
6263
- vue.h(vue.Transition, {
6264
- name: panelTransition.value
6265
- }, getPanelContentChild)
6266
- ]
6271
+ ? [ vue.h(vue.Transition, { name: panelTransition.value }, getPanelContentChild) ]
6267
6272
  : getPanelContentChild()
6268
6273
  }
6269
6274
 
@@ -6273,7 +6278,7 @@
6273
6278
  ).filter(
6274
6279
  panel => panel.props !== null
6275
6280
  && panel.props.slot === void 0
6276
- && isValidPanelName(panel.props.name)
6281
+ && isValidPanelName(panel.props.name) === true
6277
6282
  );
6278
6283
 
6279
6284
  return panels.length
@@ -6661,7 +6666,14 @@
6661
6666
  });
6662
6667
 
6663
6668
  function startTimer () {
6664
- timer = setTimeout(nextPanel, isNumber(props.autoplay) ? props.autoplay : 5000);
6669
+ const duration = isNumber(props.autoplay) === true
6670
+ ? props.autoplay
6671
+ : 5000;
6672
+
6673
+ timer = setTimeout(
6674
+ duration >= 0 ? nextPanel : previousPanel,
6675
+ Math.abs(duration)
6676
+ );
6665
6677
  }
6666
6678
 
6667
6679
  vue.onMounted(() => {
@@ -9924,6 +9936,7 @@
9924
9936
  palette: Array,
9925
9937
 
9926
9938
  noHeader: Boolean,
9939
+ noHeaderTabs: Boolean,
9927
9940
  noFooter: Boolean,
9928
9941
 
9929
9942
  square: Boolean,
@@ -10009,7 +10022,7 @@
10009
10022
  ? true
10010
10023
  : luminosity(model.value) > 0.4;
10011
10024
 
10012
- return 'q-color-picker__header-content absolute-full'
10025
+ return 'q-color-picker__header-content'
10013
10026
  + ` q-color-picker__header-content--${ light ? 'light' : 'dark' }`
10014
10027
  });
10015
10028
 
@@ -10360,6 +10373,63 @@
10360
10373
  }
10361
10374
 
10362
10375
  function getHeader () {
10376
+ const child = [];
10377
+
10378
+ props.noHeaderTabs !== true && child.push(
10379
+ vue.h(QTabs, {
10380
+ class: 'q-color-picker__header-tabs',
10381
+ modelValue: topView.value,
10382
+ dense: true,
10383
+ align: 'justify',
10384
+ ...getCache('topVTab', {
10385
+ 'onUpdate:modelValue': val => { topView.value = val; }
10386
+ })
10387
+ }, () => [
10388
+ vue.h(QTab, {
10389
+ label: 'HEX' + (hasAlpha.value === true ? 'A' : ''),
10390
+ name: 'hex',
10391
+ ripple: false
10392
+ }),
10393
+
10394
+ vue.h(QTab, {
10395
+ label: 'RGB' + (hasAlpha.value === true ? 'A' : ''),
10396
+ name: 'rgb',
10397
+ ripple: false
10398
+ })
10399
+ ])
10400
+ );
10401
+
10402
+ child.push(
10403
+ vue.h('div', {
10404
+ class: 'q-color-picker__header-banner row flex-center no-wrap'
10405
+ }, [
10406
+ vue.h('input', {
10407
+ class: 'fit',
10408
+ value: model.value[ topView.value ],
10409
+ ...(editable.value !== true
10410
+ ? { readonly: true }
10411
+ : {}
10412
+ ),
10413
+ ...getCache('topIn', {
10414
+ onInput: evt => {
10415
+ updateErrorIcon(onEditorChange(evt) === true);
10416
+ },
10417
+ onChange: stop,
10418
+ onBlur: evt => {
10419
+ onEditorChange(evt, true) === true && proxy.$forceUpdate();
10420
+ updateErrorIcon(false);
10421
+ }
10422
+ })
10423
+ }),
10424
+
10425
+ vue.h(QIcon, {
10426
+ ref: errorIconRef,
10427
+ class: 'q-color-picker__error-icon absolute no-pointer-events',
10428
+ name: $q.iconSet.type.negative
10429
+ })
10430
+ ])
10431
+ );
10432
+
10363
10433
  return vue.h('div', {
10364
10434
  class: 'q-color-picker__header relative-position overflow-hidden'
10365
10435
  }, [
@@ -10368,57 +10438,7 @@
10368
10438
  vue.h('div', {
10369
10439
  class: headerClass.value,
10370
10440
  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
- ])
10441
+ }, child)
10422
10442
  ])
10423
10443
  }
10424
10444
 
@@ -10654,19 +10674,23 @@
10654
10674
  }
10655
10675
 
10656
10676
  function getPaletteTab () {
10677
+ const fn = color => vue.h('div', {
10678
+ class: 'q-color-picker__cube col-auto',
10679
+ style: { backgroundColor: color },
10680
+ ...(
10681
+ editable.value === true
10682
+ ? getCache('palette#' + color, {
10683
+ onClick: () => { onPalettePick(color); }
10684
+ })
10685
+ : {}
10686
+ )
10687
+ });
10688
+
10657
10689
  return [
10658
10690
  vue.h('div', {
10659
10691
  class: 'row items-center q-color-picker__palette-rows'
10660
10692
  + (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
- })))
10693
+ }, computedPalette.value.map(fn))
10670
10694
  ]
10671
10695
  }
10672
10696
 
@@ -13749,6 +13773,10 @@
13749
13773
  : transitionShow.value
13750
13774
  ));
13751
13775
 
13776
+ const transitionStyle = vue.computed(
13777
+ () => `--q-transition-duration: ${ props.transitionDuration }ms`
13778
+ );
13779
+
13752
13780
  const useBackdrop = vue.computed(() => showing.value === true && props.seamless !== true);
13753
13781
 
13754
13782
  const onEvents = vue.computed(() => (
@@ -13989,6 +14017,7 @@
13989
14017
  useBackdrop.value === true
13990
14018
  ? vue.h('div', {
13991
14019
  class: 'q-dialog__backdrop fixed-full',
14020
+ style: transitionStyle.value,
13992
14021
  'aria-hidden': 'true',
13993
14022
  onMousedown: onBackdropClick
13994
14023
  })
@@ -14003,6 +14032,7 @@
14003
14032
  ? vue.h('div', {
14004
14033
  ref: innerRef,
14005
14034
  class: classes.value,
14035
+ style: transitionStyle.value,
14006
14036
  tabindex: -1,
14007
14037
  ...onEvents.value
14008
14038
  }, hSlot(slots.default))
@@ -19790,7 +19820,11 @@
19790
19820
  size: {
19791
19821
  type: [ String, Number ],
19792
19822
  default: 42
19793
- }
19823
+ },
19824
+
19825
+ label: String,
19826
+ labelClass: String,
19827
+ labelStyle: [ String, Array, Object ]
19794
19828
  },
19795
19829
 
19796
19830
  setup (props, { slots }) {
@@ -19804,6 +19838,31 @@
19804
19838
  + (isDark.value === true ? ' q-inner-loading--dark' : '')
19805
19839
  );
19806
19840
 
19841
+ const labelClass = vue.computed(() =>
19842
+ 'q-inner-loading__label'
19843
+ + (props.labelClass !== void 0 ? ` ${ props.labelClass}` : '')
19844
+ );
19845
+
19846
+ function getInner () {
19847
+ const child = [
19848
+ vue.h(QSpinner, {
19849
+ size: props.size,
19850
+ color: props.color
19851
+ })
19852
+ ];
19853
+
19854
+ if (props.label !== void 0) {
19855
+ child.push(
19856
+ vue.h('div', {
19857
+ class: labelClass.value,
19858
+ style: props.labelStyle
19859
+ }, [ props.label ])
19860
+ );
19861
+ }
19862
+
19863
+ return child
19864
+ }
19865
+
19807
19866
  function getContent () {
19808
19867
  return props.showing === true
19809
19868
  ? vue.h(
@@ -19811,12 +19870,7 @@
19811
19870
  { class: classes.value, style: transitionStyle.value },
19812
19871
  slots.default !== void 0
19813
19872
  ? slots.default()
19814
- : [
19815
- vue.h(QSpinner, {
19816
- size: props.size,
19817
- color: props.color
19818
- })
19819
- ]
19873
+ : getInner()
19820
19874
  )
19821
19875
  : null
19822
19876
  }
@@ -21929,7 +21983,7 @@
21929
21983
 
21930
21984
  emits: [ 'update:modelValue' ],
21931
21985
 
21932
- setup (props, { emit }) {
21986
+ setup (props, { emit, slots }) {
21933
21987
  const { proxy: { $q } } = vue.getCurrentInstance();
21934
21988
 
21935
21989
  const arrayModel = Array.isArray(props.modelValue);
@@ -21973,24 +22027,34 @@
21973
22027
  return () => vue.h('div', {
21974
22028
  class: classes.value,
21975
22029
  ...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
- ])))
22030
+ }, props.options.map((opt, i) => {
22031
+ const child = slots[ 'label-' + i ] !== void 0
22032
+ ? () => slots[ 'label-' + i ](opt)
22033
+ : (
22034
+ slots.label !== void 0
22035
+ ? () => slots.label(opt)
22036
+ : void 0
22037
+ );
22038
+
22039
+ return vue.h('div', [
22040
+ vue.h(component.value, {
22041
+ modelValue: props.modelValue,
22042
+ val: opt.value,
22043
+ name: opt.name === void 0 ? props.name : opt.name,
22044
+ disable: props.disable || opt.disable,
22045
+ label: child === void 0 ? opt.label : null,
22046
+ leftLabel: opt.leftLabel === void 0 ? props.leftLabel : opt.leftLabel,
22047
+ color: opt.color === void 0 ? props.color : opt.color,
22048
+ checkedIcon: opt.checkedIcon,
22049
+ uncheckedIcon: opt.uncheckedIcon,
22050
+ dark: opt.dark || isDark.value,
22051
+ size: opt.size === void 0 ? props.size : opt.size,
22052
+ dense: props.dense,
22053
+ keepColor: opt.keepColor === void 0 ? props.keepColor : opt.keepColor,
22054
+ 'onUpdate:modelValue': onUpdateModelValue
22055
+ }, child)
22056
+ ])
22057
+ }))
21994
22058
  }
21995
22059
  });
21996
22060
 
@@ -24068,6 +24132,51 @@
24068
24132
  }
24069
24133
  });
24070
24134
 
24135
+ const stars = vue.computed(() => {
24136
+ const
24137
+ acc = [],
24138
+ icons = iconData.value,
24139
+ ceil = Math.ceil(props.modelValue);
24140
+
24141
+ const halfIndex = props.iconHalf === void 0 || ceil === props.modelValue
24142
+ ? -1
24143
+ : ceil;
24144
+
24145
+ for (let i = 1; i <= props.max; i++) {
24146
+ const
24147
+ active = (mouseModel.value === 0 && props.modelValue >= i) || (mouseModel.value > 0 && mouseModel.value >= i),
24148
+ half = halfIndex === i && mouseModel.value < i,
24149
+ exSelected = mouseModel.value > 0 && (half === true ? ceil : props.modelValue) >= i && mouseModel.value < i,
24150
+ color = half === true
24151
+ ? (i <= icons.halfColorLen ? props.colorHalf[ i - 1 ] : icons.halfColor)
24152
+ : (
24153
+ icons.selColor !== void 0 && active === true
24154
+ ? (i <= icons.selColorLen ? props.colorSelected[ i - 1 ] : icons.selColor)
24155
+ : (i <= icons.colorLen ? props.color[ i - 1 ] : icons.color)
24156
+ );
24157
+
24158
+ acc.push({
24159
+ name: (
24160
+ half === true
24161
+ ? (i <= icons.halfIconLen ? props.iconHalf[ i - 1 ] : icons.halfIcon)
24162
+ : (
24163
+ icons.selIcon !== void 0 && (active === true || exSelected === true)
24164
+ ? (i <= icons.selIconLen ? props.iconSelected[ i - 1 ] : icons.selIcon)
24165
+ : (i <= icons.iconLen ? props.icon[ i - 1 ] : icons.icon)
24166
+ )
24167
+ ) || $q.iconSet.rating.icon,
24168
+
24169
+ classes: 'q-rating__icon'
24170
+ + (active === true || half === true ? ' q-rating__icon--active' : '')
24171
+ + (exSelected === true ? ' q-rating__icon--exselected' : '')
24172
+ + (mouseModel.value === i ? ' q-rating__icon--hovered' : '')
24173
+ + (color !== void 0 ? ` text-${ color }` : '')
24174
+ });
24175
+ }
24176
+
24177
+ return acc
24178
+ });
24179
+
24071
24180
  const attributes = vue.computed(() => {
24072
24181
  if (props.disable === true) {
24073
24182
  return { 'aria-disabled': 'true' }
@@ -24077,6 +24186,8 @@
24077
24186
  }
24078
24187
  });
24079
24188
 
24189
+ const tabindex = vue.computed(() => (editable.value === true ? 0 : null));
24190
+
24080
24191
  function set (value) {
24081
24192
  if (editable.value === true) {
24082
24193
  const
@@ -24124,57 +24235,29 @@
24124
24235
  });
24125
24236
 
24126
24237
  return () => {
24127
- const
24128
- child = [],
24129
- tabindex = editable.value === true ? 0 : null,
24130
- icons = iconData.value,
24131
- ceil = Math.ceil(props.modelValue);
24238
+ const child = [];
24132
24239
 
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 }` : '');
24240
+ stars.value.forEach(({ classes, name }, index) => {
24241
+ const i = index + 1;
24161
24242
 
24162
24243
  child.push(
24163
- vue.h(QIcon, {
24244
+ vue.h('div', {
24164
24245
  key: i,
24165
24246
  ref: vm => { iconRefs[ `rt${ i }` ] = vm; },
24166
- class: classes,
24167
- name: name || $q.iconSet.rating.icon,
24168
- tabindex,
24247
+ class: 'q-rating__icon-container flex flex-center',
24248
+ tabindex: tabindex.value,
24169
24249
  onClick () { set(i); },
24170
24250
  onMouseover () { setHoverValue(i); },
24171
24251
  onMouseout: resetMouseModel,
24172
24252
  onFocus () { setHoverValue(i); },
24173
24253
  onBlur: resetMouseModel,
24174
24254
  onKeyup (e) { onKeyup(e, i); }
24175
- }, slots[ `tip-${ i }` ])
24255
+ }, hMergeSlot(
24256
+ slots[ `tip-${ i }` ],
24257
+ [ vue.h(QIcon, { class: classes, name }) ]
24258
+ ))
24176
24259
  );
24177
- }
24260
+ });
24178
24261
 
24179
24262
  if (props.name !== void 0 && props.disable !== true) {
24180
24263
  injectFormInput(child, 'push');
@@ -25464,7 +25547,7 @@
25464
25547
  const dialogFieldFocused = vue.ref(false);
25465
25548
  const innerLoadingIndicator = vue.ref(false);
25466
25549
 
25467
- let inputTimer, innerValueCache, optionScopeCache,
25550
+ let inputTimer, innerValueCache,
25468
25551
  hasDialog, userInputValue, filterId, defaultInputValue,
25469
25552
  transitionShowComputed, searchBuffer, searchBufferExp;
25470
25553
 
@@ -25590,7 +25673,7 @@
25590
25673
  const tabindex = vue.computed(() => (state.focused.value === true ? props.tabindex : -1));
25591
25674
 
25592
25675
  const comboboxAttrs = vue.computed(() => ({
25593
- tabindex: tabindex.value,
25676
+ tabindex: props.tabindex,
25594
25677
  role: 'combobox',
25595
25678
  'aria-label': props.label,
25596
25679
  'aria-autocomplete': props.useInput === true ? 'list' : 'none',
@@ -25631,7 +25714,6 @@
25631
25714
  }
25632
25715
 
25633
25716
  const { from, to } = virtualScrollSliceRange.value;
25634
- const { options, optionEls } = optionScopeCache;
25635
25717
 
25636
25718
  return props.options.slice(from, to).map((opt, i) => {
25637
25719
  const disable = isOptionDisabled.value(opt) === true;
@@ -25663,7 +25745,7 @@
25663
25745
  }
25664
25746
  }
25665
25747
 
25666
- const option = {
25748
+ return {
25667
25749
  index,
25668
25750
  opt,
25669
25751
  html: needsHtmlFn.value(opt),
@@ -25673,23 +25755,7 @@
25673
25755
  toggleOption,
25674
25756
  setOptionIndex,
25675
25757
  itemProps
25676
- };
25677
-
25678
- const optionWithoutEvents = {
25679
- ...option,
25680
- itemProps: {
25681
- ...itemProps,
25682
- onClick: void 0,
25683
- onMousemove: void 0
25684
- }
25685
- };
25686
-
25687
- if (options[ i ] === void 0 || isDeepEqual(optionWithoutEvents, options[ i ]) !== true) {
25688
- options[ i ] = optionWithoutEvents;
25689
- optionEls[ i ] = void 0;
25690
25758
  }
25691
-
25692
- return option
25693
25759
  })
25694
25760
  });
25695
25761
 
@@ -26271,14 +26337,6 @@
26271
26337
  }
26272
26338
 
26273
26339
  function getAllOptions () {
26274
- if (
26275
- slots.option !== void 0
26276
- && optionScopeCache.optionSlot !== slots.option
26277
- ) {
26278
- optionScopeCache.optionSlot = slots.option;
26279
- optionScopeCache.optionEls = [];
26280
- }
26281
-
26282
26340
  const fn = slots.option !== void 0
26283
26341
  ? slots.option
26284
26342
  : scope => {
@@ -26298,17 +26356,7 @@
26298
26356
  })
26299
26357
  };
26300
26358
 
26301
- const { optionEls } = optionScopeCache;
26302
-
26303
- let options = padVirtualScroll('div', optionScope.value.map((scope, i) => {
26304
- if (optionEls[ i ] === void 0) {
26305
- optionEls[ i ] = fn(scope);
26306
- }
26307
-
26308
- // rendered vnode always needs a new
26309
- // "instance" otherwise DOM diff will say nothing changed
26310
- return { ...optionEls[ i ] }
26311
- }));
26359
+ let options = padVirtualScroll('div', optionScope.value.map(fn));
26312
26360
 
26313
26361
  if (slots[ 'before-options' ] !== void 0) {
26314
26362
  options = slots[ 'before-options' ]().concat(options);
@@ -26620,10 +26668,6 @@
26620
26668
  }
26621
26669
 
26622
26670
  function closeMenu () {
26623
- if (optionScopeCache !== void 0) {
26624
- optionScopeCache.optionEls = [];
26625
- }
26626
-
26627
26671
  if (dialog.value === true) {
26628
26672
  return
26629
26673
  }
@@ -26739,16 +26783,7 @@
26739
26783
 
26740
26784
  updatePreState();
26741
26785
 
26742
- vue.onBeforeMount(() => {
26743
- optionScopeCache = {
26744
- optionSlot: slots.option,
26745
- options: [],
26746
- optionEls: []
26747
- };
26748
- });
26749
-
26750
26786
  vue.onBeforeUnmount(() => {
26751
- optionScopeCache = void 0;
26752
26787
  clearTimeout(inputTimer);
26753
26788
  });
26754
26789
 
@@ -26922,6 +26957,10 @@
26922
26957
  validator: v => skeletonAnimations.includes(v),
26923
26958
  default: 'wave'
26924
26959
  },
26960
+ animationSpeed: {
26961
+ type: [ String, Number ],
26962
+ default: 1500
26963
+ },
26925
26964
 
26926
26965
  square: Boolean,
26927
26966
  bordered: Boolean,
@@ -26935,11 +26974,17 @@
26935
26974
  const vm = vue.getCurrentInstance();
26936
26975
  const isDark = useDark(props, vm.proxy.$q);
26937
26976
 
26938
- const style = vue.computed(() => (
26939
- props.size !== void 0
26940
- ? { width: props.size, height: props.size }
26941
- : { width: props.width, height: props.height }
26942
- ));
26977
+ const style = vue.computed(() => {
26978
+ const size = props.size !== void 0
26979
+ ? [ props.size, props.size ]
26980
+ : [ props.width, props.height ];
26981
+
26982
+ return {
26983
+ '--q-skeleton-speed': `${ props.animationSpeed }ms`,
26984
+ width: size[ 0 ],
26985
+ height: size[ 1 ]
26986
+ }
26987
+ });
26943
26988
 
26944
26989
  const classes = vue.computed(() =>
26945
26990
  `q-skeleton q-skeleton--${ isDark.value === true ? 'dark' : 'light' } q-skeleton--type-${ props.type }`
@@ -38635,7 +38680,7 @@
38635
38680
  });
38636
38681
 
38637
38682
  var index_umd = {
38638
- version: '2.1.6',
38683
+ version: '2.2.0',
38639
38684
  install (app, opts) {
38640
38685
  installQuasar(app, {
38641
38686
  components,