@limetech/lime-elements 38.33.0 → 38.33.1
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 +8 -0
- package/dist/cjs/limel-code-editor.cjs.entry.js +1 -1
- package/dist/cjs/limel-code-editor.cjs.entry.js.map +1 -1
- package/dist/collection/components/code-editor/code-editor.js +1 -1
- package/dist/collection/components/code-editor/code-editor.js.map +1 -1
- package/dist/esm/limel-code-editor.entry.js +1 -1
- package/dist/esm/limel-code-editor.entry.js.map +1 -1
- package/dist/lime-elements/lime-elements.esm.js +1 -1
- package/dist/lime-elements/{p-5a483374.entry.js → p-2bf4fc20.entry.js} +2 -2
- package/dist/lime-elements/{p-5a483374.entry.js.map → p-2bf4fc20.entry.js.map} +1 -1
- package/package.json +1 -1
|
@@ -88,7 +88,7 @@ export class CodeEditor {
|
|
|
88
88
|
// the space count
|
|
89
89
|
editor.setOption('extraKeys', {
|
|
90
90
|
Tab: (codeMirror) => {
|
|
91
|
-
const spaces =
|
|
91
|
+
const spaces = ' '.repeat(codeMirror.getOption('indentUnit'));
|
|
92
92
|
codeMirror.replaceSelection(spaces);
|
|
93
93
|
},
|
|
94
94
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-editor.js","sourceRoot":"","sources":["../../../src/components/code-editor/code-editor.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n h,\n Prop,\n Element,\n Event,\n EventEmitter,\n State,\n Watch,\n} from '@stencil/core';\nimport { ColorScheme, Language } from './code-editor.types';\nimport CodeMirror from 'codemirror';\nimport 'codemirror/mode/css/css';\nimport 'codemirror/mode/htmlmixed/htmlmixed';\nimport 'codemirror/mode/javascript/javascript';\nimport 'codemirror/mode/jinja2/jinja2';\nimport 'codemirror/addon/selection/active-line';\nimport 'codemirror/addon/edit/matchbrackets';\nimport 'codemirror/addon/edit/matchtags';\nimport 'codemirror/addon/lint/lint';\nimport 'codemirror/addon/lint/json-lint';\nimport 'codemirror/addon/fold/foldgutter';\nimport 'codemirror/addon/fold/brace-fold';\nimport 'codemirror/addon/fold/xml-fold';\nimport jslint from 'jsonlint-mod';\n\n/**\n * @exampleComponent limel-example-code-editor\n * @exampleComponent limel-example-code-editor-readonly-with-line-numbers\n * @exampleComponent limel-example-code-editor-fold-lint-wrap\n */\n@Component({\n tag: 'limel-code-editor',\n shadow: true,\n styleUrl: 'code-editor.scss',\n})\nexport class CodeEditor {\n /**\n * The code to be rendered\n */\n @Prop()\n public value: string = '';\n\n /**\n * The language of the code\n */\n @Prop()\n public language: Language;\n\n /**\n * Disables editing of the editor content\n */\n @Prop()\n public readonly: boolean = false;\n\n /**\n * Displays line numbers in the editor\n */\n @Prop()\n public lineNumbers: boolean = false;\n\n /**\n * Wraps long lines instead of showing horizontal scrollbar\n */\n @Prop()\n public lineWrapping: boolean = false;\n\n /**\n * Allows the user to fold code\n */\n @Prop()\n public fold: boolean = false;\n\n /**\n * Enables linting of JSON content\n */\n @Prop()\n public lint: boolean = false;\n\n /**\n * Select color scheme for the editor\n */\n @Prop()\n public colorScheme: ColorScheme = 'auto';\n\n /**\n * Emitted when the code has changed. Will only be emitted when the code\n * area has lost focus\n */\n @Event()\n public change: EventEmitter<string>;\n\n @Element()\n private host: HTMLLimelCodeEditorElement;\n\n /**\n * This is only used to trigger a redraw if the\n * `(prefers-color-scheme: dark)` media query is changed\n */\n @State()\n protected random: number;\n\n private editor: CodeMirror.Editor;\n private observer: ResizeObserver;\n\n public connectedCallback() {\n this.observer = new ResizeObserver(this.handleResize) as any;\n this.observer.observe(this.host);\n\n this.darkMode.addEventListener('change', this.handleChangeDarkMode);\n }\n\n public disconnectedCallback() {\n this.observer.unobserve(this.host);\n this.editor?.off('change', this.handleChange);\n this.editor = null;\n\n this.darkMode.removeEventListener('change', this.handleChangeDarkMode);\n\n const editorElement = this.host.shadowRoot.querySelector('.editor');\n // eslint-disable-next-line no-unsafe-optional-chaining\n for (const child of editorElement?.childNodes) {\n child.remove();\n }\n }\n\n public componentDidRender() {\n if (this.editor) {\n return;\n }\n\n this.editor = this.createEditor();\n }\n\n @Watch('value')\n protected watchValue(newValue: string) {\n if (!this.editor) {\n return;\n }\n\n const currentValue = this.editor.getValue();\n if (newValue === currentValue) {\n // Circuit breaker for when the change comes from the editor itself\n // The caret position will be reset without this\n return;\n }\n\n this.editor.getDoc().setValue(newValue || '');\n }\n\n private handleChangeDarkMode = () => {\n if (this.colorScheme !== 'auto') {\n return;\n }\n\n this.forceRedraw();\n };\n\n private handleChange = () => {\n this.change.emit(this.editor.getValue());\n };\n\n private handleResize = () => {\n if (!this.editor) {\n return;\n }\n\n this.editor.refresh();\n };\n\n private createEditor() {\n const options = this.getOptions();\n\n const editor = CodeMirror(\n this.host.shadowRoot.querySelector('.editor'),\n options\n );\n\n editor.on('change', this.handleChange);\n\n // Replace tab with spaces and use the actual indent setting for\n // the space count\n editor.setOption('extraKeys', {\n Tab: (codeMirror) => {\n const spaces = [codeMirror.getOption('indentUnit') + 1].join(\n ' '\n );\n codeMirror.replaceSelection(spaces);\n },\n });\n\n return editor;\n }\n\n private getOptions(): CodeMirror.EditorConfiguration {\n let mode: string | CodeMirror.ModeSpec<any> = this.language;\n const TAB_SIZE = 4;\n let theme = 'lime light';\n const gutters = [];\n\n if (this.isDarkMode()) {\n theme = 'lime dark';\n }\n\n if (this.language === 'json') {\n mode = {\n name: 'application/json',\n json: true,\n };\n if (this.lint) {\n gutters.push('CodeMirror-lint-markers');\n if (!('jsonlint' in window)) {\n window['jsonlint'] = jslint;\n }\n }\n } else if (this.language === 'typescript') {\n mode = {\n name: 'application/typescript',\n typescript: true,\n };\n } else if (this.language === 'html') {\n mode = 'htmlmixed';\n }\n\n if (this.fold) {\n gutters.push('CodeMirror-foldgutter');\n }\n\n return {\n mode: mode,\n value: this.value || '',\n theme: theme,\n readOnly: this.readonly,\n tabSize: TAB_SIZE,\n indentUnit: TAB_SIZE,\n lineNumbers: this.lineNumbers,\n lineWrapping: this.lineWrapping,\n styleActiveLine: true,\n matchBrackets: true,\n matchTags: { bothTags: true },\n lint: this.lint,\n foldGutter: this.fold,\n gutters: gutters,\n };\n }\n\n private isDarkMode(): boolean {\n if (this.colorScheme !== 'auto') {\n return this.colorScheme === 'dark';\n }\n\n return this.darkMode.matches;\n }\n\n public render() {\n const classList = {\n editor: true,\n readonly: this.readonly,\n 'is-dark-mode': this.isDarkMode(),\n 'is-light-mode': !this.isDarkMode(),\n };\n\n return <div class={classList} />;\n }\n\n private forceRedraw() {\n // eslint-disable-next-line sonarjs/pseudo-random\n this.random = Math.random();\n }\n\n private get darkMode(): MediaQueryList {\n return matchMedia('(prefers-color-scheme: dark)');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"code-editor.js","sourceRoot":"","sources":["../../../src/components/code-editor/code-editor.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n h,\n Prop,\n Element,\n Event,\n EventEmitter,\n State,\n Watch,\n} from '@stencil/core';\nimport { ColorScheme, Language } from './code-editor.types';\nimport CodeMirror from 'codemirror';\nimport 'codemirror/mode/css/css';\nimport 'codemirror/mode/htmlmixed/htmlmixed';\nimport 'codemirror/mode/javascript/javascript';\nimport 'codemirror/mode/jinja2/jinja2';\nimport 'codemirror/addon/selection/active-line';\nimport 'codemirror/addon/edit/matchbrackets';\nimport 'codemirror/addon/edit/matchtags';\nimport 'codemirror/addon/lint/lint';\nimport 'codemirror/addon/lint/json-lint';\nimport 'codemirror/addon/fold/foldgutter';\nimport 'codemirror/addon/fold/brace-fold';\nimport 'codemirror/addon/fold/xml-fold';\nimport jslint from 'jsonlint-mod';\n\n/**\n * @exampleComponent limel-example-code-editor\n * @exampleComponent limel-example-code-editor-readonly-with-line-numbers\n * @exampleComponent limel-example-code-editor-fold-lint-wrap\n */\n@Component({\n tag: 'limel-code-editor',\n shadow: true,\n styleUrl: 'code-editor.scss',\n})\nexport class CodeEditor {\n /**\n * The code to be rendered\n */\n @Prop()\n public value: string = '';\n\n /**\n * The language of the code\n */\n @Prop()\n public language: Language;\n\n /**\n * Disables editing of the editor content\n */\n @Prop()\n public readonly: boolean = false;\n\n /**\n * Displays line numbers in the editor\n */\n @Prop()\n public lineNumbers: boolean = false;\n\n /**\n * Wraps long lines instead of showing horizontal scrollbar\n */\n @Prop()\n public lineWrapping: boolean = false;\n\n /**\n * Allows the user to fold code\n */\n @Prop()\n public fold: boolean = false;\n\n /**\n * Enables linting of JSON content\n */\n @Prop()\n public lint: boolean = false;\n\n /**\n * Select color scheme for the editor\n */\n @Prop()\n public colorScheme: ColorScheme = 'auto';\n\n /**\n * Emitted when the code has changed. Will only be emitted when the code\n * area has lost focus\n */\n @Event()\n public change: EventEmitter<string>;\n\n @Element()\n private host: HTMLLimelCodeEditorElement;\n\n /**\n * This is only used to trigger a redraw if the\n * `(prefers-color-scheme: dark)` media query is changed\n */\n @State()\n protected random: number;\n\n private editor: CodeMirror.Editor;\n private observer: ResizeObserver;\n\n public connectedCallback() {\n this.observer = new ResizeObserver(this.handleResize) as any;\n this.observer.observe(this.host);\n\n this.darkMode.addEventListener('change', this.handleChangeDarkMode);\n }\n\n public disconnectedCallback() {\n this.observer.unobserve(this.host);\n this.editor?.off('change', this.handleChange);\n this.editor = null;\n\n this.darkMode.removeEventListener('change', this.handleChangeDarkMode);\n\n const editorElement = this.host.shadowRoot.querySelector('.editor');\n // eslint-disable-next-line no-unsafe-optional-chaining\n for (const child of editorElement?.childNodes) {\n child.remove();\n }\n }\n\n public componentDidRender() {\n if (this.editor) {\n return;\n }\n\n this.editor = this.createEditor();\n }\n\n @Watch('value')\n protected watchValue(newValue: string) {\n if (!this.editor) {\n return;\n }\n\n const currentValue = this.editor.getValue();\n if (newValue === currentValue) {\n // Circuit breaker for when the change comes from the editor itself\n // The caret position will be reset without this\n return;\n }\n\n this.editor.getDoc().setValue(newValue || '');\n }\n\n private handleChangeDarkMode = () => {\n if (this.colorScheme !== 'auto') {\n return;\n }\n\n this.forceRedraw();\n };\n\n private handleChange = () => {\n this.change.emit(this.editor.getValue());\n };\n\n private handleResize = () => {\n if (!this.editor) {\n return;\n }\n\n this.editor.refresh();\n };\n\n private createEditor() {\n const options = this.getOptions();\n\n const editor = CodeMirror(\n this.host.shadowRoot.querySelector('.editor'),\n options\n );\n\n editor.on('change', this.handleChange);\n\n // Replace tab with spaces and use the actual indent setting for\n // the space count\n editor.setOption('extraKeys', {\n Tab: (codeMirror) => {\n const spaces = ' '.repeat(codeMirror.getOption('indentUnit'));\n codeMirror.replaceSelection(spaces);\n },\n });\n\n return editor;\n }\n\n private getOptions(): CodeMirror.EditorConfiguration {\n let mode: string | CodeMirror.ModeSpec<any> = this.language;\n const TAB_SIZE = 4;\n let theme = 'lime light';\n const gutters = [];\n\n if (this.isDarkMode()) {\n theme = 'lime dark';\n }\n\n if (this.language === 'json') {\n mode = {\n name: 'application/json',\n json: true,\n };\n if (this.lint) {\n gutters.push('CodeMirror-lint-markers');\n if (!('jsonlint' in window)) {\n window['jsonlint'] = jslint;\n }\n }\n } else if (this.language === 'typescript') {\n mode = {\n name: 'application/typescript',\n typescript: true,\n };\n } else if (this.language === 'html') {\n mode = 'htmlmixed';\n }\n\n if (this.fold) {\n gutters.push('CodeMirror-foldgutter');\n }\n\n return {\n mode: mode,\n value: this.value || '',\n theme: theme,\n readOnly: this.readonly,\n tabSize: TAB_SIZE,\n indentUnit: TAB_SIZE,\n lineNumbers: this.lineNumbers,\n lineWrapping: this.lineWrapping,\n styleActiveLine: true,\n matchBrackets: true,\n matchTags: { bothTags: true },\n lint: this.lint,\n foldGutter: this.fold,\n gutters: gutters,\n };\n }\n\n private isDarkMode(): boolean {\n if (this.colorScheme !== 'auto') {\n return this.colorScheme === 'dark';\n }\n\n return this.darkMode.matches;\n }\n\n public render() {\n const classList = {\n editor: true,\n readonly: this.readonly,\n 'is-dark-mode': this.isDarkMode(),\n 'is-light-mode': !this.isDarkMode(),\n };\n\n return <div class={classList} />;\n }\n\n private forceRedraw() {\n // eslint-disable-next-line sonarjs/pseudo-random\n this.random = Math.random();\n }\n\n private get darkMode(): MediaQueryList {\n return matchMedia('(prefers-color-scheme: dark)');\n }\n}\n"]}
|
|
@@ -14540,7 +14540,7 @@ const CodeEditor = class {
|
|
|
14540
14540
|
// the space count
|
|
14541
14541
|
editor.setOption('extraKeys', {
|
|
14542
14542
|
Tab: (codeMirror) => {
|
|
14543
|
-
const spaces =
|
|
14543
|
+
const spaces = ' '.repeat(codeMirror.getOption('indentUnit'));
|
|
14544
14544
|
codeMirror.replaceSelection(spaces);
|
|
14545
14545
|
},
|
|
14546
14546
|
});
|