@quaffui/quaff 0.1.0-prealpha9 → 1.0.0-alpha2

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 (388) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +47 -14
  3. package/dist/classes/QContext.svelte.d.ts +42 -0
  4. package/dist/classes/QContext.svelte.js +63 -0
  5. package/dist/classes/QScrollObserver.svelte.d.ts +48 -0
  6. package/dist/classes/QScrollObserver.svelte.js +107 -0
  7. package/dist/classes/QTheme.svelte.d.ts +13 -0
  8. package/dist/classes/QTheme.svelte.js +62 -0
  9. package/dist/classes/Quaff.svelte.d.ts +27 -0
  10. package/dist/classes/Quaff.svelte.js +91 -0
  11. package/dist/components/avatar/QAvatar.scss +101 -0
  12. package/dist/components/avatar/QAvatar.svelte +42 -42
  13. package/dist/components/avatar/QAvatar.svelte.d.ts +4 -17
  14. package/dist/components/avatar/docs.d.ts +2 -2
  15. package/dist/components/avatar/docs.js +3 -8
  16. package/dist/components/avatar/docs.props.d.ts +3 -8
  17. package/dist/components/avatar/docs.props.js +68 -15
  18. package/dist/components/avatar/index.scss +5 -3
  19. package/dist/components/avatar/props.d.ts +51 -8
  20. package/dist/components/breadcrumbs/QBreadcrumbs.scss +10 -0
  21. package/dist/components/breadcrumbs/QBreadcrumbs.svelte +32 -14
  22. package/dist/components/breadcrumbs/QBreadcrumbs.svelte.d.ts +4 -13
  23. package/dist/components/breadcrumbs/QBreadcrumbsEl.scss +10 -0
  24. package/dist/components/breadcrumbs/QBreadcrumbsEl.svelte +65 -48
  25. package/dist/components/breadcrumbs/QBreadcrumbsEl.svelte.d.ts +4 -16
  26. package/dist/components/breadcrumbs/docs.d.ts +2 -2
  27. package/dist/components/breadcrumbs/docs.js +3 -8
  28. package/dist/components/breadcrumbs/docs.props.d.ts +5 -16
  29. package/dist/components/breadcrumbs/docs.props.js +105 -45
  30. package/dist/components/breadcrumbs/props.d.ts +26 -24
  31. package/dist/components/button/QBtn.scss +136 -0
  32. package/dist/components/button/QBtn.svelte +156 -52
  33. package/dist/components/button/QBtn.svelte.d.ts +4 -23
  34. package/dist/components/button/docs.d.ts +2 -2
  35. package/dist/components/button/docs.js +3 -8
  36. package/dist/components/button/docs.props.d.ts +3 -8
  37. package/dist/components/button/docs.props.js +174 -37
  38. package/dist/components/button/props.d.ts +48 -11
  39. package/dist/components/card/QCard.scss +47 -0
  40. package/dist/components/card/QCard.svelte +42 -19
  41. package/dist/components/card/QCard.svelte.d.ts +4 -16
  42. package/dist/components/card/QCardActions.scss +10 -0
  43. package/dist/components/card/QCardActions.svelte +23 -15
  44. package/dist/components/card/QCardActions.svelte.d.ts +4 -12
  45. package/dist/components/card/QCardSection.scss +10 -0
  46. package/dist/components/card/QCardSection.svelte +15 -11
  47. package/dist/components/card/QCardSection.svelte.d.ts +4 -13
  48. package/dist/components/card/docs.d.ts +4 -4
  49. package/dist/components/card/docs.js +7 -22
  50. package/dist/components/card/docs.props.d.ts +7 -24
  51. package/dist/components/card/docs.props.js +57 -30
  52. package/dist/components/card/props.d.ts +11 -16
  53. package/dist/components/checkbox/QCheckbox.svelte +15 -9
  54. package/dist/components/checkbox/QCheckbox.svelte.d.ts +3 -10
  55. package/dist/components/checkbox/docs.d.ts +2 -2
  56. package/dist/components/checkbox/docs.js +3 -3
  57. package/dist/components/checkbox/docs.props.d.ts +3 -8
  58. package/dist/components/checkbox/docs.props.js +24 -9
  59. package/dist/components/checkbox/index.scss +3 -1
  60. package/dist/components/checkbox/props.d.ts +2 -2
  61. package/dist/components/chip/QChip.scss +179 -0
  62. package/dist/components/chip/QChip.svelte +130 -60
  63. package/dist/components/chip/QChip.svelte.d.ts +4 -25
  64. package/dist/components/chip/docs.d.ts +2 -2
  65. package/dist/components/chip/docs.js +3 -16
  66. package/dist/components/chip/docs.props.d.ts +3 -8
  67. package/dist/components/chip/docs.props.js +96 -49
  68. package/dist/components/chip/props.d.ts +27 -29
  69. package/dist/components/codeBlock/QCodeBlock.svelte +101 -42
  70. package/dist/components/codeBlock/QCodeBlock.svelte.d.ts +3 -10
  71. package/dist/components/codeBlock/docs.props.d.ts +3 -8
  72. package/dist/components/codeBlock/docs.props.js +61 -12
  73. package/dist/components/codeBlock/props.d.ts +12 -2
  74. package/dist/components/dialog/{index.scss → QDialog.scss} +12 -14
  75. package/dist/components/dialog/QDialog.svelte +85 -78
  76. package/dist/components/dialog/QDialog.svelte.d.ts +9 -24
  77. package/dist/components/dialog/docs.d.ts +2 -2
  78. package/dist/components/dialog/docs.js +3 -3
  79. package/dist/components/dialog/docs.props.d.ts +3 -16
  80. package/dist/components/dialog/docs.props.js +37 -128
  81. package/dist/components/dialog/props.d.ts +4 -19
  82. package/dist/components/drawer/QDrawer.scss +55 -0
  83. package/dist/components/drawer/QDrawer.svelte +334 -88
  84. package/dist/components/drawer/QDrawer.svelte.d.ts +9 -28
  85. package/dist/components/drawer/docs.d.ts +2 -2
  86. package/dist/components/drawer/docs.js +3 -3
  87. package/dist/components/drawer/docs.props.d.ts +3 -8
  88. package/dist/components/drawer/docs.props.js +90 -47
  89. package/dist/components/drawer/props.d.ts +10 -13
  90. package/dist/components/footer/QFooter.scss +42 -0
  91. package/dist/components/footer/QFooter.svelte +99 -24
  92. package/dist/components/footer/QFooter.svelte.d.ts +4 -14
  93. package/dist/components/footer/docs.d.ts +2 -2
  94. package/dist/components/footer/docs.js +3 -3
  95. package/dist/components/footer/docs.props.d.ts +3 -8
  96. package/dist/components/footer/docs.props.js +47 -16
  97. package/dist/components/footer/props.d.ts +15 -9
  98. package/dist/components/header/QHeader.scss +53 -0
  99. package/dist/components/header/QHeader.svelte +90 -23
  100. package/dist/components/header/QHeader.svelte.d.ts +4 -14
  101. package/dist/components/header/docs.d.ts +2 -0
  102. package/dist/components/header/docs.js +11 -0
  103. package/dist/components/header/docs.props.d.ts +7 -0
  104. package/dist/components/header/docs.props.js +131 -0
  105. package/dist/components/header/props.d.ts +13 -5
  106. package/dist/components/icon/{index.scss → QIcon.scss} +2 -4
  107. package/dist/components/icon/QIcon.svelte +44 -28
  108. package/dist/components/icon/QIcon.svelte.d.ts +4 -18
  109. package/dist/components/icon/docs.d.ts +2 -2
  110. package/dist/components/icon/docs.js +3 -3
  111. package/dist/components/icon/docs.props.d.ts +3 -8
  112. package/dist/components/icon/docs.props.js +65 -24
  113. package/dist/components/icon/props.d.ts +9 -8
  114. package/dist/components/index.d.ts +5 -2
  115. package/dist/components/index.js +5 -2
  116. package/dist/components/input/QInput.svelte +106 -72
  117. package/dist/components/input/QInput.svelte.d.ts +4 -22
  118. package/dist/components/input/docs.d.ts +2 -2
  119. package/dist/components/input/docs.js +5 -71
  120. package/dist/components/input/docs.props.d.ts +3 -8
  121. package/dist/components/input/docs.props.js +129 -57
  122. package/dist/components/input/index.scss +1 -3
  123. package/dist/components/input/props.d.ts +81 -21
  124. package/dist/components/input/props.js +1 -13
  125. package/dist/components/layout/QLayout.scss +184 -0
  126. package/dist/components/layout/QLayout.svelte +178 -79
  127. package/dist/components/layout/QLayout.svelte.d.ts +12 -45
  128. package/dist/components/layout/docs.d.ts +2 -2
  129. package/dist/components/layout/docs.js +3 -3
  130. package/dist/components/layout/docs.props.d.ts +3 -8
  131. package/dist/components/layout/docs.props.js +62 -39
  132. package/dist/components/layout/props.d.ts +29 -21
  133. package/dist/components/list/QItem.scss +69 -0
  134. package/dist/components/list/QItem.svelte +99 -51
  135. package/dist/components/list/QItem.svelte.d.ts +4 -24
  136. package/dist/components/list/QItemSection.scss +60 -0
  137. package/dist/components/list/QItemSection.svelte +63 -37
  138. package/dist/components/list/QItemSection.svelte.d.ts +4 -15
  139. package/dist/components/list/QList.scss +30 -0
  140. package/dist/components/list/QList.svelte +43 -20
  141. package/dist/components/list/QList.svelte.d.ts +4 -26
  142. package/dist/components/list/docs.d.ts +4 -2
  143. package/dist/components/list/docs.js +23 -3
  144. package/dist/components/list/docs.props.d.ts +11 -40
  145. package/dist/components/list/docs.props.js +344 -136
  146. package/dist/components/list/props.d.ts +126 -28
  147. package/dist/components/list/props.js +1 -25
  148. package/dist/components/private/ContextReseter.svelte +15 -11
  149. package/dist/components/private/ContextReseter.svelte.d.ts +4 -8
  150. package/dist/components/private/QApi.svelte +264 -113
  151. package/dist/components/private/QApi.svelte.d.ts +3 -6
  152. package/dist/components/private/QDocs.svelte +131 -70
  153. package/dist/components/private/QDocs.svelte.d.ts +4 -11
  154. package/dist/components/private/QDocsSection.svelte +48 -18
  155. package/dist/components/private/QDocsSection.svelte.d.ts +9 -24
  156. package/dist/components/private/QIconSnippet.svelte +22 -0
  157. package/dist/components/private/QIconSnippet.svelte.d.ts +14 -0
  158. package/dist/components/private/index.d.ts +6 -0
  159. package/dist/components/private/index.js +6 -0
  160. package/dist/components/progress/QCircularProgress.scss +63 -0
  161. package/dist/components/progress/QCircularProgress.svelte +134 -21
  162. package/dist/components/progress/QCircularProgress.svelte.d.ts +3 -11
  163. package/dist/components/progress/QLinearProgress.scss +75 -0
  164. package/dist/components/progress/QLinearProgress.svelte +80 -23
  165. package/dist/components/progress/QLinearProgress.svelte.d.ts +3 -11
  166. package/dist/components/progress/docs.d.ts +3 -2
  167. package/dist/components/progress/docs.js +15 -5
  168. package/dist/components/progress/docs.props.d.ts +5 -16
  169. package/dist/components/progress/docs.props.js +287 -41
  170. package/dist/components/progress/props.d.ts +126 -14
  171. package/dist/components/radio/QRadio.svelte +16 -9
  172. package/dist/components/radio/QRadio.svelte.d.ts +3 -11
  173. package/dist/components/radio/docs.d.ts +2 -2
  174. package/dist/components/radio/docs.js +4 -26
  175. package/dist/components/radio/docs.props.d.ts +3 -8
  176. package/dist/components/radio/docs.props.js +39 -20
  177. package/dist/components/radio/index.scss +3 -1
  178. package/dist/components/radio/props.d.ts +26 -6
  179. package/dist/components/radio/props.js +1 -8
  180. package/dist/components/railbar/QRailbar.scss +54 -0
  181. package/dist/components/railbar/QRailbar.svelte +71 -65
  182. package/dist/components/railbar/QRailbar.svelte.d.ts +4 -13
  183. package/dist/components/railbar/docs.d.ts +2 -2
  184. package/dist/components/railbar/docs.js +3 -3
  185. package/dist/components/railbar/docs.props.d.ts +3 -8
  186. package/dist/components/railbar/docs.props.js +36 -15
  187. package/dist/components/railbar/props.d.ts +13 -6
  188. package/dist/components/select/QSelect.svelte +222 -146
  189. package/dist/components/select/QSelect.svelte.d.ts +4 -24
  190. package/dist/components/select/docs.d.ts +2 -2
  191. package/dist/components/select/docs.js +5 -83
  192. package/dist/components/select/docs.props.d.ts +3 -8
  193. package/dist/components/select/docs.props.js +156 -64
  194. package/dist/components/select/index.scss +25 -10
  195. package/dist/components/select/props.d.ts +100 -20
  196. package/dist/components/select/props.js +1 -14
  197. package/dist/components/separator/QSeparator.scss +54 -0
  198. package/dist/components/separator/QSeparator.svelte +50 -57
  199. package/dist/components/separator/QSeparator.svelte.d.ts +3 -14
  200. package/dist/components/separator/docs.d.ts +3 -2
  201. package/dist/components/separator/docs.js +14 -4
  202. package/dist/components/separator/docs.props.d.ts +5 -16
  203. package/dist/components/separator/docs.props.js +152 -72
  204. package/dist/components/separator/props.d.ts +84 -16
  205. package/dist/components/separator/props.js +1 -9
  206. package/dist/components/switch/QSwitch.scss +305 -0
  207. package/dist/components/switch/QSwitch.svelte +115 -0
  208. package/dist/components/switch/QSwitch.svelte.d.ts +14 -0
  209. package/dist/components/switch/docs.d.ts +2 -0
  210. package/dist/components/switch/docs.js +17 -0
  211. package/dist/components/switch/docs.props.d.ts +3 -0
  212. package/dist/components/switch/docs.props.js +119 -0
  213. package/dist/components/switch/props.d.ts +53 -0
  214. package/dist/components/switch/props.js +1 -0
  215. package/dist/components/table/QTable.svelte +133 -97
  216. package/dist/components/table/QTable.svelte.d.ts +4 -19
  217. package/dist/components/table/docs.d.ts +2 -2
  218. package/dist/components/table/docs.js +3 -3
  219. package/dist/components/table/docs.props.d.ts +3 -8
  220. package/dist/components/table/docs.props.js +67 -15
  221. package/dist/components/table/index.scss +3 -1
  222. package/dist/components/table/props.d.ts +14 -3
  223. package/dist/components/tabs/QTab.scss +71 -0
  224. package/dist/components/tabs/QTab.svelte +101 -88
  225. package/dist/components/tabs/QTab.svelte.d.ts +4 -16
  226. package/dist/components/tabs/QTabs.scss +53 -0
  227. package/dist/components/tabs/QTabs.svelte +163 -46
  228. package/dist/components/tabs/QTabs.svelte.d.ts +9 -13
  229. package/dist/components/tabs/docs.d.ts +3 -2
  230. package/dist/components/tabs/docs.js +13 -3
  231. package/dist/components/tabs/docs.props.d.ts +5 -16
  232. package/dist/components/tabs/docs.props.js +64 -30
  233. package/dist/components/tabs/index.scss +36 -24
  234. package/dist/components/tabs/props.d.ts +38 -9
  235. package/dist/components/tabs/props.js +1 -13
  236. package/dist/components/toolbar/{index.scss → QToolbar.scss} +10 -16
  237. package/dist/components/toolbar/QToolbar.svelte +26 -21
  238. package/dist/components/toolbar/QToolbar.svelte.d.ts +4 -15
  239. package/dist/components/toolbar/QToolbarTitle.svelte +10 -7
  240. package/dist/components/toolbar/QToolbarTitle.svelte.d.ts +4 -12
  241. package/dist/components/toolbar/docs.d.ts +3 -2
  242. package/dist/components/toolbar/docs.js +13 -3
  243. package/dist/components/toolbar/docs.props.d.ts +5 -16
  244. package/dist/components/toolbar/docs.props.js +55 -15
  245. package/dist/components/toolbar/props.d.ts +19 -9
  246. package/dist/components/tooltip/QTooltip.scss +40 -0
  247. package/dist/components/tooltip/QTooltip.svelte +200 -10
  248. package/dist/components/tooltip/QTooltip.svelte.d.ts +17 -18
  249. package/dist/components/tooltip/QTooltipBase.svelte +86 -0
  250. package/dist/components/tooltip/QTooltipBase.svelte.d.ts +14 -0
  251. package/dist/components/tooltip/docs.d.ts +2 -2
  252. package/dist/components/tooltip/docs.js +3 -2
  253. package/dist/components/tooltip/docs.props.d.ts +3 -8
  254. package/dist/components/tooltip/docs.props.js +69 -10
  255. package/dist/components/tooltip/props.d.ts +36 -4
  256. package/dist/components/tooltip/props.js +1 -6
  257. package/dist/composables/index.d.ts +3 -0
  258. package/dist/composables/index.js +3 -1
  259. package/dist/composables/{use-align.d.ts → useAlign.d.ts} +1 -1
  260. package/dist/composables/{use-align.js → useAlign.js} +1 -1
  261. package/dist/composables/{use-router-link.d.ts → useRouterLink.d.ts} +3 -3
  262. package/dist/composables/{use-router-link.js → useRouterLink.js} +4 -4
  263. package/dist/composables/useSize.d.ts +10 -0
  264. package/dist/composables/useSize.js +37 -0
  265. package/dist/css/_components.scss +31 -0
  266. package/dist/css/_disabled.scss +18 -0
  267. package/dist/css/{ripple.scss → _ripple.scss} +10 -3
  268. package/dist/css/_variables.scss +73 -0
  269. package/dist/css/classes/_design.scss +57 -0
  270. package/dist/css/{flex.scss → classes/_flex.scss} +23 -2
  271. package/dist/css/classes/_grid.scss +35 -0
  272. package/dist/css/classes/_index.scss +7 -0
  273. package/dist/css/classes/_overflow.scss +7 -0
  274. package/dist/css/classes/_position.scss +7 -0
  275. package/dist/css/classes/_select.scss +6 -0
  276. package/dist/css/classes/_spaces.scss +23 -0
  277. package/dist/css/fonts.scss +18 -4
  278. package/dist/css/index.css +1 -1
  279. package/dist/css/index.scss +13 -93
  280. package/dist/css/mixins/_design.scss +64 -0
  281. package/dist/css/mixins/_field.scss +64 -0
  282. package/dist/css/mixins/_image.scss +64 -0
  283. package/dist/css/mixins/_index.scss +11 -0
  284. package/dist/css/mixins/_layout.scss +20 -0
  285. package/dist/css/mixins/{menu.scss → _menu.scss} +4 -2
  286. package/dist/css/mixins/_responsive.scss +56 -0
  287. package/dist/css/mixins/{selection.scss → _selection.scss} +10 -70
  288. package/dist/css/mixins/_spaces.scss +36 -0
  289. package/dist/css/mixins/_toolbar.scss +7 -0
  290. package/dist/css/mixins/_typography.scss +7 -0
  291. package/dist/css/shared/q-field.scss +351 -0
  292. package/dist/css/theme/_color-classes.scss +332 -0
  293. package/dist/css/theme/_colors.scss +205 -0
  294. package/dist/css/theme/_css-variables.scss +5 -0
  295. package/dist/css/theme/_index.scss +12 -0
  296. package/dist/css/theme/_page.scss +17 -0
  297. package/dist/css/theme/{palette.scss → _palette.scss} +27 -5
  298. package/dist/css/theme/{reset.scss → _reset.scss} +11 -2
  299. package/dist/css/theme/_typography-variables.scss +107 -0
  300. package/dist/global.d.ts +1 -1
  301. package/dist/helpers/clickOutside.d.ts +2 -2
  302. package/dist/helpers/clickOutside.js +5 -4
  303. package/dist/helpers/index.d.ts +2 -1
  304. package/dist/helpers/index.js +2 -1
  305. package/dist/helpers/pageTitle.d.ts +1 -0
  306. package/dist/helpers/pageTitle.js +3 -0
  307. package/dist/helpers/ripple.d.ts +1 -0
  308. package/dist/helpers/ripple.js +31 -16
  309. package/dist/helpers/version.d.ts +1 -1
  310. package/dist/helpers/version.js +1 -1
  311. package/dist/index.d.ts +4 -1
  312. package/dist/index.js +4 -1
  313. package/dist/stores/index.d.ts +0 -0
  314. package/dist/stores/index.js +1 -0
  315. package/dist/utils/clipboard.d.ts +1 -1
  316. package/dist/utils/clipboard.js +3 -4
  317. package/dist/utils/colors.d.ts +69 -0
  318. package/dist/utils/colors.js +141 -15
  319. package/dist/utils/context.d.ts +33 -0
  320. package/dist/utils/context.js +33 -0
  321. package/dist/utils/dom.d.ts +3 -0
  322. package/dist/utils/dom.js +14 -4
  323. package/dist/utils/events.d.ts +24 -0
  324. package/dist/utils/events.js +24 -0
  325. package/dist/utils/index.d.ts +11 -0
  326. package/dist/utils/index.js +11 -1
  327. package/dist/utils/number.d.ts +2 -0
  328. package/dist/utils/number.js +9 -0
  329. package/dist/utils/props.d.ts +4 -4
  330. package/dist/utils/props.js +8 -6
  331. package/dist/utils/router.d.ts +16 -0
  332. package/dist/utils/router.js +20 -0
  333. package/dist/utils/string.d.ts +2 -0
  334. package/dist/utils/string.js +12 -1
  335. package/dist/utils/types.d.ts +12 -18
  336. package/dist/utils/types.js +0 -3
  337. package/dist/utils/types.json +31 -1
  338. package/package.json +44 -39
  339. package/dist/components/breadcrumbs/index.scss +0 -20
  340. package/dist/components/button/index.scss +0 -98
  341. package/dist/components/card/index.scss +0 -56
  342. package/dist/components/chip/index.scss +0 -86
  343. package/dist/components/drawer/index.scss +0 -59
  344. package/dist/components/footer/index.scss +0 -28
  345. package/dist/components/layout/index.scss +0 -387
  346. package/dist/components/list/index.scss +0 -121
  347. package/dist/components/progress/index.scss +0 -65
  348. package/dist/components/railbar/index.scss +0 -39
  349. package/dist/components/toggle/QToggle.svelte +0 -35
  350. package/dist/components/toggle/QToggle.svelte.d.ts +0 -23
  351. package/dist/components/toggle/docs.d.ts +0 -2
  352. package/dist/components/toggle/docs.js +0 -47
  353. package/dist/components/toggle/docs.props.d.ts +0 -8
  354. package/dist/components/toggle/docs.props.js +0 -42
  355. package/dist/components/toggle/index.scss +0 -31
  356. package/dist/components/toggle/props.d.ts +0 -9
  357. package/dist/components/toggle/props.js +0 -9
  358. package/dist/components/tooltip/index.scss +0 -82
  359. package/dist/composables/use-index.d.ts +0 -2
  360. package/dist/composables/use-index.js +0 -17
  361. package/dist/composables/use-size.d.ts +0 -9
  362. package/dist/composables/use-size.js +0 -25
  363. package/dist/css/grid.scss +0 -50
  364. package/dist/css/mixins/field.scss +0 -432
  365. package/dist/css/mixins.scss +0 -136
  366. package/dist/css/states.scss +0 -75
  367. package/dist/css/theme/bridge.scss +0 -15
  368. package/dist/css/theme/colors.module.scss +0 -180
  369. package/dist/css/theme/page.scss +0 -16
  370. package/dist/css/theme/theme.dark.scss +0 -37
  371. package/dist/css/theme/theme.light.scss +0 -37
  372. package/dist/css/theme/theme.scss +0 -11
  373. package/dist/css/theme/tokens.scss +0 -266
  374. package/dist/css/variables-sass.scss +0 -16
  375. package/dist/helpers/activationHandler.d.ts +0 -9
  376. package/dist/helpers/activationHandler.js +0 -23
  377. package/dist/stores/QTheme.d.ts +0 -42
  378. package/dist/stores/QTheme.js +0 -53
  379. package/dist/stores/Quaff.d.ts +0 -32
  380. package/dist/stores/Quaff.js +0 -53
  381. package/dist/utils/fields.d.ts +0 -1
  382. package/dist/utils/fields.js +0 -14
  383. package/dist/utils/watchable.d.ts +0 -3
  384. package/dist/utils/watchable.js +0 -22
  385. /package/dist/css/mixins/{table.scss → _table.scss} +0 -0
  386. /package/dist/css/theme/{elevate.scss → _elevate.scss} +0 -0
  387. /package/dist/css/theme/{typography.module.scss → _typography-classes.scss} +0 -0
  388. /package/dist/css/theme/{typography.scss → _typography.scss} +0 -0
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright © 2023 Rubatissimo
3
+ Copyright © 2025 QuaffUI
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
6
 
