|
@@ -1,9 +1,8 @@
|
|
import { useEditor } from "@/modules/editor";
|
|
import { useEditor } from "@/modules/editor";
|
|
-import { defineComponent } from "vue";
|
|
|
|
|
|
+import { css } from "@linaria/core";
|
|
|
|
+import { defineComponent, ref } from "vue";
|
|
import { string } from "vue-types";
|
|
import { string } from "vue-types";
|
|
import { View } from "./View";
|
|
import { View } from "./View";
|
|
-import { css } from "@linaria/core";
|
|
|
|
-import { Input } from "ant-design-vue";
|
|
|
|
|
|
|
|
export const Text = defineComponent({
|
|
export const Text = defineComponent({
|
|
props: {
|
|
props: {
|
|
@@ -12,36 +11,47 @@ export const Text = defineComponent({
|
|
emits: ["update:value"],
|
|
emits: ["update:value"],
|
|
setup(props, { emit }) {
|
|
setup(props, { emit }) {
|
|
const { store } = useEditor();
|
|
const { store } = useEditor();
|
|
|
|
+ const textRef = ref<HTMLTextAreaElement>();
|
|
|
|
+
|
|
|
|
+ function textareaResize() {
|
|
|
|
+ const textEl = textRef.value;
|
|
|
|
+ if (textEl) {
|
|
|
|
+ textEl.style.height = "0";
|
|
|
|
+ textEl.style.height = textEl.scrollHeight + "px";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
return () => (
|
|
return () => (
|
|
- <View>
|
|
|
|
- {/* <Input.TextArea
|
|
|
|
- class={textStyle}
|
|
|
|
- // onInput={(e) => {
|
|
|
|
- // emit("update:value", (e.target as HTMLElement).innerText);
|
|
|
|
- // }}
|
|
|
|
- value={props.value}
|
|
|
|
- onChange={(e) => {
|
|
|
|
- emit("update:value", e.target.value)
|
|
|
|
- }}
|
|
|
|
- /> */}
|
|
|
|
- <pre
|
|
|
|
- class={textStyle}
|
|
|
|
- contenteditable={store.editMode === "edit"}
|
|
|
|
- onInput={(e: any) => console.log(e.target.innerText)}
|
|
|
|
- onBlur={(e: any) => {
|
|
|
|
- console.log(e.target.innerText);
|
|
|
|
- emit("update:value", (e.target as HTMLElement).innerText);
|
|
|
|
- }}
|
|
|
|
- >
|
|
|
|
- {props.value}
|
|
|
|
- </pre>
|
|
|
|
|
|
+ <View class={textStyle}>
|
|
|
|
+ {store.editMode === "edit" ? (
|
|
|
|
+ <textarea
|
|
|
|
+ ref={textRef}
|
|
|
|
+ value={props.value}
|
|
|
|
+ rows={1}
|
|
|
|
+ onInput={(e) => {
|
|
|
|
+ emit("update:value", (e.target as HTMLInputElement).value);
|
|
|
|
+ textareaResize();
|
|
|
|
+ }}
|
|
|
|
+ />
|
|
|
|
+ ) : (
|
|
|
|
+ <div class="whitespace-pre">{props.value}</div>
|
|
|
|
+ )}
|
|
</View>
|
|
</View>
|
|
);
|
|
);
|
|
},
|
|
},
|
|
});
|
|
});
|
|
|
|
|
|
const textStyle = css`
|
|
const textStyle = css`
|
|
- &[contenteditable] {
|
|
|
|
|
|
+ text-align: left;
|
|
|
|
+ textarea {
|
|
|
|
+ resize: none;
|
|
|
|
+ }
|
|
|
|
+ textarea,
|
|
|
|
+ div {
|
|
|
|
+ display: block;
|
|
|
|
+ width: 100%;
|
|
|
|
+ height: 100%;
|
|
|
|
+ padding: 4px;
|
|
outline: none;
|
|
outline: none;
|
|
border: none;
|
|
border: none;
|
|
}
|
|
}
|