import * as React from "react";
import { Button } from "../ui/Button";
import type { ElementOperation } from "./ElementOperation";
import { css } from "@emotion/css";
import { neverFunc } from "../../common/util";
export type MultiLineTextSelection = never;
export type MultiLineTextValue = {
readonly text: string;
readonly onChange: ((newText: string) => void) | undefined;
};
const selectionViewMaxLine = 20;
const MultiLineTextSelectionView: ElementOperation<
MultiLineTextSelection,
MultiLineTextValue
>["selectionView"] = React.memo(({ value }) => {
if (value.text.length === 0) {
return (
empty
);
}
const lines = value.text.split("\n");
const isOver = lines.length > selectionViewMaxLine;
return (
{lines.slice(selectionViewMaxLine).map((line, index) => (
{line}
))}
{isOver ? (
...
) : (
<>>
)}
);
});
MultiLineTextSelectionView.displayName = "TextSelectionView";
export const HeadTextSelectionView: ElementOperation<
MultiLineTextSelection,
MultiLineTextValue
>["selectionView"] = React.memo((props) => {
return {props.value.text}
;
});
HeadTextSelectionView.displayName = "HeadTextSelectionView";
const MultiLineTextDetailView: ElementOperation<
MultiLineTextSelection,
MultiLineTextValue
>["detailView"] = ({ value }) => {
const copyText = (): void => {
navigator.clipboard.writeText(value.text);
};
return (
文字列の長さ: {[...value.text].length}
{value.onChange === undefined ? (
) : (
)}
);
};
const MultiLineTextEditorReadonly = (props: {
value: string;
}): React.ReactElement => {
return (