package/README.md CHANGED
@@ -1,43 +1,76 @@
1
1
  # Quaff
2
2
 
3
- Quaff is an experimental project utilizing [Beer CSS](https://www.beercss.com/) and parts of [Quasar Framework](https://quasar.dev/) as the base for Svelte components. This independent project is not endorsed by or affiliated with Beer CSS or Quasar Framework.
3
+ Quaff is a component library for Svelte that follows the [Material Design 3](https://m3.material.io/) guidelines. It provides a comprehensive set of UI components designed to create beautiful, consistent, and accessible web applications.
4
4
 
5
- **This is merely a playground right now, don't expect anything usable!**
5
+ > **⚠️ Early Development Notice:** Quaff is still maturing and not battle-tested yet. Use it in production if you're feeling brave! We welcome contributions and feedback to help shape the library.
6
+
7
+ ## Overview
8
+
9
+ Quaff is project that draws some inspiration from [Quasar Framework](https://quasar.dev/), [Material Web](https://material-web.dev/) and [BeerCSS](https://www.beercss.com/) adapted specifically for Svelte 5. It implements Material Design 3 (Material You) principles while providing a developer-friendly API.
10
+ This is an independent project and is not endorsed by or affiliated with Material Design 3 or Quasar Framework.
11
+
12
+ Key features:
13
+
14
+ - Built for [Svelte 5](https://svelte.dev/) and [SvelteKit](https://kit.svelte.dev/) with full runes support
15
+ - Follows Material Design 3 guidelines
16
+ - Type-safe components with TypeScript
17
+ - Comprehensive component documentation
18
+ - Components auto-import out of the box
19
+
20
+ ## Getting started
21
+
22
+ Quaff comes with a CLI tool called `create-quaff`. You can use it to easily create a new Quaff project:
23
+
24
+ ```bash
25
+ bun create quaff@latest
26
+ ```
6
27
 
7
28
  ## Developing
8
29
 
9
- Once you've installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
30
+ Once you've installed dependencies with `bun install`, start a development server:
10
31
 
11
32
  ```bash
12
- npm run dev
33
+ bun run dev
13
34
 
14
35
  # or start the server and open the app in a new browser tab
15
- npm run dev -- --open
36
+ bun run open
16
37
  ```
17
38
 
18
- Everything inside `src/lib` is part of the library, everything inside `src/routes` can be used as a showcase or preview app.
39
+ Everything inside `src/lib` is part of the library, everything inside `src/routes` serves as documentation and component showcase.
19
40
 
20
41
  ## Building
21
42
 
22
43
  To build the library:
23
44
 
24
45
  ```bash
25
- npm run package
46
+ bun run package
26
47
  ```
27
48
 
28
- To create a production version of your showcase app:
49
+ To create a production version of your app:
29
50
 
30
51
  ```bash
31
- npm run build
52
+ bun run build
32
53
  ```
33
54
 
34
- You can preview the production build with `npm run preview`.
55
+ You can preview the production build with `bun run preview`.
56
+
57
+ > To deploy the documentation site, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.
35
58
 
36
- > To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.
59
+ ## Project Structure
37
60
 
38
- ## Third-party Libraries
61
+ - `/src/lib/components` - The individual UI components
62
+ - `/src/lib/css` - Styling and theming utilities
63
+ - `/src/routes` - Documentation and examples
64
+ - `/docgen` - Documentation generation tools
39
65
 
40
- This project makes use of the following open source libraries:
66
+ ## Acknowledgements
67
+
68
+ This project draws inspiration from:
41
69
 
42
- - [Beer CSS](https://www.beercss.com/): Copyright (c) 2021 Beer css!. Licensed under the [MIT License](https://github.com/beercss/beercss/blob/main/LICENSE)
43
70
  - [Quasar Framework](https://quasar.dev/): Copyright (c) 2015-present Razvan Stoenescu. Licensed under the [MIT License](https://github.com/quasarframework/quasar/blob/dev/LICENSE)
71
+ - [Material Web Components](https://github.com/material-components/material-web): Copyright (c) Google LLC. Licensed under the [Apache License 2.0 License](https://github.com/material-components/material-web/blob/main/LICENSE)
72
+ - [BeerCSS](https://www.beercss.com/): Copyright (c) 2021 Beer css! Licensed under the [MIT License](https://github.com/beercss/beercss/blob/main/LICENSE)
73
+
74
+ ## License
75
+
76
+ MIT
@@ -0,0 +1,42 @@
1
+ /**
2
+ * This class allows to manipulate reactive contexts more easily.
3
+ * It avoids having to pass a Svelte store down the components but rather use runes to keep the context reactive.
4
+ *
5
+ * This class should be used when the context has to be modified from a child component. Otherwise, using svelte's context API should be enough.
6
+ */
7
+ export declare class QContext<T> {
8
+ #private;
9
+ constructor(contextSymbol: symbol, init: T);
10
+ /**
11
+ * Gets the value of context with id `contextSymbol`
12
+ * @param contextSymbol - Name of the context to get
13
+ * @returns The context's value
14
+ */
15
+ static get<T>(contextSymbol: symbol): QContext<T> | undefined;
16
+ /**
17
+ * Prevents the propagation of the context further down
18
+ * @param contextSymbol - Name of the context to get
19
+ * @returns The context result
20
+ */
21
+ static reset(contextSymbol: symbol): void;
22
+ /**
23
+ * Updates the context's inner value with `newVal`
24
+ * @param newVal - New value to update the context with
25
+ */
26
+ update(newVal: T): void;
27
+ /**
28
+ * Updates the property of id `key` with `newVal` in the context's inner value
29
+ * @param key - Key to update
30
+ * @param newVal - New value to update the context's property with
31
+ */
32
+ updateEntry(key: keyof T, newVal: NonNullable<T>[keyof T]): void;
33
+ /**
34
+ * Updates the given properties their corresponding values in the context's inner value
35
+ * @param from - Object containing keys to update with their respective value
36
+ */
37
+ updateEntries(from: Record<keyof T, NonNullable<T>[keyof T]>): void;
38
+ /**
39
+ * Inner value of the context
40
+ */
41
+ get value(): T;
42
+ }
@@ -0,0 +1,63 @@
1
+ import { getContext, setContext } from "svelte";
2
+ /**
3
+ * This class allows to manipulate reactive contexts more easily.
4
+ * It avoids having to pass a Svelte store down the components but rather use runes to keep the context reactive.
5
+ *
6
+ * This class should be used when the context has to be modified from a child component. Otherwise, using svelte's context API should be enough.
7
+ */
8
+ export class QContext {
9
+ #state = $state();
10
+ constructor(contextSymbol, init) {
11
+ this.#state = init;
12
+ setContext(contextSymbol, this);
13
+ }
14
+ /**
15
+ * Gets the value of context with id `contextSymbol`
16
+ * @param contextSymbol - Name of the context to get
17
+ * @returns The context's value
18
+ */
19
+ static get(contextSymbol) {
20
+ return getContext(contextSymbol);
21
+ }
22
+ /**
23
+ * Prevents the propagation of the context further down
24
+ * @param contextSymbol - Name of the context to get
25
+ * @returns The context result
26
+ */
27
+ static reset(contextSymbol) {
28
+ setContext(contextSymbol, undefined);
29
+ }
30
+ /**
31
+ * Updates the context's inner value with `newVal`
32
+ * @param newVal - New value to update the context with
33
+ */
34
+ update(newVal) {
35
+ this.#state = newVal;
36
+ }
37
+ /**
38
+ * Updates the property of id `key` with `newVal` in the context's inner value
39
+ * @param key - Key to update
40
+ * @param newVal - New value to update the context's property with
41
+ */
42
+ updateEntry(key, newVal) {
43
+ if (!this.#state || typeof this.#state !== "object" || !Object.hasOwn(this.#state, key)) {
44
+ throw new Error(`${key.toString()} doesn't exist on ${this.#state}`);
45
+ }
46
+ this.#state[key] = newVal;
47
+ }
48
+ /**
49
+ * Updates the given properties their corresponding values in the context's inner value
50
+ * @param from - Object containing keys to update with their respective value
51
+ */
52
+ updateEntries(from) {
53
+ for (const key in from) {
54
+ this.updateEntry(key, from[key]);
55
+ }
56
+ }
57
+ /**
58
+ * Inner value of the context
59
+ */
60
+ get value() {
61
+ return this.#state;
62
+ }
63
+ }
@@ -0,0 +1,48 @@
1
+ type Direction = "up" | "right" | "down" | "left";
2
+ type WindowScrollType = "scrollX" | "scrollY";
3
+ type DocumentScrollType = "scrollLeft" | "scrollTop";
4
+ type ScrollType = {
5
+ window: WindowScrollType;
6
+ document: DocumentScrollType;
7
+ };
8
+ type Target = HTMLElement | typeof window | Document | string;
9
+ type ScrollObserverOptions = {
10
+ debounce?: number;
11
+ horizontal?: boolean;
12
+ };
13
+ /**
14
+ * A scroll observer utility.
15
+ * @example
16
+ * ```js
17
+ * // Inside the <script> tag
18
+ * const scroll = new QScrollObserver();
19
+ *
20
+ * $inspect(scroll.direction)
21
+ * ```
22
+ *
23
+ * @param target - Element or selector of the element to add the scroll listener on
24
+ * @param options - Options of the observer
25
+ * @param options.horizontal - If set to `true`, observe horizontal scrolling rather than vertical
26
+ * @param options.debounce - Time in milliseconds between each observation update
27
+ */
28
+ export default class QScrollObserver {
29
+ protected scrollType: ScrollType;
30
+ protected lastScroll: number;
31
+ protected horizontal: boolean;
32
+ protected clearTimer: (() => void) | null;
33
+ protected target: Exclude<Target, string> | null;
34
+ protected debounce: number;
35
+ protected handler: (e: Event) => void;
36
+ direction: Direction;
37
+ changedDirection: boolean;
38
+ delta: number;
39
+ inflectionPoint: number;
40
+ position: number;
41
+ constructor(target?: Target | null, { horizontal, debounce }?: ScrollObserverOptions);
42
+ protected getScrollPosition(target?: HTMLElement | typeof window | undefined): number;
43
+ protected baseHandler(e: Event): void;
44
+ protected updateDirection(target: HTMLElement): void;
45
+ protected handleDebounce(target: HTMLElement, debounce: number): void;
46
+ destroy(): void;
47
+ }
48
+ export {};
@@ -0,0 +1,107 @@
1
+ import { onMount } from "svelte";
2
+ import { elFromSelector } from "../utils";
3
+ /**
4
+ * A scroll observer utility.
5
+ * @example
6
+ * ```js
7
+ * // Inside the <script> tag
8
+ * const scroll = new QScrollObserver();
9
+ *
10
+ * $inspect(scroll.direction)
11
+ * ```
12
+ *
13
+ * @param target - Element or selector of the element to add the scroll listener on
14
+ * @param options - Options of the observer
15
+ * @param options.horizontal - If set to `true`, observe horizontal scrolling rather than vertical
16
+ * @param options.debounce - Time in milliseconds between each observation update
17
+ */
18
+ export default class QScrollObserver {
19
+ scrollType = {
20
+ window: "scrollY",
21
+ document: "scrollTop",
22
+ };
23
+ lastScroll;
24
+ horizontal = false;
25
+ clearTimer = null;
26
+ target = null;
27
+ debounce = 0;
28
+ handler;
29
+ direction = $state("down");
30
+ changedDirection = $state(false);
31
+ delta = $state(0);
32
+ inflectionPoint = $state(0);
33
+ position = $state(0);
34
+ constructor(target, { horizontal, debounce } = { horizontal: false, debounce: 0 }) {
35
+ this.horizontal = horizontal ?? false;
36
+ this.debounce = debounce ?? 0;
37
+ this.handler = this.baseHandler.bind(this);
38
+ this.scrollType = horizontal
39
+ ? { window: "scrollX", document: "scrollLeft" }
40
+ : { window: "scrollY", document: "scrollTop" };
41
+ this.lastScroll = 0;
42
+ this.position = 0;
43
+ this.inflectionPoint = 0;
44
+ this.direction = horizontal ? "right" : "down";
45
+ onMount(() => {
46
+ let parsedTarget = elFromSelector(target ?? null);
47
+ if (parsedTarget === null) {
48
+ console.warn(`The given target (${target}) is null, observing window instead`);
49
+ parsedTarget = window;
50
+ }
51
+ this.target = parsedTarget;
52
+ parsedTarget.addEventListener("scroll", this.handler, { capture: true });
53
+ return this.destroy.bind(this);
54
+ });
55
+ }
56
+ getScrollPosition(target = window) {
57
+ return Math.max(0, target === window
58
+ ? target[this.scrollType.window]
59
+ : target[this.scrollType.document]);
60
+ }
61
+ baseHandler(e) {
62
+ const eventTarget = e.target;
63
+ if (!eventTarget || !this.target || eventTarget !== this.target) {
64
+ return;
65
+ }
66
+ if (this.debounce) {
67
+ this.handleDebounce(this.target, this.debounce);
68
+ }
69
+ else {
70
+ this.updateDirection(this.target);
71
+ }
72
+ }
73
+ updateDirection(target) {
74
+ this.clearTimer?.();
75
+ const newScrollPosition = this.getScrollPosition(target);
76
+ this.position = newScrollPosition;
77
+ this.delta = newScrollPosition - this.lastScroll;
78
+ const newDirection = this.delta > 0 ? (this.horizontal ? "right" : "down") : this.horizontal ? "left" : "up";
79
+ this.changedDirection = newDirection !== this.direction;
80
+ if (this.changedDirection) {
81
+ this.direction = newDirection;
82
+ this.inflectionPoint = newScrollPosition;
83
+ }
84
+ this.lastScroll = newScrollPosition <= 0 ? 0 : newScrollPosition;
85
+ }
86
+ handleDebounce(target, debounce) {
87
+ if (this.clearTimer) {
88
+ return;
89
+ }
90
+ const timer = setTimeout(this.updateDirection.bind(this, target), debounce);
91
+ this.clearTimer = () => {
92
+ clearTimeout(timer);
93
+ this.clearTimer = null;
94
+ };
95
+ }
96
+ destroy() {
97
+ this.clearTimer?.();
98
+ this.clearTimer = null;
99
+ this.target?.removeEventListener("scroll", this.handler);
100
+ this.target = null;
101
+ this.direction = "down";
102
+ this.changedDirection = false;
103
+ this.delta = 0;
104
+ this.inflectionPoint = 0;
105
+ this.position = 0;
106
+ }
107
+ }
@@ -0,0 +1,13 @@
1
+ import { type HexValue, type QuaffColors, type Mode } from "../utils";
2
+ type ThemeColors = Record<`${keyof QuaffColors}-${Mode}`, HexValue>;
3
+ declare class QTheme {
4
+ themeColors: ThemeColors;
5
+ srcColor: string;
6
+ constructor();
7
+ private apply;
8
+ updateThemeColor(color: keyof ThemeColors, newVal: HexValue): void;
9
+ updateThemeColors(colors: Partial<ThemeColors>): void;
10
+ setTheme(from: string): void;
11
+ }
12
+ declare const _default: QTheme;
13
+ export default _default;
@@ -0,0 +1,62 @@
1
+ import { generateColors } from "../utils";
2
+ function extractColorFromCssVar(cssVar) {
3
+ const rootStyles = getComputedStyle(document.documentElement);
4
+ // remove var(...) to get only the color
5
+ const varName = cssVar.replace(/var\(([a-z0-9-]+)\)/, "$1");
6
+ return rootStyles.getPropertyValue(varName).trim();
7
+ }
8
+ function prepareThemeColors(from) {
9
+ if (from.startsWith("var(")) {
10
+ from = extractColorFromCssVar(from);
11
+ }
12
+ const theme = generateColors(from);
13
+ //@ts-expect-error The properties are added in the next for loop
14
+ const themeColors = {};
15
+ let mode;
16
+ for (mode in theme) {
17
+ let color;
18
+ for (color in theme[mode]) {
19
+ const cssColor = `${color}-${mode}`;
20
+ themeColors[cssColor] = theme[mode][color];
21
+ }
22
+ }
23
+ return themeColors;
24
+ }
25
+ class QTheme {
26
+ themeColors = $state({});
27
+ srcColor = $state("#0039b4");
28
+ constructor() {
29
+ this.themeColors = prepareThemeColors(this.srcColor);
30
+ }
31
+ apply() {
32
+ const root = document.documentElement;
33
+ if (root === null) {
34
+ return;
35
+ }
36
+ let colorName;
37
+ for (colorName in this.themeColors) {
38
+ root.style.setProperty(`--${colorName}`, this.themeColors[colorName]);
39
+ }
40
+ }
41
+ updateThemeColor(color, newVal) {
42
+ this.themeColors[color] = newVal;
43
+ this.apply();
44
+ }
45
+ updateThemeColors(colors) {
46
+ let colorName;
47
+ for (colorName in colors) {
48
+ const color = colors[colorName];
49
+ if (color) {
50
+ this.themeColors[colorName] = color;
51
+ }
52
+ }
53
+ this.apply();
54
+ }
55
+ setTheme(from) {
56
+ const newTheme = prepareThemeColors(from);
57
+ this.themeColors = newTheme;
58
+ this.srcColor = from;
59
+ this.apply();
60
+ }
61
+ }
62
+ export default new QTheme();
@@ -0,0 +1,27 @@
1
+ declare class Quaff {
2
+ version: string;
3
+ private static readonly breakpointList;
4
+ readonly breakpoints: {
5
+ currentWidth: number;
6
+ current: "xs" | "sm" | "md" | "lg" | "xl";
7
+ isMoreThan(breakpoint: "xs" | "sm" | "md" | "lg" | "xl", included?: boolean): boolean;
8
+ isLessThan(breakpoint: "xs" | "sm" | "md" | "lg" | "xl", included?: boolean): boolean;
9
+ xs: number;
10
+ sm: number;
11
+ md: number;
12
+ lg: number;
13
+ xl: number;
14
+ };
15
+ router: import("@sveltejs/kit").Page<Record<string, string>, string | null>;
16
+ protected dark: boolean;
17
+ init(): void;
18
+ protected toggleDarkMode(): void;
19
+ protected setDarkMode(newVal: boolean): void;
20
+ get darkMode(): {
21
+ readonly isActive: boolean;
22
+ toggle: () => void;
23
+ set: (newVal: boolean) => void;
24
+ };
25
+ }
26
+ declare const _default: Quaff;
27
+ export default _default;
@@ -0,0 +1,91 @@
1
+ import { onMount } from "svelte";
2
+ import { innerWidth } from "svelte/reactivity/window";
3
+ import { version } from "../helpers";
4
+ import { page } from "$app/state";
5
+ class Quaff {
6
+ version = version;
7
+ static breakpointList = {
8
+ xs: 0,
9
+ sm: 600,
10
+ md: 960,
11
+ lg: 1280,
12
+ xl: 1920,
13
+ };
14
+ breakpoints = $derived.by(() => {
15
+ const currentWidth = innerWidth.current;
16
+ let current;
17
+ if (!currentWidth || currentWidth < 600) {
18
+ current = "xs";
19
+ }
20
+ else if (currentWidth < 960) {
21
+ current = "sm";
22
+ }
23
+ else if (currentWidth < 1280) {
24
+ current = "md";
25
+ }
26
+ else if (currentWidth < 1920) {
27
+ current = "lg";
28
+ }
29
+ else {
30
+ current = "xl";
31
+ }
32
+ return {
33
+ ...Quaff.breakpointList,
34
+ currentWidth: currentWidth || 0,
35
+ current,
36
+ isMoreThan(breakpoint, included = false) {
37
+ if (!currentWidth) {
38
+ return false;
39
+ }
40
+ const breakpointWidth = this[breakpoint];
41
+ return included ? currentWidth >= breakpointWidth : currentWidth > breakpointWidth;
42
+ },
43
+ isLessThan(breakpoint, included = false) {
44
+ if (!currentWidth) {
45
+ return false;
46
+ }
47
+ const breakpointWidth = this[breakpoint];
48
+ return included ? currentWidth <= breakpointWidth : currentWidth < breakpointWidth;
49
+ },
50
+ };
51
+ });
52
+ router = $derived(page);
53
+ dark = $state(false);
54
+ init() {
55
+ onMount(() => {
56
+ const currentMode = localStorage.getItem("current_mode") ||
57
+ (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
58
+ if (currentMode === "dark") {
59
+ this.dark = true;
60
+ }
61
+ else {
62
+ this.dark = false;
63
+ }
64
+ });
65
+ }
66
+ toggleDarkMode() {
67
+ this.dark = !this.dark;
68
+ const mode = {
69
+ from: this.dark ? "light" : "dark",
70
+ to: this.dark ? "dark" : "light",
71
+ };
72
+ const body = document.querySelector("body");
73
+ body?.classList.replace(`body--${mode.from}`, `body--${mode.to}`);
74
+ localStorage.setItem("current_mode", mode.to);
75
+ }
76
+ setDarkMode(newVal) {
77
+ this.dark = newVal;
78
+ }
79
+ get darkMode() {
80
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
81
+ const self = this;
82
+ return {
83
+ get isActive() {
84
+ return self.dark;
85
+ },
86
+ toggle: () => this.toggleDarkMode(),
87
+ set: (newVal) => this.setDarkMode(newVal),
88
+ };
89
+ }
90
+ }
91
+ export default new Quaff();
@@ -0,0 +1,101 @@
1
+ @use "$css/variables";
2
+
3
+ @layer q-avatar {
4
+ // Basic styles
5
+ .q-avatar {
6
+ height: var(--size);
7
+ width: var(--size);
8
+
9
+ & > img,
10
+ & > video {
11
+ object-fit: cover;
12
+ object-position: center;
13
+ aspect-ratio: 1;
14
+ width: 100%;
15
+ height: 100%;
16
+ }
17
+ transition:
18
+ variables.$speed3 transform,
19
+ variables.$speed3 border-radius,
20
+ variables.$speed3 padding;
21
+ border-radius: 0;
22
+
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: center;
26
+
27
+ font-size: 1rem;
28
+ text-transform: uppercase;
29
+
30
+ overflow: hidden;
31
+
32
+ -webkit-user-select: none;
33
+ -moz-user-select: none;
34
+ -ms-user-select: none;
35
+ user-select: none;
36
+
37
+ &.circle {
38
+ margin: 0;
39
+ }
40
+ }
41
+
42
+ // Sizes
43
+ $sizes: (
44
+ "xs": 0,
45
+ "sm": 1,
46
+ "md": 2,
47
+ "lg": 3,
48
+ "xl": 4,
49
+ );
50
+
51
+ .q-avatar {
52
+ @each $size, $val in $sizes {
53
+ &--#{$size} {
54
+ --size: calc(2rem + #{$val} * 0.5rem);
55
+ }
56
+ }
57
+ }
58
+
59
+ // Border radius
60
+ $positions-y: "top", "bottom";
61
+ $positions-x: "right", "left";
62
+
63
+ .q-avatar {
64
+ border-radius: 50%;
65
+
66
+ &--square {
67
+ border-radius: 0;
68
+ }
69
+
70
+ &--top-right-round {
71
+ border-bottom-left-radius: 0;
72
+ }
73
+ &--top-left-round {
74
+ border-bottom-right-radius: 0;
75
+ }
76
+ &--bottom-right-round {
77
+ border-top-left-radius: 0;
78
+ }
79
+ &--bottom-left-round {
80
+ border-top-right-radius: 0;
81
+ }
82
+
83
+ @each $pos-y in $positions-y {
84
+ &--#{$pos-y}-round {
85
+ @extend .q-avatar--#{$pos-y}-left-round;
86
+ @extend .q-avatar--#{$pos-y}-right-round;
87
+ }
88
+ }
89
+
90
+ @each $pos-x in $positions-x {
91
+ &--#{$pos-x}-round {
92
+ @extend .q-avatar--top-#{$pos-x}-round;
93
+ @extend .q-avatar--bottom-#{$pos-x}-round;
94
+ }
95
+ }
96
+
97
+ &--round {
98
+ border-radius: 0.5rem;
99
+ }
100
+ }
101
+ }