quasar 2.5.4 → 2.6.1

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 (374) hide show
  1. package/README.md +1 -1
  2. package/dist/api/BottomSheet.json +1 -1
  3. package/dist/api/Dialog.json +9 -2
  4. package/dist/api/Notify.json +205 -5
  5. package/dist/api/QAvatar.json +1 -1
  6. package/dist/api/QBreadcrumbsEl.json +1 -1
  7. package/dist/api/QBtn.json +2 -2
  8. package/dist/api/QBtnDropdown.json +3 -3
  9. package/dist/api/QCarousel.json +3 -3
  10. package/dist/api/QChip.json +4 -4
  11. package/dist/api/QExpansionItem.json +2 -2
  12. package/dist/api/QFab.json +2 -2
  13. package/dist/api/QFabAction.json +1 -1
  14. package/dist/api/QForm.json +4 -1
  15. package/dist/api/QIcon.json +4 -2
  16. package/dist/api/QKnob.json +5 -0
  17. package/dist/api/QPagination.json +4 -4
  18. package/dist/api/QRouteTab.json +1 -1
  19. package/dist/api/QSelect.json +9 -10
  20. package/dist/api/QStep.json +4 -4
  21. package/dist/api/QStepper.json +4 -4
  22. package/dist/api/QTab.json +1 -1
  23. package/dist/api/QTimelineEntry.json +1 -1
  24. package/dist/api/QToggle.json +1 -1
  25. package/dist/api/QTree.json +1 -1
  26. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  27. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  28. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  29. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  30. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +6 -0
  31. package/dist/icon-set/fontawesome-v6.umd.prod.js +6 -0
  32. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  33. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  34. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  35. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  36. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  37. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  38. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  39. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  40. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  41. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  42. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +2 -2
  43. package/dist/icon-set/svg-eva-icons.umd.prod.js +2 -2
  44. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +6 -0
  45. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  46. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  47. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +2 -2
  48. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  49. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  50. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  51. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  52. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  53. package/dist/icon-set/svg-mdi-v6.umd.prod.js +2 -2
  54. package/dist/icon-set/svg-themify.umd.prod.js +2 -2
  55. package/dist/icon-set/themify.umd.prod.js +1 -1
  56. package/dist/lang/ar.umd.prod.js +1 -1
  57. package/dist/lang/az-Latn.umd.prod.js +1 -1
  58. package/dist/lang/bg.umd.prod.js +1 -1
  59. package/dist/lang/bn.umd.prod.js +1 -1
  60. package/dist/lang/ca.umd.prod.js +1 -1
  61. package/dist/lang/cs.umd.prod.js +1 -1
  62. package/dist/lang/da.umd.prod.js +1 -1
  63. package/dist/lang/de.umd.prod.js +1 -1
  64. package/dist/lang/el.umd.prod.js +1 -1
  65. package/dist/lang/en-GB.umd.prod.js +1 -1
  66. package/dist/lang/en-US.umd.prod.js +1 -1
  67. package/dist/lang/eo.umd.prod.js +1 -1
  68. package/dist/lang/es.umd.prod.js +1 -1
  69. package/dist/lang/et.umd.prod.js +1 -1
  70. package/dist/lang/eu.umd.prod.js +6 -0
  71. package/dist/lang/fa-IR.umd.prod.js +1 -1
  72. package/dist/lang/fa.umd.prod.js +1 -1
  73. package/dist/lang/fi.umd.prod.js +1 -1
  74. package/dist/lang/fr.umd.prod.js +1 -1
  75. package/dist/lang/gn.umd.prod.js +1 -1
  76. package/dist/lang/he.umd.prod.js +1 -1
  77. package/dist/lang/hr.umd.prod.js +1 -1
  78. package/dist/lang/hu.umd.prod.js +1 -1
  79. package/dist/lang/id.umd.prod.js +1 -1
  80. package/dist/lang/is.umd.prod.js +1 -1
  81. package/dist/lang/it.umd.prod.js +1 -1
  82. package/dist/lang/ja.umd.prod.js +1 -1
  83. package/dist/lang/km.umd.prod.js +1 -1
  84. package/dist/lang/ko-KR.umd.prod.js +1 -1
  85. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  86. package/dist/lang/kz.umd.prod.js +6 -0
  87. package/dist/lang/lt.umd.prod.js +1 -1
  88. package/dist/lang/lu.umd.prod.js +1 -1
  89. package/dist/lang/lv.umd.prod.js +1 -1
  90. package/dist/lang/ml.umd.prod.js +1 -1
  91. package/dist/lang/ms.umd.prod.js +1 -1
  92. package/dist/lang/my.umd.prod.js +1 -1
  93. package/dist/lang/nb-NO.umd.prod.js +1 -1
  94. package/dist/lang/nl.umd.prod.js +1 -1
  95. package/dist/lang/pl.umd.prod.js +1 -1
  96. package/dist/lang/pt-BR.umd.prod.js +1 -1
  97. package/dist/lang/pt.umd.prod.js +1 -1
  98. package/dist/lang/ro.umd.prod.js +1 -1
  99. package/dist/lang/ru.umd.prod.js +1 -1
  100. package/dist/lang/sk.umd.prod.js +1 -1
  101. package/dist/lang/sl.umd.prod.js +1 -1
  102. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  103. package/dist/lang/sr.umd.prod.js +1 -1
  104. package/dist/lang/sv.umd.prod.js +1 -1
  105. package/dist/lang/ta.umd.prod.js +1 -1
  106. package/dist/lang/th.umd.prod.js +1 -1
  107. package/dist/lang/tr.umd.prod.js +1 -1
  108. package/dist/lang/ug.umd.prod.js +2 -2
  109. package/dist/lang/uk.umd.prod.js +1 -1
  110. package/dist/lang/vi.umd.prod.js +1 -1
  111. package/dist/lang/zh-CN.umd.prod.js +1 -1
  112. package/dist/lang/zh-TW.umd.prod.js +1 -1
  113. package/dist/quasar.cjs.prod.js +2 -2
  114. package/dist/quasar.css +4 -6
  115. package/dist/quasar.esm.prod.js +2 -2
  116. package/dist/quasar.prod.css +1 -1
  117. package/dist/quasar.rtl.css +4 -6
  118. package/dist/quasar.rtl.prod.css +1 -1
  119. package/dist/quasar.sass +3 -1
  120. package/dist/quasar.umd.js +501 -455
  121. package/dist/quasar.umd.prod.js +2 -2
  122. package/dist/types/extras/icon-set.d.ts +3 -0
  123. package/dist/types/globals.d.ts +2 -2
  124. package/dist/types/index.d.ts +154 -50
  125. package/dist/vetur/quasar-attributes.json +42 -38
  126. package/dist/vetur/quasar-tags.json +1 -0
  127. package/dist/web-types/web-types.json +50 -40
  128. package/icon-set/bootstrap-icons.js +11 -6
  129. package/icon-set/bootstrap-icons.mjs +136 -0
  130. package/icon-set/eva-icons.js +10 -5
  131. package/icon-set/{svg-mdi-v4.js → eva-icons.mjs} +62 -94
  132. package/icon-set/fontawesome-v5-pro.js +6 -1
  133. package/icon-set/fontawesome-v5-pro.mjs +128 -0
  134. package/icon-set/fontawesome-v5.js +6 -1
  135. package/icon-set/fontawesome-v5.mjs +128 -0
  136. package/icon-set/fontawesome-v6-pro.js +133 -0
  137. package/icon-set/fontawesome-v6-pro.mjs +128 -0
  138. package/icon-set/fontawesome-v6.js +133 -0
  139. package/icon-set/fontawesome-v6.mjs +128 -0
  140. package/icon-set/ionicons-v4.js +10 -5
  141. package/icon-set/ionicons-v4.mjs +180 -0
  142. package/icon-set/line-awesome.js +6 -1
  143. package/icon-set/line-awesome.mjs +128 -0
  144. package/icon-set/material-icons-outlined.js +6 -1
  145. package/icon-set/material-icons-outlined.mjs +128 -0
  146. package/icon-set/material-icons-round.js +6 -1
  147. package/icon-set/material-icons-round.mjs +128 -0
  148. package/icon-set/material-icons-sharp.js +6 -1
  149. package/icon-set/material-icons-sharp.mjs +128 -0
  150. package/icon-set/material-icons.js +6 -1
  151. package/icon-set/material-icons.mjs +128 -0
  152. package/icon-set/mdi-v3.js +6 -1
  153. package/icon-set/mdi-v3.mjs +141 -0
  154. package/icon-set/mdi-v4.js +6 -1
  155. package/icon-set/mdi-v4.mjs +141 -0
  156. package/icon-set/mdi-v5.js +6 -1
  157. package/icon-set/mdi-v5.mjs +141 -0
  158. package/icon-set/mdi-v6.js +6 -1
  159. package/icon-set/mdi-v6.mjs +141 -0
  160. package/icon-set/svg-bootstrap-icons.js +10 -11
  161. package/icon-set/svg-bootstrap-icons.mjs +210 -0
  162. package/icon-set/svg-eva-icons.js +9 -10
  163. package/icon-set/svg-eva-icons.mjs +233 -0
  164. package/icon-set/svg-fontawesome-v6.js +198 -0
  165. package/icon-set/{svg-fontawesome-v5.js → svg-fontawesome-v6.mjs} +42 -42
  166. package/icon-set/svg-ionicons-v4.js +9 -10
  167. package/icon-set/svg-ionicons-v4.mjs +234 -0
  168. package/icon-set/svg-ionicons-v5.js +7 -7
  169. package/icon-set/svg-ionicons-v5.mjs +225 -0
  170. package/icon-set/svg-ionicons-v6.js +7 -7
  171. package/icon-set/svg-ionicons-v6.mjs +225 -0
  172. package/icon-set/svg-line-awesome.js +5 -5
  173. package/icon-set/svg-line-awesome.mjs +198 -0
  174. package/icon-set/svg-material-icons-outlined.js +5 -5
  175. package/icon-set/svg-material-icons-outlined.mjs +203 -0
  176. package/icon-set/svg-material-icons-round.js +5 -5
  177. package/icon-set/svg-material-icons-round.mjs +203 -0
  178. package/icon-set/svg-material-icons-sharp.js +5 -5
  179. package/icon-set/svg-material-icons-sharp.mjs +203 -0
  180. package/icon-set/svg-material-icons.js +5 -5
  181. package/icon-set/svg-material-icons.mjs +203 -0
  182. package/icon-set/svg-mdi-v6.js +5 -5
  183. package/icon-set/{svg-mdi-v5.js → svg-mdi-v6.mjs} +6 -6
  184. package/icon-set/svg-themify.js +9 -10
  185. package/icon-set/svg-themify.mjs +231 -0
  186. package/icon-set/themify.js +10 -5
  187. package/icon-set/themify.mjs +169 -0
  188. package/lang/ar.js +6 -1
  189. package/lang/ar.mjs +96 -0
  190. package/lang/az-Latn.js +6 -1
  191. package/lang/az-Latn.mjs +91 -0
  192. package/lang/bg.js +6 -1
  193. package/lang/bg.mjs +91 -0
  194. package/lang/bn.js +6 -1
  195. package/lang/bn.mjs +91 -0
  196. package/lang/ca.js +6 -1
  197. package/lang/ca.mjs +91 -0
  198. package/lang/cs.js +6 -1
  199. package/lang/cs.mjs +102 -0
  200. package/lang/da.js +6 -1
  201. package/lang/da.mjs +91 -0
  202. package/lang/de.js +6 -1
  203. package/lang/de.mjs +91 -0
  204. package/lang/el.js +6 -1
  205. package/lang/el.mjs +91 -0
  206. package/lang/en-GB.js +6 -1
  207. package/lang/en-GB.mjs +91 -0
  208. package/lang/en-US.js +6 -1
  209. package/lang/en-US.mjs +91 -0
  210. package/lang/eo.js +6 -1
  211. package/lang/eo.mjs +91 -0
  212. package/lang/es.js +6 -1
  213. package/lang/es.mjs +91 -0
  214. package/lang/et.js +6 -1
  215. package/lang/et.mjs +91 -0
  216. package/lang/eu.js +96 -0
  217. package/lang/eu.mjs +91 -0
  218. package/lang/fa-IR.js +6 -1
  219. package/lang/fa-IR.mjs +92 -0
  220. package/lang/fa.js +6 -1
  221. package/lang/fa.mjs +92 -0
  222. package/lang/fi.js +6 -1
  223. package/lang/fi.mjs +92 -0
  224. package/lang/fr.js +6 -1
  225. package/lang/fr.mjs +94 -0
  226. package/lang/gn.js +6 -1
  227. package/lang/gn.mjs +91 -0
  228. package/lang/he.js +6 -1
  229. package/lang/he.mjs +92 -0
  230. package/lang/hr.js +6 -1
  231. package/lang/hr.mjs +91 -0
  232. package/lang/hu.js +6 -1
  233. package/lang/hu.mjs +91 -0
  234. package/lang/id.js +6 -1
  235. package/lang/id.mjs +91 -0
  236. package/lang/index.json +8 -0
  237. package/lang/is.js +6 -1
  238. package/lang/is.mjs +91 -0
  239. package/lang/it.js +6 -1
  240. package/lang/it.mjs +91 -0
  241. package/lang/ja.js +6 -1
  242. package/lang/ja.mjs +90 -0
  243. package/lang/km.js +6 -1
  244. package/lang/km.mjs +91 -0
  245. package/lang/ko-KR.js +6 -1
  246. package/lang/ko-KR.mjs +91 -0
  247. package/lang/kur-CKB.js +6 -1
  248. package/lang/kur-CKB.mjs +101 -0
  249. package/lang/kz.js +100 -0
  250. package/lang/kz.mjs +95 -0
  251. package/lang/lt.js +6 -1
  252. package/lang/lt.mjs +103 -0
  253. package/lang/lu.js +6 -1
  254. package/lang/lu.mjs +91 -0
  255. package/lang/lv.js +6 -1
  256. package/lang/lv.mjs +91 -0
  257. package/lang/ml.js +6 -1
  258. package/lang/ml.mjs +95 -0
  259. package/lang/ms.js +6 -1
  260. package/lang/ms.mjs +91 -0
  261. package/lang/my.js +6 -1
  262. package/lang/my.mjs +90 -0
  263. package/lang/nb-NO.js +6 -1
  264. package/lang/nb-NO.mjs +92 -0
  265. package/lang/nl.js +6 -1
  266. package/lang/nl.mjs +91 -0
  267. package/lang/pl.js +6 -1
  268. package/lang/pl.mjs +91 -0
  269. package/lang/pt-BR.js +6 -1
  270. package/lang/pt-BR.mjs +91 -0
  271. package/lang/pt.js +6 -1
  272. package/lang/pt.mjs +91 -0
  273. package/lang/ro.js +6 -1
  274. package/lang/ro.mjs +91 -0
  275. package/lang/ru.js +6 -1
  276. package/lang/ru.mjs +95 -0
  277. package/lang/sk.js +6 -1
  278. package/lang/sk.mjs +91 -0
  279. package/lang/sl.js +6 -1
  280. package/lang/sl.mjs +91 -0
  281. package/lang/sr-CYR.js +6 -1
  282. package/lang/sr-CYR.mjs +91 -0
  283. package/lang/sr.js +6 -1
  284. package/lang/sr.mjs +91 -0
  285. package/lang/sv.js +6 -1
  286. package/lang/sv.mjs +91 -0
  287. package/lang/ta.js +6 -1
  288. package/lang/ta.mjs +91 -0
  289. package/lang/th.js +6 -1
  290. package/lang/th.mjs +91 -0
  291. package/lang/tr.js +6 -1
  292. package/lang/tr.mjs +87 -0
  293. package/lang/ug.js +55 -51
  294. package/lang/ug.mjs +91 -0
  295. package/lang/uk.js +7 -2
  296. package/lang/uk.mjs +95 -0
  297. package/lang/vi.js +6 -1
  298. package/lang/vi.mjs +91 -0
  299. package/lang/zh-CN.js +6 -1
  300. package/lang/zh-CN.mjs +90 -0
  301. package/lang/zh-TW.js +6 -1
  302. package/lang/zh-TW.mjs +90 -0
  303. package/package.json +1 -1
  304. package/src/api.extends.json +1 -1
  305. package/src/components/btn/QBtn.js +16 -14
  306. package/src/components/btn/use-btn.js +7 -7
  307. package/src/components/date/QDate.js +20 -19
  308. package/src/components/date/use-datetime.js +3 -1
  309. package/src/components/dialog/QDialog.js +11 -11
  310. package/src/components/dialog-bottom-sheet/BottomSheet.js +11 -11
  311. package/src/components/dialog-plugin/DialogPlugin.js +9 -8
  312. package/src/components/editor/QEditor.js +10 -10
  313. package/src/components/editor/editor-utils.js +2 -2
  314. package/src/components/file/QFile.js +2 -1
  315. package/src/components/form/QForm.json +3 -2
  316. package/src/components/icon/QIcon.js +6 -2
  317. package/src/components/icon/QIcon.json +1 -3
  318. package/src/components/infinite-scroll/QInfiniteScroll.js +3 -1
  319. package/src/components/inner-loading/QInnerLoading.js +7 -7
  320. package/src/components/input/QInput.js +4 -1
  321. package/src/components/knob/QKnob.js +5 -2
  322. package/src/components/knob/QKnob.json +6 -0
  323. package/src/components/linear-progress/QLinearProgress.sass +1 -0
  324. package/src/components/menu/QMenu.js +13 -13
  325. package/src/components/page-scroller/QPageScroller.js +4 -4
  326. package/src/components/pull-to-refresh/QPullToRefresh.js +5 -5
  327. package/src/components/select/QSelect.js +12 -6
  328. package/src/components/select/QSelect.json +4 -7
  329. package/src/components/slide-transition/QSlideTransition.js +4 -4
  330. package/src/components/slider/use-slider.js +4 -4
  331. package/src/components/stepper/QStep.js +6 -6
  332. package/src/components/stepper/QStep.json +3 -0
  333. package/src/components/stepper/QStepper.json +3 -0
  334. package/src/components/stepper/QStepper.sass +1 -0
  335. package/src/components/stepper/StepHeader.js +23 -8
  336. package/src/components/table/table-column-selection.js +6 -6
  337. package/src/components/table/table-sort.js +2 -2
  338. package/src/components/tabs/QTabs.js +4 -4
  339. package/src/components/time/QTime.js +5 -5
  340. package/src/components/tooltip/QTooltip.js +12 -12
  341. package/src/components/uploader/uploader-core.js +11 -10
  342. package/src/components/virtual-scroll/QVirtualScroll.js +3 -3
  343. package/src/components/virtual-scroll/use-virtual-scroll.js +20 -20
  344. package/src/composables/private/use-field.js +25 -17
  345. package/src/composables/private/use-file-dom-props.js +5 -5
  346. package/src/composables/private/use-file.js +15 -12
  347. package/src/composables/private/use-router-link.js +2 -2
  348. package/src/directives/Morph.js +12 -3
  349. package/src/icon-set.js +2 -1
  350. package/src/install-quasar.js +37 -36
  351. package/src/lang.js +2 -1
  352. package/src/plugins/AddressbarColor.js +7 -7
  353. package/src/plugins/Cookies.js +5 -1
  354. package/src/plugins/Dialog.json +3 -2
  355. package/src/plugins/Loading.js +3 -2
  356. package/src/plugins/LoadingBar.js +12 -5
  357. package/src/plugins/Notify.js +11 -4
  358. package/src/plugins/Notify.json +102 -2
  359. package/src/utils/create-meta-mixin.js +4 -4
  360. package/src/utils/create-uploader-component.js +2 -1
  361. package/src/utils/event.js +3 -3
  362. package/src/utils/extend.js +6 -34
  363. package/src/utils/morph.js +19 -17
  364. package/src/utils/private/is.js +3 -14
  365. package/src/utils/private/noop-ssr-directive-transform.js +1 -1
  366. package/src/utils/private/web-storage.js +3 -2
  367. package/wrappers/index.js +33 -5
  368. package/wrappers/index.mjs +63 -0
  369. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +0 -6
  370. package/dist/icon-set/svg-mdi-v4.umd.prod.js +0 -6
  371. package/dist/icon-set/svg-mdi-v5.umd.prod.js +0 -6
  372. package/dist/ssr-directives/Morph.js +0 -55
  373. package/dist/ssr-directives/index.js +0 -14
  374. 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.4",
