quasar 2.1.9 → 2.2.3

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 (270) 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 -23
  97. package/dist/quasar.esm.prod.js +2 -2
  98. package/dist/quasar.prod.css +1 -1
  99. package/dist/quasar.rtl.css +29 -28
  100. package/dist/quasar.rtl.prod.css +1 -1
  101. package/dist/quasar.sass +24 -18
  102. package/dist/quasar.umd.js +538 -391
  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/ajax-bar/QAjaxBar.js +3 -2
  114. package/src/components/avatar/QAvatar.js +3 -2
  115. package/src/components/badge/QBadge.js +3 -2
  116. package/src/components/banner/QBanner.js +3 -2
  117. package/src/components/bar/QBar.js +3 -2
  118. package/src/components/breadcrumbs/QBreadcrumbs.js +3 -2
  119. package/src/components/breadcrumbs/QBreadcrumbsEl.js +3 -2
  120. package/src/components/btn/QBtn.js +19 -21
  121. package/src/components/btn-dropdown/QBtnDropdown.js +3 -2
  122. package/src/components/btn-group/QBtnGroup.js +3 -2
  123. package/src/components/btn-toggle/QBtnToggle.js +3 -2
  124. package/src/components/card/QCard.js +3 -2
  125. package/src/components/card/QCardActions.js +3 -2
  126. package/src/components/card/QCardSection.js +3 -2
  127. package/src/components/carousel/QCarousel.js +11 -3
  128. package/src/components/carousel/QCarousel.json +9 -1
  129. package/src/components/carousel/QCarouselControl.js +3 -2
  130. package/src/components/carousel/QCarouselSlide.js +3 -2
  131. package/src/components/chat/QChatMessage.js +3 -2
  132. package/src/components/checkbox/QCheckbox.js +3 -2
  133. package/src/components/chip/QChip.js +3 -2
  134. package/src/components/circular-progress/QCircularProgress.js +3 -2
  135. package/src/components/color/QColor.js +76 -63
  136. package/src/components/color/QColor.json +7 -0
  137. package/src/components/color/QColor.sass +5 -1
  138. package/src/components/date/QDate.js +5 -3
  139. package/src/components/dialog/QDialog.js +9 -2
  140. package/src/components/dialog-bottom-sheet/BottomSheet.js +3 -2
  141. package/src/components/dialog-plugin/DialogPlugin.js +3 -2
  142. package/src/components/drawer/QDrawer.js +6 -2
  143. package/src/components/editor/QEditor.js +3 -2
  144. package/src/components/expansion-item/QExpansionItem.js +3 -2
  145. package/src/components/fab/QFab.js +3 -2
  146. package/src/components/fab/QFabAction.js +3 -2
  147. package/src/components/field/QField.js +3 -3
  148. package/src/components/file/QFile.js +3 -2
  149. package/src/components/footer/QFooter.js +3 -2
  150. package/src/components/form/QForm.js +3 -2
  151. package/src/components/header/QHeader.js +3 -2
  152. package/src/components/icon/QIcon.js +4 -2
  153. package/src/components/img/QImg.js +5 -2
  154. package/src/components/infinite-scroll/QInfiniteScroll.js +3 -2
  155. package/src/components/inner-loading/QInnerLoading.js +34 -9
  156. package/src/components/inner-loading/QInnerLoading.json +29 -0
  157. package/src/components/inner-loading/QInnerLoading.sass +4 -0
  158. package/src/components/input/QInput.js +3 -2
  159. package/src/components/intersection/QIntersection.js +3 -2
  160. package/src/components/item/QItem.js +3 -2
  161. package/src/components/item/QItemLabel.js +3 -2
  162. package/src/components/item/QItemSection.js +3 -2
  163. package/src/components/item/QList.js +3 -3
  164. package/src/components/knob/QKnob.js +3 -2
  165. package/src/components/layout/QLayout.js +3 -2
  166. package/src/components/linear-progress/QLinearProgress.js +3 -2
  167. package/src/components/markup-table/QMarkupTable.js +3 -2
  168. package/src/components/menu/QMenu.js +4 -3
  169. package/src/components/no-ssr/QNoSsr.js +3 -2
  170. package/src/components/option-group/QOptionGroup.js +33 -21
  171. package/src/components/option-group/QOptionGroup.json +50 -1
  172. package/src/components/page/QPage.js +3 -2
  173. package/src/components/page/QPageContainer.js +3 -2
  174. package/src/components/page-scroller/QPageScroller.js +4 -2
  175. package/src/components/page-sticky/QPageSticky.js +2 -3
  176. package/src/components/pagination/QPagination.js +3 -2
  177. package/src/components/parallax/QParallax.js +3 -2
  178. package/src/components/popup-edit/QPopupEdit.js +3 -2
  179. package/src/components/popup-proxy/QPopupProxy.js +4 -2
  180. package/src/components/pull-to-refresh/QPullToRefresh.js +3 -2
  181. package/src/components/radio/QRadio.js +3 -2
  182. package/src/components/range/QRange.js +4 -3
  183. package/src/components/range/QRange.json +7 -3
  184. package/src/components/rating/QRating.js +65 -44
  185. package/src/components/rating/QRating.sass +8 -6
  186. package/src/components/resize-observer/QResizeObserver.js +3 -2
  187. package/src/components/responsive/QResponsive.js +3 -2
  188. package/src/components/scroll-area/QScrollArea.js +3 -2
  189. package/src/components/scroll-observer/QScrollObserver.js +3 -2
  190. package/src/components/select/QSelect.js +3 -2
  191. package/src/components/separator/QSeparator.js +4 -2
  192. package/src/components/separator/QSeparator.json +1 -1
  193. package/src/components/skeleton/QSkeleton.js +18 -7
  194. package/src/components/skeleton/QSkeleton.json +9 -0
  195. package/src/components/skeleton/QSkeleton.sass +7 -6
  196. package/src/components/slide-item/QSlideItem.js +3 -2
  197. package/src/components/slide-transition/QSlideTransition.js +4 -2
  198. package/src/components/slider/QSlider.js +4 -3
  199. package/src/components/slider/QSlider.json +7 -3
  200. package/src/components/slider/use-slider.js +7 -2
  201. package/src/components/space/QSpace.js +4 -2
  202. package/src/components/spinner/QSpinner.js +4 -2
  203. package/src/components/spinner/QSpinnerAudio.js +4 -2
  204. package/src/components/spinner/QSpinnerBall.js +4 -2
  205. package/src/components/spinner/QSpinnerBars.js +4 -2
  206. package/src/components/spinner/QSpinnerBox.js +4 -2
  207. package/src/components/spinner/QSpinnerClock.js +4 -2
  208. package/src/components/spinner/QSpinnerComment.js +4 -2
  209. package/src/components/spinner/QSpinnerCube.js +4 -2
  210. package/src/components/spinner/QSpinnerDots.js +4 -2
  211. package/src/components/spinner/QSpinnerFacebook.js +4 -2
  212. package/src/components/spinner/QSpinnerGears.js +4 -2
  213. package/src/components/spinner/QSpinnerGrid.js +4 -2
  214. package/src/components/spinner/QSpinnerHearts.js +4 -2
  215. package/src/components/spinner/QSpinnerHourglass.js +4 -2
  216. package/src/components/spinner/QSpinnerInfinity.js +4 -2
  217. package/src/components/spinner/QSpinnerIos.js +4 -2
  218. package/src/components/spinner/QSpinnerOrbit.js +4 -2
  219. package/src/components/spinner/QSpinnerOval.js +4 -2
  220. package/src/components/spinner/QSpinnerPie.js +4 -2
  221. package/src/components/spinner/QSpinnerPuff.js +4 -2
  222. package/src/components/spinner/QSpinnerRadio.js +4 -2
  223. package/src/components/spinner/QSpinnerRings.js +4 -2
  224. package/src/components/spinner/QSpinnerTail.js +4 -2
  225. package/src/components/splitter/QSplitter.js +3 -2
  226. package/src/components/stepper/QStep.js +3 -2
  227. package/src/components/stepper/QStepper.js +3 -2
  228. package/src/components/stepper/QStepperNavigation.js +3 -2
  229. package/src/components/stepper/StepHeader.js +12 -10
  230. package/src/components/tab-panels/QTabPanel.js +4 -2
  231. package/src/components/tab-panels/QTabPanels.js +3 -2
  232. package/src/components/table/QTable.js +4 -2
  233. package/src/components/table/QTable.json +1 -0
  234. package/src/components/table/QTd.js +3 -2
  235. package/src/components/table/QTh.js +3 -2
  236. package/src/components/table/QTr.js +3 -2
  237. package/src/components/tabs/QRouteTab.js +4 -2
  238. package/src/components/tabs/QTab.js +3 -3
  239. package/src/components/tabs/QTabs.js +3 -2
  240. package/src/components/tabs/use-tab.js +11 -9
  241. package/src/components/time/QTime.js +3 -4
  242. package/src/components/timeline/QTimeline.js +3 -2
  243. package/src/components/timeline/QTimelineEntry.js +3 -2
  244. package/src/components/toggle/QToggle.js +5 -2
  245. package/src/components/toolbar/QToolbar.js +3 -2
  246. package/src/components/toolbar/QToolbarTitle.js +3 -2
  247. package/src/components/tooltip/QTooltip.js +3 -2
  248. package/src/components/tree/QTree.js +3 -2
  249. package/src/components/uploader/QUploaderAddTrigger.js +3 -2
  250. package/src/components/video/QVideo.js +4 -2
  251. package/src/components/virtual-scroll/QVirtualScroll.js +3 -2
  252. package/src/composables/private/use-panel.js +13 -8
  253. package/src/composables/private/use-panel.json +11 -2
  254. package/src/css/core/transitions.sass +4 -4
  255. package/src/css/normalize.sass +0 -7
  256. package/src/directives/ClosePopup.js +3 -1
  257. package/src/directives/Intersection.js +3 -1
  258. package/src/directives/Morph.js +4 -1
  259. package/src/directives/Mutation.js +3 -1
  260. package/src/directives/Ripple.js +3 -1
  261. package/src/directives/Scroll.js +3 -1
  262. package/src/directives/ScrollFire.js +3 -1
  263. package/src/directives/TouchHold.js +4 -1
  264. package/src/directives/TouchPan.js +4 -1
  265. package/src/directives/TouchRepeat.js +4 -1
  266. package/src/directives/TouchSwipe.js +4 -1
  267. package/src/plugins/Notify.js +4 -3
  268. package/src/utils/create-uploader-component.js +3 -3
  269. package/src/utils/date.js +93 -60
  270. package/src/utils/private/create.js +4 -0
