diff --git a/.changeset/super-car-drifto.md b/.changeset/super-car-drifto.md new file mode 100644 index 0000000000..989eb5fe8c --- /dev/null +++ b/.changeset/super-car-drifto.md @@ -0,0 +1,5 @@ +--- +"@comet/admin-rte": minor +--- + +Add translation button to rte if translations are enabled. The content is translated via extracting the the text from the editor state, translating it and then creating a new state while perserving the rte formating. diff --git a/packages/admin/admin-rte/package.json b/packages/admin/admin-rte/package.json index ed0a8481ed..c44e09ca10 100644 --- a/packages/admin/admin-rte/package.json +++ b/packages/admin/admin-rte/package.json @@ -33,8 +33,9 @@ "devDependencies": { "@babel/cli": "^7.17.6", "@babel/core": "^7.20.12", - "@comet/admin-babel-preset": "workspace:^5.1.0", - "@comet/eslint-config": "workspace:^5.1.0", + "@comet/admin": "workspace:^5.3.0", + "@comet/admin-babel-preset": "workspace:^5.3.0", + "@comet/eslint-config": "workspace:^5.3.0", "@mui/icons-material": "^5.0.0", "@mui/material": "^5.0.0", "@mui/styles": "^5.0.0", diff --git a/packages/admin/admin-rte/src/core/Controls/Controls.tsx b/packages/admin/admin-rte/src/core/Controls/Controls.tsx index dd1dc01ddf..4b36556730 100644 --- a/packages/admin/admin-rte/src/core/Controls/Controls.tsx +++ b/packages/admin/admin-rte/src/core/Controls/Controls.tsx @@ -10,6 +10,7 @@ import ListsControls from "./ListsControls"; import ListsIndentControls from "./ListsIndentControls"; import SpecialCharactersControls from "./SpecialCharactersControls"; import Toolbar from "./Toolbar"; +import TranslationControls from "./TranslationControls"; export default function Controls(p: IControlProps) { const { @@ -22,6 +23,7 @@ export default function Controls(p: IControlProps) { {[ HistoryControls, BlockTypesControls, + TranslationControls, InlineStyleTypeControls, ListsControls, ListsIndentControls, diff --git a/packages/admin/admin-rte/src/core/Controls/TranslationControls.tsx b/packages/admin/admin-rte/src/core/Controls/TranslationControls.tsx new file mode 100644 index 0000000000..97fe5e9a6a --- /dev/null +++ b/packages/admin/admin-rte/src/core/Controls/TranslationControls.tsx @@ -0,0 +1,14 @@ +import { useContentTranslationService } from "@comet/admin"; +import { ButtonGroup } from "@mui/material"; +import * as React from "react"; + +import TranslationToolbarButton from "../translation/ToolbarButton"; +import { IControlProps } from "../types"; + +function TranslationControls(props: IControlProps) { + const translationContext = useContentTranslationService(); + + return {translationContext && }; +} + +export default TranslationControls; diff --git a/packages/admin/admin-rte/src/core/translation/ToolbarButton.tsx b/packages/admin/admin-rte/src/core/translation/ToolbarButton.tsx new file mode 100644 index 0000000000..606a7fdd8f --- /dev/null +++ b/packages/admin/admin-rte/src/core/translation/ToolbarButton.tsx @@ -0,0 +1,45 @@ +import { useContentTranslationService } from "@comet/admin"; +import { Translate } from "@comet/admin-icons"; +import Tooltip from "@mui/material/Tooltip"; +import { convertToRaw } from "draft-js"; +import * as React from "react"; +import { FormattedMessage } from "react-intl"; + +import ControlButton from "../Controls/ControlButton"; +import { IControlProps } from "../types"; +import { transformStateToXml } from "./xml/transformStateToXml"; +import { translateAndTransformXmlToState } from "./xml/translateAndTransformToState"; + +function ToolbarButton({ editorState, setEditorState }: IControlProps): React.ReactElement { + const translationContext = useContentTranslationService(); + + async function handleClick(event: React.MouseEvent) { + if (translationContext) { + event.preventDefault(); + + const contentState = editorState.getCurrentContent(); + + const xml = transformStateToXml(contentState); + + const translationPromises = xml.map(async (item) => ({ + original: item, + replaceWith: (await translationContext.translate(item)) ?? item, + })); + const translations = await Promise.all(translationPromises); + + const translatedState = translateAndTransformXmlToState(contentState, convertToRaw(contentState), translations); + + setEditorState(translatedState); + } + } + + return ( + } placement="top"> + + + + + ); +} + +export default ToolbarButton; diff --git a/packages/admin/admin-rte/src/core/translation/xml/getEntityRanges.ts b/packages/admin/admin-rte/src/core/translation/xml/getEntityRanges.ts new file mode 100644 index 0000000000..d5b1c3dd5e --- /dev/null +++ b/packages/admin/admin-rte/src/core/translation/xml/getEntityRanges.ts @@ -0,0 +1,100 @@ +import type { CharacterMetadata } from "draft-js"; +import type { List } from "immutable"; +import { is, OrderedSet } from "immutable"; + +type EntityKey = string | undefined | null; +type Style = OrderedSet; +type StyleRangeWithId = [string, { style: string; id: number }[]]; +type StyleRange = [string, Style]; +type EntityRange = [EntityKey, Array]; +export type CharacterMetaList = List; + +export const EMPTY_SET: Style = OrderedSet(); + +/* + This implementation is inspired by https://github.com/jpuri/draftjs-to-html. +*/ +export default function getEntityRanges(text: string, charMetaList: CharacterMetaList): EntityRange[] { + let charEntity: EntityKey = null; + let prevCharEntity: EntityKey = null; + const ranges: Array = []; + let rangeStart = 0; + let lastStyle = null; + // the id is used for the pseudotags + let styleId = 0; + + for (let i = 0, len = text.length; i < len; i++) { + prevCharEntity = charEntity; + const meta: CharacterMetadata = charMetaList.get(i); + charEntity = meta ? meta.getEntity() : null; + + if (i > 0 && charEntity !== prevCharEntity) { + /* Styles are always within entities */ + const styleRanges = getStyleRanges(text.slice(rangeStart, i), charMetaList.slice(rangeStart, i), lastStyle, styleId); + styleId = styleRanges.styleId; + ranges.push([prevCharEntity, styleRanges.styleRanges]); + rangeStart = i; + lastStyle = ranges[ranges.length - 1]; + } + } + + ranges.push([charEntity, getStyleRanges(text.slice(rangeStart), charMetaList.slice(rangeStart), lastStyle, styleId).styleRanges]); + + return ranges; +} + +function getStyleRanges( + text: string, + charMetaList: Immutable.Iterable, + lastStyle: EntityRange | null, + styleId: number, +): { styleRanges: StyleRangeWithId[]; styleId: number } { + let charStyle = EMPTY_SET; + let prevCharStyle = charStyle; + const ranges: StyleRange[] = []; + let rangeStart = 0; + + /* The start and end of an entity always mark a single range. +If a style range starts before an entity range and extends into it, the last style must be used here, otherwise it will be interpreted as a new style range. */ + const lastPreviousStyleRange = lastStyle ? lastStyle[1][lastStyle[1].length - 1][1] : []; + + for (let i = 0, len = text.length; i < len; i++) { + prevCharStyle = charStyle; + const meta = charMetaList.get(i); + charStyle = meta ? meta.getStyle() : EMPTY_SET; + + if (i > 0 && !is(charStyle, prevCharStyle)) { + ranges.push([text.slice(rangeStart, i), prevCharStyle]); + rangeStart = i; + } + } + ranges.push([text.slice(rangeStart), charStyle]); + + const styleRangesWithIds: [string, { style: string; id: number }[]][] = []; + + // This adds ids to the styles to identify related styling tags in export + for (let i = 0; i < ranges.length; i++) { + const stylesArray = ranges[i][1].toArray(); + + const styles = stylesArray.map((style) => { + // when entity ranges are in the text, the text is split up at their positions, therefore it's needed to look at the previous style + const enduringStyle = lastPreviousStyleRange.find((item) => item.style === style); + + if (enduringStyle && ranges[i - 1]?.[1].toArray().length !== 0) { + return { style, id: enduringStyle.id }; + } else if (i > 0 && ranges[i - 1][1].toArray().includes(style)) { + const previousStyle = styleRangesWithIds[i - 1][1].find((previousStyle) => previousStyle.style === style); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return { style, id: previousStyle!.id }; + } + + styleId += 1; + + return { style, id: styleId }; + }); + + styleRangesWithIds.push([ranges[i][0], styles]); + } + + return { styleRanges: styleRangesWithIds, styleId }; +} diff --git a/packages/admin/admin-rte/src/core/translation/xml/transformStateToXml.ts b/packages/admin/admin-rte/src/core/translation/xml/transformStateToXml.ts new file mode 100644 index 0000000000..3e3bed9d55 --- /dev/null +++ b/packages/admin/admin-rte/src/core/translation/xml/transformStateToXml.ts @@ -0,0 +1,171 @@ +import { CharacterMetadata, ContentBlock, ContentState } from "draft-js"; +import type { List } from "immutable"; + +/* + This is a first, very basic implementation, inspired by https://github.com/sstur/draft-js-utils/blob/master/packages/draft-js-export-html/src/stateToHTML.js. + Images, code snippets, custom options as attributes, elements or styles are not taken into account. +*/ +import getEntityRanges from "./getEntityRanges"; + +type CharacterMetaList = List; + +export const INLINE_STYLE = { + BOLD: "BOLD", + ITALIC: "ITALIC", + STRIKETHROUGH: "STRIKETHROUGH", + UNDERLINE: "UNDERLINE", + SUB: "SUB", + SUP: "SUP", +}; + +export const ENTITY_TYPE = { + LINK: "LINK", +}; + +// Order: inner-most style to outer-most. +// Examle: foo +const DEFAULT_STYLE_ORDER = [ + INLINE_STYLE.BOLD, + INLINE_STYLE.ITALIC, + INLINE_STYLE.UNDERLINE, + INLINE_STYLE.STRIKETHROUGH, + INLINE_STYLE.SUB, + INLINE_STYLE.SUP, +]; + +const DEFAULT_STYLE_MAP = { + [INLINE_STYLE.BOLD]: { element: "inline" }, + [INLINE_STYLE.ITALIC]: { element: "inline" }, + [INLINE_STYLE.STRIKETHROUGH]: { element: "inline" }, + [INLINE_STYLE.UNDERLINE]: { element: "inline" }, + [INLINE_STYLE.SUB]: { element: "inline" }, + [INLINE_STYLE.SUP]: { element: "inline" }, +}; + +/* + escapes special characters in the text content to their HTML/XML entities +*/ +function encodeContent(text: string): string { + return text.split("&").join("&").split("<").join("<").split(">").join(">").split("\xA0").join(" ").split("\n").join(`
\n`); +} + +class MarkupGenerator { + blocks: ContentBlock[] = []; + contentState: ContentState | undefined; + output: string[] = []; + currentBlock = 0; + indentLevel = 0; + totalBlocks = 0; + inlineStyles = DEFAULT_STYLE_MAP; + styleOrder: string[] = DEFAULT_STYLE_ORDER; + indent = " "; + counter = 1; + + constructor(contentState?: ContentState) { + this.contentState = contentState; + } + + generate(): string[] { + if (!this.contentState) { + return []; + } + + this.output = []; + this.blocks = this.contentState.getBlocksAsArray(); + this.totalBlocks = this.blocks.length; + this.currentBlock = 0; + + while (this.currentBlock < this.totalBlocks) { + this.processBlock(this.contentState); + } + + return this.output.filter((content) => content !== "" && content !== "\n"); + } + + processBlock(contentState: ContentState) { + const block = this.blocks[this.currentBlock]; + + const content = this.renderBlockContent(block, contentState); + + this.output.push(content); + + this.currentBlock += 1; + this.output.push(`\n`); + } + + renderBlockContent(block: ContentBlock, contentState: ContentState): string { + let text = block.getText(); + + let currentLinkId = 0; + + if (text === "") { + return ""; + } + + text = this.preserveWhitespace(text); + + // getting a list including all styles and entites for every single character + const charMetaList: CharacterMetaList = block.getCharacterList(); + + // divides the information about style and entities of each character into ranges + const entityPieces = getEntityRanges(text, charMetaList); + + return entityPieces + .map(([entityKey, stylePieces]) => { + const content = stylePieces + .map(([text, styleSet]) => { + let content = encodeContent(text); + for (const styleName of this.styleOrder) { + const currentStyle = styleSet.find((style) => style.style === styleName); + + if (currentStyle) { + let { element } = this.inlineStyles[styleName]; + if (element == null) { + element = "span"; + } + content = `<${element} id="${currentStyle.id}">${content}`; + } + } + + return content; + }) + .join(""); + + const entity = entityKey ? contentState.getEntity(entityKey) : null; + // Note: The `toUpperCase` below is for compatability with some libraries that use lower-case for image blocks. + const entityType = entity == null ? null : entity.getType().toUpperCase(); + + if (entityType != null && entityType === ENTITY_TYPE.LINK) { + currentLinkId += 1; + return `${content}`; + } else { + return content; + } + }) + .join(""); + } + + /* +preserves leading/trailing/consecutive whitespace in the text content +*/ + preserveWhitespace(text: string): string { + const length = text.length; + const newText = new Array(length); + for (let i = 0; i < length; i++) { + if (text[i] === " " && (i === 0 || i === length - 1 || text[i - 1] === " ")) { + newText[i] = "\xA0"; + } else { + newText[i] = text[i]; + } + } + return newText.join(""); + } +} + +export function transformStateToXml(content: ContentState): string[] { + return new MarkupGenerator(content).generate(); +} + +export function blockToXml(contentBlock: ContentBlock, contentState: ContentState): string { + return new MarkupGenerator().renderBlockContent(contentBlock, contentState); +} diff --git a/packages/admin/admin-rte/src/core/translation/xml/translateAndTransformToState.ts b/packages/admin/admin-rte/src/core/translation/xml/translateAndTransformToState.ts new file mode 100644 index 0000000000..3e7a6e97a1 --- /dev/null +++ b/packages/admin/admin-rte/src/core/translation/xml/translateAndTransformToState.ts @@ -0,0 +1,198 @@ +import { + ContentState, + convertFromRaw, + DraftInlineStyleType, + EditorState, + RawDraftContentBlock, + RawDraftContentState, + RawDraftEntity, +} from "draft-js"; + +import { blockToXml } from "./transformStateToXml"; + +interface InlineStyle { + id: number; + offset: number; + length: number; +} + +interface EntityRange { + key: number; + offset: number; + length: number; +} + +export const updateBlockContent = (block: RawDraftContentBlock) => { + const regexInlineStylesPattern = /|<\/inline>/g; + const regexEntitiesPattern = /|<\/entity>/g; + + const newInlineStyleRanges: InlineStyle[] = []; + const newEntityRanges: EntityRange[] = []; + const stylesStack: InlineStyle[] = []; + const entitiesStack: EntityRange[] = []; + + // process only inline style ranges and their associated pseudo tags + const onlyInlineStyles = block.text.replace(regexEntitiesPattern, ""); + const inlineStyleTags = onlyInlineStyles.matchAll(regexInlineStylesPattern); + + // process only entity ranges and their associated pseudo tags + const onlyEntityRanges = block.text.replace(regexInlineStylesPattern, ""); + const entityRangesTags = onlyEntityRanges.matchAll(regexEntitiesPattern); + + const text = block.text.replace(regexEntitiesPattern, "").replace(regexInlineStylesPattern, ""); + + // counts the number of characters of previous pseudo tags to keep the correct index shift + let shiftCount = 0; + + for (const match of inlineStyleTags) { + const id = match[0].match(/\d+/)?.[0]; // get id of opening pseudo tag + + if (match.index === null || match.index === undefined) continue; + + const offset = match.index - shiftCount; + + if (id) { + // opening pseudo tags are added to the stack + stylesStack.push({ + id: parseInt(id), + offset, + length: 0, + }); + } else { + // take top element of stack when closing pseudo tags occurs + const openingTag = stylesStack.pop(); + + if (openingTag) { + // check if style already occured before + const existingStyle = newInlineStyleRanges.findIndex((style) => style.id === openingTag.id); + + if (existingStyle !== -1) { + // update range length of style + newInlineStyleRanges[existingStyle] = { + ...newInlineStyleRanges[existingStyle], + length: newInlineStyleRanges[existingStyle].length + (offset - openingTag.offset), + }; + } else { + newInlineStyleRanges.push({ + id: openingTag.id, + offset: openingTag.offset, + length: offset - openingTag.offset, + }); + } + } + } + + // update index shift according to pseudo tag length + shiftCount += match[0].length; + } + + shiftCount = 0; + + // entity ranges work the same way as inline styles + for (const match of entityRangesTags) { + const id = match[0].match(/\d+/)?.[0]; + + if (match.index === null || match.index === undefined) continue; + + const offset = match.index - shiftCount; + + if (id) { + entitiesStack.push({ + key: parseInt(id), + offset, + length: 0, + }); + } else { + const openingTag = entitiesStack.pop(); + + if (openingTag) { + const existingStyle = newEntityRanges.findIndex((style) => style.key === openingTag.key); + + if (existingStyle !== -1) { + newEntityRanges[existingStyle] = { + ...newEntityRanges[existingStyle], + length: newEntityRanges[existingStyle].length + (offset - openingTag.offset), + }; + } else { + newEntityRanges.push({ + key: openingTag.key, + offset: openingTag.offset, + length: offset - openingTag.offset, + }); + } + } + } + + shiftCount += match[0].length; + } + + /* inline styles need to be sorted by offset to map style property as inline styles are sorted by style order */ + block.inlineStyleRanges = block.inlineStyleRanges + .sort((a, b) => a.offset - b.offset) + .map((style, index) => { + const newStyle = newInlineStyleRanges.find((newStyle) => newStyle.id - 1 === index); + + if (!newStyle) { + return undefined; + } + + return { + ...style, + offset: newStyle?.offset ?? style.offset, + length: newStyle?.length ?? style.length, + }; + }) + .filter((styleRange) => styleRange) as { + offset: number; + length: number; + style: DraftInlineStyleType; + }[]; + + block.entityRanges = block.entityRanges + .map((entityRange) => { + const newEntityRange = newEntityRanges.find((newEntityRange) => newEntityRange.key - 1 === entityRange.key); + + if (!newEntityRange) { + return undefined; + } + + return { + ...entityRange, + offset: newEntityRange?.offset ?? entityRange.offset, + length: newEntityRange?.length ?? entityRange.length, + }; + }) + .filter((entityRange) => entityRange) as EntityRange[]; + + return { + ...block, + text, + }; +}; + +export const translateAndTransformXmlToState = ( + state: ContentState, + rawContent: RawDraftContentState, + contents: { original: string; replaceWith: string }[], +) => { + let newEntityMap: { [key: number]: RawDraftEntity } = {}; + + const contentBlocks = state.getBlocksAsArray(); + + const translatedBlocks = rawContent.blocks.map((block, index) => { + const xmlBlockContent = blockToXml(contentBlocks[index], state); + + const translation = contents.find((content) => content.original === xmlBlockContent); + if (!translation || translation.replaceWith === "") return block; + + const newBlockstate = updateBlockContent({ ...block, text: translation.replaceWith }); + + newBlockstate.entityRanges.forEach((entityRange) => { + newEntityMap = { ...newEntityMap, [entityRange.key]: rawContent.entityMap[entityRange.key] }; + }); + + return newBlockstate; + }); + + return EditorState.createWithContent(convertFromRaw({ blocks: translatedBlocks, entityMap: newEntityMap })); +}; diff --git a/packages/admin/admin-rte/tsconfig.json b/packages/admin/admin-rte/tsconfig.json index 7b7b52dcd8..a0c1827beb 100644 --- a/packages/admin/admin-rte/tsconfig.json +++ b/packages/admin/admin-rte/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../tsconfig.base.json", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "downlevelIteration": true }, "include": ["./src"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb81e23a82..60a0084bbe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -820,25 +820,25 @@ importers: version: 3.7.4(graphql@15.8.0)(react-dom@17.0.2)(react@17.0.2) '@comet/admin': specifier: '*' - version: link:../packages/admin/admin + version: 5.4.0(@apollo/client@3.7.4)(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@mui/icons-material@5.11.0)(@mui/material@5.11.6)(@mui/styles@5.11.2)(@mui/x-data-grid@5.17.20)(@types/react@17.0.53)(final-form@4.20.9)(graphql@15.8.0)(history@4.10.1)(react-dnd@16.0.1)(react-dom@17.0.2)(react-final-form@6.5.9)(react-intl@5.25.1)(react-router-dom@5.3.4)(react-router@5.3.4)(react@17.0.2) '@comet/admin-color-picker': specifier: '*' - version: link:../packages/admin/admin-color-picker + version: 5.4.0(@apollo/client@3.7.4)(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@mui/icons-material@5.11.0)(@mui/material@5.11.6)(@mui/styles@5.11.2)(@mui/x-data-grid@5.17.20)(@types/react@17.0.53)(final-form@4.20.9)(graphql@15.8.0)(history@4.10.1)(react-dnd@16.0.1)(react-dom@17.0.2)(react-final-form@6.5.9)(react-intl@5.25.1)(react-router-dom@5.3.4)(react-router@5.3.4)(react@17.0.2) '@comet/admin-date-time': specifier: '*' - version: link:../packages/admin/admin-date-time + version: 5.4.0(@apollo/client@3.7.4)(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@mui/icons-material@5.11.0)(@mui/material@5.11.6)(@mui/styles@5.11.2)(@mui/x-data-grid@5.17.20)(@types/react@17.0.53)(final-form@4.20.9)(graphql@15.8.0)(history@4.10.1)(react-dnd@16.0.1)(react-dom@17.0.2)(react-final-form@6.5.9)(react-intl@5.25.1)(react-router-dom@5.3.4)(react-router@5.3.4)(react@17.0.2) '@comet/admin-icons': specifier: '*' - version: link:../packages/admin/admin-icons + version: 5.4.0(@mui/material@5.11.6)(react-dom@17.0.2)(react@17.0.2) '@comet/admin-react-select': specifier: '*' - version: link:../packages/admin/admin-react-select + version: 5.4.0(@apollo/client@3.7.4)(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@mui/icons-material@5.11.0)(@mui/material@5.11.6)(@mui/styles@5.11.2)(@mui/x-data-grid@5.17.20)(@types/react@17.0.53)(final-form@4.20.9)(graphql@15.8.0)(history@4.10.1)(react-dnd@16.0.1)(react-dom@17.0.2)(react-final-form@6.5.9)(react-intl@5.25.1)(react-router-dom@5.3.4)(react-router@5.3.4)(react@17.0.2) '@comet/admin-rte': specifier: '*' - version: link:../packages/admin/admin-rte + version: 5.4.0(@mui/icons-material@5.11.0)(@mui/material@5.11.6)(@mui/styles@5.11.2)(final-form@4.20.9)(react-dom@17.0.2)(react-final-form@6.5.9)(react-intl@5.25.1)(react@17.0.2) '@comet/admin-theme': specifier: '*' - version: link:../packages/admin/admin-theme + version: 5.4.0(@mui/material@5.11.6)(@mui/styles@5.11.2)(@mui/system@5.11.5)(react-dom@17.0.2)(react@17.0.2) '@docusaurus/core': specifier: 2.4.1 version: 2.4.1(@docusaurus/types@2.4.1)(react-dom@17.0.2)(react@17.0.2)(typescript@4.9.4) @@ -1496,6 +1496,9 @@ importers: '@babel/core': specifier: ^7.20.12 version: 7.20.12 + '@comet/admin': + specifier: workspace:^5.3.0 + version: link:../admin '@comet/admin-babel-preset': specifier: workspace:^5.1.0 version: link:../admin-babel-preset @@ -2641,8 +2644,8 @@ importers: version: 2.8.3 devDependencies: '@comet/eslint-config': - specifier: ^5.1.0 - version: link:../eslint-config + specifier: ^5.3.0 + version: 5.4.0(eslint@8.32.0)(prettier@2.8.3)(typescript@4.9.4) '@types/node': specifier: ^18.0.0 version: 18.15.3 @@ -6820,7 +6823,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: requireindex: 1.1.0 - dev: false /@changesets/apply-release-plan@6.1.3: resolution: {integrity: sha512-ECDNeoc3nfeAe1jqJb5aFQX7CqzQhD2klXRez2JDb/aVpGUbX673HgKrnrgJRuQR/9f2TtLoYIzrGB9qwD77mg==} @@ -7004,6 +7006,243 @@ packages: requiresBuild: true optional: true + /@comet/admin-color-picker@5.4.0(@apollo/client@3.7.4)(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@mui/icons-material@5.11.0)(@mui/material@5.11.6)(@mui/styles@5.11.2)(@mui/x-data-grid@5.17.20)(@types/react@17.0.53)(final-form@4.20.9)(graphql@15.8.0)(history@4.10.1)(react-dnd@16.0.1)(react-dom@17.0.2)(react-final-form@6.5.9)(react-intl@5.25.1)(react-router-dom@5.3.4)(react-router@5.3.4)(react@17.0.2): + resolution: {integrity: sha512-3XC57hfMINZpsXRsy8O9PLfSUJXmecR1QR4Xmu8Fhzge5E+vKiYOSW8drtr1HeRREoHUiceeP9Drzqi1xf1GiA==} + peerDependencies: + '@mui/icons-material': ^5.0.0 + '@mui/material': ^5.0.0 + '@mui/styles': ^5.0.0 + react: ^17.0 + react-dom: ^17.0 + react-final-form: ^6.3.1 + react-intl: ^5.24.6 + dependencies: + '@comet/admin': 5.4.0(@apollo/client@3.7.4)(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@mui/icons-material@5.11.0)(@mui/material@5.11.6)(@mui/styles@5.11.2)(@mui/x-data-grid@5.17.20)(@types/react@17.0.53)(final-form@4.20.9)(graphql@15.8.0)(history@4.10.1)(react-dnd@16.0.1)(react-dom@17.0.2)(react-final-form@6.5.9)(react-intl@5.25.1)(react-router-dom@5.3.4)(react-router@5.3.4)(react@17.0.2) + '@comet/admin-icons': 5.4.0(@mui/material@5.11.6)(react-dom@17.0.2)(react@17.0.2) + '@mui/icons-material': 5.11.0(@mui/material@5.11.6)(@types/react@17.0.53)(react@17.0.2) + '@mui/material': 5.11.6(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) + '@mui/styles': 5.11.2(@types/react@17.0.53)(react@17.0.2) + clsx: 1.2.1 + react: 17.0.2 + react-colorful: 5.6.1(react-dom@17.0.2)(react@17.0.2) + react-dom: 17.0.2(react@17.0.2) + react-final-form: 6.5.9(final-form@4.20.9)(react@17.0.2) + react-intl: 5.25.1(react@17.0.2)(typescript@4.9.4) + tinycolor2: 1.5.2 + use-debounce: 6.0.1(react@17.0.2) + transitivePeerDependencies: + - '@apollo/client' + - '@emotion/react' + - '@emotion/styled' + - '@mui/x-data-grid' + - '@mui/x-data-grid-premium' + - '@mui/x-data-grid-pro' + - '@types/react' + - final-form + - graphql + - history + - react-dnd + - react-router + - react-router-dom + dev: false + + /@comet/admin-date-time@5.4.0(@apollo/client@3.7.4)(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@mui/icons-material@5.11.0)(@mui/material@5.11.6)(@mui/styles@5.11.2)(@mui/x-data-grid@5.17.20)(@types/react@17.0.53)(final-form@4.20.9)(graphql@15.8.0)(history@4.10.1)(react-dnd@16.0.1)(react-dom@17.0.2)(react-final-form@6.5.9)(react-intl@5.25.1)(react-router-dom@5.3.4)(react-router@5.3.4)(react@17.0.2): + resolution: {integrity: sha512-VdMVLP1/+MXsu+RQWn9cxNyjbeynliRDcXEWyMWGbaRanIP6pKit/bM92HWnpyWaDMHhiIt/m37Kkm2v8oETJg==} + peerDependencies: + '@mui/material': ^5.0.0 + '@mui/styles': ^5.0.0 + react: ^17.0 + react-dom: ^17.0 + react-final-form: ^6.5.7 + react-intl: ^5.24.6 + dependencies: + '@comet/admin': 5.4.0(@apollo/client@3.7.4)(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@mui/icons-material@5.11.0)(@mui/material@5.11.6)(@mui/styles@5.11.2)(@mui/x-data-grid@5.17.20)(@types/react@17.0.53)(final-form@4.20.9)(graphql@15.8.0)(history@4.10.1)(react-dnd@16.0.1)(react-dom@17.0.2)(react-final-form@6.5.9)(react-intl@5.25.1)(react-router-dom@5.3.4)(react-router@5.3.4)(react@17.0.2) + '@comet/admin-icons': 5.4.0(@mui/material@5.11.6)(react-dom@17.0.2)(react@17.0.2) + '@mui/material': 5.11.6(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) + '@mui/styles': 5.11.2(@types/react@17.0.53)(react@17.0.2) + '@mui/utils': 5.11.2(react@17.0.2) + clsx: 1.2.1 + date-fns: 2.29.3 + react: 17.0.2 + react-date-range: 1.4.0(date-fns@2.29.3)(react@17.0.2) + react-dom: 17.0.2(react@17.0.2) + react-final-form: 6.5.9(final-form@4.20.9)(react@17.0.2) + react-intl: 5.25.1(react@17.0.2)(typescript@4.9.4) + transitivePeerDependencies: + - '@apollo/client' + - '@emotion/react' + - '@emotion/styled' + - '@mui/icons-material' + - '@mui/x-data-grid' + - '@mui/x-data-grid-premium' + - '@mui/x-data-grid-pro' + - '@types/react' + - final-form + - graphql + - history + - react-dnd + - react-router + - react-router-dom + dev: false + + /@comet/admin-icons@5.4.0(@mui/material@5.11.6)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-kWi+KPcYbGtSWlWGUBodmGuF/YK2WDTxvoQ3PwtpBdi8FUkreTKn3oQnVGsJLTdv2hdB6YPNT9C5YoB4AGruUA==} + peerDependencies: + '@mui/material': ^5.0.0 + react: ^17.0 + react-dom: ^17.0 + dependencies: + '@mui/material': 5.11.6(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@comet/admin-react-select@5.4.0(@apollo/client@3.7.4)(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@mui/icons-material@5.11.0)(@mui/material@5.11.6)(@mui/styles@5.11.2)(@mui/x-data-grid@5.17.20)(@types/react@17.0.53)(final-form@4.20.9)(graphql@15.8.0)(history@4.10.1)(react-dnd@16.0.1)(react-dom@17.0.2)(react-final-form@6.5.9)(react-intl@5.25.1)(react-router-dom@5.3.4)(react-router@5.3.4)(react@17.0.2): + resolution: {integrity: sha512-vJx1uNPV0adljmqBsY6qU4yBi7fuZXGMRsjlm5Km9nXtdciA81sa63/Cnd95wox+msVI7HtTAzBI/qRqmznKCQ==} + peerDependencies: + '@mui/icons-material': ^5.0.0 + '@mui/material': ^5.0.0 + '@mui/styles': ^5.0.0 + final-form: ^4.16.1 + react: ^17.0 + react-dom: ^17.0 + react-final-form: ^6.3.1 + react-select: ^3.0.4 + dependencies: + '@comet/admin': 5.4.0(@apollo/client@3.7.4)(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@mui/icons-material@5.11.0)(@mui/material@5.11.6)(@mui/styles@5.11.2)(@mui/x-data-grid@5.17.20)(@types/react@17.0.53)(final-form@4.20.9)(graphql@15.8.0)(history@4.10.1)(react-dnd@16.0.1)(react-dom@17.0.2)(react-final-form@6.5.9)(react-intl@5.25.1)(react-router-dom@5.3.4)(react-router@5.3.4)(react@17.0.2) + '@mui/icons-material': 5.11.0(@mui/material@5.11.6)(@types/react@17.0.53)(react@17.0.2) + '@mui/material': 5.11.6(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) + '@mui/styles': 5.11.2(@types/react@17.0.53)(react@17.0.2) + classnames: 2.3.2 + final-form: 4.20.9 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-final-form: 6.5.9(final-form@4.20.9)(react@17.0.2) + transitivePeerDependencies: + - '@apollo/client' + - '@emotion/react' + - '@emotion/styled' + - '@mui/x-data-grid' + - '@mui/x-data-grid-premium' + - '@mui/x-data-grid-pro' + - '@types/react' + - graphql + - history + - react-dnd + - react-intl + - react-router + - react-router-dom + dev: false + + /@comet/admin-rte@5.4.0(@mui/icons-material@5.11.0)(@mui/material@5.11.6)(@mui/styles@5.11.2)(final-form@4.20.9)(react-dom@17.0.2)(react-final-form@6.5.9)(react-intl@5.25.1)(react@17.0.2): + resolution: {integrity: sha512-n5XSsbpszHbp0iUpy8GVmCP8RsAHHsypGDCUtSFLmfE0DAfM4P/O731WOWIR0Omcp3dWxHiKthTfNQYJCE8tyg==} + peerDependencies: + '@mui/icons-material': ^5.0.0 + '@mui/material': ^5.0.0 + '@mui/styles': ^5.0.0 + draft-js: ^0.11.4 + final-form: ^4.16.1 + react: ^17.0 + react-dom: ^17.0 + react-final-form: ^6.3.1 + react-intl: ^5.10.0 + dependencies: + '@comet/admin-icons': 5.4.0(@mui/material@5.11.6)(react-dom@17.0.2)(react@17.0.2) + '@mui/icons-material': 5.11.0(@mui/material@5.11.6)(@types/react@17.0.53)(react@17.0.2) + '@mui/material': 5.11.6(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) + '@mui/styles': 5.11.2(@types/react@17.0.53)(react@17.0.2) + detect-browser: 5.3.0 + draftjs-conductor: 3.0.0(draft-js@0.11.7) + final-form: 4.20.9 + immutable: 3.7.6 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-final-form: 6.5.9(final-form@4.20.9)(react@17.0.2) + react-intl: 5.25.1(react@17.0.2)(typescript@4.9.4) + dev: false + + /@comet/admin-theme@5.4.0(@mui/material@5.11.6)(@mui/styles@5.11.2)(@mui/system@5.11.5)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-DnJ80dDZ7oQ7Od8HMj6QMuLxVtkmQRURYH9NIuAh+rcZ5IR6MSBM225oYHdSfcIq7NqZK66GZ7G+kn9reCkf6Q==} + peerDependencies: + '@mui/material': ^5.0.0 + '@mui/styles': ^5.0.0 + '@mui/system': ^5.0.0 + react: ^17.0 + dependencies: + '@comet/admin-icons': 5.4.0(@mui/material@5.11.6)(react-dom@17.0.2)(react@17.0.2) + '@mui/material': 5.11.6(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) + '@mui/styles': 5.11.2(@types/react@17.0.53)(react@17.0.2) + '@mui/system': 5.11.5(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@types/react@17.0.53)(react@17.0.2) + '@mui/utils': 5.11.2(react@17.0.2) + react: 17.0.2 + transitivePeerDependencies: + - react-dom + dev: false + + /@comet/admin@5.4.0(@apollo/client@3.7.4)(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@mui/icons-material@5.11.0)(@mui/material@5.11.6)(@mui/styles@5.11.2)(@mui/x-data-grid@5.17.20)(@types/react@17.0.53)(final-form@4.20.9)(graphql@15.8.0)(history@4.10.1)(react-dnd@16.0.1)(react-dom@17.0.2)(react-final-form@6.5.9)(react-intl@5.25.1)(react-router-dom@5.3.4)(react-router@5.3.4)(react@17.0.2): + resolution: {integrity: sha512-TaanqmtmjIj4GoWSjLX64wZxWdDIOggOJFC5HrbL5Z0IySZIRdo4NnYJwy2D8+J6oEEW5vjZ0GyLDJXq9HVlog==} + peerDependencies: + '@apollo/client': ^3.7.0 + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@mui/icons-material': ^5.0.0 + '@mui/material': ^5.0.0 + '@mui/styles': ^5.0.0 + '@mui/x-data-grid': ^5.0.0 + '@mui/x-data-grid-premium': ^5.0.0 + '@mui/x-data-grid-pro': ^5.0.0 + final-form: ^4.16.1 + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + history: ^4.10.1 + react: ^17.0 + react-dnd: ^16.0.0 + react-dom: ^17.0 + react-final-form: ^6.3.1 + react-intl: ^5.10.0 + react-router: ^5.1.2 + react-router-dom: ^5.1.2 + peerDependenciesMeta: + '@mui/x-data-grid-premium': + optional: true + '@mui/x-data-grid-pro': + optional: true + react-dnd: + optional: true + dependencies: + '@apollo/client': 3.7.4(graphql@15.8.0)(react-dom@17.0.2)(react@17.0.2) + '@comet/admin-icons': 5.4.0(@mui/material@5.11.6)(react-dom@17.0.2)(react@17.0.2) + '@emotion/react': 11.9.3(@babel/core@7.22.11)(@types/react@17.0.53)(react@17.0.2) + '@emotion/styled': 11.10.5(@babel/core@7.22.11)(@emotion/react@11.9.3)(@types/react@17.0.53)(react@17.0.2) + '@mui/icons-material': 5.11.0(@mui/material@5.11.6)(@types/react@17.0.53)(react@17.0.2) + '@mui/material': 5.11.6(@emotion/react@11.9.3)(@emotion/styled@11.10.5)(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) + '@mui/private-theming': 5.11.2(@types/react@17.0.53)(react@17.0.2) + '@mui/styles': 5.11.2(@types/react@17.0.53)(react@17.0.2) + '@mui/x-data-grid': 5.17.20(@mui/material@5.11.6)(@mui/system@5.11.5)(react-dom@17.0.2)(react@17.0.2) + clsx: 1.2.1 + exceljs: 3.10.0 + file-saver: 2.0.5 + final-form: 4.20.9 + final-form-set-field-data: 1.0.2(final-form@4.20.9) + graphql: 15.8.0 + history: 4.10.1 + http-status-codes: 2.3.0 + is-mobile: 4.0.0 + lodash.debounce: 4.0.8 + lodash.isequal: 4.5.0 + query-string: 6.14.1 + react: 17.0.2 + react-dnd: 16.0.1(@types/node@18.15.3)(@types/react@17.0.53)(react@17.0.2) + react-dom: 17.0.2(react@17.0.2) + react-final-form: 6.5.9(final-form@4.20.9)(react@17.0.2) + react-intl: 5.25.1(react@17.0.2)(typescript@4.9.4) + react-router: 5.3.4(react@17.0.2) + react-router-dom: 5.3.4(react@17.0.2) + use-constant: 1.1.1(react@17.0.2) + uuid: 9.0.0 + transitivePeerDependencies: + - '@types/react' + dev: false + /@comet/dev-process-manager@2.3.2: resolution: {integrity: sha512-SOP1H8rZBpNhgRzFMofiZPtXYzU16s/uD4ME3J7IXPtqsHNkSjm+WD1LzpK1czVqWAGgowZsXbjL46cYPt41oA==} engines: {node: '>=14'} @@ -7023,6 +7262,49 @@ packages: - debug dev: true + /@comet/eslint-config@5.4.0(eslint@8.32.0)(prettier@2.8.3)(typescript@4.9.4): + resolution: {integrity: sha512-+l+92G1j/yd3H5su8Y7yhf4pYWClkJLRjolxTLPvjmk43mSsW/VjnQduGZqTse4VEBQAXunQBuRr07AEzXWfSw==} + peerDependencies: + eslint: '>= 8' + next: '*' + prettier: '>= 2' + peerDependenciesMeta: + next: + optional: true + dependencies: + '@calm/eslint-plugin-react-intl': 1.4.1 + '@comet/eslint-plugin': 5.4.0(eslint@8.32.0) + '@next/eslint-plugin-next': 12.3.4 + '@typescript-eslint/eslint-plugin': 5.49.0(@typescript-eslint/parser@5.49.0)(eslint@8.32.0)(typescript@4.9.4) + '@typescript-eslint/parser': 5.49.0(eslint@8.32.0)(typescript@4.9.4) + eslint: 8.32.0 + eslint-config-next: 13.1.5(eslint@8.32.0)(typescript@4.9.4) + eslint-config-prettier: 8.6.0(eslint@8.32.0) + eslint-plugin-formatjs: 4.3.9(eslint@8.32.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.49.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.32.0) + eslint-plugin-json-files: 2.2.0(eslint@8.32.0) + eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.6.0)(eslint@8.32.0)(prettier@2.8.3) + eslint-plugin-react: 7.32.1(eslint@8.32.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.32.0) + eslint-plugin-simple-import-sort: 9.0.0(eslint@8.32.0) + eslint-plugin-unused-imports: 2.0.0(@typescript-eslint/eslint-plugin@5.49.0)(eslint@8.32.0) + prettier: 2.8.3 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + - ts-jest + - typescript + dev: true + + /@comet/eslint-plugin@5.4.0(eslint@8.32.0): + resolution: {integrity: sha512-b/sII4ft8vxrqIun7S152qMWM88E1PUsbo8ayg+ebCcnjg2hZ3Vo4knegT6LDdERrp0yDeAEoSmAKpNLDcNYsw==} + peerDependencies: + eslint: '8' + dependencies: + eslint: 8.32.0 + dev: true + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -8267,7 +8549,6 @@ packages: dependencies: '@formatjs/intl-localematcher': 0.2.32 tslib: 2.4.1 - dev: false /@formatjs/ecma402-abstract@1.5.0: resolution: {integrity: sha512-wXv36yo+mfWllweN0Fq7sUs7PUiNopn7I0JpLTe3hGu6ZMR4CV7LqK1llhB18pndwpKoafQKb1et2DCJAOW20Q==} @@ -8293,14 +8574,12 @@ packages: '@formatjs/ecma402-abstract': 1.14.3 '@formatjs/icu-skeleton-parser': 1.3.18 tslib: 2.4.1 - dev: false /@formatjs/icu-skeleton-parser@1.3.18: resolution: {integrity: sha512-ND1ZkZfmLPcHjAH1sVpkpQxA+QYfOX3py3SjKWMUVGDow18gZ0WPqz3F+pJLYQMpS2LnnQ5zYR2jPVYTbRwMpg==} dependencies: '@formatjs/ecma402-abstract': 1.14.3 tslib: 2.4.1 - dev: false /@formatjs/icu-skeleton-parser@1.3.6: resolution: {integrity: sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==} @@ -8331,7 +8610,6 @@ packages: resolution: {integrity: sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==} dependencies: tslib: 2.4.1 - dev: false /@formatjs/intl@2.2.1(typescript@4.9.4): resolution: {integrity: sha512-vgvyUOOrzqVaOFYzTf2d3+ToSkH2JpR7x/4U1RyoHQLmvEaTQvXJ7A2qm1Iy3brGNXC/+/7bUlc3lpH+h/LOJA==} @@ -8378,7 +8656,6 @@ packages: json-stable-stringify: 1.0.2 tslib: 2.4.1 typescript: 4.9.4 - dev: false /@formatjs/ts-transformer@3.9.4: resolution: {integrity: sha512-S5q/zsTodaKtxVxNvbRQ9APenJtm5smXE76usS+5yF2vWQdZHkagmOKWfgvfIbesP4SR2B+i3koqlnlpqSIp5w==} @@ -9512,7 +9789,6 @@ packages: /@humanwhocodes/momoa@2.0.4: resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} engines: {node: '>=10.10.0'} - dev: false /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} @@ -10758,13 +11034,11 @@ packages: resolution: {integrity: sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==} dependencies: glob: 7.1.7 - dev: false /@next/eslint-plugin-next@13.1.5: resolution: {integrity: sha512-3kvLTX35bOWOCKU8KY74Ygczc55Qk/kB2TQy0tH7Rti6hzZ6Aij7WQ8zHdIVjmnlD0n/zXWXrIf5y56RKcLQkQ==} dependencies: glob: 7.1.7 - dev: false /@next/swc-android-arm-eabi@12.3.4: resolution: {integrity: sha512-cM42Cw6V4Bz/2+j/xIzO8nK/Q3Ly+VSlZJTa1vHzsocJRYz8KT6MrreXaci2++SIZCF1rVRCDgAg5PpqRibdIA==} @@ -11837,7 +12111,6 @@ packages: picocolors: 1.0.0 tiny-glob: 0.2.9 tslib: 2.4.1 - dev: false /@pmmmwh/react-refresh-webpack-plugin@0.5.10(@types/webpack@5.28.0)(react-refresh@0.11.0)(webpack@5.88.2): resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} @@ -11952,7 +12225,6 @@ packages: /@rushstack/eslint-patch@1.2.0: resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} - dev: false /@rushstack/ts-command-line@4.13.1: resolution: {integrity: sha512-UTQMRyy/jH1IS2U+6pyzyn9xQ2iMcoUKkTcZUzOP/aaMiKlWLwCTDiBVwhw/M1crDx6apF9CwyjuWO9r1SBdJQ==} @@ -13675,7 +13947,6 @@ packages: dependencies: '@types/estree': 0.0.51 '@types/json-schema': 7.0.11 - dev: false /@types/estree@0.0.50: resolution: {integrity: sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==} @@ -13777,7 +14048,6 @@ packages: dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.15.3 - dev: false /@types/glob@8.0.1: resolution: {integrity: sha512-8bVUjXZvJacUFkJXHdyZ9iH1Eaj5V7I8c4NdH5sQJsdXkqT4CA5Dhb4yb4VE/3asyx4L9ayZr1NIhTsWHczmMw==} @@ -14188,7 +14458,6 @@ packages: /@types/picomatch@2.3.0: resolution: {integrity: sha512-O397rnSS9iQI4OirieAtsDqvCj4+3eY1J+EPdNTKuHuRWIfUoGyzX294o8C4KJYaLqgSrd2o60c5EqCU8Zv02g==} - dev: false /@types/pluralize@0.0.29: resolution: {integrity: sha512-BYOID+l2Aco2nBik+iYS4SZX0Lf20KPILP5RGmM1IgzdwNdTs0eebiFriOPcej1sX9mLnSoiNte5zcFxssgpGA==} @@ -14366,7 +14635,6 @@ packages: /@types/semver@7.3.13: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} - dev: false /@types/serve-index@1.9.1: resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} @@ -14550,7 +14818,6 @@ packages: typescript: 4.9.4 transitivePeerDependencies: - supports-color - dev: false /@typescript-eslint/parser@5.49.0(eslint@8.32.0)(typescript@4.9.4): resolution: {integrity: sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==} @@ -14570,7 +14837,6 @@ packages: typescript: 4.9.4 transitivePeerDependencies: - supports-color - dev: false /@typescript-eslint/scope-manager@5.49.0: resolution: {integrity: sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==} @@ -14578,7 +14844,6 @@ packages: dependencies: '@typescript-eslint/types': 5.49.0 '@typescript-eslint/visitor-keys': 5.49.0 - dev: false /@typescript-eslint/type-utils@5.49.0(eslint@8.32.0)(typescript@4.9.4): resolution: {integrity: sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==} @@ -14598,12 +14863,10 @@ packages: typescript: 4.9.4 transitivePeerDependencies: - supports-color - dev: false /@typescript-eslint/types@5.49.0: resolution: {integrity: sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: false /@typescript-eslint/typescript-estree@5.49.0(typescript@4.9.4): resolution: {integrity: sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==} @@ -14624,7 +14887,6 @@ packages: typescript: 4.9.4 transitivePeerDependencies: - supports-color - dev: false /@typescript-eslint/utils@5.49.0(eslint@8.32.0)(typescript@4.9.4): resolution: {integrity: sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==} @@ -14644,7 +14906,6 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: false /@typescript-eslint/visitor-keys@5.49.0: resolution: {integrity: sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==} @@ -14652,7 +14913,6 @@ packages: dependencies: '@typescript-eslint/types': 5.49.0 eslint-visitor-keys: 3.4.1 - dev: false /@vue/compiler-core@3.2.45: resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==} @@ -15738,7 +15998,6 @@ packages: es-abstract: 1.21.1 get-intrinsic: 1.2.0 is-string: 1.0.7 - dev: false /array-union@1.0.2: resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} @@ -15778,7 +16037,6 @@ packages: define-properties: 1.1.4 es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 - dev: false /array.prototype.map@1.0.5: resolution: {integrity: sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g==} @@ -15810,7 +16068,6 @@ packages: es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 get-intrinsic: 1.2.0 - dev: false /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} @@ -15865,7 +16122,6 @@ packages: /ast-types-flow@0.0.7: resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} - dev: false /ast-types@0.14.2: resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} @@ -15982,7 +16238,6 @@ packages: /axe-core@4.6.3: resolution: {integrity: sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==} engines: {node: '>=4'} - dev: false /axios@0.21.4: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} @@ -16002,7 +16257,6 @@ packages: resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} dependencies: deep-equal: 2.2.0 - dev: false /babel-jest@29.5.0(@babel/core@7.22.11): resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} @@ -16427,7 +16681,6 @@ packages: chalk: 4.1.2 jsonpointer: 5.0.1 leven: 3.1.0 - dev: false /better-opn@2.1.1: resolution: {integrity: sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==} @@ -18296,7 +18549,6 @@ packages: /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: false /dashdash@1.14.1: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} @@ -18355,7 +18607,6 @@ packages: optional: true dependencies: ms: 2.1.3 - dev: false /debug@4.3.4(supports-color@5.5.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -18694,7 +18945,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 - dev: false /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} @@ -19092,7 +19342,6 @@ packages: /emoji-regex@10.2.1: resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==} - dev: false /emoji-regex@7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} @@ -19359,7 +19608,6 @@ packages: transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color - dev: false /eslint-config-prettier@8.6.0(eslint@8.32.0): resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} @@ -19368,7 +19616,6 @@ packages: eslint: '>=7.0.0' dependencies: eslint: 8.32.0 - dev: false /eslint-import-resolver-node@0.3.7: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} @@ -19378,7 +19625,6 @@ packages: resolve: 1.22.1 transitivePeerDependencies: - supports-color - dev: false /eslint-import-resolver-typescript@3.5.3(eslint-plugin-import@2.27.5)(eslint@8.32.0): resolution: {integrity: sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==} @@ -19398,7 +19644,6 @@ packages: synckit: 0.8.4 transitivePeerDependencies: - supports-color - dev: false /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.49.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.3)(eslint@8.32.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} @@ -19428,7 +19673,6 @@ packages: eslint-import-resolver-typescript: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.32.0) transitivePeerDependencies: - supports-color - dev: false /eslint-plugin-formatjs@4.3.9(eslint@8.32.0): resolution: {integrity: sha512-+8kGoTUaNe0qS55eg5XbPDY+eQmeZxnrC8MugQTGUXlqbCyLyG7y4mDsMhAgactVyUMST6Ln1HEm1Tk0KNuIKQ==} @@ -19448,7 +19692,6 @@ packages: transitivePeerDependencies: - supports-color - ts-jest - dev: false /eslint-plugin-graphql@4.0.0(@types/node@18.15.3)(graphql@15.8.0)(typescript@4.9.4): resolution: {integrity: sha512-d5tQm24YkVvCEk29ZR5ScsgXqAGCjKlMS8lx3mS7FS/EKsWbkvXQImpvic03EpMIvNTBW5e+2xnHzXB/VHNZJw==} @@ -19500,7 +19743,6 @@ packages: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: false /eslint-plugin-json-files@2.2.0(eslint@8.32.0): resolution: {integrity: sha512-7ETNwGWMtlAqtAIfwrNSm/X8RsHrZcV78YFa/EyYjavFWaVFhi/fsZBjnj4yIf1G0Rbx5f2t+sd037hVPK20WQ==} @@ -19514,7 +19756,6 @@ packages: requireindex: 1.2.0 semver: 7.3.8 sort-package-json: 1.57.0 - dev: false /eslint-plugin-jsx-a11y@6.7.1(eslint@8.32.0): resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} @@ -19539,7 +19780,6 @@ packages: object.entries: 1.1.6 object.fromentries: 2.0.6 semver: 6.3.0 - dev: false /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.6.0)(eslint@8.32.0)(prettier@2.8.3): resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} @@ -19556,7 +19796,6 @@ packages: eslint-config-prettier: 8.6.0(eslint@8.32.0) prettier: 2.8.3 prettier-linter-helpers: 1.0.0 - dev: false /eslint-plugin-react-hooks@4.6.0(eslint@8.32.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} @@ -19565,7 +19804,6 @@ packages: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: eslint: 8.32.0 - dev: false /eslint-plugin-react@7.32.1(eslint@8.32.0): resolution: {integrity: sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==} @@ -19589,7 +19827,6 @@ packages: resolve: 2.0.0-next.4 semver: 6.3.0 string.prototype.matchall: 4.0.8 - dev: false /eslint-plugin-simple-import-sort@9.0.0(eslint@8.32.0): resolution: {integrity: sha512-PtrLjyXP8kjRneWT1n0b99y/2Fyup37we7FVoWsI61/O7x4ztLohzhep/pxI/cYlECr/cQ2j6utckdvWpVwXNA==} @@ -19597,7 +19834,6 @@ packages: eslint: '>=5.0.0' dependencies: eslint: 8.32.0 - dev: false /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.49.0)(eslint@8.32.0): resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} @@ -19612,12 +19848,10 @@ packages: '@typescript-eslint/eslint-plugin': 5.49.0(@typescript-eslint/parser@5.49.0)(eslint@8.32.0)(typescript@4.9.4) eslint: 8.32.0 eslint-rule-composer: 0.3.0 - dev: false /eslint-rule-composer@0.3.0: resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} engines: {node: '>=4.0.0'} - dev: false /eslint-scope@4.0.3: resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==} @@ -20082,7 +20316,6 @@ packages: /fast-diff@1.2.0: resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} - dev: false /fast-glob@2.2.7: resolution: {integrity: sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==} @@ -20958,7 +21191,6 @@ packages: /get-tsconfig@4.3.0: resolution: {integrity: sha512-YCcF28IqSay3fqpIu5y3Krg/utCBHBeoflkZyHj/QcqI2nrLPC3ZegS9CmIo+hJb8K7aiGsuUl7PwWVjNG2HQQ==} - dev: false /get-value@2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} @@ -20975,7 +21207,6 @@ packages: /git-hooks-list@1.0.3: resolution: {integrity: sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==} - dev: false /github-slugger@1.5.0: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} @@ -21037,7 +21268,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: false /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -21107,7 +21337,6 @@ packages: /globalyzer@0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - dev: false /globby@10.0.0: resolution: {integrity: sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==} @@ -21121,7 +21350,6 @@ packages: ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 - dev: false /globby@11.0.3: resolution: {integrity: sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==} @@ -21155,7 +21383,6 @@ packages: ignore: 5.2.4 merge2: 1.4.1 slash: 4.0.0 - dev: false /globby@9.2.0: resolution: {integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==} @@ -21175,7 +21402,6 @@ packages: /globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - dev: false /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} @@ -22551,7 +22777,6 @@ packages: /is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} - dev: false /is-plain-obj@3.0.0: resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} @@ -23572,7 +23797,6 @@ packages: /jsonpointer@5.0.1: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} - dev: false /jsonwebtoken@8.5.1: resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} @@ -23668,7 +23892,6 @@ packages: dependencies: array-includes: 3.1.6 object.assign: 4.1.4 - dev: false /jszip@3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} @@ -23812,13 +24035,11 @@ packages: /language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: false /language-tags@1.0.5: resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} dependencies: language-subtag-registry: 0.3.22 - dev: false /latest-version@5.1.0: resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} @@ -24976,7 +25197,6 @@ packages: /natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: false /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -25365,7 +25585,6 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.21.1 - dev: false /object.fromentries@2.0.6: resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} @@ -25374,7 +25593,6 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.21.1 - dev: false /object.getownpropertydescriptors@2.1.5: resolution: {integrity: sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==} @@ -25391,7 +25609,6 @@ packages: dependencies: define-properties: 1.1.4 es-abstract: 1.21.1 - dev: false /object.pick@1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} @@ -25407,7 +25624,6 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.21.1 - dev: false /objectorarray@1.0.5: resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} @@ -26699,7 +26915,6 @@ packages: engines: {node: '>=6.0.0'} dependencies: fast-diff: 1.2.0 - dev: false /prettier@2.3.0: resolution: {integrity: sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==} @@ -28193,12 +28408,10 @@ packages: /requireindex@1.1.0: resolution: {integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==} engines: {node: '>=0.10.5'} - dev: false /requireindex@1.2.0: resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} engines: {node: '>=0.10.5'} - dev: false /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -28251,7 +28464,6 @@ packages: is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: false /response-iterator@0.2.6: resolution: {integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==} @@ -28795,7 +29007,6 @@ packages: /slash@4.0.0: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} - dev: false /slice-ansi@3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} @@ -28900,7 +29111,6 @@ packages: /sort-object-keys@1.1.3: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} - dev: false /sort-package-json@1.57.0: resolution: {integrity: sha512-FYsjYn2dHTRb41wqnv+uEqCUvBpK3jZcTp9rbz2qDTmel7Pmdtf+i2rLaaPMRZeSVM60V3Se31GyWFpmKs4Q5Q==} @@ -28912,7 +29122,6 @@ packages: globby: 10.0.0 is-plain-obj: 2.1.0 sort-object-keys: 1.1.3 - dev: false /source-list-map@2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} @@ -29278,7 +29487,6 @@ packages: internal-slot: 1.0.4 regexp.prototype.flags: 1.4.3 side-channel: 1.0.4 - dev: false /string.prototype.padend@3.1.4: resolution: {integrity: sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==} @@ -29689,7 +29897,6 @@ packages: dependencies: '@pkgr/utils': 2.3.1 tslib: 2.4.1 - dev: false /synthetic-dom@1.4.0: resolution: {integrity: sha512-mHv51ZsmZ+ShT/4s5kg+MGUIhY7Ltq4v03xpN1c8T1Krb5pScsh/lzEjyhrVD0soVDbThbd2e+4dD9vnDG4rhg==} @@ -29948,7 +30155,6 @@ packages: dependencies: globalyzer: 0.1.0 globrex: 0.1.2 - dev: false /tiny-invariant@1.3.1: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} @@ -30359,7 +30565,6 @@ packages: dependencies: tslib: 1.14.1 typescript: 4.9.4 - dev: false /tty-browserify@0.0.0: resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==}