quasar 2.19.2 → 2.20.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 (562) hide show
  1. package/dist/api/Lang.json +1 -1
  2. package/dist/api/QCarouselSlide.json +1 -1
  3. package/dist/api/QChatMessage.json +1 -1
  4. package/dist/api/QImg.json +1 -1
  5. package/dist/api/QParallax.json +1 -1
  6. package/dist/api/QRange.json +1 -1
  7. package/dist/api/QSlider.json +1 -1
  8. package/dist/api/QTimelineEntry.json +1 -1
  9. package/dist/api/QTree.json +1 -1
  10. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  11. package/dist/icon-set/eva-icons.umd.prod.js +2 -2
  12. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +5 -5
  13. package/dist/icon-set/fontawesome-v5.umd.prod.js +5 -5
  14. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +5 -5
  15. package/dist/icon-set/fontawesome-v6.umd.prod.js +5 -5
  16. package/dist/icon-set/fontawesome-v7-pro.umd.prod.js +6 -0
  17. package/dist/icon-set/fontawesome-v7.umd.prod.js +6 -0
  18. package/dist/icon-set/ionicons-v4.umd.prod.js +2 -2
  19. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  20. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  21. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  22. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  23. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  24. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  25. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  26. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  27. package/dist/icon-set/mdi-v3.umd.prod.js +5 -5
  28. package/dist/icon-set/mdi-v4.umd.prod.js +5 -5
  29. package/dist/icon-set/mdi-v5.umd.prod.js +5 -5
  30. package/dist/icon-set/mdi-v6.umd.prod.js +5 -5
  31. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-eva-icons.umd.prod.js +2 -2
  34. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +5 -5
  35. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +5 -5
  36. package/dist/icon-set/svg-fontawesome-v7.umd.prod.js +6 -0
  37. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +2 -2
  38. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +5 -5
  39. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +5 -5
  40. package/dist/icon-set/svg-ionicons-v7.umd.prod.js +6 -0
  41. package/dist/icon-set/svg-ionicons-v8.umd.prod.js +6 -0
  42. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  43. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  44. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  45. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  46. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  47. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +2 -2
  48. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +2 -2
  49. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +2 -2
  50. package/dist/icon-set/svg-mdi-v6.umd.prod.js +5 -5
  51. package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
  52. package/dist/icon-set/svg-themify.umd.prod.js +2 -2
  53. package/dist/icon-set/themify.umd.prod.js +2 -2
  54. package/dist/lang/ar-TN.umd.prod.js +2 -2
  55. package/dist/lang/ar.umd.prod.js +2 -2
  56. package/dist/lang/az-Latn.umd.prod.js +2 -2
  57. package/dist/lang/bg.umd.prod.js +2 -2
  58. package/dist/lang/bn.umd.prod.js +2 -2
  59. package/dist/lang/bs-BA.umd.prod.js +2 -2
  60. package/dist/lang/ca.umd.prod.js +2 -2
  61. package/dist/lang/cs.umd.prod.js +2 -2
  62. package/dist/lang/da.umd.prod.js +2 -2
  63. package/dist/lang/de-CH.umd.prod.js +2 -2
  64. package/dist/lang/de-DE.umd.prod.js +2 -2
  65. package/dist/lang/de.umd.prod.js +2 -2
  66. package/dist/lang/el.umd.prod.js +2 -2
  67. package/dist/lang/en-GB.umd.prod.js +2 -2
  68. package/dist/lang/en-US.umd.prod.js +2 -2
  69. package/dist/lang/eo.umd.prod.js +2 -2
  70. package/dist/lang/es.umd.prod.js +2 -2
  71. package/dist/lang/et.umd.prod.js +2 -2
  72. package/dist/lang/eu.umd.prod.js +2 -2
  73. package/dist/lang/fa-IR.umd.prod.js +2 -2
  74. package/dist/lang/fa.umd.prod.js +2 -2
  75. package/dist/lang/fi.umd.prod.js +2 -2
  76. package/dist/lang/fr.umd.prod.js +2 -2
  77. package/dist/lang/gn.umd.prod.js +2 -2
  78. package/dist/lang/he.umd.prod.js +2 -2
  79. package/dist/lang/hi.umd.prod.js +2 -2
  80. package/dist/lang/hr.umd.prod.js +2 -2
  81. package/dist/lang/hu.umd.prod.js +2 -2
  82. package/dist/lang/id.umd.prod.js +2 -2
  83. package/dist/lang/is.umd.prod.js +2 -2
  84. package/dist/lang/it.umd.prod.js +2 -2
  85. package/dist/lang/ja.umd.prod.js +2 -2
  86. package/dist/lang/kk.umd.prod.js +2 -2
  87. package/dist/lang/km.umd.prod.js +2 -2
  88. package/dist/lang/ko-KR.umd.prod.js +1 -1
  89. package/dist/lang/kur-CKB.umd.prod.js +2 -2
  90. package/dist/lang/lt.umd.prod.js +2 -2
  91. package/dist/lang/lu.umd.prod.js +2 -2
  92. package/dist/lang/lv.umd.prod.js +2 -2
  93. package/dist/lang/mk.umd.prod.js +2 -2
  94. package/dist/lang/ml.umd.prod.js +2 -2
  95. package/dist/lang/mm.umd.prod.js +2 -2
  96. package/dist/lang/ms-MY.umd.prod.js +2 -2
  97. package/dist/lang/ms.umd.prod.js +2 -2
  98. package/dist/lang/my.umd.prod.js +2 -2
  99. package/dist/lang/nb-NO.umd.prod.js +2 -2
  100. package/dist/lang/nl.umd.prod.js +2 -2
  101. package/dist/lang/pl.umd.prod.js +2 -2
  102. package/dist/lang/pt-BR.umd.prod.js +2 -2
  103. package/dist/lang/pt.umd.prod.js +2 -2
  104. package/dist/lang/ro.umd.prod.js +2 -2
  105. package/dist/lang/ru.umd.prod.js +2 -2
  106. package/dist/lang/sk.umd.prod.js +2 -2
  107. package/dist/lang/sl.umd.prod.js +2 -2
  108. package/dist/lang/sm.umd.prod.js +2 -2
  109. package/dist/lang/sq.umd.prod.js +2 -2
  110. package/dist/lang/sr-CYR.umd.prod.js +2 -2
  111. package/dist/lang/sr.umd.prod.js +2 -2
  112. package/dist/lang/sv.umd.prod.js +2 -2
  113. package/dist/lang/ta.umd.prod.js +2 -2
  114. package/dist/lang/th.umd.prod.js +2 -2
  115. package/dist/lang/tl.umd.prod.js +2 -2
  116. package/dist/lang/tr.umd.prod.js +2 -2
  117. package/dist/lang/ug.umd.prod.js +2 -2
  118. package/dist/lang/uk.umd.prod.js +2 -2
  119. package/dist/lang/ur-PK.umd.prod.js +2 -2
  120. package/dist/lang/uz-Cyrl.umd.prod.js +2 -2
  121. package/dist/lang/uz-Latn.umd.prod.js +2 -2
  122. package/dist/lang/vi.umd.prod.js +2 -2
  123. package/dist/lang/zh-CN.umd.prod.js +2 -2
  124. package/dist/lang/zh-TW.umd.prod.js +2 -2
  125. package/dist/quasar.client.js +2615 -2603
  126. package/dist/quasar.sass +1 -1
  127. package/dist/quasar.server.prod.cjs +11 -11
  128. package/dist/quasar.server.prod.js +25 -25
  129. package/dist/quasar.umd.js +2610 -2598
  130. package/dist/quasar.umd.prod.js +23 -23
  131. package/dist/types/api/dialog.d.ts +1 -1
  132. package/dist/types/api/qnotify.d.ts +1 -1
  133. package/dist/types/api/qpopupproxy.d.ts +1 -1
  134. package/dist/types/feature-flag.d.ts +2 -2
  135. package/dist/types/globals.d.ts +3 -3
  136. package/dist/types/{extras/icon-set.d.ts → icon-set.d.ts} +21 -16
  137. package/dist/types/index.d.ts +1 -1
  138. package/dist/types/plugin.d.ts +1 -1
  139. package/dist/types/shim-icon-set.d.ts +1 -2
  140. package/dist/types/shim-lang.d.ts +1 -2
  141. package/dist/types/ts-helpers.d.ts +3 -3
  142. package/dist/types/tsconfig.json +1 -1
  143. package/dist/types/utils/scroll.d.ts +1 -1
  144. package/dist/types/utils.d.ts +2 -2
  145. package/dist/web-types/web-types.json +1 -1
  146. package/icon-set/bootstrap-icons.js +1 -1
  147. package/icon-set/eva-icons.js +23 -23
  148. package/icon-set/fontawesome-v7-pro.js +128 -0
  149. package/icon-set/fontawesome-v7.js +128 -0
  150. package/icon-set/ionicons-v4.js +17 -17
  151. package/icon-set/svg-bootstrap-icons.js +1 -1
  152. package/icon-set/svg-eva-icons.js +23 -23
  153. package/icon-set/svg-fontawesome-v5.js +1 -1
  154. package/icon-set/svg-fontawesome-v7.js +197 -0
  155. package/icon-set/svg-ionicons-v4.js +17 -17
  156. package/icon-set/svg-ionicons-v5.js +1 -1
  157. package/icon-set/svg-ionicons-v6.js +1 -1
  158. package/icon-set/svg-ionicons-v7.js +224 -0
  159. package/icon-set/svg-ionicons-v8.js +224 -0
  160. package/icon-set/svg-themify.js +7 -7
  161. package/icon-set/themify.js +7 -7
  162. package/lang/ar-TN.js +1 -1
  163. package/lang/ar.js +1 -1
  164. package/lang/az-Latn.js +1 -1
  165. package/lang/bg.js +1 -1
  166. package/lang/bn.js +1 -1
  167. package/lang/bs-BA.js +1 -1
  168. package/lang/ca.js +1 -1
  169. package/lang/cs.js +11 -6
  170. package/lang/da.js +1 -1
  171. package/lang/de-CH.js +1 -1
  172. package/lang/de-DE.js +1 -1
  173. package/lang/de.js +1 -1
  174. package/lang/el.js +1 -1
  175. package/lang/en-GB.js +1 -1
  176. package/lang/en-US.js +1 -1
  177. package/lang/eo.js +1 -1
  178. package/lang/es.js +1 -1
  179. package/lang/et.js +1 -1
  180. package/lang/eu.js +1 -1
  181. package/lang/fa-IR.js +1 -1
  182. package/lang/fa.js +1 -1
  183. package/lang/fi.js +1 -1
  184. package/lang/fr.js +1 -1
  185. package/lang/gn.js +1 -1
  186. package/lang/he.js +1 -1
  187. package/lang/hi.js +1 -1
  188. package/lang/hr.js +1 -1
  189. package/lang/hu.js +1 -1
  190. package/lang/id.js +1 -1
  191. package/lang/is.js +1 -1
  192. package/lang/it.js +9 -9
  193. package/lang/ja.js +1 -1
  194. package/lang/kk.js +1 -1
  195. package/lang/km.js +1 -1
  196. package/lang/kur-CKB.js +1 -1
  197. package/lang/lt.js +2 -2
  198. package/lang/lu.js +1 -1
  199. package/lang/lv.js +1 -1
  200. package/lang/mk.js +1 -1
  201. package/lang/ml.js +1 -1
  202. package/lang/mm.js +1 -1
  203. package/lang/ms-MY.js +1 -1
  204. package/lang/ms.js +1 -1
  205. package/lang/my.js +1 -1
  206. package/lang/nb-NO.js +1 -1
  207. package/lang/nl.js +1 -1
  208. package/lang/pl.js +1 -1
  209. package/lang/pt-BR.js +1 -1
  210. package/lang/pt.js +1 -1
  211. package/lang/ro.js +1 -1
  212. package/lang/ru.js +1 -1
  213. package/lang/sk.js +1 -1
  214. package/lang/sl.js +1 -1
  215. package/lang/sm.js +1 -1
  216. package/lang/sq.js +1 -1
  217. package/lang/sr-CYR.js +1 -1
  218. package/lang/sr.js +1 -1
  219. package/lang/sv.js +1 -1
  220. package/lang/ta.js +1 -1
  221. package/lang/th.js +1 -1
  222. package/lang/tl.js +1 -1
  223. package/lang/tr.js +1 -1
  224. package/lang/ug.js +1 -1
  225. package/lang/uk.js +1 -1
  226. package/lang/ur-PK.js +1 -1
  227. package/lang/uz-Cyrl.js +1 -1
  228. package/lang/uz-Latn.js +1 -1
  229. package/lang/vi.js +1 -1
  230. package/lang/zh-CN.js +1 -1
  231. package/lang/zh-TW.js +1 -1
  232. package/package.json +13 -17
  233. package/src/components/ajax-bar/QAjaxBar.js +22 -25
  234. package/src/components/avatar/QAvatar.js +3 -3
  235. package/src/components/avatar/QAvatar.test.js +2 -2
  236. package/src/components/badge/QBadge.js +9 -10
  237. package/src/components/badge/QBadge.test.js +2 -2
  238. package/src/components/banner/QBanner.js +6 -6
  239. package/src/components/banner/QBanner.test.js +2 -2
  240. package/src/components/bar/QBar.js +3 -3
  241. package/src/components/bar/QBar.test.js +2 -2
  242. package/src/components/breadcrumbs/QBreadcrumbs.js +5 -4
  243. package/src/components/breadcrumbs/QBreadcrumbs.test.js +3 -3
  244. package/src/components/breadcrumbs/QBreadcrumbsEl.js +4 -4
  245. package/src/components/breadcrumbs/QBreadcrumbsEl.test.js +2 -2
  246. package/src/components/btn/QBtn.js +39 -44
  247. package/src/components/btn/QBtn.test.js +2 -2
  248. package/src/components/btn/use-btn.js +34 -47
  249. package/src/components/btn/use-btn.test.js +5 -5
  250. package/src/components/btn-dropdown/QBtnDropdown.js +15 -16
  251. package/src/components/btn-group/QBtnGroup.js +3 -3
  252. package/src/components/btn-toggle/QBtnToggle.js +5 -9
  253. package/src/components/card/QCard.js +5 -5
  254. package/src/components/card/QCardActions.js +2 -2
  255. package/src/components/card/QCardSection.js +2 -2
  256. package/src/components/carousel/QCarousel.js +32 -38
  257. package/src/components/carousel/QCarouselControl.js +1 -1
  258. package/src/components/carousel/QCarouselSlide.js +1 -1
  259. package/src/components/carousel/QCarouselSlide.json +1 -1
  260. package/src/components/chat/QChatMessage.js +13 -14
  261. package/src/components/chat/QChatMessage.json +1 -1
  262. package/src/components/checkbox/QCheckbox.js +5 -5
  263. package/src/components/checkbox/use-checkbox.js +38 -50
  264. package/src/components/chip/QChip.js +26 -34
  265. package/src/components/chip/QChip.test.js +2 -2
  266. package/src/components/circular-progress/QCircularProgress.js +8 -11
  267. package/src/components/circular-progress/circular-progress.test.js +1 -1
  268. package/src/components/color/QColor.js +75 -98
  269. package/src/components/date/QDate.js +128 -140
  270. package/src/components/date/use-datetime.js +3 -6
  271. package/src/components/dialog/QDialog.js +44 -50
  272. package/src/components/dialog/QDialog.test.js +7 -7
  273. package/src/components/drawer/QDrawer.js +110 -152
  274. package/src/components/editor/QEditor.js +44 -37
  275. package/src/components/editor/editor-caret.js +27 -31
  276. package/src/components/editor/editor-utils.js +9 -5
  277. package/src/components/expansion-item/QExpansionItem.js +36 -48
  278. package/src/components/fab/QFab.js +11 -11
  279. package/src/components/fab/QFabAction.js +2 -4
  280. package/src/components/fab/use-fab.js +6 -7
  281. package/src/components/field/QField.js +2 -2
  282. package/src/components/file/QFile.js +26 -33
  283. package/src/components/footer/QFooter.js +40 -53
  284. package/src/components/form/QForm.js +37 -43
  285. package/src/components/form/QFormChildMixin.js +3 -3
  286. package/src/components/header/QHeader.js +35 -47
  287. package/src/components/icon/QIcon.js +19 -19
  288. package/src/components/img/QImg.js +24 -24
  289. package/src/components/img/QImg.json +3 -3
  290. package/src/components/infinite-scroll/QInfiniteScroll.js +38 -52
  291. package/src/components/inner-loading/QInnerLoading.js +3 -3
  292. package/src/components/input/QInput.js +52 -52
  293. package/src/components/input/use-mask.js +56 -54
  294. package/src/components/intersection/QIntersection.js +6 -8
  295. package/src/components/item/QItem.js +20 -30
  296. package/src/components/item/QItemLabel.js +5 -7
  297. package/src/components/item/QItemSection.js +6 -6
  298. package/src/components/item/QList.js +6 -6
  299. package/src/components/item/QList.test.js +2 -2
  300. package/src/components/knob/QKnob.js +39 -44
  301. package/src/components/layout/QLayout.js +30 -34
  302. package/src/components/linear-progress/QLinearProgress.js +14 -23
  303. package/src/components/markup-table/QMarkupTable.js +7 -9
  304. package/src/components/menu/QMenu.js +36 -37
  305. package/src/components/no-ssr/QNoSsr.js +1 -1
  306. package/src/components/option-group/QOptionGroup.js +5 -5
  307. package/src/components/page/QPage.js +16 -18
  308. package/src/components/page/QPageContainer.js +9 -9
  309. package/src/components/page-scroller/QPageScroller.js +11 -13
  310. package/src/components/page-sticky/use-page-sticky.js +18 -18
  311. package/src/components/pagination/QPagination.js +24 -26
  312. package/src/components/parallax/QParallax.js +15 -9
  313. package/src/components/parallax/QParallax.json +1 -1
  314. package/src/components/popup-edit/QPopupEdit.js +10 -13
  315. package/src/components/popup-proxy/QPopupProxy.js +5 -7
  316. package/src/components/pull-to-refresh/QPullToRefresh.js +15 -17
  317. package/src/components/radio/QRadio.js +24 -29
  318. package/src/components/range/QRange.js +33 -37
  319. package/src/components/rating/QRating.js +59 -61
  320. package/src/components/resize-observer/QResizeObserver.js +55 -62
  321. package/src/components/scroll-area/QScrollArea.js +32 -36
  322. package/src/components/scroll-observer/QScrollObserver.js +3 -3
  323. package/src/components/select/QSelect.js +208 -269
  324. package/src/components/separator/QSeparator.js +7 -10
  325. package/src/components/skeleton/QSkeleton.js +4 -4
  326. package/src/components/slide-item/QSlideItem.js +7 -7
  327. package/src/components/slide-transition/QSlideTransition.js +4 -4
  328. package/src/components/slider/QSlider.js +13 -16
  329. package/src/components/slider/use-slider.js +53 -81
  330. package/src/components/slider/use-slider.json +3 -3
  331. package/src/components/space/QSpace.test.js +1 -1
  332. package/src/components/spinner/QSpinner.test.js +2 -2
  333. package/src/components/spinner/QSpinnerAudio.test.js +2 -2
  334. package/src/components/spinner/QSpinnerBall.test.js +2 -2
  335. package/src/components/spinner/QSpinnerBars.test.js +2 -2
  336. package/src/components/spinner/QSpinnerBox.test.js +2 -2
  337. package/src/components/spinner/QSpinnerClock.test.js +2 -2
  338. package/src/components/spinner/QSpinnerComment.test.js +2 -2
  339. package/src/components/spinner/QSpinnerCube.test.js +2 -2
  340. package/src/components/spinner/QSpinnerDots.test.js +2 -2
  341. package/src/components/spinner/QSpinnerFacebook.test.js +2 -2
  342. package/src/components/spinner/QSpinnerGears.test.js +2 -2
  343. package/src/components/spinner/QSpinnerGrid.test.js +2 -2
  344. package/src/components/spinner/QSpinnerHearts.test.js +2 -2
  345. package/src/components/spinner/QSpinnerHourglass.test.js +2 -2
  346. package/src/components/spinner/QSpinnerInfinity.test.js +2 -2
  347. package/src/components/spinner/QSpinnerIos.test.js +2 -2
  348. package/src/components/spinner/QSpinnerOrbit.test.js +2 -2
  349. package/src/components/spinner/QSpinnerOval.test.js +2 -2
  350. package/src/components/spinner/QSpinnerPie.test.js +2 -2
  351. package/src/components/spinner/QSpinnerPuff.test.js +2 -2
  352. package/src/components/spinner/QSpinnerRadio.test.js +2 -2
  353. package/src/components/spinner/QSpinnerRings.test.js +2 -2
  354. package/src/components/spinner/QSpinnerTail.test.js +2 -2
  355. package/src/components/spinner/use-spinner.test.js +1 -1
  356. package/src/components/splitter/QSplitter.js +19 -21
  357. package/src/components/stepper/QStep.js +12 -14
  358. package/src/components/stepper/QStepper.js +13 -14
  359. package/src/components/stepper/StepHeader.js +34 -35
  360. package/src/components/tab-panels/QTabPanels.js +3 -3
  361. package/src/components/table/QTable.js +82 -100
  362. package/src/components/table/QTd.js +3 -3
  363. package/src/components/table/QTh.js +5 -6
  364. package/src/components/table/QTr.js +3 -3
  365. package/src/components/table/table-column-selection.js +4 -6
  366. package/src/components/table/table-filter.js +2 -2
  367. package/src/components/table/table-pagination.js +14 -20
  368. package/src/components/table/table-row-expand.js +3 -3
  369. package/src/components/table/table-row-selection.js +10 -20
  370. package/src/components/table/table-sort.js +7 -7
  371. package/src/components/tabs/QRouteTab.js +1 -1
  372. package/src/components/tabs/QTab.js +1 -1
  373. package/src/components/tabs/QTabs.js +82 -109
  374. package/src/components/tabs/use-tab.js +36 -38
  375. package/src/components/time/QTime.js +109 -132
  376. package/src/components/timeline/QTimeline.js +7 -4
  377. package/src/components/timeline/QTimelineEntry.js +7 -6
  378. package/src/components/timeline/QTimelineEntry.json +1 -1
  379. package/src/components/toggle/QToggle.js +6 -8
  380. package/src/components/toolbar/QToolbar.js +2 -2
  381. package/src/components/toolbar/QToolbar.test.js +2 -2
  382. package/src/components/toolbar/QToolbarTitle.js +2 -4
  383. package/src/components/toolbar/QToolbarTitle.test.js +2 -2
  384. package/src/components/tooltip/QTooltip.js +27 -28
  385. package/src/components/tree/QTree.js +96 -114
  386. package/src/components/tree/QTree.json +1 -1
  387. package/src/components/uploader/QUploaderAddTrigger.js +2 -2
  388. package/src/components/uploader/uploader-core.js +44 -51
  389. package/src/components/uploader/xhr-uploader-plugin.js +13 -17
  390. package/src/components/video/QVideo.js +1 -1
  391. package/src/components/video/QVideo.test.js +2 -2
  392. package/src/components/virtual-scroll/QVirtualScroll.js +9 -10
  393. package/src/components/virtual-scroll/use-virtual-scroll.js +42 -50
  394. package/src/composables/private.use-align/use-align.js +2 -2
  395. package/src/composables/private.use-align/use-align.test.js +1 -1
  396. package/src/composables/private.use-anchor/use-anchor.js +23 -32
  397. package/src/composables/private.use-dark/use-dark.test.js +1 -1
  398. package/src/composables/private.use-field/use-field.js +79 -99
  399. package/src/composables/private.use-file/use-file-dom-props.js +2 -2
  400. package/src/composables/private.use-file/use-file.js +27 -27
  401. package/src/composables/private.use-fullscreen/use-fullscreen.js +15 -20
  402. package/src/composables/private.use-history/use-history.js +2 -2
  403. package/src/composables/private.use-history/use-history.test.js +1 -1
  404. package/src/composables/private.use-key-composition/use-key-composition.js +11 -12
  405. package/src/composables/private.use-model-toggle/use-model-toggle.js +16 -25
  406. package/src/composables/private.use-panel/use-panel.js +25 -27
  407. package/src/composables/private.use-portal/use-portal.js +11 -9
  408. package/src/composables/private.use-prevent-scroll/use-prevent-scroll.js +1 -4
  409. package/src/composables/private.use-ratio/use-ratio.js +6 -5
  410. package/src/composables/private.use-ratio/use-ratio.test.js +1 -1
  411. package/src/composables/private.use-refocus-target/use-refocus-target.js +2 -4
  412. package/src/composables/private.use-router-link/use-router-link.js +44 -55
  413. package/src/composables/private.use-scroll-target/use-scroll-target.js +1 -1
  414. package/src/composables/private.use-size/use-size.test.js +1 -1
  415. package/src/composables/private.use-transition/use-transition.test.js +1 -1
  416. package/src/composables/private.use-validate/use-validate.js +23 -36
  417. package/src/composables/use-dialog-plugin-component/use-dialog-plugin-component.js +1 -1
  418. package/src/composables/use-form/private.use-form.js +1 -1
  419. package/src/composables/use-form/private.use-form.test.js +3 -3
  420. package/src/composables/use-form/use-form-child.js +7 -7
  421. package/src/composables/use-hydration/use-hydration.js +2 -2
  422. package/src/composables/use-hydration/use-hydration.test.js +1 -1
  423. package/src/composables/use-id/use-id.js +4 -8
  424. package/src/composables/use-id/use-id.test.js +1 -1
  425. package/src/composables/use-interval/use-interval.js +3 -3
  426. package/src/composables/use-interval/use-interval.test.js +1 -1
  427. package/src/composables/use-meta/use-meta.js +3 -3
  428. package/src/composables/use-quasar/use-quasar.test.js +1 -1
  429. package/src/composables/use-render-cache/use-render-cache.js +1 -1
  430. package/src/composables/use-render-cache/use-render-cache.test.js +1 -1
  431. package/src/composables/use-split-attrs/use-split-attrs.js +3 -7
  432. package/src/composables/use-split-attrs/use-split-attrs.test.js +1 -1
  433. package/src/composables/use-tick/use-tick.js +3 -3
  434. package/src/composables/use-tick/use-tick.test.js +2 -2
  435. package/src/composables/use-timeout/use-timeout.js +2 -2
  436. package/src/composables/use-timeout/use-timeout.test.js +1 -1
  437. package/src/directives/close-popup/ClosePopup.js +4 -9
  438. package/src/directives/intersection/Intersection.js +5 -8
  439. package/src/directives/morph/Morph.js +12 -18
  440. package/src/directives/ripple/Ripple.js +19 -26
  441. package/src/directives/ripple/Ripple.test.js +2 -2
  442. package/src/directives/scroll/Scroll.js +2 -2
  443. package/src/directives/touch-hold/TouchHold.js +22 -28
  444. package/src/directives/touch-pan/TouchPan.js +68 -84
  445. package/src/directives/touch-repeat/TouchRepeat.js +28 -39
  446. package/src/directives/touch-swipe/TouchSwipe.js +30 -33
  447. package/src/index.ssr.js +2 -0
  448. package/src/index.umd.js +2 -0
  449. package/src/install-quasar.js +9 -9
  450. package/src/plugins/addressbar/AddressbarColor.js +9 -9
  451. package/src/plugins/addressbar/AddressbarColor.test.js +2 -2
  452. package/src/plugins/app-fullscreen/AppFullscreen.js +11 -10
  453. package/src/plugins/app-fullscreen/AppFullscreen.test.js +2 -2
  454. package/src/plugins/app-fullscreen/test/mock-fullscreen.js +2 -2
  455. package/src/plugins/app-visibility/AppVisibility.js +5 -5
  456. package/src/plugins/app-visibility/AppVisibility.test.js +2 -2
  457. package/src/plugins/bottom-sheet/BottomSheet.js +2 -2
  458. package/src/plugins/bottom-sheet/component/BottomSheetComponent.js +4 -4
  459. package/src/plugins/cookies/Cookies.js +50 -62
  460. package/src/plugins/dark/Dark.js +3 -5
  461. package/src/plugins/dark/Dark.test.js +1 -1
  462. package/src/plugins/dialog/Dialog.js +2 -2
  463. package/src/plugins/dialog/component/DialogPluginComponent.js +17 -20
  464. package/src/plugins/icon-set/IconSet.js +2 -4
  465. package/src/plugins/icon-set/IconSet.test.js +1 -1
  466. package/src/plugins/lang/Lang.js +7 -10
  467. package/src/plugins/lang/Lang.json +2 -2
  468. package/src/plugins/lang/Lang.test.js +2 -2
  469. package/src/plugins/loading/Loading.js +10 -12
  470. package/src/plugins/loading-bar/LoadingBar.js +4 -4
  471. package/src/plugins/meta/Meta.js +10 -11
  472. package/src/plugins/notify/Notify.js +67 -72
  473. package/src/plugins/platform/Platform.js +19 -21
  474. package/src/plugins/platform/Platform.test.js +1 -1
  475. package/src/plugins/private.body/Body.js +23 -29
  476. package/src/plugins/private.body/Body.test.js +1 -1
  477. package/src/plugins/private.history/History.js +17 -25
  478. package/src/plugins/private.history/History.test.js +1 -1
  479. package/src/plugins/screen/Screen.js +16 -16
  480. package/src/plugins/screen/Screen.test.js +1 -1
  481. package/src/plugins/storage/LocalStorage.js +3 -4
  482. package/src/plugins/storage/LocalStorage.test.js +2 -2
  483. package/src/plugins/storage/SessionStorage.js +3 -4
  484. package/src/plugins/storage/SessionStorage.test.js +2 -2
  485. package/src/plugins/storage/engine/web-storage.js +30 -23
  486. package/src/plugins/storage/engine/web-storage.test.js +1 -1
  487. package/src/utils/EventBus/EventBus.js +3 -4
  488. package/src/utils/EventBus/EventBus.test.js +1 -1
  489. package/src/utils/clone/clone.test.js +4 -8
  490. package/src/utils/colors/colors.js +38 -29
  491. package/src/utils/colors/colors.test.js +2 -2
  492. package/src/utils/copy-to-clipboard/copy-to-clipboard.js +6 -11
  493. package/src/utils/create-meta-mixin/create-meta-mixin.js +2 -2
  494. package/src/utils/create-uploader-component/create-uploader-component.js +12 -7
  495. package/src/utils/css-var/get-css-var.test.js +2 -2
  496. package/src/utils/css-var/set-css-var.test.js +2 -2
  497. package/src/utils/date/date.js +229 -172
  498. package/src/utils/date/private.persian.js +11 -11
  499. package/src/utils/debounce/debounce.js +3 -7
  500. package/src/utils/debounce/debounce.test.js +1 -1
  501. package/src/utils/dom/dom.js +2 -4
  502. package/src/utils/dom/dom.test.js +4 -4
  503. package/src/utils/event/event.js +21 -23
  504. package/src/utils/export-file/export-file.js +3 -3
  505. package/src/utils/extend/extend.js +15 -14
  506. package/src/utils/extend/extend.test.js +2 -2
  507. package/src/utils/format/format.js +4 -10
  508. package/src/utils/format/format.test.js +1 -1
  509. package/src/utils/frame-debounce/frame-debounce.js +23 -12
  510. package/src/utils/frame-debounce/frame-debounce.test.js +1 -1
  511. package/src/utils/is/is.js +15 -26
  512. package/src/utils/is/is.test.js +8 -7
  513. package/src/utils/morph/morph.js +57 -48
  514. package/src/utils/open-url/open-url.js +7 -7
  515. package/src/utils/patterns/patterns.js +26 -23
  516. package/src/utils/patterns/patterns.test.js +1 -1
  517. package/src/utils/private.click-outside/click-outside.js +5 -5
  518. package/src/utils/private.config/instance-config.js +2 -0
  519. package/src/utils/private.config/instance-config.test.js +4 -4
  520. package/src/utils/private.config/nodes.js +5 -5
  521. package/src/utils/private.config/nodes.test.js +4 -4
  522. package/src/utils/private.create/create.test.js +1 -1
  523. package/src/utils/private.dialog/create-dialog.js +9 -12
  524. package/src/utils/private.focus/focus-manager.js +1 -1
  525. package/src/utils/private.focus/focus-manager.test.js +4 -4
  526. package/src/utils/private.focus/focusout.js +2 -2
  527. package/src/utils/private.focus/focusout.test.js +1 -1
  528. package/src/utils/private.get-emits-object/get-emits-object.test.js +1 -1
  529. package/src/utils/private.inject-obj-prop/inject-obj-prop.test.js +2 -2
  530. package/src/utils/private.keyboard/escape-key.js +5 -5
  531. package/src/utils/private.keyboard/escape-key.test.js +1 -1
  532. package/src/utils/private.keyboard/key-composition.js +4 -6
  533. package/src/utils/private.noop-ssr-directive-transform/noop-ssr-directive-transform.js +3 -1
  534. package/src/utils/private.noop-ssr-directive-transform/noop-ssr-directive-transform.test.js +1 -1
  535. package/src/utils/private.portal/portal.js +5 -5
  536. package/src/utils/private.position-engine/position-engine.js +20 -22
  537. package/src/utils/private.render/render.js +5 -7
  538. package/src/utils/private.render/render.test.js +5 -5
  539. package/src/utils/private.rtl/rtl.js +3 -2
  540. package/src/utils/private.rtl/rtl.test.js +1 -1
  541. package/src/utils/private.selection/selection.js +1 -1
  542. package/src/utils/private.selection/selection.test.js +2 -2
  543. package/src/utils/private.sort/sort.test.js +2 -2
  544. package/src/utils/private.touch/touch.js +10 -14
  545. package/src/utils/private.touch/touch.test.js +1 -1
  546. package/src/utils/private.vm/vm.js +2 -2
  547. package/src/utils/private.vm/vm.test.js +4 -4
  548. package/src/utils/run-sequential-promises/run-sequential-promises.js +44 -54
  549. package/src/utils/run-sequential-promises/run-sequential-promises.test.js +183 -0
  550. package/src/utils/scroll/prevent-scroll.js +9 -9
  551. package/src/utils/scroll/scroll.js +11 -12
  552. package/src/utils/throttle/throttle.js +4 -3
  553. package/src/utils/throttle/throttle.test.js +1 -1
  554. package/src/utils/uid/uid.js +51 -77
  555. package/src/utils/uid/uid.test.js +3 -3
  556. package/wrappers/index.cjs +2 -2
  557. package/wrappers/index.js +2 -2
  558. package/dist/types/extras/animations.d.ts +0 -106
  559. package/dist/types/extras/fonts.d.ts +0 -1
  560. package/dist/types/extras.d.ts +0 -3
  561. package/dist/vetur/quasar-attributes.json +0 -1
  562. package/dist/vetur/quasar-tags.json +0 -1
