quasar 2.5.5 → 2.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. package/README.md +1 -1
  2. package/dist/api/Dialog.json +9 -2
  3. package/dist/api/QBreadcrumbsEl.json +5 -5
  4. package/dist/api/QBtn.json +2 -2
  5. package/dist/api/QBtnDropdown.json +2 -2
  6. package/dist/api/QExpansionItem.json +5 -5
  7. package/dist/api/QItem.json +5 -5
  8. package/dist/api/QKnob.json +5 -0
  9. package/dist/api/QRouteTab.json +5 -5
  10. package/dist/api/QSelect.json +8 -9
  11. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  12. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  13. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  14. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  15. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +6 -0
  16. package/dist/icon-set/fontawesome-v6.umd.prod.js +6 -0
  17. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  18. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  19. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  20. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  21. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  22. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  23. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  24. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  25. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  26. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +2 -2
  28. package/dist/icon-set/svg-eva-icons.umd.prod.js +2 -2
  29. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +2 -2
  30. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +6 -0
  31. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +2 -2
  34. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-mdi-v6.umd.prod.js +2 -2
  40. package/dist/icon-set/svg-themify.umd.prod.js +2 -2
  41. package/dist/icon-set/themify.umd.prod.js +1 -1
  42. package/dist/lang/ar.umd.prod.js +1 -1
  43. package/dist/lang/az-Latn.umd.prod.js +1 -1
  44. package/dist/lang/bg.umd.prod.js +1 -1
  45. package/dist/lang/bn.umd.prod.js +1 -1
  46. package/dist/lang/ca.umd.prod.js +1 -1
  47. package/dist/lang/cs.umd.prod.js +1 -1
  48. package/dist/lang/da.umd.prod.js +1 -1
  49. package/dist/lang/de.umd.prod.js +1 -1
  50. package/dist/lang/el.umd.prod.js +1 -1
  51. package/dist/lang/en-GB.umd.prod.js +1 -1
  52. package/dist/lang/en-US.umd.prod.js +1 -1
  53. package/dist/lang/eo.umd.prod.js +1 -1
  54. package/dist/lang/es.umd.prod.js +1 -1
  55. package/dist/lang/et.umd.prod.js +1 -1
  56. package/dist/lang/eu.umd.prod.js +6 -0
  57. package/dist/lang/fa-IR.umd.prod.js +1 -1
  58. package/dist/lang/fa.umd.prod.js +1 -1
  59. package/dist/lang/fi.umd.prod.js +1 -1
  60. package/dist/lang/fr.umd.prod.js +1 -1
  61. package/dist/lang/gn.umd.prod.js +1 -1
  62. package/dist/lang/he.umd.prod.js +1 -1
  63. package/dist/lang/hr.umd.prod.js +1 -1
  64. package/dist/lang/hu.umd.prod.js +1 -1
  65. package/dist/lang/id.umd.prod.js +1 -1
  66. package/dist/lang/is.umd.prod.js +1 -1
  67. package/dist/lang/it.umd.prod.js +1 -1
  68. package/dist/lang/ja.umd.prod.js +1 -1
  69. package/dist/lang/km.umd.prod.js +1 -1
  70. package/dist/lang/ko-KR.umd.prod.js +1 -1
  71. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  72. package/dist/lang/kz.umd.prod.js +6 -0
  73. package/dist/lang/lt.umd.prod.js +1 -1
  74. package/dist/lang/lu.umd.prod.js +1 -1
  75. package/dist/lang/lv.umd.prod.js +1 -1
  76. package/dist/lang/ml.umd.prod.js +1 -1
  77. package/dist/lang/ms.umd.prod.js +1 -1
  78. package/dist/lang/my.umd.prod.js +1 -1
  79. package/dist/lang/nb-NO.umd.prod.js +1 -1
  80. package/dist/lang/nl.umd.prod.js +1 -1
  81. package/dist/lang/pl.umd.prod.js +1 -1
  82. package/dist/lang/pt-BR.umd.prod.js +1 -1
  83. package/dist/lang/pt.umd.prod.js +1 -1
  84. package/dist/lang/ro.umd.prod.js +1 -1
  85. package/dist/lang/ru.umd.prod.js +1 -1
  86. package/dist/lang/sk.umd.prod.js +1 -1
  87. package/dist/lang/sl.umd.prod.js +1 -1
  88. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  89. package/dist/lang/sr.umd.prod.js +1 -1
  90. package/dist/lang/sv.umd.prod.js +1 -1
  91. package/dist/lang/ta.umd.prod.js +1 -1
  92. package/dist/lang/th.umd.prod.js +1 -1
  93. package/dist/lang/tr.umd.prod.js +1 -1
  94. package/dist/lang/ug.umd.prod.js +2 -2
  95. package/dist/lang/uk.umd.prod.js +1 -1
  96. package/dist/lang/vi.umd.prod.js +1 -1
  97. package/dist/lang/zh-CN.umd.prod.js +1 -1
  98. package/dist/lang/zh-TW.umd.prod.js +1 -1
  99. package/dist/quasar.cjs.prod.js +2 -2
  100. package/dist/quasar.css +2 -4
  101. package/dist/quasar.esm.prod.js +2 -2
  102. package/dist/quasar.prod.css +1 -1
  103. package/dist/quasar.rtl.css +2 -4
  104. package/dist/quasar.rtl.prod.css +1 -1
  105. package/dist/quasar.sass +2 -1
  106. package/dist/quasar.umd.js +334 -251
  107. package/dist/quasar.umd.prod.js +2 -2
  108. package/dist/types/extras/icon-set.d.ts +3 -0
  109. package/dist/types/globals.d.ts +2 -2
  110. package/dist/types/index.d.ts +35 -27
  111. package/dist/vetur/quasar-attributes.json +28 -24
  112. package/dist/vetur/quasar-tags.json +1 -0
  113. package/dist/web-types/web-types.json +35 -25
  114. package/icon-set/bootstrap-icons.js +11 -6
  115. package/icon-set/bootstrap-icons.mjs +136 -0
  116. package/icon-set/eva-icons.js +10 -5
  117. package/icon-set/{svg-mdi-v4.js → eva-icons.mjs} +62 -94
  118. package/icon-set/fontawesome-v5-pro.js +6 -1
  119. package/icon-set/fontawesome-v5-pro.mjs +128 -0
  120. package/icon-set/fontawesome-v5.js +6 -1
  121. package/icon-set/fontawesome-v5.mjs +128 -0
  122. package/icon-set/fontawesome-v6-pro.js +133 -0
  123. package/icon-set/fontawesome-v6-pro.mjs +128 -0
  124. package/icon-set/fontawesome-v6.js +133 -0
  125. package/icon-set/fontawesome-v6.mjs +128 -0
  126. package/icon-set/ionicons-v4.js +10 -5
  127. package/icon-set/ionicons-v4.mjs +180 -0
  128. package/icon-set/line-awesome.js +6 -1
  129. package/icon-set/line-awesome.mjs +128 -0
  130. package/icon-set/material-icons-outlined.js +6 -1
  131. package/icon-set/material-icons-outlined.mjs +128 -0
  132. package/icon-set/material-icons-round.js +6 -1
  133. package/icon-set/material-icons-round.mjs +128 -0
  134. package/icon-set/material-icons-sharp.js +6 -1
  135. package/icon-set/material-icons-sharp.mjs +128 -0
  136. package/icon-set/material-icons.js +6 -1
  137. package/icon-set/material-icons.mjs +128 -0
  138. package/icon-set/mdi-v3.js +6 -1
  139. package/icon-set/mdi-v3.mjs +141 -0
  140. package/icon-set/mdi-v4.js +6 -1
  141. package/icon-set/mdi-v4.mjs +141 -0
  142. package/icon-set/mdi-v5.js +6 -1
  143. package/icon-set/mdi-v5.mjs +141 -0
  144. package/icon-set/mdi-v6.js +6 -1
  145. package/icon-set/mdi-v6.mjs +141 -0
  146. package/icon-set/svg-bootstrap-icons.js +10 -11
  147. package/icon-set/svg-bootstrap-icons.mjs +210 -0
  148. package/icon-set/svg-eva-icons.js +9 -10
  149. package/icon-set/svg-eva-icons.mjs +233 -0
  150. package/icon-set/svg-fontawesome-v5.js +5 -6
  151. package/icon-set/svg-fontawesome-v5.mjs +197 -0
  152. package/icon-set/svg-fontawesome-v6.js +198 -0
  153. package/icon-set/svg-fontawesome-v6.mjs +198 -0
  154. package/icon-set/svg-ionicons-v4.js +9 -10
  155. package/icon-set/svg-ionicons-v4.mjs +234 -0
  156. package/icon-set/svg-ionicons-v5.js +7 -7
  157. package/icon-set/svg-ionicons-v5.mjs +225 -0
  158. package/icon-set/svg-ionicons-v6.js +7 -7
  159. package/icon-set/svg-ionicons-v6.mjs +225 -0
  160. package/icon-set/svg-line-awesome.js +5 -5
  161. package/icon-set/svg-line-awesome.mjs +198 -0
  162. package/icon-set/svg-material-icons-outlined.js +5 -5
  163. package/icon-set/svg-material-icons-outlined.mjs +203 -0
  164. package/icon-set/svg-material-icons-round.js +5 -5
  165. package/icon-set/svg-material-icons-round.mjs +203 -0
  166. package/icon-set/svg-material-icons-sharp.js +5 -5
  167. package/icon-set/svg-material-icons-sharp.mjs +203 -0
  168. package/icon-set/svg-material-icons.js +5 -5
  169. package/icon-set/svg-material-icons.mjs +203 -0
  170. package/icon-set/svg-mdi-v6.js +5 -5
  171. package/icon-set/{svg-mdi-v5.js → svg-mdi-v6.mjs} +6 -6
  172. package/icon-set/svg-themify.js +9 -10
  173. package/icon-set/svg-themify.mjs +231 -0
  174. package/icon-set/themify.js +10 -5
  175. package/icon-set/themify.mjs +169 -0
  176. package/lang/ar.js +6 -1
  177. package/lang/ar.mjs +96 -0
  178. package/lang/az-Latn.js +6 -1
  179. package/lang/az-Latn.mjs +91 -0
  180. package/lang/bg.js +6 -1
  181. package/lang/bg.mjs +91 -0
  182. package/lang/bn.js +6 -1
  183. package/lang/bn.mjs +91 -0
  184. package/lang/ca.js +6 -1
  185. package/lang/ca.mjs +91 -0
  186. package/lang/cs.js +6 -1
  187. package/lang/cs.mjs +102 -0
  188. package/lang/da.js +6 -1
  189. package/lang/da.mjs +91 -0
  190. package/lang/de.js +6 -1
  191. package/lang/de.mjs +91 -0
  192. package/lang/el.js +6 -1
  193. package/lang/el.mjs +91 -0
  194. package/lang/en-GB.js +6 -1
  195. package/lang/en-GB.mjs +91 -0
  196. package/lang/en-US.js +6 -1
  197. package/lang/en-US.mjs +91 -0
  198. package/lang/eo.js +6 -1
  199. package/lang/eo.mjs +91 -0
  200. package/lang/es.js +6 -1
  201. package/lang/es.mjs +91 -0
  202. package/lang/et.js +6 -1
  203. package/lang/et.mjs +91 -0
  204. package/lang/eu.js +96 -0
  205. package/lang/eu.mjs +91 -0
  206. package/lang/fa-IR.js +6 -1
  207. package/lang/fa-IR.mjs +92 -0
  208. package/lang/fa.js +6 -1
  209. package/lang/fa.mjs +92 -0
  210. package/lang/fi.js +6 -1
  211. package/lang/fi.mjs +92 -0
  212. package/lang/fr.js +6 -1
  213. package/lang/fr.mjs +94 -0
  214. package/lang/gn.js +6 -1
  215. package/lang/gn.mjs +91 -0
  216. package/lang/he.js +6 -1
  217. package/lang/he.mjs +92 -0
  218. package/lang/hr.js +6 -1
  219. package/lang/hr.mjs +91 -0
  220. package/lang/hu.js +6 -1
  221. package/lang/hu.mjs +91 -0
  222. package/lang/id.js +6 -1
  223. package/lang/id.mjs +91 -0
  224. package/lang/index.json +8 -0
  225. package/lang/is.js +6 -1
  226. package/lang/is.mjs +91 -0
  227. package/lang/it.js +6 -1
  228. package/lang/it.mjs +91 -0
  229. package/lang/ja.js +6 -1
  230. package/lang/ja.mjs +90 -0
  231. package/lang/km.js +6 -1
  232. package/lang/km.mjs +91 -0
  233. package/lang/ko-KR.js +6 -1
  234. package/lang/ko-KR.mjs +91 -0
  235. package/lang/kur-CKB.js +6 -1
  236. package/lang/kur-CKB.mjs +101 -0
  237. package/lang/kz.js +100 -0
  238. package/lang/kz.mjs +95 -0
  239. package/lang/lt.js +6 -1
  240. package/lang/lt.mjs +103 -0
  241. package/lang/lu.js +6 -1
  242. package/lang/lu.mjs +91 -0
  243. package/lang/lv.js +6 -1
  244. package/lang/lv.mjs +91 -0
  245. package/lang/ml.js +6 -1
  246. package/lang/ml.mjs +95 -0
  247. package/lang/ms.js +6 -1
  248. package/lang/ms.mjs +91 -0
  249. package/lang/my.js +6 -1
  250. package/lang/my.mjs +90 -0
  251. package/lang/nb-NO.js +6 -1
  252. package/lang/nb-NO.mjs +92 -0
  253. package/lang/nl.js +6 -1
  254. package/lang/nl.mjs +91 -0
  255. package/lang/pl.js +6 -1
  256. package/lang/pl.mjs +91 -0
  257. package/lang/pt-BR.js +6 -1
  258. package/lang/pt-BR.mjs +91 -0
  259. package/lang/pt.js +6 -1
  260. package/lang/pt.mjs +91 -0
  261. package/lang/ro.js +6 -1
  262. package/lang/ro.mjs +91 -0
  263. package/lang/ru.js +6 -1
  264. package/lang/ru.mjs +95 -0
  265. package/lang/sk.js +6 -1
  266. package/lang/sk.mjs +91 -0
  267. package/lang/sl.js +6 -1
  268. package/lang/sl.mjs +91 -0
  269. package/lang/sr-CYR.js +6 -1
  270. package/lang/sr-CYR.mjs +91 -0
  271. package/lang/sr.js +6 -1
  272. package/lang/sr.mjs +91 -0
  273. package/lang/sv.js +6 -1
  274. package/lang/sv.mjs +91 -0
  275. package/lang/ta.js +6 -1
  276. package/lang/ta.mjs +91 -0
  277. package/lang/th.js +6 -1
  278. package/lang/th.mjs +91 -0
  279. package/lang/tr.js +6 -1
  280. package/lang/tr.mjs +87 -0
  281. package/lang/ug.js +55 -51
  282. package/lang/ug.mjs +91 -0
  283. package/lang/uk.js +7 -2
  284. package/lang/uk.mjs +95 -0
  285. package/lang/vi.js +6 -1
  286. package/lang/vi.mjs +91 -0
  287. package/lang/zh-CN.js +6 -1
  288. package/lang/zh-CN.mjs +90 -0
  289. package/lang/zh-TW.js +6 -1
  290. package/lang/zh-TW.mjs +90 -0
  291. package/package.json +7 -5
  292. package/src/components/btn/QBtn.js +16 -14
  293. package/src/components/btn/use-btn.js +7 -7
  294. package/src/components/btn/use-btn.json +2 -2
  295. package/src/components/date/QDate.js +2 -2
  296. package/src/components/dialog/QDialog.js +11 -11
  297. package/src/components/dialog-bottom-sheet/BottomSheet.js +11 -11
  298. package/src/components/dialog-plugin/DialogPlugin.js +6 -6
  299. package/src/components/editor/QEditor.js +10 -10
  300. package/src/components/editor/editor-caret.js +1 -1
  301. package/src/components/editor/editor-utils.js +2 -2
  302. package/src/components/fab/QFab.js +1 -1
  303. package/src/components/file/QFile.js +2 -1
  304. package/src/components/icon/QIcon.js +2 -1
  305. package/src/components/infinite-scroll/QInfiniteScroll.js +3 -1
  306. package/src/components/inner-loading/QInnerLoading.js +7 -7
  307. package/src/components/input/QInput.js +4 -1
  308. package/src/components/knob/QKnob.js +5 -2
  309. package/src/components/knob/QKnob.json +6 -0
  310. package/src/components/linear-progress/QLinearProgress.sass +1 -0
  311. package/src/components/menu/QMenu.js +13 -13
  312. package/src/components/page-scroller/QPageScroller.js +4 -4
  313. package/src/components/pull-to-refresh/QPullToRefresh.js +5 -5
  314. package/src/components/select/QSelect.js +28 -7
  315. package/src/components/select/QSelect.json +4 -7
  316. package/src/components/slider/use-slider.js +4 -4
  317. package/src/components/stepper/QStep.js +6 -6
  318. package/src/components/table/table-column-selection.js +6 -6
  319. package/src/components/table/table-sort.js +2 -2
  320. package/src/components/tabs/QTabs.js +4 -4
  321. package/src/components/tooltip/QTooltip.js +12 -12
  322. package/src/components/uploader/uploader-core.js +11 -10
  323. package/src/components/virtual-scroll/QVirtualScroll.js +3 -3
  324. package/src/components/virtual-scroll/use-virtual-scroll.js +20 -20
  325. package/src/composables/private/__tests__/use-transition.spec.js +2 -2
  326. package/src/composables/private/use-field.js +25 -17
  327. package/src/composables/private/use-file-dom-props.js +5 -5
  328. package/src/composables/private/use-file.js +15 -12
  329. package/src/composables/private/use-router-link.js +2 -2
  330. package/src/composables/private/use-router-link.json +5 -5
  331. package/src/directives/Morph.js +12 -3
  332. package/src/icon-set.js +2 -1
  333. package/src/install-quasar.js +3 -3
  334. package/src/lang.js +2 -1
  335. package/src/plugins/AddressbarColor.js +7 -7
  336. package/src/plugins/Cookies.js +5 -1
  337. package/src/plugins/Dialog.json +3 -2
  338. package/src/plugins/Loading.js +3 -3
  339. package/src/plugins/LoadingBar.js +12 -6
  340. package/src/plugins/Notify.js +4 -4
  341. package/src/utils/create-meta-mixin.js +4 -4
  342. package/src/utils/create-uploader-component.js +2 -2
  343. package/src/utils/date.js +8 -12
  344. package/src/utils/event.js +3 -3
  345. package/src/utils/extend.js +33 -5
  346. package/src/utils/morph.js +2 -2
  347. package/src/utils/private/is.js +4 -2
  348. package/src/utils/private/noop-ssr-directive-transform.js +1 -1
  349. package/wrappers/index.js +33 -5
  350. package/wrappers/index.mjs +63 -0
  351. package/dist/icon-set/svg-mdi-v4.umd.prod.js +0 -6
  352. package/dist/icon-set/svg-mdi-v5.umd.prod.js +0 -6
  353. package/dist/ssr-directives/Morph.js +0 -55
  354. package/dist/ssr-directives/index.js +0 -14
  355. package/src/directives/Morph.ssr.js +0 -45
