UNPKG

alinea

Version:
89 lines (85 loc) 2.76 kB
import { dist_default } from "../../chunks/chunk-A5O3N2GS.js"; import "../../chunks/chunk-NZLE2WMY.js"; // src/field/json/JsonField.view.tsx import { useField } from "alinea/dashboard/editor/UseField"; import { InputLabel } from "alinea/dashboard/view/InputLabel"; import { HStack } from "alinea/ui"; import { IcRoundTextFields } from "alinea/ui/icons/IcRoundTextFields"; import { TextareaAutosize } from "alinea/ui/util/TextareaAutosize"; import { useEffect, useState } from "react"; // src/field/json/JsonField.module.scss var JsonField_module_default = { "root-input": "alinea-JsonField-input", "rootInput": "alinea-JsonField-input", "is-valid": "alinea-JsonField-is-valid", "isValid": "alinea-JsonField-is-valid" }; // src/field/json/JsonField.view.tsx import { jsx } from "react/jsx-runtime"; var styles = dist_default(JsonField_module_default); function JsonInput({ field }) { const { options, value, mutator, label, error } = useField(field); const [text, setText] = useState(JSON.stringify(value, null, 2)); const [valid, setValid] = useState(true); const [focus, setFocus] = useState(false); const { inline, autoFocus } = options; const placeholder = inline ? String(label) : ""; const empty = value === ""; useEffect(() => { try { const newValue = JSON.parse(text); mutator(newValue); setValid(true); } catch (e) { setValid(!text); } }, [text]); return /* @__PURE__ */ jsx( InputLabel, { asLabel: true, ...options, error, focused: focus, icon: IcRoundTextFields, empty, children: /* @__PURE__ */ jsx(HStack, { center: true, gap: 8, children: /* @__PURE__ */ jsx( TextareaAutosize, { className: styles.root.input({ valid }), type: "text", value: text || "", onChange: (e) => setText(e.currentTarget.value), onFocus: () => setFocus(true), onKeyDown: (e) => { if (e.key === "Tab") { const target = e.target; const start = target.selectionStart; const end = target.selectionEnd; const value2 = target.value; if (end !== value2.length) { e.preventDefault(); target.value = `${value2.substring(0, start)} ${value2.substring(end)}`; target.selectionStart = target.selectionEnd = start + 2; } } }, onBlur: () => { setFocus(false); if (valid) { setText(JSON.stringify(value, null, 2)); } }, placeholder, autoFocus, readOnly: options.readOnly } ) }) } ); } export { JsonInput };