3
+ "version": "2.6.1",
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",
@@ -47,7 +47,7 @@
47
47
 
48
48
  "icon": {
49
49
  "type": "String",
50
- "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix",
50
+ "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)",
51
51
  "examples": [
52
52
  "map",
53
53
  "ion-add",
@@ -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
 
@@ -12,6 +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 { isObject } from '../../utils/private/is.js'
15
16
 
16
17
  const yearsInterval = 20
17
18
  const views = [ 'Calendar', 'Years', 'Months' ]
@@ -164,7 +165,7 @@ export default createComponent({
164
165
  const rangeModel = computed(() => {
165
166
  const fn = date => decodeString(date, innerMask.value, innerLocale.value)
166
167
  return normalizedModel.value
167
- .filter(date => Object(date) === date && date.from !== void 0 && date.to !== void 0)
168
+ .filter(date => isObject(date) === true && date.from !== void 0 && date.to !== void 0)
168
169
  .map(range => ({ from: fn(range.from), to: fn(range.to) }))
169
170
  .filter(range => range.from.dateHash !== null && range.to.dateHash !== null && range.from.dateHash < range.to.dateHash)
170
171
  })
@@ -1217,24 +1218,24 @@ export default createComponent({
1217
1218
  }, days.value.map(day => h('div', { class: day.classes }, [
1218
1219
  day.in === true
1219
1220
  ? h(
1220
- QBtn, {
1221
- class: day.today === true ? 'q-date__today' : '',
1222
- dense: true,
1223
- flat: day.flat,
1224
- unelevated: day.unelevated,
1225
- color: day.color,
1226
- textColor: day.textColor,
1227
- label: day.i,
1228
- tabindex: tabindex.value,
1229
- ...getCache('day#' + day.i, {
1230
- onClick: () => { onDayClick(day.i) },
1231
- onMouseover: () => { onDayMouseover(day.i) }
1232
- })
1233
- },
1234
- day.event !== false
1235
- ? () => h('div', { class: 'q-date__event bg-' + day.event })
1236
- : null
1237
- )
1221
+ QBtn, {
1222
+ class: day.today === true ? 'q-date__today' : '',
1223
+ dense: true,
1224
+ flat: day.flat,
1225
+ unelevated: day.unelevated,
1226
+ color: day.color,
1227
+ textColor: day.textColor,
1228
+ label: day.i,
1229
+ tabindex: tabindex.value,
1230
+ ...getCache('day#' + day.i, {
1231
+ onClick: () => { onDayClick(day.i) },
1232
+ onMouseover: () => { onDayMouseover(day.i) }
1233
+ })
1234
+ },
1235
+ day.event !== false
1236
+ ? () => h('div', { class: 'q-date__event bg-' + day.event })
1237
+ : null
1238
+ )
1238
1239
  : h('div', '' + day.i)
1239
1240
  ]))))
1240
1241
  ])