@@ -1,10 +1,11 @@
1
- import { h, defineComponent, ref, computed, getCurrentInstance } from 'vue'
1
+ import { h, ref, computed, getCurrentInstance } from 'vue'
2
2
 
3
3
  import useDark, { useDarkProps } from '../../composables/private/use-dark.js'
4
4
  import useSize, { useSizeProps } from '../../composables/private/use-size.js'
5
5
  import useRefocusTarget from '../../composables/private/use-refocus-target.js'
6
6
  import { useFormProps, useFormInject } from '../../composables/private/use-form.js'
7
7
 
8
+ import { createComponent } from '../../utils/private/create.js'
8
9
  import optionSizes from '../../utils/private/option-sizes.js'
9
10
  import { stopAndPrevent } from '../../utils/event.js'
10
11
  import { hSlot, hMergeSlot } from '../../utils/private/render.js'
@@ -24,7 +25,7 @@ const svg = h('svg', {
24
25
  })
25
26
  ])
26
27
 
27
- export default defineComponent({
28
+ export default createComponent({
28
29
  name: 'QRadio',
29
30
 
30
31
  props: {
@@ -1,4 +1,4 @@
1
- import { h, defineComponent, ref, computed, watch, getCurrentInstance } from 'vue'
1
+ import { h, ref, computed, watch, getCurrentInstance } from 'vue'
2
2
 
3
3
  import { useFormInject, useFormProps } from '../../composables/private/use-form.js'
4
4
 
@@ -10,6 +10,7 @@ import useSlider, {
10
10
  keyCodes
11
11
  } from '../slider/use-slider.js'
12
12
 
13
+ import { createComponent } from '../../utils/private/create.js'
13
14
  import { stopAndPrevent } from '../../utils/event.js'
14
15
  import { between } from '../../utils/format.js'
15
16
  import { hDir } from '../../utils/private/render.js'
@@ -20,7 +21,7 @@ const dragType = {
20
21
  MAX: 2
21
22
  }
22
23
 
23
- export default defineComponent({
24
+ export default createComponent({
24
25
  name: 'QRange',
25
26
 
26
27
  props: {
@@ -488,7 +489,7 @@ export default defineComponent({
488
489
  })
489
490
  ]
490
491
 
491
- props.markers === true && track.push(
492
+ props.markers !== false && track.push(
492
493
  h('div', {
493
494
  class: `q-slider__track-markers q-slider__track-markers${ state.axis.value } absolute-full fit`,
494
495
  style: state.markerStyle.value
@@ -144,9 +144,13 @@
144
144
  },
145
145
 
146
146
  "markers": {
147
- "type": "Boolean",
148
- "desc": "Display markers on the track, one for each possible value for the model",
149
- "category": "content"
147
+ "type": [ "Boolean", "Number" ],
148
+ "desc": "Display markers on the track, one for each possible value for the model or using a custom step (when specifying a Number)",
149
+ "category": "content",
150
+ "examples": [
151
+ "markers",
152
+ ":markers=\"5\""
153
+ ]
150
154
  },
151
155
 
152
156
  "snap": {
@@ -1,14 +1,16 @@
1
- import { h, defineComponent, ref, computed, onBeforeUpdate, getCurrentInstance } from 'vue'
1
+ import { h, ref, computed, onBeforeUpdate, getCurrentInstance } from 'vue'
2
2
 
3
3
  import QIcon from '../icon/QIcon.js'
4
4
 
5
- import { stopAndPrevent } from '../../utils/event.js'
6
- import { between } from '../../utils/format.js'
7
-
8
5
  import useSize, { useSizeProps } from '../../composables/private/use-size.js'
9
6
  import { useFormProps, useFormAttrs, useFormInject } from '../../composables/private/use-form.js'
10
7
 
11
- export default defineComponent({
8
+ import { createComponent } from '../../utils/private/create.js'
9
+ import { stopAndPrevent } from '../../utils/event.js'
10
+ import { between } from '../../utils/format.js'
11
+ import { hMergeSlot } from '../../utils/private/render.js'
12
+
13
+ export default createComponent({
12
14
  name: 'QRating',
13
15
 
14
16
  props: {
@@ -94,6 +96,51 @@ export default defineComponent({
94
96
  }
95
97
  })
96
98
 
99
+ const stars = computed(() => {
100
+ const
101
+ acc = [],
102
+ icons = iconData.value,
103
+ ceil = Math.ceil(props.modelValue)
104
+
105
+ const halfIndex = props.iconHalf === void 0 || ceil === props.modelValue
106
+ ? -1
107
+ : ceil
108
+
109
+ for (let i = 1; i <= props.max; i++) {
110
+ const
111
+ active = (mouseModel.value === 0 && props.modelValue >= i) || (mouseModel.value > 0 && mouseModel.value >= i),
112
+ half = halfIndex === i && mouseModel.value < i,
113
+ exSelected = mouseModel.value > 0 && (half === true ? ceil : props.modelValue) >= i && mouseModel.value < i,
114
+ color = half === true
115
+ ? (i <= icons.halfColorLen ? props.colorHalf[ i - 1 ] : icons.halfColor)
116
+ : (
117
+ icons.selColor !== void 0 && active === true
118
+ ? (i <= icons.selColorLen ? props.colorSelected[ i - 1 ] : icons.selColor)
119
+ : (i <= icons.colorLen ? props.color[ i - 1 ] : icons.color)
120
+ )
121
+
122
+ acc.push({
123
+ name: (
124
+ half === true
125
+ ? (i <= icons.halfIconLen ? props.iconHalf[ i - 1 ] : icons.halfIcon)
126
+ : (
127
+ icons.selIcon !== void 0 && (active === true || exSelected === true)
128
+ ? (i <= icons.selIconLen ? props.iconSelected[ i - 1 ] : icons.selIcon)
129
+ : (i <= icons.iconLen ? props.icon[ i - 1 ] : icons.icon)
130
+ )
131
+ ) || $q.iconSet.rating.icon,
132
+
133
+ classes: 'q-rating__icon'
134
+ + (active === true || half === true ? ' q-rating__icon--active' : '')
135
+ + (exSelected === true ? ' q-rating__icon--exselected' : '')
136
+ + (mouseModel.value === i ? ' q-rating__icon--hovered' : '')
137
+ + (color !== void 0 ? ` text-${ color }` : '')
138
+ })
139
+ }
140
+
141
+ return acc
142
+ })
143
+
97
144
  const attributes = computed(() => {
98
145
  if (props.disable === true) {
99
146
  return { 'aria-disabled': 'true' }
@@ -103,6 +150,8 @@ export default defineComponent({
103
150
  }
104
151
  })
105
152
 
153
+ const tabindex = computed(() => (editable.value === true ? 0 : null))
154
+
106
155
  function set (value) {
107
156
  if (editable.value === true) {
108
157
  const
@@ -150,57 +199,29 @@ export default defineComponent({
150
199
  })
151
200
 
152
201
  return () => {
153
- const
154
- child = [],
155
- tabindex = editable.value === true ? 0 : null,
156
- icons = iconData.value,
157
- ceil = Math.ceil(props.modelValue)
202
+ const child = []
158
203
 
159
- const halfIndex = props.iconHalf === void 0 || ceil === props.modelValue
160
- ? -1
161
- : ceil
162
-
163
- for (let i = 1; i <= props.max; i++) {
164
- const
165
- active = (mouseModel.value === 0 && props.modelValue >= i) || (mouseModel.value > 0 && mouseModel.value >= i),
166
- half = halfIndex === i && mouseModel.value < i,
167
- exSelected = mouseModel.value > 0 && (half === true ? ceil : props.modelValue) >= i && mouseModel.value < i,
168
- name = half === true
169
- ? (i <= icons.halfIconLen ? props.iconHalf[ i - 1 ] : icons.halfIcon)
170
- : (
171
- icons.selIcon !== void 0 && (active === true || exSelected === true)
172
- ? (i <= icons.selIconLen ? props.iconSelected[ i - 1 ] : icons.selIcon)
173
- : (i <= icons.iconLen ? props.icon[ i - 1 ] : icons.icon)
174
- ),
175
- color = half === true
176
- ? (i <= icons.halfColorLen ? props.colorHalf[ i - 1 ] : icons.halfColor)
177
- : (
178
- icons.selColor !== void 0 && active === true
179
- ? (i <= icons.selColorLen ? props.colorSelected[ i - 1 ] : icons.selColor)
180
- : (i <= icons.colorLen ? props.color[ i - 1 ] : icons.color)
181
- ),
182
- classes = 'q-rating__icon'
183
- + (active === true || half === true ? ' q-rating__icon--active' : '')
184
- + (exSelected === true ? ' q-rating__icon--exselected' : '')
185
- + (mouseModel.value === i ? ' q-rating__icon--hovered' : '')
186
- + (color !== void 0 ? ` text-${ color }` : '')
204
+ stars.value.forEach(({ classes, name }, index) => {
205
+ const i = index + 1
187
206
 
188
207
  child.push(
189
- h(QIcon, {
208
+ h('div', {
190
209
  key: i,
191
210
  ref: vm => { iconRefs[ `rt${ i }` ] = vm },
192
- class: classes,
193
- name: name || $q.iconSet.rating.icon,
194
- tabindex,
211
+ class: 'q-rating__icon-container flex flex-center',
212
+ tabindex: tabindex.value,
195
213
  onClick () { set(i) },
196
214
  onMouseover () { setHoverValue(i) },
197
215
  onMouseout: resetMouseModel,
198
216
  onFocus () { setHoverValue(i) },
199
217
  onBlur: resetMouseModel,
200
218
  onKeyup (e) { onKeyup(e, i) }
201
- }, slots[ `tip-${ i }` ])
219
+ }, hMergeSlot(
220
+ slots[ `tip-${ i }` ],
221
+ [ h(QIcon, { class: classes, name }) ]
222
+ ))
202
223
  )
203
- }
224
+ })
204
225
 
205
226
  if (props.name !== void 0 && props.disable !== true) {
206
227
  injectFormInput(child, 'push')
@@ -2,6 +2,13 @@
2
2
  color: $rating-grade-color
3
3
  vertical-align: middle
4
4
 
5
+ &__icon-container
6
+ height: 1em
7
+ outline: 0
8
+
9
+ & + &
10
+ margin-left: 2px
11
+
5
12
  &__icon
6
13
  color: currentColor
7
14
  text-shadow: $rating-shadow
@@ -17,13 +24,8 @@
17
24
  &--exselected
18
25
  opacity: .7
19
26
 
20
- & + &
21
- margin-left: 2px
22
-
23
27
  &--no-dimming .q-rating__icon
24
28
  opacity: 1
25
29
 
26
- &--editable .q-icon
30
+ &--editable .q-rating__icon-container
27
31
  cursor: pointer
28
- &--non-editable span, .q-icon
29
- outline: 0
@@ -1,7 +1,8 @@
1
- import { h, defineComponent, onMounted, onBeforeUnmount, getCurrentInstance, nextTick } from 'vue'
1
+ import { h, onMounted, onBeforeUnmount, getCurrentInstance, nextTick } from 'vue'
2
2
 
3
3
  import useCanRender from '../../composables/private/use-can-render.js'
4
4
 
5
+ import { createComponent } from '../../utils/private/create.js'
5
6
  import { listenOpts, noop } from '../../utils/event.js'
6
7
 
7
8
  const hasObserver = typeof ResizeObserver !== 'undefined'
@@ -12,7 +13,7 @@ const resizeProps = hasObserver === true
12
13
  url: 'about:blank'
13
14
  }
14
15
 
15
- export default defineComponent({
16
+ export default createComponent({
16
17
  name: 'QResizeObserver',
17
18
 
18
19
  props: {
@@ -1,10 +1,11 @@
1
- import { h, defineComponent } from 'vue'
1
+ import { h } from 'vue'
2
2
 
3
3
  import useRatio, { useRatioProps } from '../../composables/private/use-ratio.js'
4
4
 
5
+ import { createComponent } from '../../utils/private/create.js'
5
6
  import { hSlot } from '../../utils/private/render.js'
6
7
 
7
- export default defineComponent({
8
+ export default createComponent({
8
9
  name: 'QResponsive',
9
10
 
10
11
  props: useRatioProps,
@@ -1,4 +1,4 @@
1
- import { h, defineComponent, ref, computed, withDirectives, getCurrentInstance } from 'vue'
1
+ import { h, ref, computed, withDirectives, getCurrentInstance } from 'vue'
2
2
 
3
3
  import useDark, { useDarkProps } from '../../composables/private/use-dark.js'
4
4
 
@@ -7,6 +7,7 @@ import QScrollObserver from '../scroll-observer/QScrollObserver.js'
7
7
 
8
8
  import TouchPan from '../../directives/TouchPan.js'
9
9
 
10
+ import { createComponent } from '../../utils/private/create.js'
10
11
  import { between } from '../../utils/format.js'
11
12
  import { setVerticalScrollPosition, setHorizontalScrollPosition } from '../../utils/scroll.js'
12
13
  import { hMergeSlot } from '../../utils/private/render.js'
@@ -18,7 +19,7 @@ const dirProps = {
18
19
  horizontal: { offset: 'offsetX', scroll: 'scrollLeft', dir: 'right', dist: 'x' }
19
20
  }
20
21
 
21
- export default defineComponent({
22
+ export default createComponent({
22
23
  name: 'QScrollArea',
23
24
 
24
25
  props: {
@@ -1,12 +1,13 @@
1
- import { defineComponent, watch, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue'
1
+ import { watch, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue'
2
2
 
3
+ import { createComponent } from '../../utils/private/create.js'
3
4
  import { getScrollTarget, getVerticalScrollPosition, getHorizontalScrollPosition } from '../../utils/scroll.js'
4
5
  import { listenOpts, noop } from '../../utils/event.js'
5
6
 
6
7
  const { passive } = listenOpts
7
8
  const axisValues = [ 'both', 'horizontal', 'vertical' ]
8
9
 
9
- export default defineComponent({
10
+ export default createComponent({
10
11
  name: 'QScrollObserver',
11
12
 
12
13
  props: {
@@ -1,4 +1,4 @@
1
- import { h, defineComponent, ref, computed, watch, onBeforeUpdate, onUpdated, onBeforeUnmount, nextTick, getCurrentInstance } from 'vue'
1
+ import { h, ref, computed, watch, onBeforeUpdate, onUpdated, onBeforeUnmount, nextTick, getCurrentInstance } from 'vue'
2
2
 
3
3
  import QField from '../field/QField.js'
4
4
  import QIcon from '../icon/QIcon.js'
@@ -16,6 +16,7 @@ import { useVirtualScroll, useVirtualScrollProps } from '../virtual-scroll/use-v
16
16
  import { useFormProps, useFormInputNameAttr } from '../../composables/private/use-form.js'
17
17
  import useKeyComposition from '../../composables/private/use-key-composition.js'
18
18
 
19
+ import { createComponent } from '../../utils/private/create.js'
19
20
  import { isDeepEqual } from '../../utils/private/is.js'
20
21
  import { stop, prevent, stopAndPrevent } from '../../utils/event.js'
21
22
  import { normalizeToInterval } from '../../utils/format.js'
@@ -26,7 +27,7 @@ const validateNewValueMode = v => [ 'add', 'add-unique', 'toggle' ].includes(v)
26
27
  const reEscapeList = '.*+?^${}()|[]\\'
27
28
  const fieldPropsList = Object.keys(useFieldProps)
28
29
 
29
- export default defineComponent({
30
+ export default createComponent({
30
31
  name: 'QSelect',
31
32
 
32
33
  inheritAttrs: false,
@@ -1,7 +1,9 @@
1
- import { h, defineComponent, computed, getCurrentInstance } from 'vue'
1
+ import { h, computed, getCurrentInstance } from 'vue'
2
2
 
3
3
  import useDark, { useDarkProps } from '../../composables/private/use-dark.js'
4
4
 
5
+ import { createComponent } from '../../utils/private/create.js'
6
+
5
7
  const insetMap = {
6
8
  true: 'inset',
7
9
  item: 'item-inset',
@@ -16,7 +18,7 @@ export const margins = {
16
18
  xl: 24
17
19
  }
18
20
 
19
- export default defineComponent({
21
+ export default createComponent({
20
22
  name: 'QSeparator',
21
23
 
22
24
  props: {
@@ -20,7 +20,7 @@
20
20
 
21
21
  "inset": {
22
22
  "type": [ "Boolean", "String" ],
23
- "desc": "if set to true, the left and right margins will be set to 16px. If set to item, the left and right margins will be set to 72px. If set to item-thumbnail, the left margin is set to 116px and right margin is set to 0px",
23
+ "desc": "If set to Boolean true, the left and right margins will be set to 16px. If set to 'item' then it will match a QItem's design. If set to 'item-thumbnail' then it will match the design of a QItem with a thumbnail on the left side",
24
24
  "examples": [ "item", "item-thumbnail" ],
25
25
  "category": "content"
26
26
  },
@@ -1,7 +1,8 @@
1
- import { h, defineComponent, computed, getCurrentInstance } from 'vue'
1
+ import { h, computed, getCurrentInstance } from 'vue'
2
2
 
3
3
  import useDark, { useDarkProps } from '../../composables/private/use-dark.js'
4
4
 
5
+ import { createComponent } from '../../utils/private/create.js'
5
6
  import { hSlot } from '../../utils/private/render.js'
6
7
 
7
8
  export const skeletonTypes = [
@@ -16,7 +17,7 @@ export const skeletonAnimations = [
16
17
  'wave', 'pulse', 'pulse-x', 'pulse-y', 'fade', 'blink', 'none'
17
18
  ]
18
19
 
19
- export default defineComponent({
20
+ export default createComponent({
20
21
  name: 'QSkeleton',
21
22
 
22
23
  props: {
@@ -38,6 +39,10 @@ export default defineComponent({
38
39
  validator: v => skeletonAnimations.includes(v),
39
40
  default: 'wave'
40
41
  },
42
+ animationSpeed: {
43
+ type: [ String, Number ],
44
+ default: 1500
45
+ },
41
46
 
42
47
  square: Boolean,
43
48
  bordered: Boolean,
@@ -51,11 +56,17 @@ export default defineComponent({
51
56
  const vm = getCurrentInstance()
52
57
  const isDark = useDark(props, vm.proxy.$q)
53
58
 
54
- const style = computed(() => (
55
- props.size !== void 0
56
- ? { width: props.size, height: props.size }
57
- : { width: props.width, height: props.height }
58
- ))
59
+ const style = computed(() => {
60
+ const size = props.size !== void 0
61
+ ? [ props.size, props.size ]
62
+ : [ props.width, props.height ]
63
+
64
+ return {
65
+ '--q-skeleton-speed': `${ props.animationSpeed }ms`,
66
+ width: size[ 0 ],
67
+ height: size[ 1 ]
68
+ }
69
+ })
59
70
 
60
71
  const classes = computed(() =>
61
72
  `q-skeleton q-skeleton--${ isDark.value === true ? 'dark' : 'light' } q-skeleton--type-${ props.type }`
@@ -32,6 +32,15 @@
32
32
  "category": "style"
33
33
  },
34
34
 
35
+ "animation-speed": {
36
+ "type": [ "String", "Number" ],
37
+ "desc": "Animation speed (in milliseconds, without unit)",
38
+ "default": 300,
39
+ "examples": [ 500, "1200" ],
40
+ "category": "style",
41
+ "addedIn": "v2.2"
42
+ },
43
+
35
44
  "square": {
36
45
  "extends": "square"
37
46
  },
@@ -1,4 +1,5 @@
1
1
  .q-skeleton
2
+ --q-skeleton-speed: 1500ms
2
3
  background: $separator-color
3
4
  border-radius: $generic-border-radius
4
5
 
@@ -58,14 +59,14 @@
58
59
  border-radius: 0
59
60
 
60
61
  &--anim-fade
61
- animation: q-skeleton--fade 1.5s linear .5s infinite
62
+ animation: q-skeleton--fade var(--q-skeleton-speed) linear .5s infinite
62
63
 
63
64
  &--anim-pulse
64
- animation: q-skeleton--pulse 1.5s ease-in-out .5s infinite
65
+ animation: q-skeleton--pulse var(--q-skeleton-speed) ease-in-out .5s infinite
65
66
  &--anim-pulse-x
66
- animation: q-skeleton--pulse-x 1.5s ease-in-out .5s infinite
67
+ animation: q-skeleton--pulse-x var(--q-skeleton-speed) ease-in-out .5s infinite
67
68
  &--anim-pulse-y
68
- animation: q-skeleton--pulse-y 1.5s ease-in-out .5s infinite
69
+ animation: q-skeleton--pulse-y var(--q-skeleton-speed) ease-in-out .5s infinite
69
70
 
70
71
  &--anim-wave,
71
72
  &--anim-blink,
@@ -84,10 +85,10 @@
84
85
 
85
86
  &--anim-blink:after
86
87
  background: rgba(255,255,255,.7)
87
- animation: q-skeleton--fade 1.5s linear .5s infinite
88
+ animation: q-skeleton--fade var(--q-skeleton-speed) linear .5s infinite
88
89
  &--anim-wave:after
89
90
  background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,.5), rgba(255,255,255,0))
90
- animation: q-skeleton--wave 1.5s linear .5s infinite
91
+ animation: q-skeleton--wave var(--q-skeleton-speed) linear .5s infinite
91
92
 
92
93
  &--dark
93
94
  background: rgba(255, 255, 255, 0.05)
@@ -1,10 +1,11 @@
1
- import { h, defineComponent, ref, computed, withDirectives, onBeforeUnmount, onBeforeUpdate, getCurrentInstance } from 'vue'
1
+ import { h, ref, computed, withDirectives, onBeforeUnmount, onBeforeUpdate, getCurrentInstance } from 'vue'
2
2
 
3
3
  import TouchPan from '../../directives/TouchPan.js'
4
4
 
5
5
  import useDark, { useDarkProps } from '../../composables/private/use-dark.js'
6
6
  import useCache from '../../composables/private/use-cache.js'
7
7
 
8
+ import { createComponent } from '../../utils/private/create.js'
8
9
  import { hSlot } from '../../utils/private/render.js'
9
10
 
10
11
  const slotsDef = [
@@ -14,7 +15,7 @@ const slotsDef = [
14
15
  [ 'bottom', 'end', 'center', 'height' ]
15
16
  ]
16
17
 
17
- export default defineComponent({
18
+ export default createComponent({
18
19
  name: 'QSlideItem',
19
20
 
20
21
  props: {
@@ -1,6 +1,8 @@
1
- import { h, defineComponent, onBeforeUnmount, Transition } from 'vue'
1
+ import { h, onBeforeUnmount, Transition } from 'vue'
2
2
 
3
- export default defineComponent({
3
+ import { createComponent } from '../../utils/private/create.js'
4
+
5
+ export default createComponent({
4
6
  name: 'QSlideTransition',
5
7
 
6
8
  props: {
@@ -1,4 +1,4 @@
1
- import { h, defineComponent, ref, computed, watch, getCurrentInstance } from 'vue'
1
+ import { h, ref, computed, watch, getCurrentInstance } from 'vue'
2
2
 
3
3
  import { useFormInject, useFormProps, useFormAttrs } from '../../composables/private/use-form.js'
4
4
 
@@ -10,11 +10,12 @@ import useSlider, {
10
10
  keyCodes
11
11
  } from './use-slider.js'
12
12
 
13
+ import { createComponent } from '../../utils/private/create.js'
13
14
  import { between } from '../../utils/format.js'
14
15
  import { stopAndPrevent } from '../../utils/event.js'
15
16
  import { hDir } from '../../utils/private/render.js'
16
17
 
17
- export default defineComponent({
18
+ export default createComponent({
18
19
  name: 'QSlider',
19
20
 
20
21
  props: {
@@ -206,7 +207,7 @@ export default defineComponent({
206
207
  })
207
208
  ]
208
209
 
209
- props.markers === true && track.push(
210
+ props.markers !== false && track.push(
210
211
  h('div', {
211
212
  class: `q-slider__track-markers q-slider__track-markers${ state.axis.value } absolute-full fit`,
212
213
  style: state.markerStyle.value
@@ -83,9 +83,13 @@
83
83
  },
84
84
 
85
85
  "markers": {
86
- "type": "Boolean",
87
- "desc": "Display markers on the track, one for each possible value for the model",
88
- "category": "content"
86
+ "type": [ "Boolean", "Number" ],
87
+ "desc": "Display markers on the track, one for each possible value for the model or using a custom step (when specifying a Number)",
88
+ "category": "content",
89
+ "examples": [
90
+ "markers",
91
+ ":markers=\"5\""
92
+ ]
89
93
  },
90
94
 
91
95
  "snap": {
@@ -6,6 +6,7 @@ import useDark, { useDarkProps } from '../../composables/private/use-dark.js'
6
6
 
7
7
  import { between } from '../../utils/format.js'
8
8
  import { position } from '../../utils/event.js'
9
+ import { isNumber } from '../../utils/private/is.js'
9
10
 
10
11
  // PGDOWN, LEFT, DOWN, PGUP, RIGHT, UP
11
12
  export const keyCodes = [ 34, 37, 40, 33, 39, 38 ]
@@ -60,7 +61,7 @@ export const useSliderProps = {
60
61
 
61
62
  label: Boolean,
62
63
  labelAlways: Boolean,
63
- markers: Boolean,
64
+ markers: [ Boolean, Number ],
64
65
  snap: Boolean,
65
66
 
66
67
  vertical: Boolean,
@@ -113,9 +114,13 @@ export default function ({ updateValue, updatePosition, getDragging }) {
113
114
  const step = computed(() => (props.step === 0 ? 1 : props.step))
114
115
  const minMaxDiff = computed(() => props.max - props.min)
115
116
 
117
+ const markerStep = computed(() => (
118
+ isNumber(props.markers) === true ? props.markers : step.value)
119
+ )
120
+
116
121
  const markerStyle = computed(() => {
117
122
  if (minMaxDiff.value !== 0) {
118
- const size = 100 * step.value / minMaxDiff.value
123
+ const size = 100 * markerStep.value / minMaxDiff.value
119
124
 
120
125
  return {
121
126
  backgroundSize: props.vertical === true
@@ -1,8 +1,10 @@
1
- import { h, defineComponent } from 'vue'
1
+ import { h } from 'vue'
2
+
3
+ import { createComponent } from '../../utils/private/create.js'
2
4
 
3
5
  const space = h('div', { class: 'q-space' })
4
6
 
5
- export default defineComponent({
7
+ export default createComponent({
6
8
  name: 'QSpace',
7
9
 
8
10
  setup () {
@@ -1,8 +1,10 @@
1
- import { h, defineComponent } from 'vue'
1
+ import { h } from 'vue'
2
2
 
3
3
  import useSpinner, { useSpinnerProps } from './use-spinner.js'
4
4
 
5
- export default defineComponent({
5
+ import { createComponent } from '../../utils/private/create.js'
6
+
7
+ export default createComponent({
6
8
  name: 'QSpinner',
7
9
 
8
10
  props: {
@@ -1,7 +1,9 @@
1
- import { h, defineComponent } from 'vue'
1
+ import { h } from 'vue'
2
2
 
3
3
  import useSpinner, { useSpinnerProps } from './use-spinner.js'
4
4
 
5
+ import { createComponent } from '../../utils/private/create.js'
6
+
5
7
  const svg = [
6
8
  h('g', {
7
9
  transform: 'matrix(1 0 0 -1 0 80)'
@@ -68,7 +70,7 @@ const svg = [
68
70
  ])
69
71
  ]
70
72
 
71
- export default defineComponent({
73
+ export default createComponent({
72
74
  name: 'QSpinnerAudio',
73
75
 
74
76
  props: useSpinnerProps,