@quaffui/quaff 0.1.0-prealpha2 → 0.1.0-prealpha20

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 +6 -6
  2. package/dist/classes/QContext.svelte.d.ts +42 -0
  3. package/dist/classes/QContext.svelte.js +63 -0
  4. package/dist/classes/QScrollObserver.svelte.d.ts +44 -0
  5. package/dist/classes/QScrollObserver.svelte.js +95 -0
  6. package/dist/classes/QTheme.svelte.d.ts +11 -0
  7. package/dist/classes/QTheme.svelte.js +49 -0
  8. package/dist/classes/Quaff.svelte.d.ts +14 -0
  9. package/dist/classes/Quaff.svelte.js +35 -0
  10. package/dist/components/avatar/QAvatar.scss +97 -0
  11. package/dist/components/avatar/QAvatar.svelte +35 -41
  12. package/dist/components/avatar/QAvatar.svelte.d.ts +2 -26
  13. package/dist/components/avatar/docs.d.ts +2 -2
  14. package/dist/components/avatar/docs.js +1 -1
  15. package/dist/components/avatar/docs.props.js +22 -4
  16. package/dist/components/avatar/index.scss +6 -1
  17. package/dist/components/avatar/props.d.ts +25 -7
  18. package/dist/components/avatar/props.js +1 -1
  19. package/dist/components/breadcrumbs/QBreadcrumbs.scss +10 -0
  20. package/dist/components/breadcrumbs/QBreadcrumbs.svelte +23 -14
  21. package/dist/components/breadcrumbs/QBreadcrumbs.svelte.d.ts +2 -22
  22. package/dist/components/breadcrumbs/QBreadcrumbsEl.scss +10 -0
  23. package/dist/components/breadcrumbs/QBreadcrumbsEl.svelte +64 -48
  24. package/dist/components/breadcrumbs/QBreadcrumbsEl.svelte.d.ts +2 -25
  25. package/dist/components/breadcrumbs/docs.d.ts +2 -2
  26. package/dist/components/breadcrumbs/docs.js +1 -1
  27. package/dist/components/breadcrumbs/docs.props.js +28 -26
  28. package/dist/components/breadcrumbs/props.d.ts +26 -24
  29. package/dist/components/button/QBtn.scss +133 -0
  30. package/dist/components/button/QBtn.svelte +94 -41
  31. package/dist/components/button/QBtn.svelte.d.ts +2 -31
  32. package/dist/components/button/docs.d.ts +2 -2
  33. package/dist/components/button/docs.js +1 -1
  34. package/dist/components/button/docs.props.js +47 -13
  35. package/dist/components/button/props.d.ts +35 -13
  36. package/dist/components/card/QCard.scss +25 -0
  37. package/dist/components/card/QCard.svelte +27 -19
  38. package/dist/components/card/QCard.svelte.d.ts +2 -25
  39. package/dist/components/card/QCardActions.scss +10 -0
  40. package/dist/components/card/QCardActions.svelte +14 -15
  41. package/dist/components/card/QCardActions.svelte.d.ts +2 -21
  42. package/dist/components/card/QCardSection.scss +10 -0
  43. package/dist/components/card/QCardSection.svelte +11 -11
  44. package/dist/components/card/QCardSection.svelte.d.ts +2 -22
  45. package/dist/components/card/docs.d.ts +4 -4
  46. package/dist/components/card/docs.js +3 -3
  47. package/dist/components/card/docs.props.js +9 -15
  48. package/dist/components/card/props.d.ts +11 -16
  49. package/dist/components/checkbox/QCheckbox.svelte +8 -9
  50. package/dist/components/checkbox/QCheckbox.svelte.d.ts +2 -20
  51. package/dist/components/checkbox/docs.d.ts +2 -2
  52. package/dist/components/checkbox/docs.js +1 -1
  53. package/dist/components/checkbox/docs.props.js +2 -0
  54. package/dist/components/checkbox/index.scss +7 -1
  55. package/dist/components/checkbox/props.d.ts +2 -2
  56. package/dist/components/chip/QChip.scss +179 -0
  57. package/dist/components/chip/QChip.svelte +98 -55
  58. package/dist/components/chip/QChip.svelte.d.ts +2 -34
  59. package/dist/components/chip/docs.d.ts +2 -2
  60. package/dist/components/chip/docs.js +1 -1
  61. package/dist/components/chip/docs.props.js +28 -42
  62. package/dist/components/chip/props.d.ts +25 -32
  63. package/dist/components/codeBlock/QCodeBlock.svelte +64 -45
  64. package/dist/components/codeBlock/QCodeBlock.svelte.d.ts +2 -22
  65. package/dist/components/codeBlock/docs.props.js +11 -1
  66. package/dist/components/codeBlock/props.d.ts +8 -2
  67. package/dist/components/dialog/QDialog.scss +177 -0
  68. package/dist/components/dialog/QDialog.svelte +77 -70
  69. package/dist/components/dialog/QDialog.svelte.d.ts +6 -36
  70. package/dist/components/dialog/docs.d.ts +2 -2
  71. package/dist/components/dialog/docs.js +1 -1
  72. package/dist/components/dialog/docs.props.d.ts +0 -8
  73. package/dist/components/dialog/docs.props.js +4 -108
  74. package/dist/components/dialog/props.d.ts +3 -18
  75. package/dist/components/drawer/QDrawer.scss +45 -0
  76. package/dist/components/drawer/QDrawer.svelte +91 -81
  77. package/dist/components/drawer/QDrawer.svelte.d.ts +6 -38
  78. package/dist/components/drawer/docs.d.ts +2 -2
  79. package/dist/components/drawer/docs.js +1 -1
  80. package/dist/components/drawer/docs.props.js +4 -2
  81. package/dist/components/drawer/props.d.ts +4 -3
  82. package/dist/components/footer/QFooter.scss +42 -0
  83. package/dist/components/footer/QFooter.svelte +67 -12
  84. package/dist/components/footer/QFooter.svelte.d.ts +2 -23
  85. package/dist/components/footer/docs.d.ts +2 -2
  86. package/dist/components/footer/docs.js +1 -1
  87. package/dist/components/footer/docs.props.js +13 -3
  88. package/dist/components/footer/props.d.ts +9 -5
  89. package/dist/components/header/QHeader.scss +54 -0
  90. package/dist/components/header/QHeader.svelte +56 -0
  91. package/dist/components/header/QHeader.svelte.d.ts +3 -0
  92. package/dist/components/header/docs.props.d.ts +24 -0
  93. package/dist/components/header/docs.props.js +88 -0
  94. package/dist/components/header/props.d.ts +23 -0
  95. package/dist/components/header/props.js +1 -0
  96. package/dist/components/icon/QIcon.scss +73 -0
  97. package/dist/components/icon/QIcon.svelte +32 -30
  98. package/dist/components/icon/QIcon.svelte.d.ts +2 -27
  99. package/dist/components/icon/docs.d.ts +2 -2
  100. package/dist/components/icon/docs.js +1 -1
  101. package/dist/components/icon/docs.props.js +11 -9
  102. package/dist/components/icon/props.d.ts +9 -8
  103. package/dist/components/index.d.ts +5 -2
  104. package/dist/components/index.js +5 -2
  105. package/dist/components/input/QInput.svelte +88 -72
  106. package/dist/components/input/QInput.svelte.d.ts +3 -32
  107. package/dist/components/input/docs.d.ts +2 -2
  108. package/dist/components/input/docs.js +2 -8
  109. package/dist/components/input/docs.props.js +39 -13
  110. package/dist/components/input/index.scss +1 -3
  111. package/dist/components/input/props.d.ts +13 -21
  112. package/dist/components/input/props.js +1 -13
  113. package/dist/components/layout/QLayout.scss +178 -0
  114. package/dist/components/layout/QLayout.svelte +101 -81
  115. package/dist/components/layout/QLayout.svelte.d.ts +17 -43
  116. package/dist/components/layout/docs.d.ts +2 -2
  117. package/dist/components/layout/docs.js +1 -1
  118. package/dist/components/layout/docs.props.js +65 -7
  119. package/dist/components/layout/props.d.ts +18 -9
  120. package/dist/components/list/QItem.scss +61 -0
  121. package/dist/components/list/QItem.svelte +73 -51
  122. package/dist/components/list/QItem.svelte.d.ts +2 -33
  123. package/dist/components/list/QItemSection.scss +45 -0
  124. package/dist/components/list/QItemSection.svelte +50 -37
  125. package/dist/components/list/QItemSection.svelte.d.ts +2 -24
  126. package/dist/components/list/QList.scss +30 -0
  127. package/dist/components/list/QList.svelte +30 -20
  128. package/dist/components/list/QList.svelte.d.ts +2 -35
  129. package/dist/components/list/docs.d.ts +2 -0
  130. package/dist/components/list/docs.js +11 -0
  131. package/dist/components/list/docs.props.js +79 -29
  132. package/dist/components/list/props.d.ts +24 -20
  133. package/dist/components/list/props.js +1 -25
  134. package/dist/components/private/ContextReseter.svelte +6 -11
  135. package/dist/components/private/ContextReseter.svelte.d.ts +6 -18
  136. package/dist/components/private/QApi.svelte +117 -93
  137. package/dist/components/private/QApi.svelte.d.ts +5 -17
  138. package/dist/components/private/QDocs.svelte +78 -41
  139. package/dist/components/private/QDocs.svelte.d.ts +10 -21
  140. package/dist/components/private/QDocsSection.svelte +16 -24
  141. package/dist/components/private/QDocsSection.svelte.d.ts +7 -29
  142. package/dist/components/private/QIconSnippet.svelte +12 -0
  143. package/dist/components/private/QIconSnippet.svelte.d.ts +8 -0
  144. package/dist/components/progress/QCircularProgress.scss +63 -0
  145. package/dist/components/progress/QCircularProgress.svelte +106 -20
  146. package/dist/components/progress/QCircularProgress.svelte.d.ts +2 -21
  147. package/dist/components/progress/QLinearProgress.scss +75 -0
  148. package/dist/components/progress/QLinearProgress.svelte +59 -17
  149. package/dist/components/progress/QLinearProgress.svelte.d.ts +2 -21
  150. package/dist/components/progress/docs.d.ts +2 -0
  151. package/dist/components/progress/docs.js +11 -0
  152. package/dist/components/progress/docs.props.d.ts +8 -0
  153. package/dist/components/progress/docs.props.js +181 -9
  154. package/dist/components/progress/props.d.ts +98 -17
  155. package/dist/components/progress/props.js +1 -7
  156. package/dist/components/radio/QRadio.svelte +14 -9
  157. package/dist/components/radio/QRadio.svelte.d.ts +2 -21
  158. package/dist/components/radio/docs.d.ts +2 -2
  159. package/dist/components/radio/docs.js +1 -1
  160. package/dist/components/radio/docs.props.js +6 -4
  161. package/dist/components/radio/index.scss +3 -1
  162. package/dist/components/radio/props.d.ts +5 -6
  163. package/dist/components/radio/props.js +1 -8
  164. package/dist/components/railbar/QRailbar.scss +54 -0
  165. package/dist/components/railbar/QRailbar.svelte +45 -49
  166. package/dist/components/railbar/QRailbar.svelte.d.ts +2 -22
  167. package/dist/components/railbar/docs.d.ts +2 -0
  168. package/dist/components/railbar/docs.js +11 -0
  169. package/dist/components/railbar/docs.props.js +10 -8
  170. package/dist/components/railbar/props.d.ts +15 -6
  171. package/dist/components/railbar/props.js +1 -7
  172. package/dist/components/select/QSelect.svelte +171 -140
  173. package/dist/components/select/QSelect.svelte.d.ts +2 -33
  174. package/dist/components/select/docs.d.ts +2 -2
  175. package/dist/components/select/docs.js +9 -8
  176. package/dist/components/select/docs.props.js +47 -13
  177. package/dist/components/select/index.scss +28 -7
  178. package/dist/components/select/props.d.ts +16 -20
  179. package/dist/components/select/props.js +1 -14
  180. package/dist/components/separator/QSeparator.scss +54 -0
  181. package/dist/components/separator/QSeparator.svelte +39 -57
  182. package/dist/components/separator/QSeparator.svelte.d.ts +2 -24
  183. package/dist/components/separator/docs.d.ts +2 -0
  184. package/dist/components/separator/docs.js +11 -0
  185. package/dist/components/separator/docs.props.js +16 -14
  186. package/dist/components/separator/props.d.ts +13 -14
  187. package/dist/components/separator/props.js +1 -9
  188. package/dist/components/switch/QSwitch.scss +305 -0
  189. package/dist/components/switch/QSwitch.svelte +96 -0
  190. package/dist/components/switch/QSwitch.svelte.d.ts +3 -0
  191. package/dist/components/switch/docs.d.ts +2 -0
  192. package/dist/components/{toggle → switch}/docs.js +3 -3
  193. package/dist/components/{toggle → switch}/docs.props.d.ts +1 -1
  194. package/dist/components/switch/docs.props.js +68 -0
  195. package/dist/components/switch/props.d.ts +13 -0
  196. package/dist/components/switch/props.js +1 -0
  197. package/dist/components/table/QTable.svelte +99 -94
  198. package/dist/components/table/QTable.svelte.d.ts +2 -28
  199. package/dist/components/table/docs.d.ts +2 -2
  200. package/dist/components/table/docs.js +1 -1
  201. package/dist/components/table/docs.props.js +11 -1
  202. package/dist/components/table/index.scss +3 -1
  203. package/dist/components/table/props.d.ts +14 -3
  204. package/dist/components/tabs/QTab.scss +71 -0
  205. package/dist/components/tabs/QTab.svelte +80 -66
  206. package/dist/components/tabs/QTab.svelte.d.ts +2 -27
  207. package/dist/components/tabs/QTabs.scss +40 -0
  208. package/dist/components/tabs/QTabs.svelte +114 -51
  209. package/dist/components/tabs/QTabs.svelte.d.ts +7 -22
  210. package/dist/components/tabs/docs.d.ts +2 -0
  211. package/dist/components/tabs/docs.js +11 -0
  212. package/dist/components/tabs/docs.props.js +10 -16
  213. package/dist/components/tabs/index.scss +71 -28
  214. package/dist/components/tabs/props.d.ts +9 -9
  215. package/dist/components/tabs/props.js +1 -13
  216. package/dist/components/toolbar/QToolbar.svelte +20 -37
  217. package/dist/components/toolbar/QToolbar.svelte.d.ts +2 -22
  218. package/dist/components/toolbar/QToolbarTitle.svelte +11 -0
  219. package/dist/components/toolbar/QToolbarTitle.svelte.d.ts +3 -0
  220. package/dist/components/toolbar/docs.d.ts +2 -0
  221. package/dist/components/toolbar/docs.js +11 -0
  222. package/dist/components/toolbar/docs.props.d.ts +8 -0
  223. package/dist/components/toolbar/docs.props.js +33 -5
  224. package/dist/components/toolbar/index.scss +34 -1
  225. package/dist/components/toolbar/props.d.ts +24 -5
  226. package/dist/components/toolbar/props.js +1 -6
  227. package/dist/components/tooltip/QTooltip.svelte +8 -12
  228. package/dist/components/tooltip/QTooltip.svelte.d.ts +2 -21
  229. package/dist/components/tooltip/docs.d.ts +2 -0
  230. package/dist/components/tooltip/docs.js +11 -0
  231. package/dist/components/tooltip/docs.props.js +3 -1
  232. package/dist/components/tooltip/index.scss +80 -2
  233. package/dist/components/tooltip/props.d.ts +4 -3
  234. package/dist/components/tooltip/props.js +1 -1
  235. package/dist/composables/index.d.ts +3 -0
  236. package/dist/composables/index.js +3 -1
  237. package/dist/composables/{use-align.d.ts → useAlign.d.ts} +1 -1
  238. package/dist/composables/useAlign.js +23 -0
  239. package/dist/composables/{use-router-link.d.ts → useRouterLink.d.ts} +3 -3
  240. package/dist/composables/{use-router-link.js → useRouterLink.js} +4 -5
  241. package/dist/composables/useSize.d.ts +10 -0
  242. package/dist/composables/useSize.js +37 -0
  243. package/dist/composables/useSizeLegacy.d.ts +9 -0
  244. package/dist/composables/useSizeLegacy.js +25 -0
  245. package/dist/css/_components.scss +31 -0
  246. package/dist/css/_disabled.scss +18 -0
  247. package/dist/css/_ripple.scss +49 -0
  248. package/dist/css/_variables.scss +73 -0
  249. package/dist/css/classes/_design.scss +57 -0
  250. package/dist/css/classes/_flex.scss +62 -0
  251. package/dist/css/classes/_grid.scss +35 -0
  252. package/dist/css/classes/_index.scss +7 -0
  253. package/dist/css/classes/_overflow.scss +7 -0
  254. package/dist/css/classes/_position.scss +7 -0
  255. package/dist/css/classes/_select.scss +6 -0
  256. package/dist/css/classes/_spaces.scss +23 -0
  257. package/dist/css/flex.scss +41 -0
  258. package/dist/css/fonts.scss +17 -0
  259. package/dist/css/index.css +1 -0
  260. package/dist/css/index.scss +15 -111
  261. package/dist/css/mixins/_design.scss +63 -0
  262. package/dist/css/mixins/_field.scss +64 -0
  263. package/dist/css/mixins/_image.scss +63 -0
  264. package/dist/css/mixins/_index.scss +9 -0
  265. package/dist/css/mixins/_layout.scss +20 -0
  266. package/dist/css/mixins/{menu.scss → _menu.scss} +6 -2
  267. package/dist/css/mixins/{selection.scss → _selection.scss} +7 -67
  268. package/dist/css/mixins/_spaces.scss +36 -0
  269. package/dist/css/mixins/_typography.scss +7 -0
  270. package/dist/css/shared/q-field.scss +348 -0
  271. package/dist/css/theme/_colors.scss +173 -0
  272. package/dist/css/theme/colors.module.scss +261 -109
  273. package/dist/css/theme/css-variables.scss +5 -0
  274. package/dist/css/theme/elevate.scss +57 -0
  275. package/dist/css/theme/page.scss +16 -0
  276. package/dist/css/theme/palette.scss +653 -0
  277. package/dist/css/theme/reset.scss +56 -0
  278. package/dist/css/theme/theme.scss +7 -2
  279. package/dist/css/theme/tokens.scss +0 -159
  280. package/dist/css/theme/typography.scss +111 -0
  281. package/dist/global.d.ts +1 -2
  282. package/dist/helpers/clickOutside.d.ts +2 -2
  283. package/dist/helpers/clickOutside.js +5 -4
  284. package/dist/helpers/index.d.ts +1 -1
  285. package/dist/helpers/index.js +1 -1
  286. package/dist/helpers/ripple.d.ts +11 -0
  287. package/dist/helpers/ripple.js +90 -0
  288. package/dist/helpers/version.d.ts +2 -0
  289. package/dist/helpers/version.js +1 -0
  290. package/dist/index.d.ts +3 -1
  291. package/dist/index.js +3 -1
  292. package/dist/stores/index.d.ts +0 -0
  293. package/dist/stores/index.js +1 -0
  294. package/dist/utils/clipboard.d.ts +1 -1
  295. package/dist/utils/clipboard.js +3 -4
  296. package/dist/utils/colors.d.ts +71 -0
  297. package/dist/utils/colors.js +103 -15
  298. package/dist/utils/dom.d.ts +11 -0
  299. package/dist/utils/dom.js +81 -0
  300. package/dist/utils/events.d.ts +13 -0
  301. package/dist/utils/events.js +13 -0
  302. package/dist/utils/index.d.ts +8 -0
  303. package/dist/utils/index.js +8 -1
  304. package/dist/utils/number.d.ts +2 -0
  305. package/dist/utils/number.js +9 -0
  306. package/dist/utils/props.d.ts +4 -4
  307. package/dist/utils/props.js +9 -7
  308. package/dist/utils/router.d.ts +17 -0
  309. package/dist/utils/router.js +23 -0
  310. package/dist/utils/string.d.ts +1 -0
  311. package/dist/utils/string.js +4 -1
  312. package/dist/utils/types.d.ts +12 -4
  313. package/dist/utils/types.js +0 -3
  314. package/dist/utils/types.json +27 -1
  315. package/dist/utils/watchable.d.ts +0 -1
  316. package/dist/utils/watchable.js +1 -1
  317. package/package.json +45 -37
  318. package/dist/components/breadcrumbs/index.scss +0 -20
  319. package/dist/components/button/index.scss +0 -78
  320. package/dist/components/card/index.scss +0 -53
  321. package/dist/components/chip/index.scss +0 -83
  322. package/dist/components/dialog/index.scss +0 -27
  323. package/dist/components/drawer/index.scss +0 -54
  324. package/dist/components/footer/index.scss +0 -5
  325. package/dist/components/icon/index.scss +0 -18
  326. package/dist/components/layout/index.scss +0 -370
  327. package/dist/components/list/index.scss +0 -114
  328. package/dist/components/progress/index.scss +0 -50
  329. package/dist/components/toggle/QToggle.svelte +0 -35
  330. package/dist/components/toggle/QToggle.svelte.d.ts +0 -23
  331. package/dist/components/toggle/docs.d.ts +0 -2
  332. package/dist/components/toggle/docs.props.js +0 -42
  333. package/dist/components/toggle/index.scss +0 -31
  334. package/dist/components/toggle/props.d.ts +0 -9
  335. package/dist/components/toggle/props.js +0 -9
  336. package/dist/composables/use-align.js +0 -12
  337. package/dist/composables/use-index.d.ts +0 -2
  338. package/dist/composables/use-index.js +0 -17
  339. package/dist/composables/use-size.d.ts +0 -11
  340. package/dist/composables/use-size.js +0 -13
  341. package/dist/css/grid.scss +0 -65
  342. package/dist/css/mixins/field.scss +0 -430
  343. package/dist/css/mixins.scss +0 -135
  344. package/dist/css/states.scss +0 -70
  345. package/dist/css/theme/theme.dark.scss +0 -36
  346. package/dist/css/theme/theme.light.scss +0 -36
  347. package/dist/helpers/activationHandler.d.ts +0 -9
  348. package/dist/helpers/activationHandler.js +0 -23
  349. package/dist/stores/QTheme.d.ts +0 -42
  350. package/dist/stores/QTheme.js +0 -53
  351. package/dist/stores/Quaff.d.ts +0 -32
  352. package/dist/stores/Quaff.js +0 -52
  353. package/dist/utils/fields.d.ts +0 -1
  354. package/dist/utils/fields.js +0 -14
  355. /package/dist/css/mixins/{table.scss → _table.scss} +0 -0
