Path: blob/master/src/packages/frontend/editors/slate/elements/code-block/insert-bar.tsx
1698 views
//import { useFileContext } from "@cocalc/frontend/lib/file-context";1// import OpenAIAvatar from "@cocalc/frontend/components/openai-avatar";2import { Icon } from "@cocalc/frontend/components/icon";3import { Button } from "antd";4import { Node, Path, Transforms } from "slate";5import { findElement } from "../../control";6import { toSlate } from "./index";7import { ReactEditor } from "../../slate-react";8import { toDisplayMath } from "../math/index";910function InsertButton({ children, onClick }) {11return (12<Button13style={{ color: "#666" }}14size="small"15onClick={(e) => {16e.stopPropagation(); // keep the editor with the insert bar itself from getting selected17e.preventDefault();18onClick(e);19}}20>21{children}22</Button>23);24}2526export default function InsertBar({ editor, element, info, above }) {27//const { hasLanguageModel } = useFileContext();2829const insert = (node: Node, offset = 0) => {30let path = findElement(editor, element);31if (path && !above) {32path = Path.next(path);33}34Transforms.insertNodes(editor, node, { at: path });35ReactEditor.focus(editor, true, true);36if (path) {37setTimeout(() => {38const sel = {39anchor: { path: path!, offset: 0 },40focus: { path: path!, offset },41};42Transforms.setSelection(editor, sel);43ReactEditor.focus(editor, true, true);44}, 50);45}46};4748return (49<div50className="cocalc-slate-insert-cell"51style={{52height: "28px",53cursor: "pointer",54paddingTop: "8px",55}}56>57<div className="cocalc-slate-insert-cell-controls">58<Button.Group>59<InsertButton60onClick={() => {61insert(toSlate({ token: { content: "", info, type: "fence" } }));62}}63>64<Icon name="code" /> Code65</InsertButton>66<InsertButton67onClick={() => {68insert(69{70type: "paragraph",71children: [{ text: "Text" }],72},73"Text".length,74);75}}76>77<Icon name="pen" /> Text78</InsertButton>79<InsertButton80onClick={() => {81insert(toDisplayMath({ token: { content: "x" } }));82}}83>84<Icon name="superscript" /> Math85</InsertButton>86{/* {hasLanguageModel ? (87<InsertButton88onClick={() => {89console.log("TODO!");90}}91>92<OpenAIAvatar93size={16}94style={{ marginRight: "5px" }}95innerStyle={{ top: "1.5px" }}96/>{" "}97ChatGPT...98</InsertButton>99) : undefined}<InsertButton>100<Icon name="paste" /> Paste101</InsertButton>102*/}103</Button.Group>104</div>105</div>106);107}108109110