@@ -57,7 +57,9 @@ export default function (props, $q) {
57
57
  })
58
58
 
59
59
  function getLocale () {
60
- return props.locale || $q.lang.date
60
+ return props.locale !== void 0
61
+ ? { ...$q.lang.date, ...props.locale }
62
+ : $q.lang.date
61
63
  }
62
64
 
63
65
  function getCurrentDate (dateOnly) {
@@ -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,6 +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 { isObject } from '../../utils/private/is.js'
20
21
 
21
22
  export default createComponent({
22
23
  name: 'DialogPlugin',
@@ -80,7 +81,7 @@ export default createComponent({
80
81
  props.progress === false
81
82
  ? null
82
83
  : (
83
- Object(props.progress) === props.progress
84
+ isObject(props.progress) === true
84
85
  ? {
85
86
  component: props.progress.spinner || QSpinner,
86
87
  props: { color: props.progress.color || vmColor.value }
@@ -109,7 +110,7 @@ export default createComponent({
109
110
  })
110
111
 
111
112
  const okLabel = computed(() => (
112
- Object(props.ok) === props.ok
113
+ isObject(props.ok) === true
113
114
  ? $q.lang.label.ok
114
115
  : (
115
116
  props.ok === true
@@ -119,7 +120,7 @@ export default createComponent({
119
120
  ))
120
121
 
121
122
  const cancelLabel = computed(() => (
122
- Object(props.cancel) === props.cancel
123
+ isObject(props.cancel) === true
123
124
  ? $q.lang.label.cancel
124
125
  : (
125
126
  props.cancel === true
@@ -145,7 +146,7 @@ export default createComponent({
145
146
  label: okLabel.value,
146
147
  ripple: false,
147
148
  disable: okDisabled.value,
148
- ...(Object(props.ok) === props.ok ? props.ok : { flat: true }),
149
+ ...(isObject(props.ok) === true ? props.ok : { flat: true }),
149
150
  'data-autofocus': (props.focus === 'ok' && hasForm.value !== true) || void 0,
150
151
  onClick: onOk
151
152
  }))
@@ -154,7 +155,7 @@ export default createComponent({
154
155
  color: vmColor.value,
155
156
  label: cancelLabel.value,
156
157
  ripple: false,
157
- ...(Object(props.cancel) === props.cancel ? props.cancel : { flat: true }),
158
+ ...(isObject(props.cancel) === true ? props.cancel : { flat: true }),
158
159
  'data-autofocus': (props.focus === 'cancel' && hasForm.value !== true) || void 0,
159
160
  onClick: onCancel
160
161
  }))
@@ -201,9 +202,9 @@ export default createComponent({
201
202
  function getSection (classes, text) {
202
203
  return props.html === true
203
204
  ? h(QCardSection, {
204
- class: classes,
205
- innerHTML: text
206
- })
205
+ class: classes,
206
+ innerHTML: text
207
+ })
207
208
  : h(QCardSection, { class: classes }, () => text)
208
209
  }
209
210
 
@@ -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(
@@ -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 }, () => [
@@ -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()))
@@ -40,8 +40,9 @@
40
40
  "desc": "Emitted when all validations have passed when tethered to a submit button",
41
41
  "params": {
42
42
  "evt": {
43
- "type": "SubmitEvent",
44
- "desc": "Form submission event object"
43
+ "type": [ "Event", "SubmitEvent" ],
44
+ "desc": "Form submission event object",
45
+ "__exemption": [ "examples" ]
45
46
  }
46
47
  }
47
48
  },
@@ -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-(brand|regular|solid)/
39
40
 
40
41
  export default createComponent({
41
42
  name: 'QIcon',
@@ -69,7 +70,7 @@ export default createComponent({
69
70
  let cls
70
71
  let icon = props.name
71
72
 
72
- if (!icon) {
73
+ if (icon === 'none' || !icon) {
73
74
  return { none: true }
74
75
  }
75
76
 
@@ -78,6 +79,9 @@ export default createComponent({
78
79
  if (res !== void 0) {
79
80
  if (res.icon !== void 0) {
80
81
  icon = res.icon
82
+ if (icon === 'none' || !icon) {
83
+ return { none: true }
84
+ }
81
85
  }
82
86
  else {
83
87
  return {
@@ -126,7 +130,7 @@ export default createComponent({
126
130
  if (matches !== null) {
127
131
  cls = libMap[ matches[ 1 ] ](icon)
128
132
  }
129
- else if (faLaRE.test(icon) === true) {
133
+ else if (faLaRE.test(icon) === true || fa6RE.test(icon) === true) {
130
134
  cls = icon
131
135
  }
132
136
  else if (ionRE.test(icon) === true) {
@@ -14,9 +14,7 @@
14
14
  },
15
15
 
16
16
  "name": {
17
- "type": "String",
18
- "desc": "Name of the icon, following Quasar convention",
19
- "examples": [ "map", "ion-add" ],
17
+ "extends": "icon",
20
18
  "category": "model"
21
19
  },
22
20
 
@@ -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