@@ -1,106 +1,109 @@
1
- <script>import { createClasses } from "../../utils/props";
2
- import QBtn from "../button/QBtn.svelte";
3
- import QIcon from "../icon/QIcon.svelte";
4
- import QSelect from "../select/QSelect.svelte";
5
- export let columns = [], rows = [], flat = void 0, bordered = void 0, dense = false, userClasses = "";
6
- export { userClasses as class };
7
- function getField(fieldRaw, row) {
8
- return typeof fieldRaw === "function" ? fieldRaw(row) : row[fieldRaw];
9
- }
10
- let page = 1;
11
- let rowsPerPage = 5;
12
- let rowsPerPageOptions = [5, 10, 25, 50].map((e) => ({
13
- label: e.toString(),
14
- value: e.toString()
15
- }));
16
- $:
17
- classes = createClasses([], {
18
- component: "q-table",
19
- userClasses
1
+ <script lang="ts">
2
+ import { QIcon, QSelect, QBtn } from "../..";
3
+ let {
4
+ columns = [],
5
+ rows = [],
6
+ flat,
7
+ bordered,
8
+ dense = false,
9
+ bodyCell,
10
+ ...props
11
+ } = $props();
12
+ function getField(fieldRaw, row) {
13
+ return typeof fieldRaw === "function" ? fieldRaw(row) : row[fieldRaw];
14
+ }
15
+ let page = $state(1);
16
+ let rowsPerPage = $state(5);
17
+ let rowsPerPageOptions = $state(
18
+ [5, 10, 25, 50].map((e) => ({
19
+ label: e.toString(),
20
+ value: e.toString(),
21
+ })),
22
+ );
23
+ let sort = $state(null);
24
+ const numberFrom = $derived(rowsPerPage * page - rowsPerPage + 1);
25
+ const numberTo = $derived(
26
+ rowsPerPage * page > rows.length ? rows.length : rowsPerPage * page,
27
+ );
28
+ const numberOf = $derived(rows.length);
29
+ $effect(() => {
30
+ if (rowsPerPage * (page - 1) >= rows.length) {
31
+ page = 1;
32
+ }
20
33
  });
21
- $:
22
- classesTable = createClasses([flat && "flat", bordered && "bordered", dense && "dense"], {
23
- component: "q-table",
24
- element: "table",
25
- userClasses
34
+ const rowsSorted = $derived.by(() => {
35
+ if (sort) {
36
+ return structuredClone(rows).sort((a, b) => {
37
+ const valA = getField(sort.columnField, a);
38
+ const valB = getField(sort.columnField, b);
39
+ if (typeof valA === "string" && typeof valB === "string") {
40
+ return sort?.type === "desc"
41
+ ? valB.localeCompare(valA)
42
+ : valA.localeCompare(valB);
43
+ }
44
+ return sort?.type === "desc"
45
+ ? parseFloat(valA.toString()) > parseFloat(valB.toString())
46
+ ? -1
47
+ : 1
48
+ : parseFloat(valB.toString()) > parseFloat(valA.toString())
49
+ ? -1
50
+ : 1;
51
+ });
52
+ }
53
+ return rows;
26
54
  });
27
- let sort = null;
28
- let rowsSorted = rows;
29
- let rowsPaginated = [];
30
- let numberFrom = 1;
31
- let numberTo = 5;
32
- let numberOf = rows.length;
33
- $:
34
- numberFrom = rowsPerPage * page - rowsPerPage + 1;
35
- $:
36
- numberTo = rowsPerPage * page > rows.length ? rows.length : rowsPerPage * page;
37
- $:
38
- numberOf = rows.length;
39
- $:
40
- rowsPaginated = rowsSorted.slice(numberFrom - 1, numberTo);
41
- $: {
42
- if (rowsPerPage * (page - 1) >= rows.length) {
43
- page = 1;
55
+ const rowsPaginated = $derived(rowsSorted.slice(numberFrom - 1, numberTo));
56
+ function getThStyle(column) {
57
+ let style = allowsSort(column) ? "cursor: pointer; " : "";
58
+ return style + getCellStyle(column);
59
+ }
60
+ function getCellStyle(column) {
61
+ if (column.align === "center") {
62
+ return "text-align: center";
63
+ } else if (column.align === "right") {
64
+ return "text-align: right";
65
+ }
66
+ return "";
44
67
  }
45
- }
46
- $: {
47
- if (sort) {
48
- rowsSorted = structuredClone(rows).sort((a, b) => {
49
- const valA = getField(sort.columnField, a);
50
- const valB = getField(sort.columnField, b);
51
- if (typeof valA === "string" && typeof valB === "string") {
52
- return sort?.type === "desc" ? valB.localeCompare(valA) : valA.localeCompare(valB);
53
- }
54
- return sort?.type === "desc" ? parseFloat(valA.toString()) > parseFloat(valB.toString()) ? -1 : 1 : parseFloat(valB.toString()) > parseFloat(valA.toString()) ? -1 : 1;
55
- });
56
- } else {
57
- rowsSorted = rows;
68
+ function allowsSort(column) {
69
+ return columns.find((col) => col.name === column.name)?.sortable;
58
70
  }
59
- }
60
- function getThStyle(column) {
61
- let style = allowsSort(column) ? "cursor: pointer; " : "";
62
- return style + getCellStyle(column);
63
- }
64
- function getCellStyle(column) {
65
- if (column.align === "center") {
66
- return "text-align: center";
67
- } else if (column.align === "right") {
68
- return "text-align: right";
71
+ function hasSort(column, sort2) {
72
+ return sort2?.columnField === column.field;
69
73
  }
70
- return "";
71
- }
72
- function allowsSort(column) {
73
- return columns.find((col) => col.name === column.name)?.sortable;
74
- }
75
- function hasSort(column, sort2) {
76
- return sort2?.columnField === column.field;
77
- }
78
- function setSort(column) {
79
- const shouldRemove = hasSort(column, sort) && sort?.type === "desc";
80
- if (shouldRemove) {
81
- sort = null;
82
- return;
74
+ function setSort(column) {
75
+ const shouldRemove = hasSort(column, sort) && sort?.type === "desc";
76
+ if (shouldRemove) {
77
+ sort = null;
78
+ return;
79
+ }
80
+ sort = {
81
+ columnField: column.field,
82
+ type: !sort?.type || sort?.type === "desc" ? "asc" : "desc",
83
+ };
83
84
  }
84
- sort = {
85
- columnField: column.field,
86
- type: !sort?.type || sort?.type === "desc" ? "asc" : "desc"
87
- };
88
- }
89
85
  </script>
90
86
 
91
- <div class={classes}>
92
- <table class={classesTable}>
87
+ <div {...props} class="q-table">
88
+ <table
89
+ class="q-table__table{props.class ? ` ${props.class}` : ''}"
90
+ class:q-table__table--flat={flat}
91
+ class:q-table__table--bordered={bordered}
92
+ class:q-table__table--dense={dense}
93
+ >
93
94
  <thead>
94
95
  <tr>
95
96
  {#each columns as column}
96
- <th style={getThStyle(column)} on:click={() => setSort(column)}>
97
+ <th style={getThStyle(column)} onclick={() => setSort(column)}>
97
98
  {#if column.align === "left"}
98
99
  {column.label}
99
100
  {/if}
100
101
 
101
102
  {#if allowsSort(column)}
102
103
  <QIcon
103
- name={sort?.type !== "desc" ? "keyboard_arrow_up" : "keyboard_arrow_down"}
104
+ name={sort?.type !== "desc"
105
+ ? "keyboard_arrow_up"
106
+ : "keyboard_arrow_down"}
104
107
  class="q-icon {hasSort(column, sort) ? 'q-icon--sort' : ''}"
105
108
  />
106
109
  {/if}
@@ -116,11 +119,13 @@ function setSort(column) {
116
119
  {#each rowsPaginated as row}
117
120
  <tr>
118
121
  {#each columns as column}
119
- <slot name="body-cell" {column} {row} style={getCellStyle(column)}>
122
+ {#if bodyCell}
123
+ {@render bodyCell({ column, row, style: getCellStyle(column) })}
124
+ {:else}
120
125
  <td class="q-table__body-cell" style={getCellStyle(column)}
121
126
  >{getField(column.field, row)}</td
122
127
  >
123
- </slot>
128
+ {/if}
124
129
  {/each}
125
130
  </tr>
126
131
  {/each}
@@ -139,16 +144,16 @@ function setSort(column) {
139
144
  <QBtn
140
145
  icon="chevron_left"
141
146
  size="sm"
142
- flat
143
- disable={page === 1}
144
- on:click={() => (page = page - 1)}
147
+ design="flat"
148
+ disabled={page === 1}
149
+ onclick={() => page--}
145
150
  />
146
151
  <QBtn
147
152
  icon="chevron_right"
148
153
  size="sm"
149
- flat
150
- disable={page * rowsPerPage >= rows.length}
151
- on:click={() => (page = page + 1)}
154
+ design="flat"
155
+ disabled={page * rowsPerPage >= rows.length}
156
+ onclick={() => page++}
152
157
  />
153
158
  </div>
154
159
  </div>
@@ -1,29 +1,3 @@
1
- import { SvelteComponent } from "svelte";
2
1
  import type { QTableProps } from "./props";
3
- import type { QTableColumn, QTableRow } from "./props";
4
- declare const __propDef: {
5
- props: {
6
- columns?: QTableColumn[] | undefined;
7
- rows?: QTableRow[] | undefined;
8
- flat?: QTableProps["flat"];
9
- bordered?: QTableProps["bordered"];
10
- dense?: boolean | undefined;
11
- class?: string | undefined;
12
- };
13
- events: {
14
- [evt: string]: CustomEvent<any>;
15
- };
16
- slots: {
17
- 'body-cell': {
18
- column: QTableColumn;
19
- row: QTableRow;
20
- style: string;
21
- };
22
- };
23
- };
24
- type QTableProps_ = typeof __propDef.props;
25
- export { QTableProps_ as QTableProps };
26
- export type QTableEvents = typeof __propDef.events;
27
- export type QTableSlots = typeof __propDef.slots;
28
- export default class QTable extends SvelteComponent<QTableProps, QTableEvents, QTableSlots> {
29
- }
2
+ declare const QTable: import("svelte").Component<QTableProps, {}, "">;
3
+ export default QTable;
@@ -1,2 +1,2 @@
1
- import type { QComponentDocs } from "$utils/types";
2
- export declare let QTableDocs: QComponentDocs;
1
+ import type { QComponentDocs } from "../../utils";
2
+ export declare const QTableDocs: QComponentDocs;
@@ -1,5 +1,5 @@
1
1
  import { QTableDocsProps } from "./docs.props";
2
- export let QTableDocs = {
2
+ export const QTableDocs = {
3
3
  name: "QTable",
4
4
  description: "Tables allow for a clear presentation of data sets.",
5
5
  docs: {
@@ -1,3 +1,5 @@
1
+ // AUTO GENERATED FILE - DO NOT MODIFY OR DELETE
2
+ // @quaffHash d9ca4c59cff5796a9346569afaa9042b
1
3
  export const QTableDocsProps = [
2
4
  {
3
5
  name: "columns",
@@ -34,9 +36,17 @@ export const QTableDocsProps = [
34
36
  {
35
37
  name: "dense",
36
38
  type: "boolean",
37
- optional: false,
39
+ optional: true,
38
40
  clickableType: false,
39
41
  description: "Shows the Table in dense mode (takes up less space).",
40
42
  default: "false",
41
43
  },
44
+ {
45
+ name: "bodyCell",
46
+ type: "string }]>",
47
+ optional: true,
48
+ clickableType: true,
49
+ description: "Optionally pass a snippet to render each table cell.",
50
+ default: "undefined",
51
+ },
42
52
  ];
@@ -1,6 +1,8 @@
1
+ @use "$css/mixins";
2
+
1
3
  .q-table {
2
4
  &__table {
3
- @include table;
5
+ @include mixins.table;
4
6
 
5
7
  border-radius: 0.75rem;
6
8
  box-shadow: var(--elevate1);
@@ -1,4 +1,6 @@
1
- import type { NativeProps } from "../../utils/types";
1
+ import type { NativeProps } from "../../utils";
2
+ import type { Snippet } from "svelte";
3
+ import type { HTMLAttributes } from "svelte/elements";
2
4
  export type QTableColumn = {
3
5
  name: string;
4
6
  required?: boolean;
@@ -16,7 +18,7 @@ export type QTableSort = {
16
18
  columnField: string | ((row: QTableRow) => string);
17
19
  type: "asc" | "desc";
18
20
  } | null;
19
- export interface QTableProps extends NativeProps {
21
+ export interface QTableProps extends NativeProps, HTMLAttributes<HTMLDivElement> {
20
22
  /**
21
23
  * Column definitions of the table.
22
24
  * @default []
@@ -41,5 +43,14 @@ export interface QTableProps extends NativeProps {
41
43
  * Shows the Table in dense mode (takes up less space).
42
44
  * @default false
43
45
  */
44
- dense: boolean;
46
+ dense?: boolean;
47
+ /**
48
+ * Optionally pass a snippet to render each table cell.
49
+ * @default undefined
50
+ */
51
+ bodyCell?: Snippet<[{
52
+ column: QTableColumn;
53
+ row: QTableRow;
54
+ style: string;
55
+ }]>;
45
56
  }
@@ -0,0 +1,71 @@
1
+ @use "$css/mixins";
2
+
3
+ .q-tab {
4
+ position: relative;
5
+ box-sizing: border-box;
6
+ min-height: 3rem;
7
+ height: 3rem;
8
+ min-width: max-content;
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ flex: 1;
13
+ background-color: var(--surface);
14
+ color: var(--on-surface);
15
+ border-radius: 0;
16
+ gap: 0;
17
+ overflow: visible;
18
+ @include mixins.padding("x-md");
19
+
20
+ & .q-tab__icon {
21
+ margin-right: 0.25rem;
22
+ }
23
+
24
+ &.q-tab--active {
25
+ color: var(--primary);
26
+
27
+ & .q-tab__indicator {
28
+ opacity: 1;
29
+ }
30
+ }
31
+
32
+ &:is(:hover, :focus):not([aria-disabled])::after {
33
+ content: "";
34
+ position: absolute;
35
+ top: 0;
36
+ left: 0;
37
+ width: 100%;
38
+ height: 100%;
39
+ background-color: var(--on-surface);
40
+ border-radius: none;
41
+ overflow: hidden;
42
+ }
43
+
44
+ &:hover:not([aria-disabled])::after {
45
+ opacity: 0.08;
46
+ }
47
+
48
+ &:focus:not([aria-disabled])::after {
49
+ opacity: 0.16;
50
+ }
51
+
52
+ & .q-tab__content {
53
+ height: 100%;
54
+ display: flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ }
58
+
59
+ & .q-tab__indicator {
60
+ position: absolute;
61
+ box-sizing: border-box;
62
+ transform-origin: bottom left;
63
+ background: var(--primary);
64
+ border-radius: 0.1875rem 0.1875rem 0 0;
65
+ height: 0.1875rem;
66
+ inset: auto 0 0 0;
67
+ // hidden unless the tab is selected
68
+ opacity: 0;
69
+ z-index: 1;
70
+ }
71
+ }
@@ -1,78 +1,92 @@
1
- <script>import { Quaff } from "$stores/Quaff";
2
- import { getContext, hasContext } from "svelte";
3
- import { createClasses } from "../../utils/props";
4
- import QIcon from "../icon/QIcon.svelte";
5
- import { isRouteActive } from "../../composables/use-router-link";
6
- export let name = void 0, to = void 0, icon = void 0, userClasses = void 0;
7
- export { userClasses as class };
8
- let index = 1;
9
- let tabEl;
10
- if (!hasContext("QTabCount")) {
11
- console.warn("QTab should be used inside QTabs");
12
- }
13
- const variant = getContext("variant");
14
- let indexContext = getContext("QTabCount");
15
- $:
16
- if (indexContext) {
17
- index = indexContext.index();
1
+ <script lang="ts">
2
+ import { getContext, hasContext } from "svelte";
3
+ import { QIcon } from "../..";
4
+ import QContext from "../../classes/QContext.svelte";
5
+ import { ripple } from "../../helpers";
6
+ import {
7
+ getClosestFocusableBlock,
8
+ getClosestFocusableSibling,
9
+ } from "../../utils/dom";
10
+ import {
11
+ getDirection,
12
+ isActivationKey,
13
+ isArrowKey,
14
+ isTabKey,
15
+ } from "../../utils/events";
16
+ import { isRouteActive } from "../../utils/router";
17
+ let { name, to, icon, children, ...props } = $props();
18
+ let qTab;
19
+ const tag = $derived(to ? "a" : "button");
20
+ if (!hasContext("QTabsValue")) {
21
+ console.warn("QTab should be use inside QTabs.");
18
22
  }
19
- let activeStore = getContext("activeTab");
20
- $:
21
- isActive = to !== void 0 ? isRouteActive($Quaff.router, to) : name === $activeStore.name;
22
- $:
23
- if (isActive && tabEl) {
24
- setActive(tabEl);
23
+ const qTabsRequestCtx = QContext.get("QTabsRequest");
24
+ const qTabsValueCtx = QContext.get("QTabsValue");
25
+ const variant = getContext("QTabsVariant");
26
+ const isActive = $derived(
27
+ to ? $isRouteActive(to) : name === qTabsValueCtx.value,
28
+ );
29
+ function onclick(e) {
30
+ props.onclick?.(e);
31
+ if (e.defaultPrevented || isActive) {
32
+ return;
33
+ }
34
+ qTabsRequestCtx.update(name);
25
35
  }
26
- let tag;
27
- $:
28
- tag = to === void 0 ? "button" : "a";
29
- $:
30
- classes = createClasses([
31
- "q-tab",
32
- isActive ? "active primary-text on-surface-text" : "surface on-surface-variant-text",
33
- tag === "a" && "button",
34
- userClasses
35
- ]);
36
- function setActive(el) {
37
- let rect;
38
- if (variant === "primary") {
39
- rect = el.firstChild.getBoundingClientRect();
40
- } else {
41
- rect = el.getBoundingClientRect();
36
+ function onkeydown(e) {
37
+ props.onkeydown?.(e);
38
+ if (isActivationKey(e)) {
39
+ e.preventDefault();
40
+ const click = new MouseEvent("click");
41
+ return onclick(click);
42
+ }
43
+ if (isArrowKey(e)) {
44
+ e.preventDefault();
45
+ const direction = getDirection(e);
46
+ const targetTab = getClosestFocusableSibling(qTab, direction);
47
+ if (targetTab === qTab) {
48
+ return;
49
+ }
50
+ return targetTab?.focus();
51
+ }
52
+ if (isTabKey(e)) {
53
+ e.preventDefault();
54
+ const direction = e.shiftKey ? "previous" : "next";
55
+ const targetBlock = getClosestFocusableBlock(qTab, direction);
56
+ targetBlock?.focus();
57
+ }
42
58
  }
43
- let indicatorWidth = variant === "vertical" ? rect.height : rect.width;
44
- let buttonWidth = el.offsetWidth;
45
- if (index !== $activeStore.index) {
46
- $activeStore = {
47
- name,
48
- index,
49
- position: variant === "vertical" ? `${el.offsetTop}px` : variant === "secondary" ? `${el.offsetLeft}px` : `calc(${el.offsetLeft}px + ${buttonWidth}px / 2)`,
50
- size: indicatorWidth
51
- };
52
- }
53
- }
54
- function handleClick(e) {
55
- setActive(e.target);
56
- }
57
59
  </script>
58
60
 
59
61
  <svelte:element
60
62
  this={tag}
63
+ bind:this={qTab}
64
+ use:ripple
65
+ {...props}
66
+ class="q-tab{props.class ? ` ${props.class}` : ''}"
67
+ class:q-tab--active={isActive}
61
68
  href={to}
62
- class={classes}
63
- on:click={handleClick}
64
- on:keyup
65
- on:keydown
66
- on:keypress
67
- {...$$restProps}
68
- bind:this={tabEl}
69
+ role={tag === "a" ? "button" : undefined}
70
+ aria-current={isActive || undefined}
71
+ aria-label={name}
72
+ {onclick}
73
+ {onkeydown}
69
74
  >
70
- <div>
71
- {#if icon}
72
- <QIcon name={icon} />
73
- {:else if $$slots.icon}
74
- <slot name="icon" />
75
+ <div class="q-tab__content">
76
+ {#if typeof icon === "string"}
77
+ <QIcon name={icon} class="q-tab__icon" />
78
+ {:else}
79
+ {@render icon?.()}
80
+ {/if}
81
+
82
+ {@render children?.()}
83
+
84
+ {#if variant === "primary"}
85
+ <div class="q-tab__indicator"></div>
75
86
  {/if}
76
- <slot />
77
87
  </div>
88
+
89
+ {#if variant !== "primary"}
90
+ <div class="q-tab__indicator"></div>
91
+ {/if}
78
92
  </svelte:element>
@@ -1,28 +1,3 @@
1
- import { SvelteComponent } from "svelte";
2
1
  import type { QTabProps } from "./props";
3
- declare const __propDef: {
4
- props: {
5
- [x: string]: any;
6
- name?: QTabProps["name"];
7
- to?: QTabProps["to"];
8
- icon?: QTabProps["icon"];
9
- class?: string | undefined;
10
- };
11
- events: {
12
- keyup: KeyboardEvent;
13
- keydown: KeyboardEvent;
14
- keypress: KeyboardEvent;
15
- } & {
16
- [evt: string]: CustomEvent<any>;
17
- };
18
- slots: {
19
- icon: {};
20
- default: {};
21
- };
22
- };
23
- type QTabProps_ = typeof __propDef.props;
24
- export { QTabProps_ as QTabProps };
25
- export type QTabEvents = typeof __propDef.events;
26
- export type QTabSlots = typeof __propDef.slots;
27
- export default class QTab extends SvelteComponent<QTabProps, QTabEvents, QTabSlots> {
28
- }
2
+ declare const QTab: import("svelte").Component<QTabProps, {}, "">;
3
+ export default QTab;
@@ -0,0 +1,40 @@
1
+ @use "$css/mixins";
2
+
3
+ .q-tabs {
4
+ position: relative;
5
+ display: flex;
6
+ align-items: center;
7
+ gap: 0;
8
+ max-width: 100%;
9
+ overflow: auto;
10
+ scroll-behavior: smooth;
11
+ border-radius: 0;
12
+ border-bottom: solid 0.0625rem var(--outline);
13
+ &::-webkit-scrollbar {
14
+ display: none;
15
+ }
16
+
17
+ &.q-tabs--secondary .q-tab .q-tab__indicator {
18
+ border-radius: 0;
19
+ height: 0.125rem;
20
+ }
21
+
22
+ &.q-tabs--vertical {
23
+ flex-direction: column;
24
+ width: fit-content;
25
+ align-items: stretch;
26
+ border-bottom: unset;
27
+ border-right: solid 0.0625rem var(--outline);
28
+
29
+ & > .q-tab {
30
+ @include mixins.padding("x-md");
31
+ }
32
+
33
+ & .q-tab .q-tab__indicator {
34
+ inset: 0 0 0 auto;
35
+ border-radius: 0;
36
+ height: unset;
37
+ width: 0.125rem;
38
+ }
39
+ }
40
+ }