package/lang/zh-TW.mjs ADDED
@@ -0,0 +1,90 @@
1
+ export default {
2
+ isoName: 'zh-TW',
3
+ nativeName: '中文(繁體)',
4
+ label: {
5
+ clear: '清除',
6
+ ok: '確定',
7
+ cancel: '取消',
8
+ close: '關閉',
9
+ set: '設定',
10
+ select: '選擇',
11
+ reset: '重置',
12
+ remove: '移除',
13
+ update: '更新',
14
+ create: '新增',
15
+ search: '搜尋',
16
+ filter: '篩選',
17
+ refresh: '更新'
18
+ },
19
+ date: {
20
+ days: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
21
+ daysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
22
+ months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
23
+ monthsShort: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
24
+ headerTitle: date => new Intl.DateTimeFormat('zh-TW', {
25
+ weekday: 'short', month: 'short', day: 'numeric'
26
+ }).format(date),
27
+ firstDayOfWeek: 0, // 0-6, 0 - Sunday, 1 Monday, ...
28
+ format24h: false,
29
+ pluralDay: '日'
30
+ },
31
+ table: {
32
+ noData: '沒有資料',
33
+ noResults: '沒有相符資料',
34
+ loading: '載入中...',
35
+ selectedRecords: rows => '已選擇 ' + rows + ' 列',
36
+ recordsPerPage: '每頁列數:',
37
+ allRows: '全部',
38
+ pagination: (start, end, total) => start + '-' + end + ' 列,共 ' + total + ' 列',
39
+ columns: '欄位'
40
+ },
41
+ editor: {
42
+ url: '網址',
43
+ bold: '粗體',
44
+ italic: '斜體',
45
+ strikethrough: '刪除線',
46
+ underline: '下劃線',
47
+ unorderedList: '項目符號清單',
48
+ orderedList: '編號清單',
49
+ subscript: '下標',
50
+ superscript: '上標',
51
+ hyperlink: '超連結',
52
+ toggleFullscreen: '切換全螢幕',
53
+ quote: '段落引用',
54
+ left: '靠左對齊',
55
+ center: '置中對齊',
56
+ right: '靠右對齊',
57
+ justify: '分散對齊',
58
+ print: '列印',
59
+ outdent: '減少縮排',
60
+ indent: '增加縮排',
61
+ removeFormat: '清除格式',
62
+ formatting: '區塊元素',
63
+ fontSize: '字型大小',
64
+ align: '對齊',
65
+ hr: '水平分隔線',
66
+ undo: '復原',
67
+ redo: '取消復原',
68
+ heading1: '標題 1',
69
+ heading2: '標題 2',
70
+ heading3: '標題 3',
71
+ heading4: '標題 4',
72
+ heading5: '標題 5',
73
+ heading6: '標題 6',
74
+ paragraph: '段落',
75
+ code: '程式碼',
76
+ size1: '非常小',
77
+ size2: '稍小',
78
+ size3: '正常',
79
+ size4: '稍大',
80
+ size5: '大',
81
+ size6: '非常大',
82
+ size7: '超級大',
83
+ defaultFont: '預設字型',
84
+ viewSource: '切換原始碼'
85
+ },
86
+ tree: {
87
+ noNodes: '沒有節點',
88
+ noResults: '沒有相符節點'
89
+ }
90
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quasar",
3
- "version": "2.5.5",
3
+ "version": "2.6.2",
4
4
  "description": "Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time",
5
5
  "main": "dist/quasar.cjs.prod.js",
6
6
  "module": "dist/quasar.esm.prod.js",
@@ -17,7 +17,9 @@
17
17
  "scripts": {
18
18
  "clean": "node build/script.clean.js",
19
19
  "dev": "cd ./dev && node ./script.dev.js dev && cd ..",
20
+ "dev:build": "cd ./dev && node ./script.build.js dev && cd ..",
20
21
  "dev:ssr": "cd ./dev && node ./script.dev.js dev -m ssr && cd ..",
22
+ "dev:build:ssr": "cd ./dev && node ./script.build.js dev -m ssr && cd ..",
21
23
  "dev:cordova:ios": "cd ./dev && node ./script.dev.js dev -m cordova -T ios && cd ..",
22
24
  "dev:cordova:android": "cd ./dev && node ./script.dev.js dev -m cordova -T android && cd ..",
23
25
  "dev:capacitor:ios": "cd ./dev && node ./script.dev.js dev -m capacitor -T ios && cd ..",
@@ -64,14 +66,15 @@
64
66
  },
65
67
  "homepage": "https://quasar.dev",
66
68
  "devDependencies": {
67
- "@babel/eslint-parser": "^7.13.14",
68
- "@quasar/app": "^3.0.0",
69
+ "@quasar/app-vite": "^1.0.0-beta.5",
69
70
  "@quasar/extras": "^1.12.0",
70
71
  "@quasar/quasar-app-extension-testing-e2e-cypress": "^4.0.1",
71
72
  "@rollup/plugin-node-resolve": "^11.2.1",
72
73
  "@rollup/plugin-replace": "^2.3.3",
74
+ "autoprefixer": "^10.4.4",
73
75
  "babel-preset-es2015-rollup": "^3.0.0",
74
76
  "cli-highlight": "^2.1.11",
77
+ "cssnano": "^5.1.4",
75
78
  "diff": "^5.0.0",
76
79
  "eslint": "^7.4.0",
77
80
  "eslint-config-standard": "^16.0.2",
@@ -82,16 +85,15 @@
82
85
  "eslint-plugin-node": "^11.1.0",
83
86
  "eslint-plugin-promise": "^4.2.1",
84
87
  "eslint-plugin-vue": "^7.0.0",
85
- "eslint-webpack-plugin": "^2.4.1",
86
88
  "fast-glob": "^3.2.7",
87
89
  "json-beautify": "^1.1.1",
88
90
  "module-alias": "^2.2.2",
91
+ "postcss-rtlcss": "^3.5.3",
89
92
  "prettier": "^2.4.1",
90
93
  "quasar": "^2.1.9",
91
94
  "recast": "^0.18.5",
92
95
  "rimraf": "^3.0.1",
93
96
  "rollup": "^2.34.0",
94
- "rollup-plugin-typescript2": "^0.29.0",
95
97
  "table": "^6.0.4",
96
98
  "tslib": "^2.0.3",
97
99
  "uglify-es": "^3.3.9",
@@ -84,7 +84,7 @@ export default createComponent({
84
84
  onClick,
85
85
  onKeydown,
86
86
  onMousedown,
87
- onTouchstartPassive
87
+ onTouchstart
88
88
  }
89
89
  }
90
90
 
@@ -153,12 +153,12 @@ export default createComponent({
153
153
  // is it already destroyed?
154
154
  if (rootRef.value === null) { return }
155
155
 
156
- if (isKeyCode(e, [ 13, 32 ]) === true) {
157
- stopAndPrevent(e)
156
+ emit('keydown', e)
158
157
 
159
- if (keyboardTarget !== rootRef.value) {
160
- keyboardTarget !== null && cleanup()
158
+ if (isKeyCode(e, [ 13, 32 ]) === true && keyboardTarget !== rootRef.value) {
159
+ keyboardTarget !== null && cleanup()
161
160
 
161
+ if (e.defaultPrevented !== true) {
162
162
  // focus external button if the focus helper was focused before
163
163
  rootRef.value.focus()
164
164
 
@@ -167,15 +167,19 @@ export default createComponent({
167
167
  document.addEventListener('keyup', onPressEnd, true)
168
168
  rootRef.value.addEventListener('blur', onPressEnd, passiveCapture)
169
169
  }
170
- }
171
170
 
172
- emit('keydown', e)
171
+ stopAndPrevent(e)
172
+ }
173
173
  }
174
174
 
175
- function onTouchstartPassive (e) {
175
+ function onTouchstart (e) {
176
176
  // is it already destroyed?
177
177
  if (rootRef.value === null) { return }
178
178
 
179
+ emit('touchstart', e)
180
+
181
+ if (e.defaultPrevented === true) { return }
182
+
179
183
  if (touchTarget !== rootRef.value) {
180
184
  touchTarget !== null && cleanup()
181
185
  touchTarget = rootRef.value
@@ -192,23 +196,21 @@ export default createComponent({
192
196
  mouseTimer = setTimeout(() => {
193
197
  avoidMouseRipple = false
194
198
  }, 200)
195
-
196
- emit('touchstart', e)
197
199
  }
198
200
 
199
201
  function onMousedown (e) {
200
202
  // is it already destroyed?
201
203
  if (rootRef.value === null) { return }
202
204
 
203
- if (mouseTarget !== rootRef.value) {
205
+ e.qSkipRipple = avoidMouseRipple === true
206
+ emit('mousedown', e)
207
+
208
+ if (e.defaultPrevented !== true && mouseTarget !== rootRef.value) {
204
209
  mouseTarget !== null && cleanup()
205
210
  mouseTarget = rootRef.value
206
211
  rootRef.value.classList.add('q-btn--active')
207
212
  document.addEventListener('mouseup', onPressEnd, passiveCapture)
208
213
  }
209
-
210
- e.qSkipRipple = avoidMouseRipple === true
211
- emit('mousedown', e)
212
214
  }
213
215
 
214
216
  function onPressEnd (e) {
@@ -88,13 +88,13 @@ export default function (props) {
88
88
 
89
89
  return props.padding !== void 0
90
90
  ? Object.assign({}, obj, {
91
- padding: props.padding
92
- .split(/\s+/)
93
- .map(v => (v in padding ? padding[ v ] + 'px' : v))
94
- .join(' '),
95
- minWidth: '0',
96
- minHeight: '0'
97
- })
91
+ padding: props.padding
92
+ .split(/\s+/)
93
+ .map(v => (v in padding ? padding[ v ] + 'px' : v))
94
+ .join(' '),
95
+ minWidth: '0',
96
+ minHeight: '0'
97
+ })
98
98
  : obj
99
99
  })
100
100
 
@@ -16,7 +16,7 @@
16
16
 
17
17
  "to": {
18
18
  "type": [ "String", "Object" ],
19
- "desc": "Equivalent to Vue Router <router-link> 'to' property; Superseeded by 'href' prop if used",
19
+ "desc": "Equivalent to Vue Router <router-link> 'to' property; Superseded by 'href' prop if used",
20
20
  "examples": [
21
21
  "/home/dashboard",
22
22
  ":to=\"{ name: 'my-route-name' }\""
@@ -26,7 +26,7 @@
26
26
 
27
27
  "replace": {
28
28
  "type": "Boolean",
29
- "desc": "Equivalent to Vue Router <router-link> 'replace' property; Superseeded by 'href' prop if used",
29
+ "desc": "Equivalent to Vue Router <router-link> 'replace' property; Superseded by 'href' prop if used",
30
30
  "category": "navigation"
31
31
  },
32
32
 
@@ -12,7 +12,7 @@ import { hSlot } from '../../utils/private/render.js'
12
12
  import { formatDate, __splitDate, getDateDiff } from '../../utils/date.js'
13
13
  import { pad } from '../../utils/format.js'
14
14
  import { jalaaliMonthLength, toGregorian } from '../../utils/private/date-persian.js'
15
- import { isPlainObject } from '../../utils/private/is.js'
15
+ import { isObject } from '../../utils/private/is.js'
16
16
 
17
17
  const yearsInterval = 20
18
18
  const views = [ 'Calendar', 'Years', 'Months' ]
@@ -165,7 +165,7 @@ export default createComponent({
165
165
  const rangeModel = computed(() => {
166
166
  const fn = date => decodeString(date, innerMask.value, innerLocale.value)
167
167
  return normalizedModel.value
168
- .filter(date => isPlainObject(date) === true && date.from !== void 0 && date.to !== void 0)
168
+ .filter(date => isObject(date) === true && date.from !== void 0 && date.to !== void 0)
169
169
  .map(range => ({ from: fn(range.from), to: fn(range.to) }))
170
170
  .filter(range => range.from.dateHash !== null && range.to.dateHash !== null && range.from.dateHash < range.to.dateHash)
171
171
  })
@@ -381,11 +381,11 @@ export default createComponent({
381
381
  }, () => (
382
382
  useBackdrop.value === true
383
383
  ? h('div', {
384
- class: 'q-dialog__backdrop fixed-full',
385
- style: transitionStyle.value,
386
- 'aria-hidden': 'true',
387
- onMousedown: onBackdropClick
388
- })
384
+ class: 'q-dialog__backdrop fixed-full',
385
+ style: transitionStyle.value,
386
+ 'aria-hidden': 'true',
387
+ onMousedown: onBackdropClick
388
+ })
389
389
  : null
390
390
  )),
391
391
 
@@ -395,12 +395,12 @@ export default createComponent({
395
395
  () => (
396
396
  showing.value === true
397
397
  ? h('div', {
398
- ref: innerRef,
399
- class: classes.value,
400
- style: transitionStyle.value,
401
- tabindex: -1,
402
- ...onEvents.value
403
- }, hSlot(slots.default))
398
+ ref: innerRef,
399
+ class: classes.value,
400
+ style: transitionStyle.value,
401
+ tabindex: -1,
402
+ ...onEvents.value
403
+ }, hSlot(slots.default))
404
404
  : null
405
405
  )
406
406
  )
@@ -61,9 +61,9 @@ export default createComponent({
61
61
 
62
62
  return action.label === void 0
63
63
  ? h(QSeparator, {
64
- class: 'col-all',
65
- dark: isDark.value
66
- })
64
+ class: 'col-all',
65
+ dark: isDark.value
66
+ })
67
67
  : h('div', {
68
68
  class: [
69
69
  'q-bottom-sheet__item q-hoverable q-focusable cursor-pointer relative-position',
@@ -80,9 +80,9 @@ export default createComponent({
80
80
  : (
81
81
  img
82
82
  ? h('img', {
83
- class: action.avatar ? 'q-bottom-sheet__avatar' : '',
84
- src: img
85
- })
83
+ class: action.avatar ? 'q-bottom-sheet__avatar' : '',
84
+ src: img
85
+ })
86
86
  : h('div', { class: 'q-bottom-sheet__empty-icon' })
87
87
  ),
88
88
 
@@ -114,9 +114,9 @@ export default createComponent({
114
114
  : (
115
115
  img
116
116
  ? h('img', {
117
- class: action.avatar ? 'q-bottom-sheet__avatar' : '',
118
- src: img
119
- })
117
+ class: action.avatar ? 'q-bottom-sheet__avatar' : '',
118
+ src: img
119
+ })
120
120
  : null
121
121
  )
122
122
  )
@@ -145,8 +145,8 @@ export default createComponent({
145
145
  child.push(
146
146
  props.grid === true
147
147
  ? h('div', {
148
- class: 'row items-stretch justify-start'
149
- }, getGrid())
148
+ class: 'row items-stretch justify-start'
149
+ }, getGrid())
150
150
  : h('div', getList())
151
151
  )
152
152
 
@@ -17,7 +17,7 @@ import { createComponent } from '../../utils/private/create.js'
17
17
  import useDark, { useDarkProps } from '../../composables/private/use-dark.js'
18
18
 
19
19
  import { isKeyCode } from '../../utils/private/key-composition.js'
20
- import { isPlainObject } from '../../utils/private/is.js'
20
+ import { isObject } from '../../utils/private/is.js'
21
21
 
22
22
  export default createComponent({
23
23
  name: 'DialogPlugin',
@@ -81,7 +81,7 @@ export default createComponent({
81
81
  props.progress === false
82
82
  ? null
83
83
  : (
84
- isPlainObject(props.progress) === true
84
+ isObject(props.progress) === true
85
85
  ? {
86
86
  component: props.progress.spinner || QSpinner,
87
87
  props: { color: props.progress.color || vmColor.value }
@@ -110,7 +110,7 @@ export default createComponent({
110
110
  })
111
111
 
112
112
  const okLabel = computed(() => (
113
- isPlainObject(props.ok) === true
113
+ isObject(props.ok) === true
114
114
  ? $q.lang.label.ok
115
115
  : (
116
116
  props.ok === true
@@ -120,7 +120,7 @@ export default createComponent({
120
120
  ))
121
121
 
122
122
  const cancelLabel = computed(() => (
123
- isPlainObject(props.cancel) === true
123
+ isObject(props.cancel) === true
124
124
  ? $q.lang.label.cancel
125
125
  : (
126
126
  props.cancel === true
@@ -146,7 +146,7 @@ export default createComponent({
146
146
  label: okLabel.value,
147
147
  ripple: false,
148
148
  disable: okDisabled.value,
149
- ...(isPlainObject(props.ok) === true ? props.ok : { flat: true }),
149
+ ...(isObject(props.ok) === true ? props.ok : { flat: true }),
150
150
  'data-autofocus': (props.focus === 'ok' && hasForm.value !== true) || void 0,
151
151
  onClick: onOk
152
152
  }))
@@ -155,7 +155,7 @@ export default createComponent({
155
155
  color: vmColor.value,
156
156
  label: cancelLabel.value,
157
157
  ripple: false,
158
- ...(isPlainObject(props.cancel) === true ? props.cancel : { flat: true }),
158
+ ...(isObject(props.cancel) === true ? props.cancel : { flat: true }),
159
159
  'data-autofocus': (props.focus === 'cancel' && hasForm.value !== true) || void 0,
160
160
  onClick: onCancel
161
161
  }))
@@ -180,17 +180,17 @@ export default createComponent({
180
180
  const userDef = props.definitions || {}
181
181
  const def = props.definitions || props.fonts
182
182
  ? extend(
183
- true,
184
- {},
185
- buttonDef.value,
186
- userDef,
187
- getFonts(
188
- defaultFont,
189
- $q.lang.editor.defaultFont,
190
- $q.iconSet.editor.font,
191
- props.fonts
192
- )
183
+ true,
184
+ {},
185
+ buttonDef.value,
186
+ userDef,
187
+ getFonts(
188
+ defaultFont,
189
+ $q.lang.editor.defaultFont,
190
+ $q.iconSet.editor.font,
191
+ props.fonts
193
192
  )
193
+ )
194
194
  : buttonDef.value
195
195
 
196
196
  return props.toolbar.map(
@@ -198,7 +198,7 @@ export default class Caret {
198
198
  return false
199
199
  }
200
200
 
201
- if (el !== null && list.includes(el.nodeName.toLowerCase()) === true) {
201
+ if (list.includes(el.nodeName.toLowerCase()) === true) {
202
202
  return true
203
203
  }
204
204
 
@@ -34,8 +34,8 @@ function getBtn (eVm, btn, clickHandler, active = false) {
34
34
  if (btn.tip && eVm.$q.platform.is.desktop) {
35
35
  const Key = btn.key
36
36
  ? h('div', [
37
- h('small', `(CTRL + ${ String.fromCharCode(btn.key) })`)
38
- ])
37
+ h('small', `(CTRL + ${ String.fromCharCode(btn.key) })`)
38
+ ])
39
39
  : null
40
40
  child.push(
41
41
  h(QTooltip, { delay: 1000 }, () => [
@@ -83,7 +83,7 @@ export default createComponent({
83
83
  const classes = `q-fab__${ kebab } absolute-full`
84
84
 
85
85
  return slotFn === void 0
86
- ? h(QIcon, { class: classes, name: props[ kebab ] || $q.iconSet.fab[ camel ] })
86
+ ? h(QIcon, { class: classes, name: props[ camel ] || $q.iconSet.fab[ camel ] })
87
87
  : h('div', { class: classes }, slotFn(slotScope.value))
88
88
  }
89
89
 
@@ -58,6 +58,7 @@ export default createComponent({
58
58
  const {
59
59
  pickFiles,
60
60
  onDragover,
61
+ onDragleave,
61
62
  processFiles,
62
63
  getDndNode
63
64
  } = useFile({ editable: state.editable, dnd, getFileInput, addFilesToQueue })
@@ -263,7 +264,7 @@ export default createComponent({
263
264
  }
264
265
 
265
266
  if (state.editable.value === true) {
266
- Object.assign(data, { onDragover, onKeydown, onKeyup })
267
+ Object.assign(data, { onDragover, onDragleave, onKeydown, onKeyup })
267
268
  }
268
269
 
269
270
  return h('div', data, [ getInput() ].concat(getSelection()))
@@ -36,6 +36,7 @@ const imgRE = /^img:/
36
36
  const svgUseRE = /^svguse:/
37
37
  const ionRE = /^ion-/
38
38
  const faLaRE = /^[lf]a[srlbdk]? /
39
+ const fa6RE = /^fa-(solid|regular|light|brands|duotone|thin)/
39
40
 
40
41
  export default createComponent({
41
42
  name: 'QIcon',
@@ -129,7 +130,7 @@ export default createComponent({
129
130
  if (matches !== null) {
130
131
  cls = libMap[ matches[ 1 ] ](icon)
131
132
  }
132
- else if (faLaRE.test(icon) === true) {
133
+ else if (faLaRE.test(icon) === true || fa6RE.test(icon) === true) {
133
134
  cls = icon
134
135
  }
135
136
  else if (ionRE.test(icon) === true) {
@@ -120,7 +120,9 @@ export default createComponent({
120
120
  isWorking.value = false
121
121
  isFetching.value = false
122
122
  localScrollTarget.removeEventListener('scroll', poll, passive)
123
- poll !== void 0 && poll.cancel()
123
+ if (poll !== void 0 && poll.cancel !== void 0) {
124
+ poll.cancel()
125
+ }
124
126
  }
125
127
  }
126
128
 
@@ -39,7 +39,7 @@ export default createComponent({
39
39
 
40
40
  const labelClass = computed(() =>
41
41
  'q-inner-loading__label'
42
- + (props.labelClass !== void 0 ? ` ${ props.labelClass}` : '')
42
+ + (props.labelClass !== void 0 ? ` ${ props.labelClass }` : '')
43
43
  )
44
44
 
45
45
  function getInner () {
@@ -65,12 +65,12 @@ export default createComponent({
65
65
  function getContent () {
66
66
  return props.showing === true
67
67
  ? h(
68
- 'div',
69
- { class: classes.value, style: transitionStyle.value },
70
- slots.default !== void 0
71
- ? slots.default()
72
- : getInner()
73
- )
68
+ 'div',
69
+ { class: classes.value, style: transitionStyle.value },
70
+ slots.default !== void 0
71
+ ? slots.default()
72
+ : getInner()
73
+ )
74
74
  : null
75
75
  }
76
76
 
@@ -138,7 +138,10 @@ export default createComponent({
138
138
  if (hasMask.value === true) {
139
139
  if (stopValueWatcher === true) {
140
140
  stopValueWatcher = false
141
- return
141
+
142
+ if (String(v) === emitCachedValue) {
143
+ return
144
+ }
142
145
  }
143
146
 
144
147
  updateMaskValue(v)
@@ -203,11 +203,14 @@ export default createComponent({
203
203
  angle = centerPosition.left < pos.left ? angle + 90 : 270 - angle
204
204
  }
205
205
 
206
- if (props.angle) {
206
+ if ($q.lang.rtl === true) {
207
+ angle = normalizeToInterval(-angle - props.angle, 0, 360)
208
+ }
209
+ else if (props.angle) {
207
210
  angle = normalizeToInterval(angle - props.angle, 0, 360)
208
211
  }
209
212
 
210
- if ($q.lang.rtl === true) {
213
+ if (props.reverse === true) {
211
214
  angle = 360 - angle
212
215
  }
213
216
 
@@ -51,6 +51,12 @@
51
51
  "category": "model"
52
52
  },
53
53
 
54
+ "reverse": {
55
+ "type": "Boolean",
56
+ "desc": "Reverses the direction of progress",
57
+ "category": "behavior"
58
+ },
59
+
54
60
  "instant-feedback": {
55
61
  "type": "Boolean",
56
62
  "desc": "No animation when model changes",
@@ -6,6 +6,7 @@
6
6
  font-size: 4px
7
7
  height: 1em
8
8
  color: var(--q-primary)
9
+ transform: scale3d(1, 1, 1)
9
10
 
10
11
  &__model, &__track
11
12
  transform-origin: 0 0
@@ -349,19 +349,19 @@ export default createComponent({
349
349
  () => (
350
350
  showing.value === true
351
351
  ? h('div', {
352
- ...attrs,
353
- ref: innerRef,
354
- tabindex: -1,
355
- class: [
356
- 'q-menu q-position-engine scroll' + menuClass.value,
357
- attrs.class
358
- ],
359
- style: [
360
- attrs.style,
361
- transitionStyle.value
362
- ],
363
- ...onEvents.value
364
- }, hSlot(slots.default))
352
+ ...attrs,
353
+ ref: innerRef,
354
+ tabindex: -1,
355
+ class: [
356
+ 'q-menu q-position-engine scroll' + menuClass.value,
357
+ attrs.class
358
+ ],
359
+ style: [
360
+ attrs.style,
361
+ transitionStyle.value
362
+ ],
363
+ ...onEvents.value
364
+ }, hSlot(slots.default))
365
365
  : null
366
366
  )
367
367
  )
@@ -98,10 +98,10 @@ export default createComponent({
98
98
  function getContent () {
99
99
  return showing.value === true
100
100
  ? h('div', {
101
- ref: rootRef,
102
- class: 'q-page-scroller',
103
- onClick
104
- }, getStickyContent(slots))
101
+ ref: rootRef,
102
+ class: 'q-page-scroller',
103
+ onClick
104
+ }, getStickyContent(slots))
105
105
  : null
106
106
  }
107
107