From 8530767435beb19732aa05aa438cba44ee6391b8 Mon Sep 17 00:00:00 2001 From: Leonid Romanov Date: Sat, 13 Jul 2024 18:46:44 +0300 Subject: [PATCH] feat(markdown-editor): add simple markdown-editor component --- _templates/component/new/vitepress.ejs.t | 2 +- .../.vitepress/configuration/components.ts | 61 +- .../.vitepress/configuration/widgets.ts | 4 + .../.vitepress/theme/vitepress/index.css | 18 + .../components/checkbox/checkbox.doc.md | 2 +- .../markdown-editor/markdownEditor.doc.md | 39 ++ .../components/switch/switch.doc.md | 59 +- .../markdown-editor/MarkdownEditorBasic.vue | 10 + packages/ui/package.json | 1 + packages/ui/src/components/index.ts | 1 + .../markdown-editor/markdownEditor.css | 6 + .../markdown-editor/markdownEditor.md | 12 + .../markdown-editor/markdownEditor.spec.ts | 33 + .../markdown-editor/markdownEditor.ts | 28 + .../markdown-editor/markdownEditor.vue | 40 ++ .../src/components/markdown-editor/public.ts | 2 + pnpm-lock.yaml | 576 +++++++++++++++++- 17 files changed, 843 insertions(+), 51 deletions(-) create mode 100644 packages/documentation/.vitepress/configuration/widgets.ts create mode 100644 packages/documentation/components/markdown-editor/markdownEditor.doc.md create mode 100644 packages/documentation/demos/markdown-editor/MarkdownEditorBasic.vue create mode 100644 packages/ui/src/components/markdown-editor/markdownEditor.css create mode 100644 packages/ui/src/components/markdown-editor/markdownEditor.md create mode 100644 packages/ui/src/components/markdown-editor/markdownEditor.spec.ts create mode 100644 packages/ui/src/components/markdown-editor/markdownEditor.ts create mode 100644 packages/ui/src/components/markdown-editor/markdownEditor.vue create mode 100644 packages/ui/src/components/markdown-editor/public.ts diff --git a/_templates/component/new/vitepress.ejs.t b/_templates/component/new/vitepress.ejs.t index 4a468f78f..ad1eb5dd0 100644 --- a/_templates/component/new/vitepress.ejs.t +++ b/_templates/component/new/vitepress.ejs.t @@ -4,4 +4,4 @@ inject: true skip_if: <%= name %> after: "export const enComponents =" --- - { text: '<%= h.changeCase.pascal(name) %>', link: '/components/<%= h.changeCase.camel(name) %>/<%= h.changeCase.camel(name) %>.doc' }, + { text: '<%= h.changeCase.pascal(name) %>', link: '/components/<%= h.changeCase.kebab(name) %>/<%= h.changeCase.camel(name) %>.doc.md' }, diff --git a/packages/documentation/.vitepress/configuration/components.ts b/packages/documentation/.vitepress/configuration/components.ts index 894f5c979..42e45f179 100644 --- a/packages/documentation/.vitepress/configuration/components.ts +++ b/packages/documentation/.vitepress/configuration/components.ts @@ -9,89 +9,88 @@ const componentsList = [ { text: 'Autocomplete', link: '/components/autocomplete/autocomplete.doc.md' }, { text: 'Breadcrumbs', link: '/components/breadcrumbs/breadcrumbs.doc.md' }, { text: 'Button', link: '/components/button/button.doc.md', readyForProduction: true }, - { text: 'ButtonGroup', link: '/components/button-group/buttonGroup.doc.md' }, + { text: 'Button Group', link: '/components/button-group/buttonGroup.doc.md' }, { text: 'Card', link: '/components/card/card.doc.md' }, { text: 'Carousel', link: '/components/carousel/carousel.doc.md' }, { text: 'Cascader', link: '/components/cascader/cascader.doc.md' }, { text: 'Checkbox', link: '/components/checkbox/checkbox.doc.md' }, - { text: 'CheckboxButton', link: '/components/checkboxButton/checkboxButton.doc.md' }, - { text: 'CheckboxGroup', link: '/components/checkboxGroup/checkboxGroup.doc.md' }, + { text: 'Checkbox Button', link: '/components/checkbox-button/checkboxButton.doc.md' }, + { text: 'Checkbox Group', link: '/components/checkbox-group/checkboxGroup.doc.md' }, { text: 'Chip', link: '/components/chip/chip.doc.md' }, { text: 'Code', link: '/components/code/code.doc.md' }, { text: 'Column', link: '/components/column/column.doc.md' }, { text: 'Combobox', link: '/components/combobox/combobox.doc.md' }, - { text: 'ConfigProvider', link: '/components/configProvider/configProvider.doc.md' }, - { text: 'ConfirmDialog', link: '/components/confirmDialog/confirmDialog.doc.md' }, + { text: 'Config Provider', link: '/components/config-provider/configProvider.doc.md' }, + { text: 'Confirm Dialog', link: '/components/confirm-dialog/confirmDialog.doc.md' }, { text: 'Container', link: '/components/container/container.doc.md' }, { text: 'Data Table', link: '/components/table/table.doc.md' }, - { text: 'DatePicker', link: '/components/datePicker/datePicker.doc.md' }, + { text: 'Date Picker', link: '/components/date-picker/datePicker.doc.md' }, { text: 'Dialog', link: '/components/dialog/dialog.doc.md' }, { text: 'Disclosure', link: '/components/disclosure/disclosure.doc.md' }, { text: 'Divider', link: '/components/divider/divider.doc.md', readyForProduction: true }, { text: 'Drawer', link: '/components/drawer/drawer.doc.md' }, { text: 'Dropdown', link: '/components/dropdown/dropdown.doc.md' }, - { text: 'FileBrowser', link: '/components/fileBrowser/fileBrowser.doc.md' }, - { text: 'FilePicker', link: '/components/filePicker/filePicker.doc.md' }, - { text: 'FileUpload', link: '/components/fileUpload/fileUpload.doc.md' }, + { text: 'File Browser', link: '/components/file-browser/fileBrowser.doc.md' }, + { text: 'File Picker', link: '/components/file-picker/filePicker.doc.md' }, + { text: 'File Upload', link: '/components/file-upload/fileUpload.doc.md' }, { text: 'Filter', link: '/components/filter/filter.doc.md' }, - { text: 'FittedActions', link: '/components/fitted-actions/fittedActions.doc.md' }, - { text: 'FlowChart', link: '/components/flowChart/flowChart.doc.md' }, + { text: 'Fitted Actions', link: '/components/fitted-actions/fittedActions.doc.md' }, { text: 'Footer', link: '/components/footer/footer.doc.md' }, { text: 'Form', link: '/components/form/form.doc.md' }, - { text: 'FormDialog', link: '/components/formDialog/formDialog.doc.md' }, - { text: 'FormError', link: '/components/formError/formError.doc.md' }, - { text: 'FormItem', link: '/components/formItem/formItem.doc.md' }, + { text: 'Form Dialog', link: '/components/form-dialog/formDialog.doc.md' }, + { text: 'Form Error', link: '/components/form-error/formError.doc.md' }, + { text: 'Form Item', link: '/components/form-item/formItem.doc.md' }, { text: 'Grid', link: '/components/grid/grid.doc.md' }, { text: 'Header', link: '/components/header/header.doc.md' }, { text: 'Icon', link: '/components/icon/icon.doc.md' }, - { text: 'IconButton', link: '/components/icon-button/iconButton.doc.md' }, - { text: 'InfiniteScroll', link: '/components/infiniteScroll/infiniteScroll.doc.md' }, + { text: 'Icon Button', link: '/components/icon-button/iconButton.doc.md' }, + { text: 'Infinite Scroll', link: '/components/infinite-scroll/infiniteScroll.doc.md' }, { text: 'Input', link: '/components/input/input.doc.md' }, - { text: 'InputBase', link: '/components/inputBase/inputBase.doc.md' }, - { text: 'InputNumber', link: '/components/inputNumber/inputNumber.doc.md' }, + { text: 'Input Base', link: '/components/input-base/inputBase.doc.md' }, + { text: 'Input Number', link: '/components/input-number/inputNumber.doc.md' }, { text: 'Link', link: '/components/link/link.doc.md', readyForProduction: true }, { text: 'List', link: '/components/list/list.doc.md' }, { text: 'Loading', link: '/components/loading/loading.doc.md' }, { text: 'Main', link: '/components/main/main.doc.md' }, { text: 'Map', link: '/components/map/map.doc.md' }, + { text: 'Markdown Editor', link: '/components/markdown-editor/markdownEditor.doc.md' }, { text: 'Markup Table', link: '/components/markup-table/markupTable.doc.md' }, { text: 'Menu', link: '/components/menu/menu.doc.md' }, - { text: 'MenuGroup', link: '/components/menuGroup/menuGroup.doc.md' }, - { text: 'MenuItem', link: '/components/menuItem/menuItem.doc.md' }, + { text: 'Menu Group', link: '/components/menu-group/menuGroup.doc.md' }, + { text: 'Menu Item', link: '/components/menu-item/menuItem.doc.md' }, { text: 'Modal', link: '/components/modal/modal.doc.md' }, { text: 'Notification', link: '/components/notification.doc.md' }, - { text: 'NumPicker', link: '/components/numPicker/numPicker.doc.md' }, + { text: 'Num Picker', link: '/components/num-picker/numPicker.doc.md' }, { text: 'Option', link: '/components/option/option.doc.md' }, - { text: 'OptionGroup', link: '/components/optionGroup/optionGroup.doc.md' }, + { text: 'Option Group', link: '/components/option-group/optionGroup.doc.md' }, { text: 'Pagination', link: '/components/pagination/pagination.doc.md' }, { text: 'Password', link: '/components/password/password.doc.md' }, - { text: 'PieChart', link: '/components/pie-chart/pieChart.doc.md' }, { text: 'Popover', link: '/components/popover/popover.doc.md' }, { text: 'Popper', link: '/components/popper/popper.doc.md' }, { text: 'Progress', link: '/components/progress/progress.doc.md' }, { text: 'Radio', link: '/components/radio/radio.doc.md' }, - { text: 'RadioButton', link: '/components/radioButton/radioButton.doc.md' }, - { text: 'RadioGroup', link: '/components/radioGroup/radioGroup.doc.md' }, + { text: 'Radio Button', link: '/components/radio-button/radioButton.doc.md' }, + { text: 'Radio Group', link: '/components/radio-group/radioGroup.doc.md' }, { text: 'Ribbon', link: '/components/ribbon/ribbon.doc.md' }, { text: 'Row', link: '/components/row/row.doc.md' }, - { text: 'ScriptEditor', link: '/components/scriptEditor/scriptEditor.doc.md' }, + { text: 'Script Editor', link: '/components/script-editor/scriptEditor.doc.md' }, { text: 'Search', link: '/components/search/search.doc.md' }, { text: 'Select', link: '/components/select/select.doc.md' }, { text: 'Skeleton', link: '/components/skeleton/skeleton.doc.md' }, { text: 'Slider', link: '/components/slider/slider.doc.md' }, { text: 'Spinner', link: '/components/spinner/spinner.doc.md' }, - { text: 'SplitButton', link: '/components/splitButton/splitButton.doc.md' }, + { text: 'Split Button', link: '/components/split-button/splitButton.doc.md' }, { text: 'Stepper', link: '/components/stepper/stepper.doc.md' }, - { text: 'StepperItem', link: '/components/stepperItem/stepperItem.doc.md' }, + { text: 'Stepper Item', link: '/components/stepper-item/stepperItem.doc.md' }, { text: 'Submenu', link: '/components/submenu/submenu.doc.md' }, { text: 'Switch', link: '/components/switch/switch.doc.md' }, - { text: 'TableColumn', link: '/components/tableColumn/tableColumn.doc.md' }, + { text: 'Table Column', link: '/components/table-column/tableColumn.doc.md' }, { text: 'Tabs', link: '/components/tabs/tabs.doc.md' }, { text: 'Tag', link: '/components/tag/tag.doc.md' }, { text: 'TextArea', link: '/components/textarea/textarea.doc.md' }, - { text: 'ThemeProvider', link: '/components/themeProvider/themeProvider.doc.md' }, + { text: 'Theme Provider', link: '/components/theme-provider/themeProvider.doc.md' }, { text: 'Tiles', link: '/components/tiles/tiles.doc.md' }, - { text: 'TimePicker', link: '/components/timePicker/timePicker.doc.md' }, + { text: 'Time Picker', link: '/components/time-picker/timePicker.doc.md' }, { text: 'Toolbar', link: '/components/toolbar/toolbar.doc.md' }, { text: 'Tooltip', link: '/components/tooltip/tooltip.doc.md', readyForProduction: true }, { text: 'Tree', link: '/components/tree/tree.doc.md' }, diff --git a/packages/documentation/.vitepress/configuration/widgets.ts b/packages/documentation/.vitepress/configuration/widgets.ts new file mode 100644 index 000000000..6c7b0a8c2 --- /dev/null +++ b/packages/documentation/.vitepress/configuration/widgets.ts @@ -0,0 +1,4 @@ +export const widgets = [ + { text: 'FlowChart', link: '/components/flow-chart/flowChart.doc.md' }, + { text: 'PieChart', link: '/components/pie-chart/pieChart.doc.md' }, +]; diff --git a/packages/documentation/.vitepress/theme/vitepress/index.css b/packages/documentation/.vitepress/theme/vitepress/index.css index 5efb4ad8f..fd95f2812 100644 --- a/packages/documentation/.vitepress/theme/vitepress/index.css +++ b/packages/documentation/.vitepress/theme/vitepress/index.css @@ -81,6 +81,24 @@ html.dark { /* vp-doc style */ +.vp-doc { + :has([class^="acv"]) { + ul { + list-style: none; + } + + li + li { + margin-top: 0; + } + + ul, + ol { + padding-left: 0; + margin: 0; + } + } +} + .vp-doc table { display: table !important; width: 100%; diff --git a/packages/documentation/components/checkbox/checkbox.doc.md b/packages/documentation/components/checkbox/checkbox.doc.md index b7208157c..e026b38df 100644 --- a/packages/documentation/components/checkbox/checkbox.doc.md +++ b/packages/documentation/components/checkbox/checkbox.doc.md @@ -29,7 +29,7 @@ https://www.figma.com/design/6nFlVmwDwvGloglQHxyElh/Tokens-test?node-id=56-4414 ## Indeterminate -You + ## Accessibility diff --git a/packages/documentation/components/markdown-editor/markdownEditor.doc.md b/packages/documentation/components/markdown-editor/markdownEditor.doc.md new file mode 100644 index 000000000..63662967f --- /dev/null +++ b/packages/documentation/components/markdown-editor/markdownEditor.doc.md @@ -0,0 +1,39 @@ +--- +title: Acv Markdown Editor component +lang: en-US +editLink: true +--- + +# Acv Markdown Editor + +Markdown editor component allows you to edit and preview markdown content. +We use `v-model` binding variable to bind the markdown content. + +Under the hood, it uses [md-editor-v3](https://github.com/imzbf/md-editor-v3) component. + +## Basic usage + + + +::: details Source code +<<< @/demos/markdown-editor/MarkdownEditorBasic.vue +::: + +## Props + +| Prop name | Description | Type | Values | Default | +| --------- | ---------------------------- | ---------------- | ------ | ------- | +| height | Height of the MarkdownEditor | number \| string | - | | + +## Events + +| Event name | Properties | Description | +| ---------- | --------------------------------------------------------------------------------------------------------------- | -------------------------------------- | +| close | **eventName** `string` - The name of the event
**visible** `string` - The visibility state of the component | Triggered when the component is closed | + +## Slots + +| Name | Description | Bindings | +| ----------- | ---------------------------- | -------- | +| default | The default slot content | | +| description | The description slot content | | diff --git a/packages/documentation/components/switch/switch.doc.md b/packages/documentation/components/switch/switch.doc.md index e6dafea81..191dac4e2 100644 --- a/packages/documentation/components/switch/switch.doc.md +++ b/packages/documentation/components/switch/switch.doc.md @@ -1,54 +1,83 @@ --- -title: Switch component +title: Acv Switch component lang: en-US editLink: true --- -# Switch +# Acv Switch Switch is a component used to toggle between two states, such as on and off. It is a visual representation of a checkbox that allows the user to switch between two states. -Used for actions that occur immediately after the user switches the toggle switch to one of the positions. -The switch has two basic states - On / Off. -Like checkboxes, a swicth also has several states: focused, disabled, hover and active. + +- It used for actions that occur immediately after the user switches the toggle switch to one of the positions. +- Switch has two basic states - On / Off. +- Like checkboxes, a switch also has several states: focused, disabled, hover and active. + :::info Figma mockups -https://www.figma.com/file/AOtI028uCFzAmnADVCz872/Documentation?node-id=2%3A30 +https://www.figma.com/design/6nFlVmwDwvGloglQHxyElh/Tokens-test?node-id=592-168382 ::: ## Basic usage +Bind `v-model` to a `Boolean` typed variable. + ::: details Source code <<< @/demos/switch/SwitchBasic.vue ::: -## Disabled +## Label + +You can add a label to the switch component using the `label` prop. + + + +:::tip +You can also use default slot to render the label. +::: + +## Array - +You can use an array to bind multiple switches to a single variable. + + + +::: details Source code +<<< @/demos/switch/SwitchArray.vue +::: ## Sizes +You can switch between different sizes using the `size` prop. + +## See also + +- [Checkbox](../checkbox) +- [Radio](../radio) +- [Open UI Switch](https://open-ui.org/components/switch/) +- [WAI-ARIA Switch pattern](https://www.w3.org/WAI/ARIA/apg/patterns/switch/) + ## Props | Prop name | Description | Type | Values | Default | | ---------- | ------------------------------ | ------------- | ------ | ------- | | modelValue | Binding value of the Switch | boolean | - | | | color | Custom color of the Switch | ColorProp | - | primary | +| label | Switch description | string | - | | | size | Switch size | ComponentSize | - | | | disabled | Whether the Switch is disabled | boolean | - | | ## Events -| Event name | Properties | Description | -| ----------------- | --------------------------------------------------------------------------------------------------- | -------------------------------------- | -| update:modelValue | **eventName** `string` - The name of the event
**value** `string` - Checked state of the Switch | Triggered when the component is closed | +| Event name | Properties | Description | +| ----------------- | --------------------------------------------------------------------------------------------------- | ---------------------------------------- | +| update:modelValue | **eventName** `string` - The name of the event
**value** `string` - Checked state of the Switch | Triggered when the modelValue is updated | ## Slots -| Name | Description | Bindings | -| ----------- | ---------------------------- | -------- | -| default | The default slot content | | -| description | The description slot content | | +| Name | Description | Bindings | +| ------- | ------------------------ | -------- | +| default | The default slot content | | diff --git a/packages/documentation/demos/markdown-editor/MarkdownEditorBasic.vue b/packages/documentation/demos/markdown-editor/MarkdownEditorBasic.vue new file mode 100644 index 000000000..67936306c --- /dev/null +++ b/packages/documentation/demos/markdown-editor/MarkdownEditorBasic.vue @@ -0,0 +1,10 @@ + + + diff --git a/packages/ui/package.json b/packages/ui/package.json index 1f9a6f76b..d24553924 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -55,6 +55,7 @@ "colord": "2.9.3", "highlight.js": "11.9.0", "lodash-es": "4.17.21", + "md-editor-v3": "4.17.3", "vue": "3.4.30" }, "devDependencies": { diff --git a/packages/ui/src/components/index.ts b/packages/ui/src/components/index.ts index 3edd646b5..75c4c661d 100644 --- a/packages/ui/src/components/index.ts +++ b/packages/ui/src/components/index.ts @@ -53,6 +53,7 @@ export * from './loader/public.ts'; export * from './loading/public.ts'; export * from './main/public.ts'; export * from './map/public.ts'; +export * from './markdown-editor/public.ts'; export * from './markup-table/public.ts'; export * from './menu-group/public.ts'; export * from './menu-item/public.ts'; diff --git a/packages/ui/src/components/markdown-editor/markdownEditor.css b/packages/ui/src/components/markdown-editor/markdownEditor.css new file mode 100644 index 000000000..8f6c93532 --- /dev/null +++ b/packages/ui/src/components/markdown-editor/markdownEditor.css @@ -0,0 +1,6 @@ +@layer acv-base { + :root { + /* Insert component css variables here */ + --acv-markdown-editor-color: var(--acv-color-brand-primary); + } +} diff --git a/packages/ui/src/components/markdown-editor/markdownEditor.md b/packages/ui/src/components/markdown-editor/markdownEditor.md new file mode 100644 index 000000000..1bbd037d2 --- /dev/null +++ b/packages/ui/src/components/markdown-editor/markdownEditor.md @@ -0,0 +1,12 @@ +Markdown editor component allows you to edit and preview markdown content. +We use `v-model` binding variable to bind the markdown content. + +Under the hood, it uses [md-editor-v3](https://github.com/imzbf/md-editor-v3) component. + +## Basic usage + + + +::: details Source code +<<< @/demos/markdown-editor/MarkdownEditorBasic.vue +::: diff --git a/packages/ui/src/components/markdown-editor/markdownEditor.spec.ts b/packages/ui/src/components/markdown-editor/markdownEditor.spec.ts new file mode 100644 index 000000000..515f6393c --- /dev/null +++ b/packages/ui/src/components/markdown-editor/markdownEditor.spec.ts @@ -0,0 +1,33 @@ +import { describe, expect, it } from 'vitest'; +import { mount } from '@vue/test-utils'; +import MarkdownEditor from './markdownEditor.vue'; +import type { AcvMarkdownEditorProps } from './markdownEditor'; + +describe.skip('markdownEditor component', () => { + it('default props', () => { + const wrapper = mount(MarkdownEditor); + expect(wrapper.props()).toMatchInlineSnapshot(` + { + "height": undefined, + "modelModifiers": undefined, + "modelValue": undefined, + } + `); + }); + + it('pass props', () => { + const wrapper = mount(MarkdownEditor, { + props: { + title: 'test', + } as AcvMarkdownEditorProps, + }); + + expect(wrapper.props()).toMatchInlineSnapshot(` + { + "height": undefined, + "modelModifiers": undefined, + "modelValue": undefined, + } + `); + }); +}); diff --git a/packages/ui/src/components/markdown-editor/markdownEditor.ts b/packages/ui/src/components/markdown-editor/markdownEditor.ts new file mode 100644 index 000000000..4fa32623a --- /dev/null +++ b/packages/ui/src/components/markdown-editor/markdownEditor.ts @@ -0,0 +1,28 @@ +export interface AcvMarkdownEditorProps { + modelValue?: string + /** + * Height of the MarkdownEditor + */ + height?: number | string +} + +export interface AcvMarkdownEditorEvents { + /** + * Triggered when the component is closed + * @arg {string} eventName - The name of the event + * @arg {string} visible - The visibility state of the component + */ + (eventName: 'close', visible: boolean): void +} + +export interface AcvMarkdownEditorSlots { + /** + * The default slot content + */ + default: void + /** + * The description slot content + * @binding {string} description - The description prop value + */ + description: void +} diff --git a/packages/ui/src/components/markdown-editor/markdownEditor.vue b/packages/ui/src/components/markdown-editor/markdownEditor.vue new file mode 100644 index 000000000..ac3772850 --- /dev/null +++ b/packages/ui/src/components/markdown-editor/markdownEditor.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/packages/ui/src/components/markdown-editor/public.ts b/packages/ui/src/components/markdown-editor/public.ts new file mode 100644 index 000000000..2789f7f72 --- /dev/null +++ b/packages/ui/src/components/markdown-editor/public.ts @@ -0,0 +1,2 @@ +export { default as AcvMarkdownEditor } from './markdownEditor.vue'; +export * from './markdownEditor.ts'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5c6663e3a..95edf003e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -358,6 +358,9 @@ importers: lodash-es: specifier: 4.17.21 version: 4.17.21 + md-editor-v3: + specifier: 4.17.3 + version: 4.17.3(@codemirror/view@6.28.4)(@lezer/common@1.2.1)(vue@3.4.30) vue: specifier: 3.4.30 version: 3.4.30(typescript@5.5.3) @@ -1156,6 +1159,320 @@ packages: bundledDependencies: - is-unicode-supported + /@codemirror/autocomplete@6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1): + resolution: {integrity: sha512-fdfj6e6ZxZf8yrkMHUSJJir7OJkHkZKaOZGzLWIYp2PZ3jd+d+UjG8zVPqJF6d3bKxkhvXTPan/UZ1t7Bqm0gA==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + '@lezer/common': ^1.0.0 + dependencies: + '@codemirror/language': 6.10.2 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.4 + '@lezer/common': 1.2.1 + dev: false + + /@codemirror/commands@6.6.0: + resolution: {integrity: sha512-qnY+b7j1UNcTS31Eenuc/5YJB6gQOzkUoNmJQc0rznwqSRpeaWWpjkWy2C/MPTcePpsKJEM26hXrOXl1+nceXg==} + dependencies: + '@codemirror/language': 6.10.2 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.4 + '@lezer/common': 1.2.1 + dev: false + + /@codemirror/lang-angular@0.1.3: + resolution: {integrity: sha512-xgeWGJQQl1LyStvndWtruUvb4SnBZDAu/gvFH/ZU+c0W25tQR8e5hq7WTwiIY2dNxnf+49mRiGI/9yxIwB6f5w==} + dependencies: + '@codemirror/lang-html': 6.4.9 + '@codemirror/lang-javascript': 6.2.2 + '@codemirror/language': 6.10.2 + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@codemirror/lang-cpp@6.0.2: + resolution: {integrity: sha512-6oYEYUKHvrnacXxWxYa6t4puTlbN3dgV662BDfSH8+MfjQjVmP697/KYTDOqpxgerkvoNm7q5wlFMBeX8ZMocg==} + dependencies: + '@codemirror/language': 6.10.2 + '@lezer/cpp': 1.1.2 + dev: false + + /@codemirror/lang-css@6.2.1(@codemirror/view@6.28.4): + resolution: {integrity: sha512-/UNWDNV5Viwi/1lpr/dIXJNWiwDxpw13I4pTUAsNxZdg6E0mI2kTQb0P2iHczg1Tu+H4EBgJR+hYhKiHKko7qg==} + dependencies: + '@codemirror/autocomplete': 6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1) + '@codemirror/language': 6.10.2 + '@codemirror/state': 6.4.1 + '@lezer/common': 1.2.1 + '@lezer/css': 1.1.8 + transitivePeerDependencies: + - '@codemirror/view' + dev: false + + /@codemirror/lang-go@6.0.1(@codemirror/view@6.28.4): + resolution: {integrity: sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==} + dependencies: + '@codemirror/autocomplete': 6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1) + '@codemirror/language': 6.10.2 + '@codemirror/state': 6.4.1 + '@lezer/common': 1.2.1 + '@lezer/go': 1.0.0 + transitivePeerDependencies: + - '@codemirror/view' + dev: false + + /@codemirror/lang-html@6.4.9: + resolution: {integrity: sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==} + dependencies: + '@codemirror/autocomplete': 6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1) + '@codemirror/lang-css': 6.2.1(@codemirror/view@6.28.4) + '@codemirror/lang-javascript': 6.2.2 + '@codemirror/language': 6.10.2 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.4 + '@lezer/common': 1.2.1 + '@lezer/css': 1.1.8 + '@lezer/html': 1.3.10 + dev: false + + /@codemirror/lang-java@6.0.1: + resolution: {integrity: sha512-OOnmhH67h97jHzCuFaIEspbmsT98fNdhVhmA3zCxW0cn7l8rChDhZtwiwJ/JOKXgfm4J+ELxQihxaI7bj7mJRg==} + dependencies: + '@codemirror/language': 6.10.2 + '@lezer/java': 1.1.2 + dev: false + + /@codemirror/lang-javascript@6.2.2: + resolution: {integrity: sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg==} + dependencies: + '@codemirror/autocomplete': 6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1) + '@codemirror/language': 6.10.2 + '@codemirror/lint': 6.8.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.4 + '@lezer/common': 1.2.1 + '@lezer/javascript': 1.4.17 + dev: false + + /@codemirror/lang-json@6.0.1: + resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==} + dependencies: + '@codemirror/language': 6.10.2 + '@lezer/json': 1.0.2 + dev: false + + /@codemirror/lang-less@6.0.2(@codemirror/view@6.28.4): + resolution: {integrity: sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==} + dependencies: + '@codemirror/lang-css': 6.2.1(@codemirror/view@6.28.4) + '@codemirror/language': 6.10.2 + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + transitivePeerDependencies: + - '@codemirror/view' + dev: false + + /@codemirror/lang-liquid@6.2.1: + resolution: {integrity: sha512-J1Mratcm6JLNEiX+U2OlCDTysGuwbHD76XwuL5o5bo9soJtSbz2g6RU3vGHFyS5DC8rgVmFSzi7i6oBftm7tnA==} + dependencies: + '@codemirror/autocomplete': 6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1) + '@codemirror/lang-html': 6.4.9 + '@codemirror/language': 6.10.2 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.4 + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@codemirror/lang-markdown@6.2.5: + resolution: {integrity: sha512-Hgke565YcO4fd9pe2uLYxnMufHO5rQwRr+AAhFq8ABuhkrjyX8R5p5s+hZUTdV60O0dMRjxKhBLxz8pu/MkUVA==} + dependencies: + '@codemirror/autocomplete': 6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1) + '@codemirror/lang-html': 6.4.9 + '@codemirror/language': 6.10.2 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.4 + '@lezer/common': 1.2.1 + '@lezer/markdown': 1.3.0 + dev: false + + /@codemirror/lang-php@6.0.1: + resolution: {integrity: sha512-ublojMdw/PNWa7qdN5TMsjmqkNuTBD3k6ndZ4Z0S25SBAiweFGyY68AS3xNcIOlb6DDFDvKlinLQ40vSLqf8xA==} + dependencies: + '@codemirror/lang-html': 6.4.9 + '@codemirror/language': 6.10.2 + '@codemirror/state': 6.4.1 + '@lezer/common': 1.2.1 + '@lezer/php': 1.0.2 + dev: false + + /@codemirror/lang-python@6.1.6(@codemirror/view@6.28.4): + resolution: {integrity: sha512-ai+01WfZhWqM92UqjnvorkxosZ2aq2u28kHvr+N3gu012XqY2CThD67JPMHnGceRfXPDBmn1HnyqowdpF57bNg==} + dependencies: + '@codemirror/autocomplete': 6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1) + '@codemirror/language': 6.10.2 + '@codemirror/state': 6.4.1 + '@lezer/common': 1.2.1 + '@lezer/python': 1.1.14 + transitivePeerDependencies: + - '@codemirror/view' + dev: false + + /@codemirror/lang-rust@6.0.1: + resolution: {integrity: sha512-344EMWFBzWArHWdZn/NcgkwMvZIWUR1GEBdwG8FEp++6o6vT6KL9V7vGs2ONsKxxFUPXKI0SPcWhyYyl2zPYxQ==} + dependencies: + '@codemirror/language': 6.10.2 + '@lezer/rust': 1.0.2 + dev: false + + /@codemirror/lang-sass@6.0.2(@codemirror/view@6.28.4): + resolution: {integrity: sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==} + dependencies: + '@codemirror/lang-css': 6.2.1(@codemirror/view@6.28.4) + '@codemirror/language': 6.10.2 + '@codemirror/state': 6.4.1 + '@lezer/common': 1.2.1 + '@lezer/sass': 1.0.6 + transitivePeerDependencies: + - '@codemirror/view' + dev: false + + /@codemirror/lang-sql@6.7.0(@codemirror/view@6.28.4): + resolution: {integrity: sha512-KMXp6rtyPYz6RaElvkh/77ClEAoQoHRPZo0zutRRialeFs/B/X8YaUJBCnAV2zqyeJPLZ4hgo48mG8TKoNXfZA==} + dependencies: + '@codemirror/autocomplete': 6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1) + '@codemirror/language': 6.10.2 + '@codemirror/state': 6.4.1 + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + transitivePeerDependencies: + - '@codemirror/view' + dev: false + + /@codemirror/lang-vue@0.1.3: + resolution: {integrity: sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==} + dependencies: + '@codemirror/lang-html': 6.4.9 + '@codemirror/lang-javascript': 6.2.2 + '@codemirror/language': 6.10.2 + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@codemirror/lang-wast@6.0.2: + resolution: {integrity: sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==} + dependencies: + '@codemirror/language': 6.10.2 + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@codemirror/lang-xml@6.1.0: + resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==} + dependencies: + '@codemirror/autocomplete': 6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1) + '@codemirror/language': 6.10.2 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.4 + '@lezer/common': 1.2.1 + '@lezer/xml': 1.0.5 + dev: false + + /@codemirror/lang-yaml@6.1.1(@codemirror/view@6.28.4): + resolution: {integrity: sha512-HV2NzbK9bbVnjWxwObuZh5FuPCowx51mEfoFT9y3y+M37fA3+pbxx4I7uePuygFzDsAmCTwQSc/kXh/flab4uw==} + dependencies: + '@codemirror/autocomplete': 6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1) + '@codemirror/language': 6.10.2 + '@codemirror/state': 6.4.1 + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/yaml': 1.0.3 + transitivePeerDependencies: + - '@codemirror/view' + dev: false + + /@codemirror/language-data@6.5.1(@codemirror/view@6.28.4): + resolution: {integrity: sha512-0sWxeUSNlBr6OmkqybUTImADFUP0M3P0IiSde4nc24bz/6jIYzqYSgkOSLS+CBIoW1vU8Q9KUWXscBXeoMVC9w==} + dependencies: + '@codemirror/lang-angular': 0.1.3 + '@codemirror/lang-cpp': 6.0.2 + '@codemirror/lang-css': 6.2.1(@codemirror/view@6.28.4) + '@codemirror/lang-go': 6.0.1(@codemirror/view@6.28.4) + '@codemirror/lang-html': 6.4.9 + '@codemirror/lang-java': 6.0.1 + '@codemirror/lang-javascript': 6.2.2 + '@codemirror/lang-json': 6.0.1 + '@codemirror/lang-less': 6.0.2(@codemirror/view@6.28.4) + '@codemirror/lang-liquid': 6.2.1 + '@codemirror/lang-markdown': 6.2.5 + '@codemirror/lang-php': 6.0.1 + '@codemirror/lang-python': 6.1.6(@codemirror/view@6.28.4) + '@codemirror/lang-rust': 6.0.1 + '@codemirror/lang-sass': 6.0.2(@codemirror/view@6.28.4) + '@codemirror/lang-sql': 6.7.0(@codemirror/view@6.28.4) + '@codemirror/lang-vue': 0.1.3 + '@codemirror/lang-wast': 6.0.2 + '@codemirror/lang-xml': 6.1.0 + '@codemirror/lang-yaml': 6.1.1(@codemirror/view@6.28.4) + '@codemirror/language': 6.10.2 + '@codemirror/legacy-modes': 6.4.0 + transitivePeerDependencies: + - '@codemirror/view' + dev: false + + /@codemirror/language@6.10.2: + resolution: {integrity: sha512-kgbTYTo0Au6dCSc/TFy7fK3fpJmgHDv1sG1KNQKJXVi+xBTEeBPY/M30YXiU6mMXeH+YIDLsbrT4ZwNRdtF+SA==} + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.4 + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + style-mod: 4.1.2 + dev: false + + /@codemirror/legacy-modes@6.4.0: + resolution: {integrity: sha512-5m/K+1A6gYR0e+h/dEde7LoGimMjRtWXZFg4Lo70cc8HzjSdHe3fLwjWMR0VRl5KFT1SxalSap7uMgPKF28wBA==} + dependencies: + '@codemirror/language': 6.10.2 + dev: false + + /@codemirror/lint@6.8.1: + resolution: {integrity: sha512-IZ0Y7S4/bpaunwggW2jYqwLuHj0QtESf5xcROewY6+lDNwZ/NzvR4t+vpYgg9m7V8UXLPYqG+lu3DF470E5Oxg==} + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.4 + crelt: 1.0.6 + dev: false + + /@codemirror/search@6.5.6: + resolution: {integrity: sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==} + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.4 + crelt: 1.0.6 + dev: false + + /@codemirror/state@6.4.1: + resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==} + dev: false + + /@codemirror/view@6.28.4: + resolution: {integrity: sha512-QScv95fiviSQ/CaVGflxAvvvDy/9wi0RFyDl4LkHHWiMr/UPebyuTspmYSeN5Nx6eujcPYwsQzA6ZIZucKZVHQ==} + dependencies: + '@codemirror/state': 6.4.1 + style-mod: 4.1.2 + w3c-keyname: 2.2.8 + dev: false + /@colors/colors@1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -2811,6 +3128,133 @@ packages: type-detect: 4.0.8 dev: false + /@lezer/common@1.2.1: + resolution: {integrity: sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==} + dev: false + + /@lezer/cpp@1.1.2: + resolution: {integrity: sha512-macwKtyeUO0EW86r3xWQCzOV9/CF8imJLpJlPv3sDY57cPGeUZ8gXWOWNlJr52TVByMV3PayFQCA5SHEERDmVQ==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@lezer/css@1.1.8: + resolution: {integrity: sha512-7JhxupKuMBaWQKjQoLtzhGj83DdnZY9MckEOG5+/iLKNK2ZJqKc6hf6uc0HjwCX7Qlok44jBNqZhHKDhEhZYLA==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@lezer/go@1.0.0: + resolution: {integrity: sha512-co9JfT3QqX1YkrMmourYw2Z8meGC50Ko4d54QEcQbEYpvdUvN4yb0NBZdn/9ertgvjsySxHsKzH3lbm3vqJ4Jw==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@lezer/highlight@1.2.0: + resolution: {integrity: sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA==} + dependencies: + '@lezer/common': 1.2.1 + dev: false + + /@lezer/html@1.3.10: + resolution: {integrity: sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@lezer/java@1.1.2: + resolution: {integrity: sha512-3j8X70JvYf0BZt8iSRLXLkt0Ry1hVUgH6wT32yBxH/Xi55nW2VMhc1Az4SKwu4YGSmxCm1fsqDDcHTuFjC8pmg==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@lezer/javascript@1.4.17: + resolution: {integrity: sha512-bYW4ctpyGK+JMumDApeUzuIezX01H76R1foD6LcRX224FWfyYit/HYxiPGDjXXe/wQWASjCvVGoukTH68+0HIA==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@lezer/json@1.0.2: + resolution: {integrity: sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@lezer/lr@1.4.1: + resolution: {integrity: sha512-CHsKq8DMKBf9b3yXPDIU4DbH+ZJd/sJdYOW2llbW/HudP5u0VS6Bfq1hLYfgU7uAYGFIyGGQIsSOXGPEErZiJw==} + dependencies: + '@lezer/common': 1.2.1 + dev: false + + /@lezer/markdown@1.3.0: + resolution: {integrity: sha512-ErbEQ15eowmJUyT095e9NJc3BI9yZ894fjSDtHftD0InkfUBGgnKSU6dvan9jqsZuNHg2+ag/1oyDRxNsENupQ==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + dev: false + + /@lezer/php@1.0.2: + resolution: {integrity: sha512-GN7BnqtGRpFyeoKSEqxvGvhJQiI4zkgmYnDk/JIyc7H7Ifc1tkPnUn/R2R8meH3h/aBf5rzjvU8ZQoyiNDtDrA==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@lezer/python@1.1.14: + resolution: {integrity: sha512-ykDOb2Ti24n76PJsSa4ZoDF0zH12BSw1LGfQXCYJhJyOGiFTfGaX0Du66Ze72R+u/P35U+O6I9m8TFXov1JzsA==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@lezer/rust@1.0.2: + resolution: {integrity: sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@lezer/sass@1.0.6: + resolution: {integrity: sha512-w/RCO2dIzZH1To8p+xjs8cE+yfgGus8NZ/dXeWl/QzHyr+TeBs71qiE70KPImEwvTsmEjoWh0A5SxMzKd5BWBQ==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@lezer/xml@1.0.5: + resolution: {integrity: sha512-VFouqOzmUWfIg+tfmpcdV33ewtK+NSwd4ngSe1aG7HFb4BN0ExyY1b8msp+ndFrnlG4V4iC8yXacjFtrwERnaw==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + + /@lezer/yaml@1.0.3: + resolution: {integrity: sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.1 + dev: false + /@ljharb/through@2.3.13: resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} engines: {node: '>= 0.4'} @@ -3575,7 +4019,6 @@ packages: /@types/linkify-it@5.0.0: resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} - dev: true /@types/lodash-es@4.17.12: resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} @@ -3592,7 +4035,6 @@ packages: dependencies: '@types/linkify-it': 5.0.0 '@types/mdurl': 2.0.0 - dev: true /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -3602,7 +4044,6 @@ packages: /@types/mdurl@2.0.0: resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} - dev: true /@types/minimist@1.2.5: resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} @@ -3922,6 +4363,10 @@ packages: eslint-visitor-keys: 3.4.3 dev: false + /@vavt/util@1.7.0: + resolution: {integrity: sha512-EAwplP/2Lm79KCFj5umtU/HKgFUi8Ec6a1clK2Za4MErkAkY8+mdOSnAFJdltceWzmnauZrEc+By+u0ZvX6u6g==} + dev: false + /@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.11)(vue@3.4.30): resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -5377,6 +5822,20 @@ packages: engines: {node: '>=0.8'} dev: true + /codemirror@6.0.1(@lezer/common@1.2.1): + resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==} + dependencies: + '@codemirror/autocomplete': 6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1) + '@codemirror/commands': 6.6.0 + '@codemirror/language': 6.10.2 + '@codemirror/lint': 6.8.1 + '@codemirror/search': 6.5.6 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.4 + transitivePeerDependencies: + - '@lezer/common' + dev: false + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -5432,6 +5891,10 @@ packages: engines: {node: '>=14'} dev: true + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: false + /commander@6.2.1: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} engines: {node: '>= 6'} @@ -5664,6 +6127,12 @@ packages: is-what: 4.1.16 dev: true + /copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + dependencies: + toggle-selection: 1.0.6 + dev: false + /core-js-compat@3.37.1: resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} dependencies: @@ -5769,6 +6238,10 @@ packages: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true + /crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + dev: false + /cross-spawn@6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -5882,6 +6355,10 @@ packages: engines: {node: '>=4'} hasBin: true + /cssfilter@0.0.10: + resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} + dev: false + /csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -9034,6 +9511,12 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true + /linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + dependencies: + uc.micro: 2.1.0 + dev: false + /lint-staged@13.2.3: resolution: {integrity: sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg==} engines: {node: ^14.13.1 || >=16.0.0} @@ -9332,9 +9815,58 @@ packages: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} dev: true + /markdown-it-image-figures@2.1.1(markdown-it@14.1.0): + resolution: {integrity: sha512-mwXSQ2nPeVUzCMIE3HlLvjRioopiqyJLNph0pyx38yf9mpqFDhNGnMpAXF9/A2Xv0oiF2cVyg9xwfF0HNAz05g==} + engines: {node: '>=12.0.0'} + peerDependencies: + markdown-it: '*' + dependencies: + markdown-it: 14.1.0 + dev: false + + /markdown-it-task-lists@2.1.1: + resolution: {integrity: sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==} + dev: false + + /markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + dev: false + /mathml-tag-names@2.1.3: resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + /md-editor-v3@4.17.3(@codemirror/view@6.28.4)(@lezer/common@1.2.1)(vue@3.4.30): + resolution: {integrity: sha512-XepLAC46Ui6vlr9iW//ujNdzKF+/jyI6eLk9qmg3CDs89hpaXSylQdKy+wQoP+CgY5nxf82H50cYlqDl0a1pSA==} + peerDependencies: + vue: ^3.2.47 + dependencies: + '@codemirror/lang-markdown': 6.2.5 + '@codemirror/language-data': 6.5.1(@codemirror/view@6.28.4) + '@types/markdown-it': 14.1.1 + '@vavt/util': 1.7.0 + codemirror: 6.0.1(@lezer/common@1.2.1) + copy-to-clipboard: 3.3.3 + lru-cache: 10.2.0 + markdown-it: 14.1.0 + markdown-it-image-figures: 2.1.1(markdown-it@14.1.0) + markdown-it-task-lists: 2.1.1 + medium-zoom: 1.1.0 + punycode: 2.3.1 + vue: 3.4.30(typescript@5.5.3) + xss: 1.0.15 + transitivePeerDependencies: + - '@codemirror/view' + - '@lezer/common' + dev: false + /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: @@ -9365,6 +9897,14 @@ packages: /mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + /mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + dev: false + + /medium-zoom@1.1.0: + resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==} + dev: false + /memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} @@ -10958,6 +11498,11 @@ packages: once: 1.4.0 dev: true + /punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + dev: false + /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true @@ -12014,6 +12559,10 @@ packages: js-tokens: 8.0.3 dev: true + /style-mod@4.1.2: + resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} + dev: false + /style-search@0.1.0: resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} dev: false @@ -12405,6 +12954,10 @@ packages: dependencies: is-number: 7.0.0 + /toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + dev: false + /token-stream@1.0.0: resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==} dev: true @@ -12649,6 +13202,10 @@ packages: engines: {node: '>=14.17'} hasBin: true + /uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + dev: false + /ufo@1.5.3: resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} @@ -13622,6 +14179,10 @@ packages: '@vue/shared': 3.4.30 typescript: 5.5.3 + /w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + dev: false + /w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -13837,6 +14398,15 @@ packages: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true + /xss@1.0.15: + resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==} + engines: {node: '>= 0.10.0'} + hasBin: true + dependencies: + commander: 2.20.3 + cssfilter: 0.0.10 + dev: false + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'}