From 0ea9d8e23ea4edfdcf5538694822564a171ff332 Mon Sep 17 00:00:00 2001 From: evoiron Date: Tue, 15 Oct 2024 10:47:27 +0200 Subject: [PATCH] feat: use DS for RichText attributes (#586) * feat: use DS for RichText attributes --- apps/data-studio/package.json | 2 +- apps/login/package.json | 2 +- apps/portal/package.json | 2 +- libs/ui/package.json | 2 +- libs/ui/src/_tests/testUtils.tsx | 46 +- .../EditRecordContent/antdUtils.tsx | 1 + .../StandardFieldRichText.test.tsx | 28 +- .../DSRichTextWrapper.test.tsx | 289 +++++++ .../StandardFieldValue/DSRichTextWrapper.tsx | 102 +++ .../StandardFieldValue/StandardFieldValue.tsx | 19 +- yarn.lock | 702 +++++++++++++++++- 11 files changed, 1162 insertions(+), 33 deletions(-) create mode 100644 libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.test.tsx create mode 100644 libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.tsx diff --git a/apps/data-studio/package.json b/apps/data-studio/package.json index edeca1826..74aa353c4 100644 --- a/apps/data-studio/package.json +++ b/apps/data-studio/package.json @@ -13,7 +13,7 @@ "antd": "5.15.3", "apollo-cache-inmemory": "1.6.6", "apollo-upload-client": "14.1.3", - "aristid-ds": "9.0.0-dd980fc", + "aristid-ds": "10.0.0-1473f00", "dayjs": "1.11.10", "graphql": "15.0.0", "graphql-tag": "2.12.6", diff --git a/apps/login/package.json b/apps/login/package.json index 8415ebf66..94a7c76b1 100644 --- a/apps/login/package.json +++ b/apps/login/package.json @@ -7,7 +7,7 @@ "@ant-design/icons": "5.2.6", "@leav/ui": "workspace:libs/ui", "antd": "5.15.3", - "aristid-ds": "9.0.0-dd980fc", + "aristid-ds": "10.0.0-1473f00", "i18next": "22.5.0", "i18next-browser-languagedetector": "7.0.2", "i18next-http-backend": "2.1.1", diff --git a/apps/portal/package.json b/apps/portal/package.json index 600dfd08d..9c2b206e5 100644 --- a/apps/portal/package.json +++ b/apps/portal/package.json @@ -8,7 +8,7 @@ "@leav/ui": "workspace:libs/ui", "@leav/utils": "workspace:libs/utils", "antd": "5.15.3", - "aristid-ds": "9.0.0-dd980fc", + "aristid-ds": "10.0.0-1473f00", "cross-fetch": "3.1.5", "graphql-ws": "5.12.0", "i18next": "22.5.0", diff --git a/libs/ui/package.json b/libs/ui/package.json index 241cfc4aa..a335fe093 100644 --- a/libs/ui/package.json +++ b/libs/ui/package.json @@ -50,7 +50,7 @@ "@ant-design/icons": ">=5.2", "@apollo/client": ">=3.8.1", "antd": "5.15.3", - "aristid-ds": ">=8.0.0", + "aristid-ds": "10.0.0-1473f00", "dayjs": "^1.11.10", "i18next": "22.5", "react": "18.2.0", diff --git a/libs/ui/src/_tests/testUtils.tsx b/libs/ui/src/_tests/testUtils.tsx index 932813cd8..20155a13b 100644 --- a/libs/ui/src/_tests/testUtils.tsx +++ b/libs/ui/src/_tests/testUtils.tsx @@ -50,7 +50,8 @@ const Providers = ({children, mocks, cacheSettings, routerProps}: PropsWithChild }; // Wrapper around testing-library's render to automatically render apollo's provider and redux store provider -const renderWithProviders = (ui: ReactElement, options?: ICustomRenderOptions): RenderResult => render(ui, {wrapper: props => , ...options}); +const renderWithProviders = (ui: ReactElement, options?: ICustomRenderOptions): RenderResult => + render(ui, {wrapper: props => , ...options}); const renderHookWithProviders = < Result, @@ -63,8 +64,51 @@ const renderHookWithProviders = < options?: ICustomRenderHookOptions ) => renderHook(hook, {wrapper: props => , ...options}); +const mockBrowserFunctionsForTiptap = () => { + const originalElementFromPoint = document.elementFromPoint; + const originalHTMLElementGetBoundingClientRect = HTMLElement.prototype.getBoundingClientRect; + const originalHTMLElementGetClientRects = HTMLElement.prototype.getClientRects; + const originalRangeGetBoundingClientRect = Range.prototype.getBoundingClientRect; + const originalRangeGetClientRects = Range.prototype.getClientRects; + + function getBoundingClientRect(): DOMRect { + const rec = { + x: 0, + y: 0, + bottom: 0, + height: 0, + left: 0, + right: 0, + top: 0, + width: 0 + }; + return {...rec, toJSON: () => rec}; + } + + class FakeDOMRectList extends Array implements DOMRectList { + item(index: number): DOMRect | null { + return this[index]; + } + } + + document.elementFromPoint = (): null => null; + HTMLElement.prototype.getBoundingClientRect = getBoundingClientRect; + HTMLElement.prototype.getClientRects = (): DOMRectList => new FakeDOMRectList(); + Range.prototype.getBoundingClientRect = getBoundingClientRect; + Range.prototype.getClientRects = (): DOMRectList => new FakeDOMRectList(); + + return () => { + document.elementFromPoint = originalElementFromPoint; + HTMLElement.prototype.getBoundingClientRect = originalHTMLElementGetBoundingClientRect; + HTMLElement.prototype.getClientRects = originalHTMLElementGetClientRects; + Range.prototype.getBoundingClientRect = originalRangeGetBoundingClientRect; + Range.prototype.getClientRects = originalRangeGetClientRects; + }; +}; + // Re-export everything from testing-library to improve DX. You can everything you need from this file when you use this // custom render export * from '@testing-library/react'; +export {mockBrowserFunctionsForTiptap}; export {renderWithProviders as render}; export {renderHookWithProviders as renderHook}; diff --git a/libs/ui/src/components/RecordEdition/EditRecordContent/antdUtils.tsx b/libs/ui/src/components/RecordEdition/EditRecordContent/antdUtils.tsx index c0b0c1519..e123b3e5d 100644 --- a/libs/ui/src/components/RecordEdition/EditRecordContent/antdUtils.tsx +++ b/libs/ui/src/components/RecordEdition/EditRecordContent/antdUtils.tsx @@ -62,6 +62,7 @@ export const getAntdFormInitialValues = (recordForm: IRecordForm) => switch (attribute.format) { case AttributeFormat.text: + case AttributeFormat.rich_text: case AttributeFormat.boolean: acc[attribute.id] = standardValue.raw_value; break; diff --git a/libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldRichText.test.tsx b/libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldRichText.test.tsx index 5b429fc31..549c4151c 100644 --- a/libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldRichText.test.tsx +++ b/libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldRichText.test.tsx @@ -1,7 +1,7 @@ // Copyright LEAV Solutions 2017 // This file is released under LGPL V3 // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt -import {render, screen, waitFor} from '_ui/_tests/testUtils'; +import {mockBrowserFunctionsForTiptap, render, screen, waitFor} from '_ui/_tests/testUtils'; import userEvent from '@testing-library/user-event'; import StandardField from '../StandardField'; import { @@ -18,6 +18,12 @@ import {mockFormElementInput} from '_ui/__mocks__/common/form'; import {mockFormAttribute} from '_ui/__mocks__/common/attribute'; import {Suspense} from 'react'; +const tiptapCleanup = mockBrowserFunctionsForTiptap(); + +afterAll(() => { + tiptapCleanup(); +}); + describe('StandardField, Rich Text input', () => { const mockRecordValuesCommon = { created_at: 123456789, @@ -99,25 +105,17 @@ describe('StandardField, Rich Text input', () => { ); - await waitFor( - () => { - screen.getByTestId('ckeditor'); - }, - {timeout: 5000} - ); - - const richTextElem = screen.getByTestId('ckeditor'); + const richTextElem = screen.getByRole('textbox'); await userEvent.click(richTextElem); - const richTextElemOpen = screen.getByRole('textbox'); + const richTextElemOpen = richTextElem.parentElement.previousSibling as HTMLElement; + const menuBarClassNames = richTextElemOpen?.getAttribute('class'); + expect(menuBarClassNames).toContain('menu-bar'); expect(richTextElemOpen).toBeInTheDocument(); - await userEvent.click(richTextElemOpen); - - const toolBarElem = screen.getByRole('toolbar'); - expect(toolBarElem).toBeInTheDocument(); + await userEvent.type(richTextElem, 'new value'); - await userEvent.click(screen.getByRole('button', {name: 'global.submit'})); + await userEvent.click(document.body); expect(mockHandleSubmit).toHaveBeenCalled(); }); }); diff --git a/libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.test.tsx b/libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.test.tsx new file mode 100644 index 000000000..effb8e2c6 --- /dev/null +++ b/libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.test.tsx @@ -0,0 +1,289 @@ +// Copyright LEAV Solutions 2017 +// This file is released under LGPL V3 +// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt +import {mockBrowserFunctionsForTiptap, render, screen} from '_ui/_tests/testUtils'; +import {DSRichTextWrapper} from './DSRichTextWrapper'; +import {FieldScope} from '../../../_types'; +import { + InheritedFlags, + IStandardFieldReducerState, + StandardFieldValueState +} from '../../../reducers/standardFieldReducer/standardFieldReducer'; +import {mockRecord} from '_ui/__mocks__/common/record'; +import {mockFormElementInput} from '_ui/__mocks__/common/form'; +import {mockAttributeLink} from '_ui/__mocks__/common/attribute'; +import userEvent from '@testing-library/user-event'; +import {AntForm} from 'aristid-ds'; +import {RecordFormAttributeFragment} from '_ui/_gqlTypes'; + +const en_label = 'label'; +const fr_label = 'libellé'; +const idValue = '123'; +const mockValue = { + index: 0, + displayValue: '

my value

', + editingValue: '

my my raw value

', + originRawValue: '

my my raw value

', + idValue: null, + isEditing: false, + isErrorDisplayed: false, + value: { + id_value: null, + value: '

my my value

', + raw_value: '

my my raw value

', + modified_at: null, + created_at: null, + created_by: null, + modified_by: null + }, + version: null, + error: '', + state: StandardFieldValueState.PRISTINE +}; + +const getInitialState = (required: boolean, fallbackLang = false): IStandardFieldReducerState => ({ + record: mockRecord, + formElement: { + ...mockFormElementInput, + settings: { + label: fallbackLang ? {en: en_label} : {fr: fr_label, en: en_label}, + required + } + }, + attribute: mockAttributeLink, + isReadOnly: false, + activeScope: FieldScope.CURRENT, + values: { + [FieldScope.CURRENT]: { + version: null, + values: {[idValue]: mockValue} + }, + [FieldScope.INHERITED]: null + }, + metadataEdit: false, + inheritedValue: null, + isInheritedNotOverrideValue: false, + isInheritedOverrideValue: false, + isInheritedValue: false +}); + +const inheritedValues = [ + { + isInherited: null, + value: 'override value', + raw_value: 'override value' + }, + { + isInherited: true, + value: 'inherited value', + raw_value: 'inherited value' + } +]; + +const inheritedNotOverrideValue: InheritedFlags = { + isInheritedValue: true, + isInheritedOverrideValue: false, + isInheritedNotOverrideValue: true, + inheritedValue: {raw_value: inheritedValues[1].raw_value} +}; + +const inheritedOverrideValue: InheritedFlags = { + isInheritedValue: true, + isInheritedOverrideValue: true, + isInheritedNotOverrideValue: false, + inheritedValue: {raw_value: inheritedValues[1].raw_value} +}; + +const tiptapCleanup = mockBrowserFunctionsForTiptap(); + +describe('DSRichTextWrapper', () => { + afterAll(() => { + tiptapCleanup(); + }); + + const mockHandleSubmit = jest.fn(); + const mockOnChange = jest.fn(); + let user!: ReturnType; + + beforeEach(() => { + user = userEvent.setup({}); + mockOnChange.mockReset(); + mockHandleSubmit.mockReset(); + }); + + test('Should display input with fr label ', async () => { + const state = getInitialState(false, false); + render( + + + + + + ); + + expect(screen.getByText(fr_label)).toBeVisible(); + }); + + test('Should display input with fallback label ', async () => { + const state = getInitialState(false, true); + render( + + + + + + ); + + expect(screen.getByText(en_label)).toBeVisible(); + }); + + test('Should submit empty value if field is not required', async () => { + const state = getInitialState(false); + render( + + + + + + ); + + const input = screen.getByRole('textbox'); + await user.click(input); + await user.click(document.body); + + expect(mockHandleSubmit).toHaveBeenCalledWith('', state.attribute.id); + expect(mockOnChange).toHaveBeenCalled(); + }); + + describe('With required input and no inheritance', () => { + test('Should submit the value if field is not empty', async () => { + const state = getInitialState(true); + render( + + + + + + ); + + const text = 'text'; + const input = screen.getByRole('textbox'); + await user.click(input); + await user.type(input, text); + await user.click(document.body); + + expect(mockHandleSubmit).toHaveBeenCalledWith(`

${text}

`, state.attribute.id); + expect(mockOnChange).toHaveBeenCalled(); + }); + + test('Should submit the default value if field is empty', async () => { + const state = getInitialState(true); + render( + + + + + + ); + + const input = screen.getByRole('textbox'); + await user.click(input); + await user.click(document.body); + + expect(mockHandleSubmit).toHaveBeenCalledWith(mockValue.originRawValue, state.attribute.id); + }); + }); + + describe('With inheritance', () => { + test("Should display the inherited value by default and not save if we don't change it", async () => { + let state = getInitialState(false); + state = { + ...state, + ...inheritedNotOverrideValue, + formElement: {...state.formElement, values: inheritedValues} + }; + render( + + + + + + ); + + const input = screen.getByRole('textbox'); + expect(input).toContainHTML(inheritedValues[1].raw_value); + + await user.click(input); + await user.click(document.body); + + expect(mockHandleSubmit).not.toHaveBeenCalled(); + }); + + test('Should display the override value in the input and inherited value under it', async () => { + let state = getInitialState(false); + state = { + ...state, + ...inheritedOverrideValue, + formElement: {...state.formElement, values: inheritedValues} + }; + + render( + + + + + + ); + + const input = screen.getByRole('textbox'); + const helperText = screen.getByText(/inherited value/); + expect(input).toContainHTML(inheritedValues[0].raw_value); + expect(helperText).toBeInTheDocument(); + }); + }); +}); diff --git a/libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.tsx b/libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.tsx new file mode 100644 index 000000000..8631e2799 --- /dev/null +++ b/libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.tsx @@ -0,0 +1,102 @@ +// Copyright LEAV Solutions 2017 +// This file is released under LGPL V3 +// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt +import {FunctionComponent, useEffect, useRef, useState} from 'react'; +import { + IStandardFieldReducerState, + IStandardFieldValue +} from '../../../reducers/standardFieldReducer/standardFieldReducer'; +import {Form, InputProps} from 'antd'; +import {IProvidedByAntFormItem} from '_ui/components/RecordEdition/EditRecordContent/_types'; +import styled from 'styled-components'; +import {useSharedTranslation} from '_ui/hooks/useSharedTranslation'; +import {useValueDetailsButton} from '_ui/components/RecordEdition/EditRecordContent/shared/ValueDetailsBtn/useValueDetailsButton'; +import {RecordFormAttributeFragment} from '_ui/_gqlTypes'; +import {useLang} from '_ui/hooks'; +import {localizedTranslation} from '@leav/utils'; +import {KitRichText} from 'aristid-ds'; + +interface IDSRichTextWrapperProps extends IProvidedByAntFormItem { + state: IStandardFieldReducerState; + attribute: RecordFormAttributeFragment; + fieldValue: IStandardFieldValue; + handleSubmit: (value: string, id?: string) => void; + shouldShowValueDetailsButton?: boolean; +} + +const KitRichTextStyled = styled(KitRichText)<{$shouldHighlightColor: boolean}>` + color: ${({$shouldHighlightColor}) => ($shouldHighlightColor ? 'var(--general-colors-primary-400)' : 'initial')}; +`; + +const isEmptyValue = value => !value || value === '

'; + +export const DSRichTextWrapper: FunctionComponent = ({ + value, + onChange, + state, + attribute, + fieldValue, + handleSubmit, + shouldShowValueDetailsButton = false +}) => { + const {t} = useSharedTranslation(); + const {errors} = Form.Item.useStatus(); + const {onValueDetailsButtonClick} = useValueDetailsButton({ + value: fieldValue?.value, + attribute + }); + const [hasChanged, setHasChanged] = useState(false); + const {lang: availableLang} = useLang(); + + const _resetToInheritedValue = () => { + setHasChanged(false); + onChange(state.inheritedValue.raw_value); + handleSubmit('', state.attribute.id); + }; + + const _handleOnBlur = inputValue => { + const valueToSubmit = isEmptyValue(inputValue) ? '' : inputValue; + + if (valueToSubmit === '' && state.isInheritedValue) { + _resetToInheritedValue(); + return; + } + if (hasChanged || !state.isInheritedValue) { + handleSubmit(valueToSubmit, state.attribute.id); + } + onChange(valueToSubmit); + return; + }; + + const _handleOnChange = inputValue => { + setHasChanged(true); + if (state.isInheritedValue && isEmptyValue(inputValue)) { + _resetToInheritedValue(); + return; + } + onChange(inputValue); + }; + + const label = localizedTranslation(state.formElement.settings.label, availableLang); + + return ( + 0 ? 'error' : undefined} + helper={ + state.isInheritedOverrideValue + ? t('record_edition.inherited_input_helper', { + inheritedValue: state.inheritedValue.raw_value + }) + : undefined + } + value={value as string} + disabled={state.isReadOnly} + onChange={_handleOnChange} + onBlur={_handleOnBlur} + $shouldHighlightColor={!hasChanged && state.isInheritedNotOverrideValue} + /> + ); +}; diff --git a/libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/StandardFieldValue.tsx b/libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/StandardFieldValue.tsx index 17c61b7d8..caf193136 100644 --- a/libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/StandardFieldValue.tsx +++ b/libs/ui/src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/StandardFieldValue.tsx @@ -50,8 +50,9 @@ import {IValueOfValuesList} from './ValuesList/ValuesList'; import {useLang} from '_ui/hooks'; import {DSDatePickerWrapper} from './DSDatePickerWrapper'; import {DSBooleanWrapper} from './DSBooleanWrapper'; -import { DSInputPasswordWrapper } from './DSInputPasswordWrapper'; -import { DSInputNumberWrapper } from './DSInputNumberWrapper'; +import {DSInputPasswordWrapper} from './DSInputPasswordWrapper'; +import {DSInputNumberWrapper} from './DSInputNumberWrapper'; +import {DSRichTextWrapper} from './DSRichTextWrapper'; const ErrorMessage = styled.div` color: ${themeVars.errorColor}; @@ -559,10 +560,11 @@ function StandardFieldValue({ AttributeFormat.numeric, AttributeFormat.encrypted, AttributeFormat.date, - AttributeFormat.boolean + AttributeFormat.boolean, + AttributeFormat.rich_text ]; - const attributeFormatsWithoutDS = [AttributeFormat.color, AttributeFormat.extended, AttributeFormat.rich_text]; + const attributeFormatsWithoutDS = [AttributeFormat.color, AttributeFormat.extended]; return ( <> @@ -621,6 +623,15 @@ function StandardFieldValue({ shouldShowValueDetailsButton={editRecordState.withInfoButton} /> )} + {attribute.format === AttributeFormat.rich_text && ( + + )} {attribute.format === AttributeFormat.boolean && ( )} diff --git a/yarn.lock b/yarn.lock index ce5a55025..e98edc9fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8107,7 +8107,7 @@ __metadata: "@ant-design/icons": ">=5.2" "@apollo/client": ">=3.8.1" antd: 5.15.3 - aristid-ds: ">=8.0.0" + aristid-ds: 10.0.0-1473f00 dayjs: ^1.11.10 i18next: 22.5 react: 18.2.0 @@ -8532,6 +8532,13 @@ __metadata: languageName: node linkType: hard +"@popperjs/core@npm:^2.9.0": + version: 2.11.8 + resolution: "@popperjs/core@npm:2.11.8" + checksum: ddd16090cde777aaf102940f05d0274602079a95ad9805bd20bc55dcc7c3a2ba1b99dd5c73e5cc2753c3d31250ca52a67d58059459d7d27debb983a9f552936c + languageName: node + linkType: hard + "@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": version: 1.1.2 resolution: "@protobufjs/aspromise@npm:1.1.2" @@ -8778,6 +8785,13 @@ __metadata: languageName: node linkType: hard +"@remirror/core-constants@npm:3.0.0": + version: 3.0.0 + resolution: "@remirror/core-constants@npm:3.0.0" + checksum: de15b1df099a7646739e5fb6bb55195618a8ac4fa938db7c719e867eefd72ebc5a05865591788ade449613141619cc1002fb6c0f824de4468dfefa951fbf19a2 + languageName: node + linkType: hard + "@remix-run/router@npm:1.15.0": version: 1.15.0 resolution: "@remix-run/router@npm:1.15.0" @@ -9373,6 +9387,341 @@ __metadata: languageName: node linkType: hard +"@tiptap/core@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/core@npm:2.8.0" + peerDependencies: + "@tiptap/pm": ^2.7.0 + checksum: 16e83ff71b7c15a0e65bb094605cd6c9b15b78648231b2e9f21730c0350197d0f830658c3a697d4ad98237e0126417847393ab07828d64bc869cee252822c724 + languageName: node + linkType: hard + +"@tiptap/extension-blockquote@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-blockquote@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + checksum: c5dd539d7e5b24a60433047efb12ad7b83411c430603f8bb79977665d74fb9378c4bc14a183195f2e04f512b5a73d44dddfc97fc65cf6ce8a81808ae771d2cc7 + languageName: node + linkType: hard + +"@tiptap/extension-bold@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-bold@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + checksum: 5074bdb0e33693ae9a7f84880a86122f8550d8c8bfa0408be6a471e2d53549a1470418c8ecce51f28aedeba9379ab843c092e399ab35d7c90158f452e6e27564 + languageName: node + linkType: hard + +"@tiptap/extension-bubble-menu@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-bubble-menu@npm:2.8.0" + dependencies: + tippy.js: "npm:^6.3.7" + peerDependencies: + "@tiptap/core": ^2.7.0 + "@tiptap/pm": ^2.7.0 + checksum: af53591cc784b8dc5800ece135cce6990d278e334478ae99ca875927cfeaf94bf95fb61f1f23cd95a7c38315538596a0bcfc5da09a7543fef39165a36b0c60bf + languageName: node + linkType: hard + +"@tiptap/extension-bullet-list@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-bullet-list@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + "@tiptap/extension-list-item": ^2.7.0 + "@tiptap/extension-text-style": ^2.7.0 + checksum: 335a501c54d2d107a7dbd562b4e3e97e513849563ecff6d52b68c9a721d61bedd69e266bce2a052d4f406f06995df8b4d3de1ce1aad27a4548ed9831023d512a + languageName: node + linkType: hard + +"@tiptap/extension-character-count@npm:^2.7.4": + version: 2.8.0 + resolution: "@tiptap/extension-character-count@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + "@tiptap/pm": ^2.7.0 + checksum: 015f26eec776823ad74d591fd2849bf1f7416564ea93048dedfc70ce08eb8993608bdd06d8b7298a02e0b4f40fb27a81bd1054f6155a0395da08c6f3aeb91f93 + languageName: node + linkType: hard + +"@tiptap/extension-code-block@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-code-block@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + "@tiptap/pm": ^2.7.0 + checksum: 22eeffbca5165af1952afb80379d2352246911d9f106790105f4f061a66dba5c8928b66936ced6ee5301019522430a1f97fc6123536303ffe69d4f317e6fd80f + languageName: node + linkType: hard + +"@tiptap/extension-code@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-code@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + checksum: 75ae671763aac054adf4fbfcfa72b296bf3547dd954f4194418de56da28ace3924565a0de53e9d1dd7fc61caa2293c9f5bba88fc80f63e2aa420b51b7d453b39 + languageName: node + linkType: hard + +"@tiptap/extension-document@npm:^2.7.2, @tiptap/extension-document@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-document@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + checksum: e5c9b6a2201f88926b942c1250d91d59457b263cfb54b8b34d4c8a680d8ad1851c49d03f6b4c2c04346c742b71e0d9d1b0370d04d95a3452a5b2c0347549d1f2 + languageName: node + linkType: hard + +"@tiptap/extension-dropcursor@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-dropcursor@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + "@tiptap/pm": ^2.7.0 + checksum: 0c6809d513e6fb59f8f165684d588c35cf657aca7b3fb1262878a528f824f9d3d14fbcce33212d52b58cf50a6f1947af74c9394339ef21a6cc6637c45b10b76c + languageName: node + linkType: hard + +"@tiptap/extension-floating-menu@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-floating-menu@npm:2.8.0" + dependencies: + tippy.js: "npm:^6.3.7" + peerDependencies: + "@tiptap/core": ^2.7.0 + "@tiptap/pm": ^2.7.0 + checksum: 4435e2c3930fcbebfd92c08f2327d3de5291021510a657d4ee22db45a83c9aa15c789b995f21540df22dacdfbfcbbe48c25e876747d08c8b22767254a7351d51 + languageName: node + linkType: hard + +"@tiptap/extension-gapcursor@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-gapcursor@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + "@tiptap/pm": ^2.7.0 + checksum: dad7c4dfa482c05b70ed72219eeeebf3e6f894a9423d7747568f37202530b6063360724c2da7481c6a694e5caf389375962508d54c3c17fb71b295fa9d2871af + languageName: node + linkType: hard + +"@tiptap/extension-hard-break@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-hard-break@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + checksum: 14af78eb1bb207999e8cc9c3662e6106e1b7cb72098a2a3f9e1eeb05ba7f6555f0b459abb32d286f6c9c3a3677a91022018904e55b1a1dd0e6d4cbfb914a4903 + languageName: node + linkType: hard + +"@tiptap/extension-heading@npm:^2.7.2, @tiptap/extension-heading@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-heading@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + checksum: d2c060d359b34e8538fffdab104959dbbd3761b756325185884faba3f47a65f8dba98ffd7991b4d7a397f7cd6d690b30616841e317b807255543273d46154588 + languageName: node + linkType: hard + +"@tiptap/extension-history@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-history@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + "@tiptap/pm": ^2.7.0 + checksum: c2c3edb88a9b4ba27f35261cef777379418b813e2f9099c3657642246ea133c90eb66fc602e8a5aeae3513339dd69ece9430f75e39a9e0fcea55544478622022 + languageName: node + linkType: hard + +"@tiptap/extension-horizontal-rule@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-horizontal-rule@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + "@tiptap/pm": ^2.7.0 + checksum: 198fc0f0c4d4955ed5b7a006f5163df7132913f22a692f25fe130cb2c8764b4438860fd216ead32e1db631929fe621cbb0cc4310b20c3b894d5d86ebb191a45d + languageName: node + linkType: hard + +"@tiptap/extension-italic@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-italic@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + checksum: 800cdd65ccd15fd1f0a5c1621ffd937a5646be3fba3f0078314abd1e4df5b69348bb0e33b014d4d8f06fb9cb0191ff9be27dc77f169a57557e047e47906eda97 + languageName: node + linkType: hard + +"@tiptap/extension-link@npm:^2.7.2": + version: 2.8.0 + resolution: "@tiptap/extension-link@npm:2.8.0" + dependencies: + linkifyjs: "npm:^4.1.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + "@tiptap/pm": ^2.7.0 + checksum: 861085bb966ec95d897ed79c2ba976ea40940a12823b2a3bd685a103fbd9ea1ba98791c92a93fcd03fb9305a4874ca6f1c712b1f1a87b79bc65f2b77f521b828 + languageName: node + linkType: hard + +"@tiptap/extension-list-item@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-list-item@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + checksum: ead94cf96e0230e074c6052b88220e920d83bcee530ca3d8f7c793f131d521431920c295b83aa0b3f76509918abe9c0792456536fee5622c75843c94cb42b621 + languageName: node + linkType: hard + +"@tiptap/extension-ordered-list@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-ordered-list@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + "@tiptap/extension-list-item": ^2.7.0 + "@tiptap/extension-text-style": ^2.7.0 + checksum: 7140e6b59361fb1c34533dd57f8032f8f91eb58170c259d575308aa5139272d61d645d00898517c22b9de7aad95883e87a6d64d3b3792692bda362db81410d9c + languageName: node + linkType: hard + +"@tiptap/extension-paragraph@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-paragraph@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + checksum: 905b64ee1ea9bf7911c7fda31c7fd55acb8dae4c4178da5c892a115dc4c1b3342ea8ddc540c8cb5a50971eb10c3c1154bacf1055a063ad043b3f38bae8857072 + languageName: node + linkType: hard + +"@tiptap/extension-placeholder@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-placeholder@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + "@tiptap/pm": ^2.7.0 + checksum: 65eb1e3fc3573fef4cae7a0a40ed27c71e842b1904585526c0b60ac559addd42c1799df74561a15e8301e0fee62607677501e546bab600df7256a53579c4723d + languageName: node + linkType: hard + +"@tiptap/extension-strike@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-strike@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + checksum: 56970b9da889b920747535770a726734f56d4a3a3c6b2fbadf781ae4516a1ca1922123bf9bc4aa19c300c1359151d9d93b423d8cbb2390b6db4c94c891705cec + languageName: node + linkType: hard + +"@tiptap/extension-text-align@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-text-align@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + checksum: 9dbb9514ccb75bc83f749e42a68e1c521af3d5baa0d12da452b6d2929163514cfc42104e87ae209b36de22b7249dc7188d0c13fd40cd66d93fe76d88a3de22c2 + languageName: node + linkType: hard + +"@tiptap/extension-text-style@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-text-style@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + checksum: 308f7fecea8619786b188745d8dfca7b39018cebd4cedb8774166202a746fa361fe453f1df7b0512dc46b433c3f6333cc969680f135238becf4fb7e7cbb140a6 + languageName: node + linkType: hard + +"@tiptap/extension-text@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-text@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + checksum: 34627b19ca68562d84f6d5e2a443355670c3a08689edd59d176949301875d6ba88cc8ba1650df0d3170678a442e76bb787d7ce5ea79f7e788df681fa55209b6a + languageName: node + linkType: hard + +"@tiptap/extension-underline@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/extension-underline@npm:2.8.0" + peerDependencies: + "@tiptap/core": ^2.7.0 + checksum: 6e1c5146104a8c4235c7f8a18522447d278cf8ee40487240eaa71a00d9f023c947cd22fffbef95ddb898a960dcdd1aec73f089a5e13b02ab3450e4e46f51c75f + languageName: node + linkType: hard + +"@tiptap/pm@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/pm@npm:2.8.0" + dependencies: + prosemirror-changeset: "npm:^2.2.1" + prosemirror-collab: "npm:^1.3.1" + prosemirror-commands: "npm:^1.6.0" + prosemirror-dropcursor: "npm:^1.8.1" + prosemirror-gapcursor: "npm:^1.3.2" + prosemirror-history: "npm:^1.4.1" + prosemirror-inputrules: "npm:^1.4.0" + prosemirror-keymap: "npm:^1.2.2" + prosemirror-markdown: "npm:^1.13.0" + prosemirror-menu: "npm:^1.2.4" + prosemirror-model: "npm:^1.22.3" + prosemirror-schema-basic: "npm:^1.2.3" + prosemirror-schema-list: "npm:^1.4.1" + prosemirror-state: "npm:^1.4.3" + prosemirror-tables: "npm:^1.4.0" + prosemirror-trailing-node: "npm:^3.0.0" + prosemirror-transform: "npm:^1.10.0" + prosemirror-view: "npm:^1.33.10" + checksum: 700e346f64f401fde88836fab18f0f9bdafc766509b7c8d938266b6c5e7aa2389ed0447c5e1acc4c02980e5bf49b67d755254cc2ed248039da46752a49afa5e7 + languageName: node + linkType: hard + +"@tiptap/react@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/react@npm:2.8.0" + dependencies: + "@tiptap/extension-bubble-menu": "npm:^2.8.0" + "@tiptap/extension-floating-menu": "npm:^2.8.0" + "@types/use-sync-external-store": "npm:^0.0.6" + fast-deep-equal: "npm:^3" + use-sync-external-store: "npm:^1.2.2" + peerDependencies: + "@tiptap/core": ^2.7.0 + "@tiptap/pm": ^2.7.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + checksum: c82dac016cee168228bdd4ca3d91be2c2c84c81a0ea92d667747e7f6f72f1ebc66981927e1d893f3653c2671c9cffd6aff4a2b2b5a6b55d1384aca64f9c7f4b1 + languageName: node + linkType: hard + +"@tiptap/starter-kit@npm:^2.8.0": + version: 2.8.0 + resolution: "@tiptap/starter-kit@npm:2.8.0" + dependencies: + "@tiptap/core": "npm:^2.8.0" + "@tiptap/extension-blockquote": "npm:^2.8.0" + "@tiptap/extension-bold": "npm:^2.8.0" + "@tiptap/extension-bullet-list": "npm:^2.8.0" + "@tiptap/extension-code": "npm:^2.8.0" + "@tiptap/extension-code-block": "npm:^2.8.0" + "@tiptap/extension-document": "npm:^2.8.0" + "@tiptap/extension-dropcursor": "npm:^2.8.0" + "@tiptap/extension-gapcursor": "npm:^2.8.0" + "@tiptap/extension-hard-break": "npm:^2.8.0" + "@tiptap/extension-heading": "npm:^2.8.0" + "@tiptap/extension-history": "npm:^2.8.0" + "@tiptap/extension-horizontal-rule": "npm:^2.8.0" + "@tiptap/extension-italic": "npm:^2.8.0" + "@tiptap/extension-list-item": "npm:^2.8.0" + "@tiptap/extension-ordered-list": "npm:^2.8.0" + "@tiptap/extension-paragraph": "npm:^2.8.0" + "@tiptap/extension-strike": "npm:^2.8.0" + "@tiptap/extension-text": "npm:^2.8.0" + "@tiptap/pm": "npm:^2.8.0" + checksum: 8d0490d0211d0a0ea32885bb429759aa9e3335a036892c38f19ae440ab1b94f3c258fd6c2db9e038fffd99f245b739383a29eb3c0224cc02fe94fab9906f6c03 + languageName: node + linkType: hard + "@tokenizer/token@npm:^0.3.0": version: 0.3.0 resolution: "@tokenizer/token@npm:0.3.0" @@ -9931,6 +10280,13 @@ __metadata: languageName: node linkType: hard +"@types/linkify-it@npm:^5": + version: 5.0.0 + resolution: "@types/linkify-it@npm:5.0.0" + checksum: c3919044d4876f9d71d037e861745cd2485c95ac8c36a4fa67b132d4e60eb1d067e123cc7965c9cf5110eea351517d767f0d306af5e9147d6d0af87bc374ddcf + languageName: node + linkType: hard + "@types/lodash@npm:4.14.156": version: 4.14.156 resolution: "@types/lodash@npm:4.14.156" @@ -9966,6 +10322,16 @@ __metadata: languageName: node linkType: hard +"@types/markdown-it@npm:^14.0.0": + version: 14.1.2 + resolution: "@types/markdown-it@npm:14.1.2" + dependencies: + "@types/linkify-it": "npm:^5" + "@types/mdurl": "npm:^2" + checksum: ca2f239c8d59610b9f936fd40261a6ccf2fa1ae27a21816c031e5712542dcf9ee01e2fe29b31118df90716e11ade54e47d92a498e9b6488800e77ca8827255a2 + languageName: node + linkType: hard + "@types/mdast@npm:^3.0.0, @types/mdast@npm:^3.0.3": version: 3.0.10 resolution: "@types/mdast@npm:3.0.10" @@ -9975,6 +10341,13 @@ __metadata: languageName: node linkType: hard +"@types/mdurl@npm:^2": + version: 2.0.0 + resolution: "@types/mdurl@npm:2.0.0" + checksum: 78746e96c655ceed63db06382da466fd52c7e9dc54d60b12973dfdd110cae06b9439c4b90e17bb8d4461109184b3ea9f3e9f96b3e4bf4aa9fe18b6ac35f283c8 + languageName: node + linkType: hard + "@types/mime@npm:^1": version: 1.3.2 resolution: "@types/mime@npm:1.3.2" @@ -10389,6 +10762,13 @@ __metadata: languageName: node linkType: hard +"@types/use-sync-external-store@npm:^0.0.6": + version: 0.0.6 + resolution: "@types/use-sync-external-store@npm:0.0.6" + checksum: a95ce330668501ad9b1c5b7f2b14872ad201e552a0e567787b8f1588b22c7040c7c3d80f142cbb9f92d13c4ea41c46af57a20f2af4edf27f224d352abcfe4049 + languageName: node + linkType: hard + "@types/uuid@npm:3.4.10": version: 3.4.10 resolution: "@types/uuid@npm:3.4.10" @@ -12035,9 +12415,9 @@ __metadata: languageName: node linkType: hard -"aristid-ds@npm:9.0.0-dd980fc": - version: 9.0.0-dd980fc - resolution: "aristid-ds@npm:9.0.0-dd980fc" +"aristid-ds@npm:10.0.0-1473f00": + version: 10.0.0-1473f00 + resolution: "aristid-ds@npm:10.0.0-1473f00" dependencies: "@dnd-kit/core": "npm:^6.1.0" "@dnd-kit/modifiers": "npm:^7.0.0" @@ -12048,6 +12428,17 @@ __metadata: "@fortawesome/free-solid-svg-icons": "npm:^6.4.2" "@fortawesome/react-fontawesome": "npm:^0.2.0" "@sass-fairy/string": "npm:^1.3.0" + "@tiptap/extension-character-count": "npm:^2.7.4" + "@tiptap/extension-document": "npm:^2.7.2" + "@tiptap/extension-heading": "npm:^2.7.2" + "@tiptap/extension-link": "npm:^2.7.2" + "@tiptap/extension-placeholder": "npm:^2.8.0" + "@tiptap/extension-text-align": "npm:^2.8.0" + "@tiptap/extension-text-style": "npm:^2.8.0" + "@tiptap/extension-underline": "npm:^2.8.0" + "@tiptap/pm": "npm:^2.8.0" + "@tiptap/react": "npm:^2.8.0" + "@tiptap/starter-kit": "npm:^2.8.0" antd: "npm:5.15.3" antd-img-crop: "npm:^4.21.0" axe-core: "npm:^4.8.1" @@ -12082,7 +12473,7 @@ __metadata: react-uuid: ^2.0.0 remark-gfm: ^3.0.1 styled-components: ^6.0.7 - checksum: 3f6fa25d81926e6512f67f41926f063be0f93124ef6ee5aaa6694424b8ac18712a94d3c17c2ac231a883aee85683905d73e2bd6188cad2d2d627f82bfbbd3805 + checksum: ec1cc988d491267456ed9e08c0d231bf3277edb3a9dc291ad080e502f2449c3c7c1935c1ffbd998c4455c331fced10b11a11ff6f764032c740ea1e6f9bb25d9d languageName: node linkType: hard @@ -14991,6 +15382,13 @@ __metadata: languageName: node linkType: hard +"crelt@npm:^1.0.0": + version: 1.0.6 + resolution: "crelt@npm:1.0.6" + checksum: 5ed326ca6bd243b1dba6b943f665b21c2c04be03271824bc48f20dba324b0f8233e221f8c67312526d24af2b1243c023dc05a41bd8bd05d1a479fd2c72fb39c3 + languageName: node + linkType: hard + "cross-fetch@npm:3.1.5, cross-fetch@npm:^3.0.4, cross-fetch@npm:^3.1.5": version: 3.1.5 resolution: "cross-fetch@npm:3.1.5" @@ -15253,7 +15651,7 @@ __metadata: apollo: "npm:2.34.0" apollo-cache-inmemory: "npm:1.6.6" apollo-upload-client: "npm:14.1.3" - aristid-ds: "npm:9.0.0-dd980fc" + aristid-ds: "npm:10.0.0-1473f00" commander: "npm:5.1.0" dayjs: "npm:1.11.10" graphql: "npm:15.0.0" @@ -17579,7 +17977,7 @@ __metadata: languageName: node linkType: hard -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": +"fast-deep-equal@npm:^3, fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d @@ -23103,6 +23501,22 @@ __metadata: languageName: node linkType: hard +"linkify-it@npm:^5.0.0": + version: 5.0.0 + resolution: "linkify-it@npm:5.0.0" + dependencies: + uc.micro: "npm:^2.0.0" + checksum: ef3b7609dda6ec0c0be8a7b879cea195f0d36387b0011660cd6711bba0ad82137f59b458b7e703ec74f11d88e7c1328e2ad9b855a8500c0ded67461a8c4519e6 + languageName: node + linkType: hard + +"linkifyjs@npm:^4.1.0": + version: 4.1.3 + resolution: "linkifyjs@npm:4.1.3" + checksum: 7c17dac6a66fdea30e56b17d49d882a333833ec093993723738842b224c8cbd87bcddc6f51f2deac9529c868f162358d7acb0c44753b92832027ae761eceac1a + languageName: node + linkType: hard + "lint-staged@npm:10.5.3": version: 10.5.3 resolution: "lint-staged@npm:10.5.3" @@ -23731,7 +24145,7 @@ __metadata: "@types/react-dom": "npm:18.2.6" "@vitejs/plugin-react": "npm:3.1.0" antd: "npm:5.15.3" - aristid-ds: "npm:9.0.0-dd980fc" + aristid-ds: "npm:10.0.0-1473f00" i18next: "npm:22.5.0" i18next-browser-languagedetector: "npm:7.0.2" i18next-http-backend: "npm:2.1.1" @@ -24042,6 +24456,22 @@ __metadata: languageName: node linkType: hard +"markdown-it@npm:^14.0.0": + version: 14.1.0 + resolution: "markdown-it@npm:14.1.0" + dependencies: + argparse: "npm:^2.0.1" + entities: "npm:^4.4.0" + linkify-it: "npm:^5.0.0" + mdurl: "npm:^2.0.0" + punycode.js: "npm:^2.3.1" + uc.micro: "npm:^2.1.0" + bin: + markdown-it: bin/markdown-it.mjs + checksum: f34f921be178ed0607ba9e3e27c733642be445e9bb6b1dba88da7aafe8ba1bc5d2f1c3aa8f3fc33b49a902da4e4c08c2feadfafb290b8c7dda766208bb6483a9 + languageName: node + linkType: hard + "markdown-table@npm:^3.0.0": version: 3.0.3 resolution: "markdown-table@npm:3.0.3" @@ -24224,6 +24654,13 @@ __metadata: languageName: node linkType: hard +"mdurl@npm:^2.0.0": + version: 2.0.0 + resolution: "mdurl@npm:2.0.0" + checksum: 1720349d4a53e401aa993241368e35c0ad13d816ad0b28388928c58ca9faa0cf755fa45f18ccbf64f4ce54a845a50ddce5c84e4016897b513096a68dac4b0158 + languageName: node + linkType: hard + "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -25890,6 +26327,13 @@ __metadata: languageName: node linkType: hard +"orderedmap@npm:^2.0.0": + version: 2.1.1 + resolution: "orderedmap@npm:2.1.1" + checksum: 082cf970b0b66d1c5a904b07880534092ce8a2f2eea7a52cf111f6c956210fa88226c13866aef4d22a3abe56924f21ead12f7ee8c1dfaf2f63d897a4e7c23328 + languageName: node + linkType: hard + "os-tmpdir@npm:~1.0.2": version: 1.0.2 resolution: "os-tmpdir@npm:1.0.2" @@ -26479,7 +26923,7 @@ __metadata: "@vitejs/plugin-react": "npm:3.1.0" antd: "npm:5.15.3" apollo: "npm:2.34.0" - aristid-ds: "npm:9.0.0-dd980fc" + aristid-ds: "npm:10.0.0-1473f00" commander: "npm:10.0.0" cross-fetch: "npm:3.1.5" graphql-ws: "npm:5.12.0" @@ -26784,6 +27228,200 @@ __metadata: languageName: node linkType: hard +"prosemirror-changeset@npm:^2.2.1": + version: 2.2.1 + resolution: "prosemirror-changeset@npm:2.2.1" + dependencies: + prosemirror-transform: "npm:^1.0.0" + checksum: 39c70af95e2a9be8d414d546188656e5d6db4034e2640c887ff72c7ff8e638817ff061b5c08590e8ba8027b5b0c1954dc60b62d2d2a8e3a7b7d6a05453a283ad + languageName: node + linkType: hard + +"prosemirror-collab@npm:^1.3.1": + version: 1.3.1 + resolution: "prosemirror-collab@npm:1.3.1" + dependencies: + prosemirror-state: "npm:^1.0.0" + checksum: 6b1ccc52841fbb62a39ef0fb8da2d731381030609ea7a0ba7d533b1937d56fe4b91344e79c023e790bed5392efe9f917c41c8434e0a379dc1dc842ba83594e34 + languageName: node + linkType: hard + +"prosemirror-commands@npm:^1.0.0, prosemirror-commands@npm:^1.6.0": + version: 1.6.0 + resolution: "prosemirror-commands@npm:1.6.0" + dependencies: + prosemirror-model: "npm:^1.0.0" + prosemirror-state: "npm:^1.0.0" + prosemirror-transform: "npm:^1.0.0" + checksum: 1aeb0b0aa6d80fa7cc013a4cb810090a2b3eee88938bc6e8eb4c4c64ae14a2fed593725cb482b8d3b5ab262488bbd3df5ca0f27b951cea135108496f9d525ade + languageName: node + linkType: hard + +"prosemirror-dropcursor@npm:^1.8.1": + version: 1.8.1 + resolution: "prosemirror-dropcursor@npm:1.8.1" + dependencies: + prosemirror-state: "npm:^1.0.0" + prosemirror-transform: "npm:^1.1.0" + prosemirror-view: "npm:^1.1.0" + checksum: a2584dfbbeed3d7f703c1f7f174396ebf85f29e4f31a43e08cb9c7596d6d0b82f1bc73d0bbcd7c25e421d875ef0dc7f0c9918287fffa5267b6c65e89659444d0 + languageName: node + linkType: hard + +"prosemirror-gapcursor@npm:^1.3.2": + version: 1.3.2 + resolution: "prosemirror-gapcursor@npm:1.3.2" + dependencies: + prosemirror-keymap: "npm:^1.0.0" + prosemirror-model: "npm:^1.0.0" + prosemirror-state: "npm:^1.0.0" + prosemirror-view: "npm:^1.0.0" + checksum: 8de9e9c0f7f69ae74a3189a86b3e8a2bd8dd5bd693c18efc5271ad4a4c6777092906c8ac7722ab5d1428de04b13404c676fddef54966ed3606b3040602eb1325 + languageName: node + linkType: hard + +"prosemirror-history@npm:^1.0.0, prosemirror-history@npm:^1.4.1": + version: 1.4.1 + resolution: "prosemirror-history@npm:1.4.1" + dependencies: + prosemirror-state: "npm:^1.2.2" + prosemirror-transform: "npm:^1.0.0" + prosemirror-view: "npm:^1.31.0" + rope-sequence: "npm:^1.3.0" + checksum: 7ac68fc8233dcd159bb15c2aaf542fd9aa0524b50523b24de6c8209b1f5eae9545f7fa82d584c93e68b1e910bcae5e07bee1085094aca4c565c607cf737c39b8 + languageName: node + linkType: hard + +"prosemirror-inputrules@npm:^1.4.0": + version: 1.4.0 + resolution: "prosemirror-inputrules@npm:1.4.0" + dependencies: + prosemirror-state: "npm:^1.0.0" + prosemirror-transform: "npm:^1.0.0" + checksum: 04453d06a4bb3540e3df254e46bcafd4faaf73cd72f4486a804af598a084ee9cddb9fedd23a09c34c79ed98182b151461f447e4f5920bdd7465327975c773bca + languageName: node + linkType: hard + +"prosemirror-keymap@npm:^1.0.0, prosemirror-keymap@npm:^1.1.2, prosemirror-keymap@npm:^1.2.2": + version: 1.2.2 + resolution: "prosemirror-keymap@npm:1.2.2" + dependencies: + prosemirror-state: "npm:^1.0.0" + w3c-keyname: "npm:^2.2.0" + checksum: 75a6db1a8f899918a25606fa5824ffe9dea9729b8fb4346854aa6f0e37a0f8bad40cc1b01eef1046ee442f76afc234c8eb2b1c50a03c8b6062f3cd348694b8be + languageName: node + linkType: hard + +"prosemirror-markdown@npm:^1.13.0": + version: 1.13.1 + resolution: "prosemirror-markdown@npm:1.13.1" + dependencies: + "@types/markdown-it": "npm:^14.0.0" + markdown-it: "npm:^14.0.0" + prosemirror-model: "npm:^1.20.0" + checksum: 91af650e17e92c1c911c8bbf7dd4c6d5ba56ee140b0fe493e4e4bab85de1121cece3736eeabb7f789ef2b40afd1f6abe870f908213ce1918fd590257a8932c6c + languageName: node + linkType: hard + +"prosemirror-menu@npm:^1.2.4": + version: 1.2.4 + resolution: "prosemirror-menu@npm:1.2.4" + dependencies: + crelt: "npm:^1.0.0" + prosemirror-commands: "npm:^1.0.0" + prosemirror-history: "npm:^1.0.0" + prosemirror-state: "npm:^1.0.0" + checksum: 1148419fd115e86d43096d1e7574fd657547ac8875ee34ae9a2056b15f3bcc6ca104aaa305cde5ff72f19d4c4cfc9989909271d6cd317549d749a15aa4c2e2a1 + languageName: node + linkType: hard + +"prosemirror-model@npm:^1.0.0, prosemirror-model@npm:^1.19.0, prosemirror-model@npm:^1.20.0, prosemirror-model@npm:^1.21.0, prosemirror-model@npm:^1.22.3, prosemirror-model@npm:^1.8.1": + version: 1.23.0 + resolution: "prosemirror-model@npm:1.23.0" + dependencies: + orderedmap: "npm:^2.0.0" + checksum: ecffd212ae140dd05ded5c36c9f76df4c07c2db348c7330d288face2c2d5de928e3cf85df49f65b2b6dad3297515524973dd378beb64351d42c0cc166cf4a1df + languageName: node + linkType: hard + +"prosemirror-schema-basic@npm:^1.2.3": + version: 1.2.3 + resolution: "prosemirror-schema-basic@npm:1.2.3" + dependencies: + prosemirror-model: "npm:^1.19.0" + checksum: af129408a6625707ff001077565d609b1d6b4e9393e86cc628c58bc2d995f5144921f83b6123db4210b48cf26c7899dd38a5de9fdc0c288a2d40650c8e018092 + languageName: node + linkType: hard + +"prosemirror-schema-list@npm:^1.4.1": + version: 1.4.1 + resolution: "prosemirror-schema-list@npm:1.4.1" + dependencies: + prosemirror-model: "npm:^1.0.0" + prosemirror-state: "npm:^1.0.0" + prosemirror-transform: "npm:^1.7.3" + checksum: a1d58811ad17d99cc426ed898c725b2e245512d57a26723cd7fb933fad70b5def3eb619f201090c50351eef9b5d129e6479996b02c639a669e4e751a1c71e40e + languageName: node + linkType: hard + +"prosemirror-state@npm:^1.0.0, prosemirror-state@npm:^1.2.2, prosemirror-state@npm:^1.3.1, prosemirror-state@npm:^1.4.3": + version: 1.4.3 + resolution: "prosemirror-state@npm:1.4.3" + dependencies: + prosemirror-model: "npm:^1.0.0" + prosemirror-transform: "npm:^1.0.0" + prosemirror-view: "npm:^1.27.0" + checksum: 57eb0cc7d7412b9d87430b5a9e489d60aed3a3eb9deffff4314b76ad6a5ae019618be658303796285877c9c535392b97b5a4d4d173485b0dd0403671ada9f2a1 + languageName: node + linkType: hard + +"prosemirror-tables@npm:^1.4.0": + version: 1.5.0 + resolution: "prosemirror-tables@npm:1.5.0" + dependencies: + prosemirror-keymap: "npm:^1.1.2" + prosemirror-model: "npm:^1.8.1" + prosemirror-state: "npm:^1.3.1" + prosemirror-transform: "npm:^1.2.1" + prosemirror-view: "npm:^1.13.3" + checksum: 77c2240705dfee9acd4c829cc209b7024dd5f8f91ebed2b149f0b4bdce941804aec2162e2b6be3878f30e978895bfa1c64c0a4c5cc10c602611b29eb1add102c + languageName: node + linkType: hard + +"prosemirror-trailing-node@npm:^3.0.0": + version: 3.0.0 + resolution: "prosemirror-trailing-node@npm:3.0.0" + dependencies: + "@remirror/core-constants": "npm:3.0.0" + escape-string-regexp: "npm:^4.0.0" + peerDependencies: + prosemirror-model: ^1.22.1 + prosemirror-state: ^1.4.2 + prosemirror-view: ^1.33.8 + checksum: 044b199b8001373c1bd4c1573876597840df89e66c1f02497a8bb4f2885ebe830faa9764e1269ed6c24bf2fde06ad5f40322afde648ae331d4663f531000adaa + languageName: node + linkType: hard + +"prosemirror-transform@npm:^1.0.0, prosemirror-transform@npm:^1.1.0, prosemirror-transform@npm:^1.10.0, prosemirror-transform@npm:^1.2.1, prosemirror-transform@npm:^1.7.3": + version: 1.10.0 + resolution: "prosemirror-transform@npm:1.10.0" + dependencies: + prosemirror-model: "npm:^1.21.0" + checksum: 1ceb7d221414e7a54bfdd6559bbb9b5b18403b3034769af5ed34d8f38466c4be4087060adbba923813bf7ffc3bc158f94ff11ec7bf79f5b47aada3fb3c313664 + languageName: node + linkType: hard + +"prosemirror-view@npm:^1.0.0, prosemirror-view@npm:^1.1.0, prosemirror-view@npm:^1.13.3, prosemirror-view@npm:^1.27.0, prosemirror-view@npm:^1.31.0, prosemirror-view@npm:^1.33.10": + version: 1.34.3 + resolution: "prosemirror-view@npm:1.34.3" + dependencies: + prosemirror-model: "npm:^1.20.0" + prosemirror-state: "npm:^1.0.0" + prosemirror-transform: "npm:^1.1.0" + checksum: 070dbfb49bcfe94d3252bd5cae7e0c49d2aa0f0420366dba85fd496263f76be90045126eb1d55caa0876874cb7d5e4e08a139c24b664c865f0eb64ecee97fa5c + languageName: node + linkType: hard + "protocols@npm:^2.0.0, protocols@npm:^2.0.1": version: 2.0.1 resolution: "protocols@npm:2.0.1" @@ -26846,6 +27484,13 @@ __metadata: languageName: node linkType: hard +"punycode.js@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode.js@npm:2.3.1" + checksum: f0e946d1edf063f9e3d30a32ca86d8ff90ed13ca40dad9c75d37510a04473340cfc98db23a905cc1e517b1e9deb0f6021dce6f422ace235c60d3c9ac47c5a16a + languageName: node + linkType: hard + "punycode@npm:2.x.x, punycode@npm:^2.1.0, punycode@npm:^2.1.1": version: 2.1.1 resolution: "punycode@npm:2.1.1" @@ -29054,6 +29699,13 @@ __metadata: languageName: node linkType: hard +"rope-sequence@npm:^1.3.0": + version: 1.3.4 + resolution: "rope-sequence@npm:1.3.4" + checksum: 57b5dd8c28ece05bb5f33eea6ea56facb00d4893269bb83aa8656f69065c1bc0707ec9bb816bce0e5f4d489d88942c7f0f0a1c3655773753ef158c9dd0e9456d + languageName: node + linkType: hard + "rst-selector-parser@npm:^2.2.3": version: 2.2.3 resolution: "rst-selector-parser@npm:2.2.3" @@ -30754,6 +31406,15 @@ __metadata: languageName: node linkType: hard +"tippy.js@npm:^6.3.7": + version: 6.3.7 + resolution: "tippy.js@npm:6.3.7" + dependencies: + "@popperjs/core": "npm:^2.9.0" + checksum: 9bd1c6ab68704dd10b8896fd66e28f3b4b4017a32b8802a9d57a565dee1704df45c249d8363bcaca235dbc0d9a7a90d6f1326f1e6b999f7809b36599a3f92eb3 + languageName: node + linkType: hard + "title-case@npm:^3.0.3": version: 3.0.3 resolution: "title-case@npm:3.0.3" @@ -31598,6 +32259,13 @@ __metadata: languageName: node linkType: hard +"uc.micro@npm:^2.0.0, uc.micro@npm:^2.1.0": + version: 2.1.0 + resolution: "uc.micro@npm:2.1.0" + checksum: 37197358242eb9afe367502d4638ac8c5838b78792ab218eafe48287b0ed28aaca268ec0392cc5729f6c90266744de32c06ae938549aee041fc93b0f9672d6b2 + languageName: node + linkType: hard + "uglify-js@npm:^3.1.4": version: 3.17.4 resolution: "uglify-js@npm:3.17.4" @@ -32078,6 +32746,15 @@ __metadata: languageName: node linkType: hard +"use-sync-external-store@npm:^1.2.2": + version: 1.2.2 + resolution: "use-sync-external-store@npm:1.2.2" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 671e9c190aab9a8374a5d468c6ba17f52c38b6fae970110bc196fc1e2b57204149aea9619be49a1bb5207fb6e51d8afd19c3bcb94afe61813fed039821461dc0 + languageName: node + linkType: hard + "use@npm:^3.1.0": version: 3.1.1 resolution: "use@npm:3.1.1" @@ -32433,6 +33110,13 @@ __metadata: languageName: node linkType: hard +"w3c-keyname@npm:^2.2.0": + version: 2.2.8 + resolution: "w3c-keyname@npm:2.2.8" + checksum: 95bafa4c04fa2f685a86ca1000069c1ec43ace1f8776c10f226a73296caeddd83f893db885c2c220ebeb6c52d424e3b54d7c0c1e963bbf204038ff1a944fbb07 + languageName: node + linkType: hard + "w3c-xmlserializer@npm:^4.0.0": version: 4.0.0 resolution: "w3c-xmlserializer@npm:4.0.0"