@podlite/editor-react 0.0.32 → 0.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Upcoming
4
4
 
5
+ ## 0.0.33
6
+
7
+ - fix build process
8
+
5
9
  ## 0.0.32
6
10
 
7
11
  - add `Wrapper` component to decorate editor
package/esm/Editor.css ADDED
@@ -0,0 +1,55 @@
1
+ [data-color-mode*='dark'] .podlite-editor {
2
+ --color-border-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1), 0 0 0 rgba(255, 255, 255, 0), 0 1px 1px rgba(255, 255, 255, 0.2);
3
+ }
4
+ [data-color-mode*='light'] .podlite-editor {
5
+ --color-border-shadow: 0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2);
6
+ }
7
+ .podlite-editor {
8
+ color: var(--color-fg-default);
9
+ box-shadow: var(--color-border-shadow);
10
+ text-align: left;
11
+ border-radius: 3px;
12
+ position: relative;
13
+ display: flex;
14
+ flex-direction: column;
15
+ background-color: var(--color-canvas-subtle);
16
+ }
17
+ .podlite-editor-content {
18
+ position: relative;
19
+ flex: 1;
20
+ overflow: auto;
21
+ }
22
+ .podlite-editor-fullscreen .podlite-editor {
23
+ border-radius: 0;
24
+ }
25
+ .podlite-editor-fullscreen {
26
+ z-index: 999;
27
+ position: fixed;
28
+ top: 0;
29
+ bottom: 0;
30
+ left: 0;
31
+ right: 0;
32
+ }
33
+ .podlite-editor-fullscreen .podlite-editor-toolbar {
34
+ border-radius: 0;
35
+ }
36
+ .podlite-editor-preview {
37
+ padding: 20px;
38
+ width: 0%;
39
+ overflow: hidden;
40
+ border-left: 0;
41
+ position: absolute;
42
+ right: 0;
43
+ top: 0;
44
+ bottom: 0;
45
+ box-sizing: border-box;
46
+ background-color: var(--color-canvas-default);
47
+ }
48
+ .podlite-editor h1 a,
49
+ .podlite-editor h2 a,
50
+ .podlite-editor h3 a,
51
+ .podlite-editor h4 a,
52
+ .podlite-editor h5 a,
53
+ .podlite-editor h6 a {
54
+ display: none;
55
+ }
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import { ViewUpdate, ReactCodeMirrorProps, ReactCodeMirrorRef } from '@uiw/react-codemirror';
3
+ export interface ConverterResult {
4
+ errors?: any;
5
+ result: JSX.Element | string;
6
+ }
7
+ export interface IPodliteEditor extends ReactCodeMirrorProps {
8
+ value?: string;
9
+ /** Preview expanded width @default `50%` */
10
+ previewWidth?: string;
11
+ /** Whether to enable preview function @default `true` */
12
+ enablePreview?: boolean;
13
+ /** Whether to enable scrolling */
14
+ enableScroll?: boolean;
15
+ /** Edit mode and preview mode switching event */
16
+ onPreviewMode?: (isHide: boolean) => void;
17
+ /** Setfull screen */
18
+ isFullscreen?: boolean;
19
+ onChange?: (value: string, viewUpdate: ViewUpdate) => void;
20
+ makePreviewComponent?: (source: string) => ConverterResult;
21
+ }
22
+ export interface PodliteEditorRef {
23
+ editor: React.RefObject<ReactCodeMirrorRef>;
24
+ preview: React.RefObject<HTMLDivElement> | null;
25
+ }
26
+ declare const PodliteEditor: PodliteEditorComponent;
27
+ declare type PodliteEditorComponent = React.FC<React.PropsWithRef<IPodliteEditor>>;
28
+ export default PodliteEditor;
package/esm/Editor.js ADDED
@@ -0,0 +1,401 @@
1
+ import React, { useState, useRef, useImperativeHandle, useEffect, useCallback } from 'react';
2
+ import CodeMirror from '@uiw/react-codemirror';
3
+ import Podlite from '@podlite/to-jsx';
4
+ import { podlite as podlite_core } from 'podlite';
5
+ import * as events from '@uiw/codemirror-extensions-events';
6
+ import { podliteLang } from './podlite';
7
+ import { defaultTheme } from './theme';
8
+ import { EditorView, keymap } from '@codemirror/view';
9
+ import { defaultKeymap } from '@codemirror/commands';
10
+ import { isElement } from 'react-is';
11
+ import { autocompletion, snippet } from '@codemirror/autocomplete';
12
+ import dictionary from './dict';
13
+ function useDebouncedEffect(fn, deps, time) {
14
+ const dependencies = [...deps, time];
15
+ useEffect(() => {
16
+ const timeout = setTimeout(fn, time);
17
+ return () => {
18
+ clearTimeout(timeout);
19
+ };
20
+ }, dependencies);
21
+ }
22
+ const PodliteEditor = React.forwardRef(PodliteEditorInternal);
23
+ export default PodliteEditor;
24
+ function PodliteEditorInternal(props, ref) {
25
+ const isBrowser = typeof window !== 'undefined';
26
+ if (!isBrowser)
27
+ return null;
28
+ const { onChange, enableScroll = true, enablePreview = true, extensions = [], previewWidth = '50%', onPreviewMode, isFullscreen, makePreviewComponent, ...codemirrorProps } = props;
29
+ const [value, setValue] = useState(props.value || '');
30
+ const [text1, setText] = useState(props.value || '');
31
+ const codeMirror = useRef(null);
32
+ const container = useRef(null);
33
+ const containerEditor = useRef(null);
34
+ const preview = useRef(null);
35
+ const active = useRef('editor');
36
+ const topLine = useRef(1);
37
+ const $viewHeight = useRef(0);
38
+ useImperativeHandle(ref, () => ({
39
+ editor: codeMirror,
40
+ preview: preview,
41
+ }), [codeMirror]);
42
+ const height = isFullscreen
43
+ ? '100%'
44
+ : typeof codemirrorProps.height === 'number'
45
+ ? `${codemirrorProps.height}px`
46
+ : codemirrorProps.height;
47
+ const preValue = props.value;
48
+ useEffect(() => setValue(preValue ?? ''), [preValue]);
49
+ useEffect(() => setText(preValue ?? ''), [preValue]);
50
+ const fullRef = useRef(isFullscreen);
51
+ useEffect(() => {
52
+ fullRef.current = isFullscreen;
53
+ }, [isFullscreen]);
54
+ const onAnyUpdateEditorSize = () => {
55
+ const clientHeight = containerEditor?.current?.parentElement?.clientHeight;
56
+ if (clientHeight && codeMirror?.current?.view?.dom) {
57
+ if (fullRef.current) {
58
+ codeMirror.current.view.dom.style.height = `${clientHeight}px`;
59
+ $viewHeight.current = clientHeight;
60
+ }
61
+ else {
62
+ codeMirror.current.view.dom.removeAttribute('style');
63
+ }
64
+ }
65
+ };
66
+ const getScrollMap = (el) => {
67
+ const res = [...preview.current.querySelectorAll('.line-src')].map(n => {
68
+ const line = parseInt(n.getAttribute('data-line'), 10);
69
+ const offsetTop = n.offsetTop;
70
+ return { line, offsetTop };
71
+ });
72
+ if (res.length === 0) {
73
+ console.warn(`[podlite-editor] can't get line for offset. Forget add .line-src ?`);
74
+ }
75
+ return res;
76
+ };
77
+ const getNearestMapForLine = (scrollMap, line) => {
78
+ const res = scrollMap.findIndex(i => i.line > line);
79
+ if (res === -1) {
80
+ return scrollMap[scrollMap.length - 1];
81
+ }
82
+ return scrollMap[res];
83
+ };
84
+ const getNearestMapForLineReverse = (scrollMap, line) => {
85
+ const res = scrollMap.reverse().findIndex(i => i.line < line);
86
+ if (res === -1) {
87
+ return scrollMap[0];
88
+ }
89
+ return scrollMap[res];
90
+ };
91
+ const getNearestMapForOffset = (scrollMap, offset) => {
92
+ const res = scrollMap.findIndex(i => i.offsetTop > offset);
93
+ if (res === -1) {
94
+ return scrollMap[scrollMap.length - 1];
95
+ }
96
+ return scrollMap[res];
97
+ };
98
+ // we tray to get the line number of the preview
99
+ useEffect(() => {
100
+ if (!preview.current)
101
+ return;
102
+ const listener = e => {
103
+ if (!enableScroll)
104
+ return;
105
+ if (active.current === 'editor')
106
+ return;
107
+ let element = e.target;
108
+ const line = getNearestMapForOffset(getScrollMap(preview.current), element.scrollTop).line;
109
+ // get pos from
110
+ const pos = codeMirror.current.view.state.doc.line(line).from + 0;
111
+ // Set the cursor selection to the position
112
+ codeMirror.current.view.dispatch({
113
+ selection: { anchor: pos },
114
+ scrollIntoView: true,
115
+ });
116
+ const linePos = codeMirror.current.view.coordsAtPos(codeMirror.current.view.state.doc.line(line).from);
117
+ // Calculate to try to center the line in the editor
118
+ if (linePos) {
119
+ const editorRect = codeMirror.current.view.dom.getBoundingClientRect();
120
+ const offset = linePos.top - editorRect.top - editorRect.height / 4; // 2 for middle of screen
121
+ codeMirror.current.view.scrollDOM.scrollTop += offset;
122
+ }
123
+ return true;
124
+ };
125
+ preview?.current?.addEventListener('scroll', listener);
126
+ return () => {
127
+ preview?.current?.removeEventListener('scroll', listener);
128
+ };
129
+ }, [preview, enableScroll, enablePreview, value]);
130
+ const previewScrollHandle = useCallback((event) => {
131
+ if (!enableScroll)
132
+ return;
133
+ onAnyUpdateEditorSize();
134
+ if (codeMirror?.current?.view) {
135
+ const rect = codeMirror.current.view.dom.getBoundingClientRect();
136
+ const topVisibleLineBlock = codeMirror.current.view.lineBlockAtHeight(rect.top - codeMirror.current.view.documentTop);
137
+ const tLine = codeMirror.current.view.state.doc.lineAt(topVisibleLineBlock.from).number;
138
+ // set current editor visible top line
139
+ topLine.current = tLine;
140
+ }
141
+ if (active.current === 'editor' && preview.current) {
142
+ if (preview) {
143
+ let scrollToElement = preview.current.querySelector(`#line-${topLine.current}`);
144
+ if (!scrollToElement) {
145
+ const map = getNearestMapForLineReverse(getScrollMap(preview.current), topLine.current);
146
+ scrollToElement = preview.current.querySelector(`#line-${map?.line || 1}`);
147
+ }
148
+ if (scrollToElement) {
149
+ preview.current.scrollTo({
150
+ top: scrollToElement.offsetTop,
151
+ left: 0,
152
+ behavior: 'auto',
153
+ // behavior: 'smooth',
154
+ });
155
+ }
156
+ else {
157
+ console.log('scrollToElement not found' + `#line-${topLine.current}`);
158
+ }
159
+ }
160
+ }
161
+ }, [enableScroll]);
162
+ const mouseoverHandle = () => {
163
+ active.current = 'preview';
164
+ onAnyUpdateEditorSize();
165
+ };
166
+ const mouseleaveHandle = () => {
167
+ active.current = 'editor';
168
+ onAnyUpdateEditorSize();
169
+ };
170
+ useEffect(() => {
171
+ const $preview = preview.current;
172
+ if ($preview && enableScroll) {
173
+ $preview.addEventListener('mouseover', mouseoverHandle, false);
174
+ $preview.addEventListener('mouseleave', mouseleaveHandle, false);
175
+ $preview.addEventListener('scroll', previewScrollHandle, false);
176
+ }
177
+ return () => {
178
+ if ($preview && enableScroll) {
179
+ $preview.removeEventListener('mouseover', mouseoverHandle);
180
+ $preview.removeEventListener('mouseleave', mouseoverHandle);
181
+ $preview.removeEventListener('scroll', previewScrollHandle, false);
182
+ }
183
+ };
184
+ }, [preview, enableScroll, previewScrollHandle, enablePreview]);
185
+ const scrollExtensions = events.scroll({
186
+ scroll: previewScrollHandle,
187
+ });
188
+ // Create custom keymap that prevents the toggle comment shortcut
189
+ const preventToggleComment = keymap.of([
190
+ {
191
+ key: 'Ctrl-/',
192
+ run: () => true,
193
+ preventDefault: true,
194
+ },
195
+ {
196
+ key: 'Cmd-/',
197
+ run: () => true,
198
+ preventDefault: false,
199
+ },
200
+ ...defaultKeymap,
201
+ ]);
202
+ let extensionsData = [podliteLang(), EditorView.lineWrapping, preventToggleComment];
203
+ if (enableScroll) {
204
+ extensionsData.push(scrollExtensions);
205
+ }
206
+ const makeApply = (text) => (editor, completion, from, to) => {
207
+ return snippet(text)(editor, completion, from - 1, to);
208
+ };
209
+ const langDict = dictionary.filter(({ lang = 'pod6' }) => lang === 'pod6');
210
+ const completions = langDict.map(({ displayText, text }) => {
211
+ function cleanBraces(text) {
212
+ return text.replace(/\#\{[^\}]*\}/g, '');
213
+ }
214
+ return {
215
+ label: displayText,
216
+ type: 'keyword',
217
+ apply: makeApply(text),
218
+ info: cleanBraces(text),
219
+ };
220
+ });
221
+ function myCompletions(context) {
222
+ let before = context.matchBefore(/^\s*=\w*/);
223
+ console.log({ before });
224
+ // If completion wasn't explicitly started and there
225
+ // is no word before the cursor, don't open completions.
226
+ if (!context.explicit && !before)
227
+ return null;
228
+ return {
229
+ from: before ? before.from + before.text.indexOf('=') + 1 : context.pos,
230
+ options: completions,
231
+ validFor: /^=\w*$/,
232
+ };
233
+ }
234
+ extensionsData.push(autocompletion({ override: [myCompletions] }));
235
+ useDebouncedEffect(() => {
236
+ setValue(text1);
237
+ }, [text1], 50);
238
+ useDebouncedEffect(() => {
239
+ if (preview.current) {
240
+ const map = getNearestMapForLine(getScrollMap(preview.current), topLine.current);
241
+ const scrollToElement = preview.current.querySelector(`#line-${map?.line || 1}`);
242
+ if (scrollToElement) {
243
+ preview.current.scrollTo({
244
+ top: scrollToElement.offsetTop,
245
+ left: 0,
246
+ behavior: 'auto',
247
+ });
248
+ }
249
+ else {
250
+ console.log('scrollToElement not found' + `#line-${map?.line || 1}`);
251
+ }
252
+ }
253
+ }, [enablePreview, previewWidth], 1);
254
+ const handleChange = (value, viewUpdate) => {
255
+ setText(value);
256
+ onChange && onChange(value, viewUpdate);
257
+ };
258
+ useEffect(() => {
259
+ if (preview.current) {
260
+ const $preview = preview.current;
261
+ if (preview) {
262
+ $preview.style.borderBottomRightRadius = '3px';
263
+ }
264
+ //@ts-ignore
265
+ if ($preview && (previewWidth !== '0' || previewWidth !== '0%')) {
266
+ $preview.style.width = previewWidth;
267
+ $preview.style.overflow = 'auto';
268
+ if (previewWidth !== '100%') {
269
+ $preview.style.borderLeft = '1px solid var(--color-border-muted)';
270
+ }
271
+ $preview.style.padding = '20px';
272
+ if (containerEditor.current) {
273
+ if (previewWidth == '100%') {
274
+ containerEditor.current.style.width = '100%';
275
+ containerEditor.current.style.visibility = 'hidden';
276
+ containerEditor.current.style.opacity = '0';
277
+ }
278
+ else {
279
+ containerEditor.current.style.width = previewWidth !== '100%' ? `calc(100% - ${previewWidth})` : '0%';
280
+ containerEditor.current.style.visibility = 'visible';
281
+ containerEditor.current.style.opacity = '1';
282
+ }
283
+ }
284
+ }
285
+ else if ($preview) {
286
+ $preview.style.width = '0%';
287
+ $preview.style.overflow = 'hidden';
288
+ $preview.style.borderLeft = '0px';
289
+ $preview.style.padding = '0';
290
+ if (containerEditor.current) {
291
+ containerEditor.current.style.width = '100%';
292
+ containerEditor.current.style.visibility = 'visible';
293
+ containerEditor.current.style.opacity = '1';
294
+ }
295
+ }
296
+ }
297
+ else {
298
+ if (containerEditor.current) {
299
+ containerEditor.current.style.width = '100%';
300
+ containerEditor.current.style.visibility = 'visible';
301
+ containerEditor.current.style.opacity = '1';
302
+ if (codeMirror?.current?.view) {
303
+ console.log('set focus');
304
+ codeMirror.current.view.focus();
305
+ }
306
+ }
307
+ }
308
+ }, [containerEditor, preview, previewWidth]);
309
+ const full_preview = previewWidth === '100%';
310
+ const $height = useRef(0);
311
+ const entriesHandle = (entries) => {
312
+ for (const entry of entries) {
313
+ if (codeMirror?.current?.view?.dom) {
314
+ if (fullRef.current) {
315
+ codeMirror.current.view.dom.style.height = `${entry.target.clientHeight}px`;
316
+ $viewHeight.current = entry.target.clientHeight;
317
+ }
318
+ else {
319
+ codeMirror.current.view.dom.removeAttribute('style');
320
+ }
321
+ }
322
+ }
323
+ robserver?.current?.disconnect();
324
+ if (robserver !== null) {
325
+ robserver.current = undefined;
326
+ }
327
+ };
328
+ const robserver = useRef(new ResizeObserver(entriesHandle));
329
+ useEffect(() => {
330
+ if (!robserver.current) {
331
+ robserver.current = new ResizeObserver(entriesHandle);
332
+ }
333
+ if (containerEditor?.current?.parentElement && robserver.current) {
334
+ const parentElement = containerEditor.current.parentElement;
335
+ robserver.current.observe(parentElement);
336
+ }
337
+ return () => {
338
+ if (robserver.current) {
339
+ robserver.current.disconnect();
340
+ robserver.current = undefined;
341
+ }
342
+ };
343
+ }, [containerEditor, entriesHandle, codeMirror, isFullscreen, robserver]);
344
+ useEffect(() => {
345
+ if (!document)
346
+ return;
347
+ const containerEl = container.current;
348
+ document.body.style.overflow = isFullscreen ? 'hidden' : 'initial';
349
+ isFullscreen
350
+ ? document.body.classList.add(`podlite-editor-fullscreen`)
351
+ : document.body.classList.remove(`podlite-editor-fullscreen`);
352
+ if (containerEl && isFullscreen) {
353
+ containerEl.style.zIndex = '999';
354
+ containerEl.style.position = 'fixed';
355
+ containerEl.style.top = '0px';
356
+ containerEl.style.bottom = '0px';
357
+ containerEl.style.left = '0px';
358
+ containerEl.style.right = '0px';
359
+ }
360
+ }, [isFullscreen, container]);
361
+ const clsPreview = 'podlite-editor-preview Editorright layoutPreview';
362
+ const cls = ['podlite-editor', 'podlite-var'].filter(Boolean).join(' ');
363
+ const getTree = (value) => {
364
+ let podlite = podlite_core({ importPlugins: true });
365
+ let tree = podlite.parse(value);
366
+ const asAst = podlite.toAstResult(tree);
367
+ return asAst;
368
+ };
369
+ // wrap all elements and add line link info
370
+ const wrapFunction = (node, children) => {
371
+ if (node?.location?.start?.line) {
372
+ const line = node.location.start.line;
373
+ return (React.createElement("div", { key: line, className: "line-src", "data-line": line, id: `line-${line}` }, children));
374
+ }
375
+ else {
376
+ return children;
377
+ }
378
+ };
379
+ const wrapFunctionNoLines = (node, children) => children;
380
+ const defaultPreview = (source) => {
381
+ const result = React.createElement(Podlite, { wrapElement: wrapFunction, tree: getTree(source) });
382
+ return { result };
383
+ };
384
+ const previewContent = () => {
385
+ if (!enablePreview)
386
+ return null;
387
+ const preview = makePreviewComponent ? makePreviewComponent(value) : defaultPreview(value);
388
+ if (preview) {
389
+ return isElement(preview.result) ? (React.createElement("div", { className: "content" }, preview.result)) : (React.createElement("div", { dangerouslySetInnerHTML: { __html: preview.result }, className: "content" }));
390
+ }
391
+ return null;
392
+ };
393
+ const conentView = (React.createElement("div", { className: `podlite-editor-content`, style: { height: codemirrorProps?.height } },
394
+ React.createElement("div", { className: `podlite-editor-content-editor`, ref: containerEditor },
395
+ React.createElement(CodeMirror, { theme: defaultTheme, ...{ ...codemirrorProps, ...{ basicSetup: { defaultKeymap: false } } }, className: `podlite-editor-inner`, extensions: extensionsData, height: height, ref: codeMirror, onChange: handleChange })),
396
+ enablePreview && (React.createElement("div", { className: clsPreview, style: { overflow: full_preview ? 'visible' : 'hidden' }, ref: preview }, previewContent()))));
397
+ return (React.createElement("div", null,
398
+ React.createElement("div", { className: cls, ref: container }, conentView),
399
+ React.createElement("div", { style: { minWidth: '80rem', display: 'flex' } }, " ")));
400
+ }
401
+ //# sourceMappingURL=Editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Editor.js","sourceRoot":"","sources":["../src/Editor.tsx"],"names":[],"mappings":"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"}