summaryrefslogtreecommitdiffstats
path: root/src/ui/objects/TextField.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/objects/TextField.tsx
downloadcorvos-website-c1e28224aa2e1450031669d9a7e359b63e04687d.tar.gz
corvos-website-c1e28224aa2e1450031669d9a7e359b63e04687d.tar.bz2
corvos-website-c1e28224aa2e1450031669d9a7e359b63e04687d.zip
Init
Diffstat (limited to 'src/ui/objects/TextField.tsx')
-rw-r--r--src/ui/objects/TextField.tsx62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/ui/objects/TextField.tsx b/src/ui/objects/TextField.tsx
new file mode 100644
index 0000000..dc7893a
--- /dev/null
+++ b/src/ui/objects/TextField.tsx
@@ -0,0 +1,62 @@
1import type { HTMLAttributes } from "corvos/plugins/jsx.ts";
2
3export type Props = HTMLAttributes<"input"> & {
4 "pre"?: JSX.Element;
5 "post"?: JSX.Element;
6 "invalid"?: boolean;
7 "pill"?: boolean;
8 "x-model"?: string;
9};
10
11export const TextField = ({
12 pre,
13 post,
14 disabled,
15 invalid,
16 pill,
17 placeholder,
18 readonly,
19 value,
20 pattern,
21 required,
22 "x-model": xModel,
23 class: cls,
24 ...props
25}: Props) => {
26 const extended = !!pre || !!post;
27
28 return (
29 <div
30 class:list={[
31 "o-text-field",
32 {
33 "is-disabled": disabled,
34 "is-invalid": invalid,
35 "l-media": extended,
36 "l-media--gapless": extended,
37 "o-text-field--extended": extended,
38 "o-text-field--pill": pill,
39 },
40 cls,
41 ]}
42 {...props}
43 >
44 {pre}{" "}
45 <input
46 class="o-text-field__native"
47 class:list={{
48 "l-media__block": extended,
49 "l-media__block--main": extended,
50 }}
51 disabled={disabled}
52 pattern={pattern}
53 placeholder={placeholder}
54 readonly={readonly}
55 required={required}
56 value={value}
57 x-model={xModel}
58 />{" "}
59 {post} <div class="o-text-field__bg"></div>
60 </div>
61 );
62};