summaryrefslogtreecommitdiffstats
path: root/src/ui/layouts/CardList.tsx
diff options
context:
space:
mode:
authorVolpeon <git@volpeon.ink>2026-07-22 19:40:59 +0200
committerVolpeon <git@volpeon.ink>2026-07-22 19:40:59 +0200
commitc1e28224aa2e1450031669d9a7e359b63e04687d (patch)
tree68f3d8905c763a91f68001d868197effa92adafa /src/ui/layouts/CardList.tsx
downloadcorvos-website-c1e28224aa2e1450031669d9a7e359b63e04687d.tar.gz
corvos-website-c1e28224aa2e1450031669d9a7e359b63e04687d.tar.bz2
corvos-website-c1e28224aa2e1450031669d9a7e359b63e04687d.zip
Init
Diffstat (limited to 'src/ui/layouts/CardList.tsx')
-rw-r--r--src/ui/layouts/CardList.tsx52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/ui/layouts/CardList.tsx b/src/ui/layouts/CardList.tsx
new file mode 100644
index 0000000..96ae642
--- /dev/null
+++ b/src/ui/layouts/CardList.tsx
@@ -0,0 +1,52 @@
1import type { HTMLAttributes } from "corvos/plugins/jsx.ts";
2
3export type Props = HTMLAttributes<"ul"> & {
4 "layout"?:
5 | "merge"
6 | "grid"
7 | "grid-sm"
8 | "grid-xs"
9 | "flex"
10 | "flex-sm"
11 | "flex-xs"
12 | "masonry"
13 | "masonry-h"
14 | "masonry-h-sm";
15 "quiet"?: boolean;
16 "border"?: boolean;
17 "interactive"?: boolean;
18 "no-shadow"?: boolean;
19 "no-flush"?: boolean;
20 "keyboard-nav"?: boolean;
21};
22
23export const CardList = ({
24 layout,
25 quiet,
26 border,
27 interactive,
28 "no-shadow": noShadow,
29 "no-flush": noFlush,
30 "keyboard-nav": keyboardNav,
31 class: cls,
32 ...props
33}: Props) => (
34 <div
35 class:list={[
36 "l-card-list",
37 {
38 [`l-card-list--${layout}`]: layout,
39 "l-card-list--interactive": interactive,
40 "l-card-list--no-flush": noFlush,
41 "l-card-list--quiet": quiet,
42 "l-card-list--borderless": !border,
43 "l-card-list--shadow": layout === "merge" && !noShadow,
44 "js-keyboard-nav": keyboardNav,
45 },
46 cls,
47 ]}
48 data-keyboard-nav-item=".l-card-list__card"
49 data-keyboard-nav-mode="grid"
50 {...props}
51 />
52);