@@ -201,10 +201,10 @@ function d2j(jdn) {
201
201
  jm,
202
202
  jd
203
203
  }
204
- } else {
205
- // The remaining months.
206
- k -= 186
207
204
  }
205
+
206
+ // The remaining months.
207
+ k -= 186
208
208
  } else {
209
209
  // Previous Jalaali year.
210
210
  jy -= 1
@@ -236,11 +236,11 @@ function d2j(jdn) {
236
236
  */
237
237
  function g2d(gy, gm, gd) {
238
238
  let d =
239
- div((gy + div(gm - 8, 6) + 100100) * 1461, 4) +
239
+ div((gy + div(gm - 8, 6) + 100_100) * 1461, 4) +
240
240
  div(153 * mod(gm + 9, 12) + 2, 5) +
241
241
  gd -
242
- 34840408
243
- d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752
242
+ 34_840_408
243
+ d = d - div(div(gy + 100_100 + div(gm - 8, 6), 100) * 3, 4) + 752
244
244
  return d
245
245
  }
246
246
 
@@ -256,12 +256,12 @@ function g2d(gy, gm, gd) {
256
256
  gd: Calendar day of the month M (1 to 28/29/30/31)
257
257
  */
258
258
  function d2g(jdn) {
259
- let j = 4 * jdn + 139361631
260
- j = j + div(div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908
259
+ let j = 4 * jdn + 139_361_631
260
+ j = j + div(div(4 * jdn + 183_187_720, 146_097) * 3, 4) * 4 - 3908
261
261
  const i = div(mod(j, 1461), 4) * 5 + 308,
262
262
  gd = div(mod(i, 153), 5) + 1,
263
263
  gm = mod(div(i, 153), 12) + 1,
264
- gy = div(j, 1461) - 100100 + div(8 - gm, 6)
264
+ gy = div(j, 1461) - 100_100 + div(8 - gm, 6)
265
265
  return {
266
266
  gy,
267
267
  gm,
@@ -274,9 +274,9 @@ function d2g(jdn) {
274
274
  */
275
275
 
276
276
  function div(a, b) {
277
- return ~~(a / b)
277
+ return Math.trunc(a / b)
278
278
  }
279
279
 
280
280
  function mod(a, b) {
281
- return a - ~~(a / b) * b
281
+ return a - Math.trunc(a / b) * b
282
282
  }
@@ -2,19 +2,15 @@
2
2
  export default function debounce(fn, wait = 250, immediate) {
3
3
  let timer = null
4
4
 
5
- function debounced(/* ...args */) {
6
- const args = arguments
7
-
5
+ function debounced(...args) {
8
6
  const later = () => {
9
7
  timer = null
10
- if (immediate !== true) {
11
- fn.apply(this, args)
12
- }
8
+ if (!immediate) fn.apply(this, args)
13
9
  }
14
10
 
15
11
  if (timer !== null) {
16
12
  clearTimeout(timer)
17
- } else if (immediate === true) {
13
+ } else if (immediate) {
18
14
  fn.apply(this, args)
19
15
  }
20
16
 
@@ -1,4 +1,4 @@
1
- import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest'
1
+ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'
2
2
 
3
3
  import debounce from './debounce.js'
4
4
 
@@ -64,7 +64,7 @@ export function getElement(el) {
64
64
 
65
65
  // internal
66
66
  export function childHasFocus(el, focusedEl) {
67
- if (el === void 0 || el === null || el.contains(focusedEl) === true) {
67
+ if (el === void 0 || el === null || el.contains(focusedEl)) {
68
68
  return true
69
69
  }
70
70
 
@@ -73,9 +73,7 @@ export function childHasFocus(el, focusedEl) {
73
73
  next !== null;
74
74
  next = next.nextElementSibling
75
75
  ) {
76
- if (next.contains(focusedEl)) {
77
- return true
78
- }
76
+ if (next.contains(focusedEl)) return true
79
77
  }
80
78
 
81
79
  return false
@@ -1,9 +1,9 @@
1
1
  // oxlint-disable eslint-plugin-import/no-named-as-default-member
2
2
 
3
- import { describe, test, expect, vi, onTestFinished } from 'vitest'
3
+ import { describe, expect, onTestFinished, test, vi } from 'vitest'
4
4
  import { ref } from 'vue'
5
5
 
6
- import dom, { getElement, childHasFocus } from './dom.js'
6
+ import dom, { childHasFocus, getElement } from './dom.js'
7
7
 
8
8
  function createEl({ top, left } = {}) {
9
9
  const el = document.createElement('div')
@@ -17,7 +17,7 @@ function createEl({ top, left } = {}) {
17
17
  el.style.left = left
18
18
  }
19
19
 
20
- document.body.appendChild(el)
20
+ document.body.append(el)
21
21
  onTestFinished(() => {
22
22
  el.remove()
23
23
  })
@@ -171,7 +171,7 @@ describe('[dom API]', () => {
171
171
  test('childHasFocus(el, elChild)', () => {
172
172
  const el = createEl()
173
173
  const elChild = document.createElement('div')
174
- el.appendChild(elChild)
174
+ el.append(elChild)
175
175
 
176
176
  expect(childHasFocus(el, elChild)).toBe(true)
177
177
  })
@@ -6,6 +6,7 @@ export const listenOpts = {
6
6
 
7
7
  try {
8
8
  const opts = Object.defineProperty({}, 'passive', {
9
+ // oxlint-disable-next-line getter-return
9
10
  get() {
10
11
  Object.assign(listenOpts, {
11
12
  hasPassive: true,
@@ -108,28 +109,25 @@ export function stopAndPrevent(e) {
108
109
  }
109
110
 
110
111
  export function preventDraggable(el, status) {
111
- if (el === void 0 || (status === true && el.__dragPrevented === true)) {
112
- return
113
- }
114
-
115
- const fn =
116
- status === true
117
- ? element => {
118
- element.__dragPrevented = true
119
- element.addEventListener(
120
- 'dragstart',
121
- prevent,
122
- listenOpts.notPassiveCapture
123
- )
124
- }
125
- : element => {
126
- delete element.__dragPrevented
127
- element.removeEventListener(
128
- 'dragstart',
129
- prevent,
130
- listenOpts.notPassiveCapture
131
- )
132
- }
112
+ if (el === void 0 || (status && el.__dragPrevented)) return
113
+
114
+ const fn = status
115
+ ? element => {
116
+ element.__dragPrevented = true
117
+ element.addEventListener(
118
+ 'dragstart',
119
+ prevent,
120
+ listenOpts.notPassiveCapture
121
+ )
122
+ }
123
+ : element => {
124
+ delete element.__dragPrevented
125
+ element.removeEventListener(
126
+ 'dragstart',
127
+ prevent,
128
+ listenOpts.notPassiveCapture
129
+ )
130
+ }
133
131
 
134
132
  el.querySelectorAll('a, img').forEach(fn)
135
133
  }
@@ -137,7 +135,7 @@ export function preventDraggable(el, status) {
137
135
  export function addEvt(ctx, targetName, events) {
138
136
  const name = `__q_${targetName}_evt`
139
137
 
140
- ctx[name] = ctx[name] !== void 0 ? ctx[name].concat(events) : events
138
+ ctx[name] = [...(ctx[name] ?? []), ...events]
141
139
 
142
140
  events.forEach(evt => {
143
141
  evt[0].addEventListener(evt[1], ctx[evt[2]], listenOpts[evt[3]])
@@ -2,7 +2,7 @@ function clean(link) {
2
2
  // allow time for iOS
3
3
  setTimeout(() => {
4
4
  window.URL.revokeObjectURL(link.href)
5
- }, 10000)
5
+ }, 10_000)
6
6
 
7
7
  link.remove()
8
8
  }
@@ -45,13 +45,13 @@ export default function exportFile(fileName, rawData, opts = {}) {
45
45
 
46
46
  // Check for "download" attribute support;
47
47
  // If not supported, open this in new window
48
- if (typeof link.download === 'undefined') {
48
+ if (link.download === void 0) {
49
49
  link.setAttribute('target', '_blank')
50
50
  }
51
51
 
52
52
  link.classList.add('hidden')
53
53
  link.style.position = 'fixed' // avoid scrolling to bottom
54
- document.body.appendChild(link)
54
+ document.body.append(link)
55
55
 
56
56
  try {
57
57
  link.click()
@@ -7,41 +7,41 @@ const toString = Object.prototype.toString,
7
7
  )
8
8
 
9
9
  function isPlainObject(obj) {
10
- if (obj !== Object(obj) || notPlainObject.has(toString.call(obj)) === true) {
10
+ if (obj !== Object(obj) || notPlainObject.has(toString.call(obj))) {
11
11
  return false
12
12
  }
13
13
 
14
14
  if (
15
15
  obj.constructor &&
16
- hasOwn.call(obj, 'constructor') === false &&
17
- hasOwn.call(obj.constructor.prototype, 'isPrototypeOf') === false
16
+ !hasOwn.call(obj, 'constructor') &&
17
+ !hasOwn.call(obj.constructor.prototype, 'isPrototypeOf')
18
18
  ) {
19
19
  return false
20
20
  }
21
21
 
22
22
  let key
23
- // oxlint-disable-next-line no-lone-blocks
24
23
  for (key in obj) {
24
+ // noop on purpose
25
25
  }
26
26
 
27
27
  return key === void 0 || hasOwn.call(obj, key)
28
28
  }
29
29
 
30
- export default function extend() {
30
+ export default function extend(...args) {
31
31
  let options,
32
32
  name,
33
33
  src,
34
34
  copy,
35
35
  copyIsArray,
36
36
  clone,
37
- target = arguments[0] || {},
37
+ target = args[0] || {},
38
38
  i = 1,
39
39
  deep = false
40
- const length = arguments.length
40
+ const length = args.length
41
41
 
42
42
  if (typeof target === 'boolean') {
43
43
  deep = target
44
- target = arguments[1] || {}
44
+ target = args[1] || {}
45
45
  i = 2
46
46
  }
47
47
 
@@ -50,12 +50,13 @@ export default function extend() {
50
50
  }
51
51
 
52
52
  if (length === i) {
53
+ // oxlint-disable-next-line unicorn/no-this-assignment
53
54
  target = this
54
55
  i--
55
56
  }
56
57
 
57
58
  for (; i < length; i++) {
58
- if ((options = arguments[i]) !== null) {
59
+ if ((options = args[i]) !== null) {
59
60
  for (name in options) {
60
61
  src = target[name]
61
62
  copy = options[name]
@@ -65,14 +66,14 @@ export default function extend() {
65
66
  }
66
67
 
67
68
  if (
68
- deep === true &&
69
+ deep &&
69
70
  copy &&
70
- ((copyIsArray = Array.isArray(copy)) || isPlainObject(copy) === true)
71
+ ((copyIsArray = Array.isArray(copy)) || isPlainObject(copy))
71
72
  ) {
72
- if (copyIsArray === true) {
73
- clone = Array.isArray(src) === true ? src : []
73
+ if (copyIsArray) {
74
+ clone = Array.isArray(src) ? src : []
74
75
  } else {
75
- clone = isPlainObject(src) === true ? src : {}
76
+ clone = isPlainObject(src) ? src : {}
76
77
  }
77
78
 
78
79
  target[name] = extend(deep, clone, copy)
@@ -1,4 +1,4 @@
1
- import { describe, test, expect } from 'vitest'
1
+ import { describe, expect, test } from 'vitest'
2
2
 
3
3
  import extend from './extend.js'
4
4
 
@@ -56,7 +56,7 @@ describe('[extend API]', () => {
56
56
  ['number', 5, 6],
57
57
  ['string', 'a', 'b'],
58
58
  ['undefined', void 0, null],
59
- ['NaN', NaN, Infinity],
59
+ ['NaN', Number.NaN, Infinity],
60
60
  ['Infinity', Infinity, 5],
61
61
  ['Date', new Date(150), new Date(200)],
62
62
  ['RegExp', /./, /.aaa/],
@@ -3,7 +3,7 @@ const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']
3
3
  export function humanStorageSize(bytes, decimals = 1) {
4
4
  let u = 0
5
5
 
6
- while (parseInt(bytes, 10) >= 1024 && u < units.length - 1) {
6
+ while (Number.parseInt(bytes, 10) >= 1024 && u < units.length - 1) {
7
7
  bytes /= 1024
8
8
  ++u
9
9
  }
@@ -12,7 +12,7 @@ export function humanStorageSize(bytes, decimals = 1) {
12
12
  }
13
13
 
14
14
  export function capitalize(str) {
15
- return str.charAt(0).toUpperCase() + str.slice(1)
15
+ return str.at(0).toUpperCase() + str.slice(1)
16
16
  }
17
17
 
18
18
  export function between(v, min, max) {
@@ -35,14 +35,8 @@ export function normalizeToInterval(v, min, max) {
35
35
  }
36
36
 
37
37
  export function pad(v, length = 2, char = '0') {
38
- if (v === void 0 || v === null) {
39
- return v
40
- }
41
-
42
- const val = String(v)
43
- return val.length >= length
44
- ? val
45
- : new Array(length - val.length + 1).join(char) + val
38
+ if (v === void 0 || v === null) return v
39
+ return String(v).padStart(length, char)
46
40
  }
47
41
 
48
42
  export default {
@@ -1,6 +1,6 @@
1
1
  // oxlint-disable import/no-named-as-default-member
2
2
 
3
- import { describe, test, expect } from 'vitest'
3
+ import { describe, expect, test } from 'vitest'
4
4
 
5
5
  import format from './format.js'
6
6
 
@@ -1,23 +1,34 @@
1
1
  export default function frameDebounce(fn) {
2
- let wait = false,
3
- frame,
4
- callArgs
2
+ let frame = null
3
+ let callArgs = null
4
+ let context = null
5
5
 
6
- function debounced(/* ...args */) {
7
- callArgs = arguments
8
- if (wait === true) return
6
+ function debounced(...args) {
7
+ // Always capture the latest arguments and context
8
+ callArgs = args
9
+ // oxlint-disable-next-line unicorn/no-this-assignment
10
+ context = this
11
+
12
+ // If a frame is already requested, just update the args/context and wait
13
+ if (frame !== null) return
9
14
 
10
- wait = true
11
15
  frame = window.requestAnimationFrame(() => {
12
- fn.apply(this, callArgs)
13
- callArgs = void 0
14
- wait = false
16
+ fn.apply(context, callArgs)
17
+
18
+ // Clean up state so the next call triggers a new frame
19
+ frame = null
20
+ callArgs = null
21
+ context = null
15
22
  })
16
23
  }
17
24
 
18
25
  debounced.cancel = () => {
19
- window.cancelAnimationFrame(frame)
20
- wait = false
26
+ if (frame !== null) {
27
+ window.cancelAnimationFrame(frame)
28
+ frame = null
29
+ }
30
+ callArgs = null
31
+ context = null
21
32
  }
22
33
 
23
34
  return debounced
@@ -1,4 +1,4 @@
1
- import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest'
1
+ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'
2
2
 
3
3
  import frameDebounce from './frame-debounce.js'
4
4
 
@@ -1,3 +1,5 @@
1
+ // oxlint-disable no-eq-null
2
+
1
3
  export function isDeepEqual(a, b) {
2
4
  if (a === b) return true
3
5
 
@@ -21,9 +23,7 @@ export function isDeepEqual(a, b) {
21
23
  }
22
24
 
23
25
  for (i = length; i-- !== 0; ) {
24
- if (isDeepEqual(a[i], b[i]) !== true) {
25
- return false
26
- }
26
+ if (!isDeepEqual(a[i], b[i])) return false
27
27
  }
28
28
 
29
29
  return true
@@ -37,19 +37,15 @@ export function isDeepEqual(a, b) {
37
37
  let iter = a.entries()
38
38
 
39
39
  i = iter.next()
40
- while (i.done !== true) {
41
- if (b.has(i.value[0]) !== true) {
42
- return false
43
- }
40
+ while (!i.done) {
41
+ if (!b.has(i.value[0])) return false
44
42
  i = iter.next()
45
43
  }
46
44
 
47
45
  iter = a.entries()
48
46
  i = iter.next()
49
- while (i.done !== true) {
50
- if (isDeepEqual(i.value[1], b.get(i.value[0])) !== true) {
51
- return false
52
- }
47
+ while (!i.done) {
48
+ if (!isDeepEqual(i.value[1], b.get(i.value[0]))) return false
53
49
  i = iter.next()
54
50
  }
55
51
 
@@ -64,10 +60,8 @@ export function isDeepEqual(a, b) {
64
60
  const iter = a.entries()
65
61
 
66
62
  i = iter.next()
67
- while (i.done !== true) {
68
- if (b.has(i.value[0]) !== true) {
69
- return false
70
- }
63
+ while (!i.done) {
64
+ if (!b.has(i.value[0])) return false
71
65
  i = iter.next()
72
66
  }
73
67
 
@@ -78,14 +72,10 @@ export function isDeepEqual(a, b) {
78
72
  if (a.buffer != null && a.buffer.constructor === ArrayBuffer) {
79
73
  length = a.length
80
74
 
81
- if (length !== b.length) {
82
- return false
83
- }
75
+ if (length !== b.length) return false
84
76
 
85
77
  for (i = length; i-- !== 0; ) {
86
- if (a[i] !== b[i]) {
87
- return false
88
- }
78
+ if (a[i] !== b[i]) return false
89
79
  }
90
80
 
91
81
  return true
@@ -112,22 +102,21 @@ export function isDeepEqual(a, b) {
112
102
 
113
103
  for (i = length; i-- !== 0; ) {
114
104
  const key = keys[i]
115
- if (isDeepEqual(a[key], b[key]) !== true) {
116
- return false
117
- }
105
+ if (!isDeepEqual(a[key], b[key])) return false
118
106
  }
119
107
 
120
108
  return true
121
109
  }
122
110
 
123
111
  // true if both NaN, false otherwise
112
+ // oxlint-disable-next-line no-self-compare
124
113
  return a !== a && b !== b
125
114
  }
126
115
 
127
116
  // not perfect, but what we ARE interested is for Arrays not to slip in
128
117
  // as spread operator will mess things up in various areas
129
118
  export function isObject(v) {
130
- return v !== null && typeof v === 'object' && Array.isArray(v) !== true
119
+ return v !== null && typeof v === 'object' && !Array.isArray(v)
131
120
  }
132
121
 
133
122
  export function isDate(v) {
@@ -139,7 +128,7 @@ export function isRegexp(v) {
139
128
  }
140
129
 
141
130
  export function isNumber(v) {
142
- return typeof v === 'number' && isFinite(v)
131
+ return typeof v === 'number' && Number.isFinite(v)
143
132
  }
144
133
 
145
134
  export default {
@@ -1,4 +1,4 @@
1
- import { describe, test, expect } from 'vitest'
1
+ import { describe, expect, test } from 'vitest'
2
2
 
3
3
  import is from './is.js'
4
4
 
@@ -11,7 +11,7 @@ describe('[is API]', () => {
11
11
  ['Boolean', true, true],
12
12
  ['Null', null, null],
13
13
  ['Undefined', void 0, void 0],
14
- ['NaN', NaN, NaN],
14
+ ['NaN', Number.NaN, Number.NaN],
15
15
  ['Infinity', Infinity, Infinity],
16
16
  ['Date', new Date(150), new Date(150)],
17
17
  ['RegExp', /./, /./],
@@ -60,7 +60,7 @@ describe('[is API]', () => {
60
60
  ['5, str(5)', 5, '5'],
61
61
  ['5, null', 5, null],
62
62
  ['5, undefined', 5, void 0],
63
- ['5, NaN', 5, NaN],
63
+ ['5, NaN', 5, Number.NaN],
64
64
  ['5, Infinity', 5, Infinity],
65
65
  ['5, {}', 5, {}],
66
66
  ['5, []', 5, []],
@@ -82,7 +82,7 @@ describe('[is API]', () => {
82
82
  ['5', 5, false],
83
83
  ['null', null, false],
84
84
  ['undefined', void 0, false],
85
- ['NaN', NaN, false],
85
+ ['NaN', Number.NaN, false],
86
86
  ['Infinity', Infinity, false],
87
87
  ['Symbol()', Symbol('q'), false]
88
88
  ])('has correct return value for %s', (_, value, expected) => {
@@ -98,7 +98,7 @@ describe('[is API]', () => {
98
98
  ['{}', {}, false],
99
99
  ['null', null, false],
100
100
  ['undefined', void 0, false],
101
- ['NaN', NaN, false],
101
+ ['NaN', Number.NaN, false],
102
102
  ['Infinity', Infinity, false],
103
103
  ['Symbol()', Symbol('q'), false]
104
104
  ])('has correct return value for %s', (_, value, expected) => {
@@ -110,12 +110,13 @@ describe('[is API]', () => {
110
110
  test.each([
111
111
  ['/./', /./, true],
112
112
  ['new RegExp()', new RegExp(), true],
113
+ // oxlint-disable-next-line unicorn/new-for-builtins
113
114
  ['RegExp()', RegExp(), true],
114
115
  ['5', 5, false],
115
116
  ['{}', {}, false],
116
117
  ['null', null, false],
117
118
  ['undefined', void 0, false],
118
- ['NaN', NaN, false],
119
+ ['NaN', Number.NaN, false],
119
120
  ['Infinity', Infinity, false],
120
121
  ['Symbol()', Symbol('q'), false]
121
122
  ])('has correct return value for %s', (_, value, expected) => {
@@ -127,7 +128,7 @@ describe('[is API]', () => {
127
128
  test.each([
128
129
  ['5', 5, true],
129
130
  ['5.5', 5.5, true],
130
- ['NaN', NaN, false],
131
+ ['NaN', Number.NaN, false],
131
132
  ['Infinity', Infinity, false],
132
133
  ['Symbol()', Symbol('q'), false],
133
134
  ['{}', {}, false],