summaryrefslogtreecommitdiff
path: root/src/components/TextInput.tsx
diff options
context:
space:
mode:
authorSam Nystrom <sam@samnystrom.dev>2024-03-13 05:03:22 +0000
committerSam Nystrom <sam@samnystrom.dev>2024-03-13 20:17:07 -0400
commit052cc1a5a4668d7cb17fb273a022aa5b820d1faa (patch)
treedbce2d2d10bb8c3cc81e38beeb2c1a3c8268c2f8 /src/components/TextInput.tsx
parent570f47670bf9f361eeb073b9124be56465498c83 (diff)
refactor: move styles into separate components
Diffstat (limited to 'src/components/TextInput.tsx')
-rw-r--r--src/components/TextInput.tsx26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/components/TextInput.tsx b/src/components/TextInput.tsx
new file mode 100644
index 0000000..026b062
--- /dev/null
+++ b/src/components/TextInput.tsx
@@ -0,0 +1,26 @@
+import { useCallback } from 'preact/hooks';
+import type { Signal } from '@preact/signals';
+import './TextInput.css';
+
+export interface TextInputProps {
+ signal?: Signal<string>;
+ props: Record<string, any>;
+}
+
+const TextInput = ({ signal, ...props }: TextInputProps) => {
+ const onInputSignal = useCallback((event: InputEvent) => {
+ signal.value = event.target.value;
+ }, [signal]);
+
+ return (
+ <input
+ type="text"
+ {...props}
+ class={(props.class || '') + ' __TextInput'}
+ value={signal || props.value}
+ onInput={signal ? onInputSignal : props.onInput}
+ />
+ );
+};
+
+export default TextInput; \ No newline at end of file