diff --git a/index.html b/index.html index 8e083bd1..5c750467 100644 --- a/index.html +++ b/index.html @@ -114,77 +114,80 @@ data: { blocks: [ { - type : 'List', - data : { - items : [ + type: 'List', + data: { + items: [ { - "content": "Canon", - "items": [ + content: "Canon", + items: [ { - "content": "Fisheye", - "items": [ + content: "Fisheye", + items: [ { - "content": "Canon 15mm f/2.8", - "items": [] - }, + content: "Canon 15mm f/2.8", + items: [] + } ] }, { - "content": "Normal", - "items": [ + content: "Normal", + items: [ { - "content": "Canon 40mm f/2.8", - "items": [] + content: "Canon 40mm f/2.8", + items: [] }, { - "content": "Canon 50mm f/1.8", - "items": [] - }, + content: "Canon 50mm f/1.8", + items: [] + } ] }, { - "content": "Zoom", - "items": [ - { - "content": "Canon 75-300mm f/4-5.6", - "items": [] - }, - ] - }, + content: "Zoom", + items: [] + } + ] + }, + { + content: "", + items: [ + { + content: "Canon 75-300mm f/4-5.6", + items: [] + } ] }, { - "content": "Tamron", - "items": [ + content: "Tamron", + items: [ { - "content": "Zoom", - "items": [ + content: "Zoom", + items: [ { - "content": "Tamron 28-75mm f/2.8", - "items": [] - }, + content: "Tamron 28-75mm f/2.8", + items: [] + } ] - }, + } ] }, { - "content": "Samyang", - "items": [ + content: "Samyang", + items: [ { - "content": "Wide", - "items": [ + content: "Wide", + items: [ { - "content": "Samyang 14mm f/2.8", - "items": [] - }, + content: "Samyang 14mm f/2.8", + items: [] + } ] - }, + } ] - }, - ], - style: 'checklist' + } + ] } - }, + } ] }, onReady: function(){ @@ -195,6 +198,9 @@ } }); + window.editor = editor; + + /** * Saving button */ diff --git a/package.json b/package.json index 25e7e233..dd89c5ec 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,8 @@ "@editorjs/editorjs": "^2.29.1", "@typescript-eslint/eslint-plugin": "^7.13.1", "@typescript-eslint/parser": "^7.13.1", + "@editorjs/caret": "^0.0.7", + "@editorjs/dom": "^0.0.7", "eslint": "^7.22.0", "eslint-loader": "^4.0.2", "postcss-nested": "^5.0.3", diff --git a/src/ListRenderer/ChecklistRenderer.ts b/src/ListRenderer/ChecklistRenderer.ts index c64b12a7..e3cd9c17 100644 --- a/src/ListRenderer/ChecklistRenderer.ts +++ b/src/ListRenderer/ChecklistRenderer.ts @@ -1,7 +1,7 @@ import { IconCheck } from '@codexteam/icons' import type { ChecklistItemMeta } from "../types/ItemMeta"; import { NestedListConfig } from "../types/ListParams"; -import * as Dom from '../utils/Dom'; +import * as Dom from '@editorjs/dom'; import { ListRendererInterface, DefaultListCssClasses, CssPrefix } from './ListRenderer'; import type { ListCssClasses } from './ListRenderer'; @@ -45,16 +45,16 @@ export class CheckListRenderer implements ListRendererInterface { /** * Renders wrapper for list - * @param level - level of nesting (0 for the rool level) + * @param isRoot - boolean variable that represents level of the wrappre (root or childList) * @returns - created html ul element */ - renderWrapper: (level: number) => HTMLElement; + renderWrapper: (isRoot: boolean) => HTMLElement; /** * Redners list item element @@ -55,4 +55,9 @@ export interface ListRendererInterface { * @returns {ItemMeta} Item meta object */ getItemMeta: (item: Element) => ItemMeta; + + /** + * Returns default item meta used on creation of the new item + */ + composeDefaultMeta: () => ItemMeta; }; diff --git a/src/ListRenderer/OrderedListRenderer.ts b/src/ListRenderer/OrderedListRenderer.ts index e14f0c22..6762e9a8 100644 --- a/src/ListRenderer/OrderedListRenderer.ts +++ b/src/ListRenderer/OrderedListRenderer.ts @@ -1,6 +1,6 @@ import type { OrderedListItemMeta } from "../types/ItemMeta"; import { NestedListConfig } from "../types/ListParams"; -import * as Dom from '../utils/Dom'; +import * as Dom from '@editorjs/dom'; import { ListRendererInterface, DefaultListCssClasses, CssPrefix } from './ListRenderer'; import type { ListCssClasses } from './ListRenderer'; @@ -39,16 +39,16 @@ export class OrderedListRenderer implements ListRendererInterface { /** * The Editor.js API */ private api: API; - /** - * Caret helper - */ - private caret: Caret; - /** * Is NestedList Tool read-only option */ @@ -44,31 +45,26 @@ export default class ListTabulator { private data: ListData; /** - * Current level of nesting for dynamyc updates - */ - private currentLevel: number; - - /** - * Style of the nested list + * Editor block api */ - style: ListDataStyle; + private block: BlockAPI; /** * Rendered list of items */ - list: ListRendererTypes | undefined; + renderer: Renderer; /** * Wrapper of the whole list */ - listWrapper: HTMLElement | undefined; + listWrapper: ItemChildWrapperElement | undefined; /** * Returns current List item by the caret position * * @returns {Element} */ - get currentItem(): Element | null { + get currentItem(): ItemElement | null { const selection = window.getSelection(); if (!selection) { @@ -90,21 +86,17 @@ export default class ListTabulator { return null; } - return currentNode.closest(DefaultListCssClasses.item); + return currentNode.closest(`.${DefaultListCssClasses.item}`); } - constructor({data, config, api, readOnly}: ListParams, style: ListDataStyle) { + constructor({data, config, api, readOnly, block}: ListParams, renderer: Renderer) { this.config = config; this.data = data; - this.style = style; this.readOnly = readOnly; this.api = api; - this.currentLevel = 0; + this.block = block; - /** - * Instantiate caret helper - */ - this.caret = new Caret(); + this.renderer = renderer; } /** @@ -112,19 +104,7 @@ export default class ListTabulator { * @returns Filled with content wrapper element of the list */ render() { - switch (this.style) { - case 'ordered': - this.list = new OrderedListRenderer(this.readOnly, this.config); - break - case 'unordered': - this.list = new UnorderedListRenderer(this.readOnly, this.config); - break - case 'checklist': - this.list = new CheckListRenderer(this.readOnly, this.config); - break - } - - this.listWrapper = this.list.renderWrapper(this.currentLevel); + this.listWrapper = this.renderer.renderWrapper(true); // fill with data if (this.data.items.length) { @@ -178,69 +158,51 @@ export default class ListTabulator { * @param {Element} parentItem - where to append * @returns {void} */ - appendItems(items: ListItem[], parentItem: Element): void { - /** - * Update current nesting level - */ - this.currentLevel += 1; - - if (this.list !== undefined) { - items.forEach((item) => { - let itemEl: Element; + appendItems(items: ListItem[], parentElement: Element): void { + items.forEach((item) => { + const itemEl = this.renderItem(item.content, item.meta); - if (this.list instanceof OrderedListRenderer) { - itemEl = this.list!.renderItem(item.content, item.meta as OrderedListItemMeta); - } - else if (this.list instanceof UnorderedListRenderer) { - itemEl = this.list!.renderItem(item.content, item.meta as UnorderedListItemMeta); - } - else { - itemEl = this.list!.renderItem(item.content, item.meta as ChecklistItemMeta); - } + parentElement.appendChild(itemEl); - parentItem.appendChild(itemEl); + /** + * Check if there are child items + */ + if (item.items.length) { + const sublistWrapper = this.renderer?.renderWrapper(false); /** - * Check if there are child items + * Recursively render child items */ - if (item.items.length) { - const sublistWrapper = this.list?.renderWrapper(this.currentLevel); - - /** - * Recursively render child items, it will increase currentLevel varible - * after filling level with items we will need to decrease currentLevel - */ - this.appendItems(item.items, sublistWrapper!); - this.currentLevel -= 1; - - if (itemEl) { - itemEl.appendChild(sublistWrapper!); - } + this.appendItems(item.items, sublistWrapper!); + + if (itemEl) { + itemEl.appendChild(sublistWrapper!); } - }); - } + } + }); } /** * Function that is responsible for list content saving - * @returns saved list data + * @param wrapper - optional argument wrapper + * @returns whole list saved data if wrapper not passes, otherwise will return data of the passed wrapper */ - save(): ListData { + save(wrapper?: ItemChildWrapperElement): ListData { + const listWrapper = wrapper ?? this.listWrapper; + /** * The method for recursive collecting of the child items * * @param {Element} parent - where to find items * @returns {ListItem[]} */ - const getItems = (parent: Element): ListItem[] => { - const children = Array.from( - parent.querySelectorAll(`:scope > .${DefaultListCssClasses.item}`) - ); + const getItems = (parent: ItemChildWrapperElement): ListItem[] => { + const children = getChildItems(parent); return children.map((el) => { - const subItemsWrapper = el.querySelector(`.${DefaultListCssClasses.itemChildren}`); - const content = this.list!.getItemContent(el); - const meta = this.list!.getItemMeta(el); + const subItemsWrapper = getItemChildWrapper(el) + const content = this.renderer!.getItemContent(el); + const meta = this.renderer!.getItemMeta(el); const subItems = subItemsWrapper ? getItems(subItemsWrapper) : []; return { @@ -253,7 +215,7 @@ export default class ListTabulator { return { style: this.data.style, - items: this.listWrapper ? getItems(this.listWrapper) : [], + items: listWrapper ? getItems(listWrapper) : [], }; } @@ -268,6 +230,90 @@ export default class ListTabulator { }; } + /** + * Method that specified hot to merge two List blocks. + * Called by Editor.js by backspace at the beginning of the Block + * + * Content of the first item of the next List would be merged with deepest item in current list + * Other items of the next List would be appended to the current list without any changes in nesting levels + * + * @param {ListData} data - data of the second list to be merged with current + * @public + */ + merge(data: ListData): void { + /** + * Get list of all levels children of the previous item + */ + const items = this.block.holder.querySelectorAll(`.${DefaultListCssClasses.item}`); + + const deepestBlockItem = items[items.length - 1]; + const deepestBlockItemContentElement = getItemContentElement(deepestBlockItem); + + if (deepestBlockItem === null || deepestBlockItemContentElement === null) { + return; + } + + focus(deepestBlockItemContentElement); + + const restore = saveCaret(); + /** + * Insert trailing html to the deepest block item content + */ + deepestBlockItemContentElement.insertAdjacentHTML('beforeend', data.items[0].content); + + restore(); + + if (this.listWrapper === undefined) { + return; + } + + const firstLevelItems = getChildItems(this.listWrapper); + + if (firstLevelItems.length === 0) { + return; + } + + /** + * Get last item of the first level of the list + */ + const lastFirstLevelItem = firstLevelItems[firstLevelItems.length - 1]; + + /** + * Get child items wrapper of the last item + */ + let lastFirstLevelItemChildWrapper = getItemChildWrapper(lastFirstLevelItem); + + /** + * Get first item of the list to be merged with current one + */ + const firstItem = data.items.shift(); + + /** + * Check that first item exists + */ + if (firstItem === undefined) { + return; + } + + /** + * Append child items of the first element + */ + if (firstItem.items.length !== 0) { + /** + * Render child wrapper of the last item if it does not exist + */ + if (lastFirstLevelItemChildWrapper === null) { + lastFirstLevelItemChildWrapper = this.renderer.renderWrapper(false); + } + + this.appendItems(firstItem.items, lastFirstLevelItemChildWrapper); + } + + if (data.items.length > 0) { + this.appendItems(data.items, this.listWrapper); + } + } + /** * On paste callback that is fired from Editor. * @@ -366,64 +412,49 @@ export default class ListTabulator { if (event.isComposing) { return; } + if (currentItem === null) { + return; + } - /** - * On Enter in the last empty item, get out of list - */ const isEmpty = currentItem - ? this.list?.getItemContent(currentItem).trim().length === 0 + ? this.renderer?.getItemContent(currentItem).trim().length === 0 : true; - const isFirstLevelItem = currentItem?.parentNode === this.listWrapper; - const isLastItem = currentItem?.nextElementSibling === null; - - if (isFirstLevelItem && isLastItem && isEmpty) { - this.getOutOfList(); - - return; - } else if (isLastItem && isEmpty) { - this.unshiftItem(); - - return; - } + const isFirstLevelItem = currentItem.parentNode === this.listWrapper; /** - * On other Enters, get content from caret till the end of the block - * And move it to the new item + * On Enter in the last empty item, get out of list */ - const endingFragment = Caret.extractFragmentFromCaretPositionTillTheEnd(); - if (!endingFragment) { - return; - } - const endingHTML = Dom.fragmentToString(endingFragment); - const itemChildren = currentItem?.querySelector( - `.${DefaultListCssClasses.itemChildren}` - ); + if (isFirstLevelItem && isEmpty) { + if (isLastItem(currentItem) && !itemHasSublist(currentItem)) { + this.getOutOfList(); - /** - * Create the new list item - */ - const itemEl = this.list!.renderItem(endingHTML, { checked: false }); + return; + } + /** + * If enter is pressed in the ัenter of the list item we should split it + */ + else { + this.splitList(currentItem); + return; + } + } /** - * Check if child items exist - * - * @type {boolean} + * If currnet item is empty and is in the middle of the list + * And if current item is not on the first level + * Then unshift current item */ - const childrenExist = - itemChildren && - Array.from(itemChildren.querySelectorAll(`.${DefaultListCssClasses.item}`)).length > 0; + else if (isEmpty) { + this.unshiftItem(currentItem); + return; + } /** - * If item has children, prepend to them - * Otherwise, insert the new item after current + * If current item is not empty than split current item */ - if (childrenExist) { - itemChildren.prepend(itemEl); - } else { - currentItem?.after(itemEl); + else { + this.splitItem(currentItem); } - - this.focusItem(itemEl); } /** @@ -432,11 +463,17 @@ export default class ListTabulator { * @param {KeyboardEvent} event - keydown */ backspace(event: KeyboardEvent): void { + const currentItem = this.currentItem; + + if (currentItem === null) { + return; + } + /** * Caret is not at start of the item * Then backspace button should remove letter as usual */ - if (!Caret.isAtStart()) { + if (!isCaretAtStartOfInput(currentItem)) { return; } @@ -445,274 +482,383 @@ export default class ListTabulator { */ event.preventDefault(); - const currentItem = this.currentItem; - if (!currentItem) { + this.mergeItemWithPrevious(currentItem); + } + + + /** + * Reduce indentation for current item + * + * @param {KeyboardEvent} event - keydown + * @returns {void} + */ + shiftTab(event: KeyboardEvent): void { + /** + * Prevent editor.js behaviour + */ + event.stopPropagation(); + + /** + * Prevent browser tab behaviour + */ + event.preventDefault(); + + /** + * Check that current item exists + */ + if (this.currentItem === null) { return; } - const previousItem = currentItem.previousSibling; - if (!currentItem.parentNode) { + + /** + * Move item from current list to parent list + */ + this.unshiftItem(this.currentItem); + } + + /** + * Decrease indentation of the passed item + * + * @returns {void} + */ + unshiftItem(item: ItemElement): void { + if (!item.parentNode) { return; } - if (!isHtmlElement(currentItem.parentNode)) { + if (!isHtmlElement(item.parentNode)) { return; } - const parentItem = currentItem.parentNode.closest(`.${DefaultListCssClasses.item}`); + + const parentItem = item.parentNode.closest(`.${DefaultListCssClasses.item}`); /** - * Do nothing with the first item in the first-level list. - * No previous sibling means that this is the first item in the list. - * No parent item means that this is a first-level list. - * - * Before: - * 1. |Hello - * 2. World! - * - * After: - * 1. |Hello - * 2. World! - * - * If it this item and the while list is empty then editor.js should - * process this behaviour and remove the block completely - * - * Before: - * 1. | - * - * After: block has been removed - * + * If item in the first-level list then no need to do anything */ - if (!previousItem && !parentItem) { + if (!parentItem) { return; } - // make sure previousItem is an HTMLElement - if (previousItem && !isHtmlElement(previousItem)) { + let currentItemChildWrapper = getItemChildWrapper(item); + + if (item.parentElement === null) { return; } - /** - * Prevent editor.js behaviour - */ - event.stopPropagation(); + const siblings = getSiblings(item); - /** - * Lets compute the item which will be merged with current item text - */ - let targetItem: Element | null; /** - * If there is a previous item then we get a deepest item in its sublists - * - * Otherwise we will use the parent item + * If item has any siblings, they should be appended to item child wrapper */ - if (previousItem) { - const childrenOfPreviousItem = previousItem.querySelectorAll( - `.${DefaultListCssClasses.item}` - ); + if (siblings !== null) { + /** + * Render child wrapper if it does no exist + */ + if (currentItemChildWrapper === null) { + currentItemChildWrapper = this.renderer!.renderWrapper(false); + } - targetItem = Array.from(childrenOfPreviousItem).pop() || previousItem; - } else { - targetItem = parentItem; + /** + * Append siblings to item child wrapper + */ + siblings.forEach((sibling) => { + currentItemChildWrapper!.appendChild(sibling); + }) + + item.appendChild(currentItemChildWrapper); } + const restore = saveCaret(); + + parentItem.after(item); + + restore(); + /** - * Get content from caret till the end of the block to move it to the new item + * If previous parent's children list is now empty, remove it. */ - const endingFragment = Caret.extractFragmentFromCaretPositionTillTheEnd(); - if (!endingFragment) { + const parentItemChildWrapper = getItemChildWrapper(parentItem); + + if (!parentItemChildWrapper) { return; } - const endingHTML = Dom.fragmentToString(endingFragment); + + removeChildWrapperIfEmpty(parentItemChildWrapper); + } + + /** + * Method that is used for list splitting and moving trailing items to the new separated list + * @param item - current item html element + */ + splitList(item: ItemElement): void { + const currentItemChildrenList = getChildItems(item); /** - * Get the target item content element + * First child item should be unshifted because separated list should start + * with item with first nesting level */ - if (!targetItem) { - return; + if (currentItemChildrenList.length !== 0) { + const firstChildItem = currentItemChildrenList[0]; + + this.unshiftItem(firstChildItem); } - const targetItemContent = targetItem.querySelector( - `.${DefaultListCssClasses.itemContent}` - ); /** - * Set a new place for caret + * Get trailing siblings of the current item */ - if (!targetItemContent) { + const newListItems = getSiblings(item); + + if (newListItems === null) { return; } - Caret.focus(targetItemContent, false); /** - * Save the caret position + * Render new wrapper for list that would be separated */ - this.caret.save(); + const newListWrapper = this.renderer!.renderWrapper(true); /** - * Update target item content by merging with current item html content + * Append new list wrapper with trailing elements */ - targetItemContent.insertAdjacentHTML('beforeend', endingHTML); + newListItems.forEach((item) => { + newListWrapper.appendChild(item); + }) + + const newListContent = this.save(newListWrapper); /** - * Get the sublist first-level items for current item + * Get current list block index */ - let currentItemSublistItems: NodeListOf | Element[] = - currentItem.querySelectorAll( - `.${DefaultListCssClasses.itemChildren} > .${DefaultListCssClasses.item}` - ); + const currentBlock = this.block; + + const currentBlockIndex = this.api.blocks.getCurrentBlockIndex() /** - * Create an array from current item sublist items + * Insert separated list with trailing items */ - currentItemSublistItems = Array.from(currentItemSublistItems); + this.api.blocks.insert(currentBlock?.name, newListContent, this.config, currentBlockIndex + 1); /** - * Filter items for sublist first-level - * No need to move deeper items + * Insert paragraph */ - currentItemSublistItems = currentItemSublistItems.filter((node) => { - // make sure node.parentNode is an HTMLElement - if (!node.parentNode) { - return false; - } - if (!isHtmlElement(node.parentNode)) { - return false; - } - return node.parentNode.closest(`.${DefaultListCssClasses.item}`) === currentItem; - }); + this.getOutOfList(currentBlockIndex + 1); + + /** + * Remove temporary new list wrapper used for content save + */ + newListWrapper.remove(); + } + + /** + * Method that is used for splitting item content and moving trailing content to the new sibling item + * @param currentItem - current item html element + */ + splitItem(currentItem: ItemElement): void { + const [ currentNode, offset ] = getCaretNodeAndOffset(); + + if ( currentNode === null ) { + return; + } + + const currentItemContent = getItemContentElement(currentItem); + + let endingHTML: string; /** - * Reverse the array to insert items + * If current item has no content, we should pass an empty string to the next created list item */ - currentItemSublistItems.reverse().forEach((item) => { + if (currentItemContent === null) { + endingHTML = ''; + } else { /** - * Check if we need to save the indent for current item children - * - * If this is the first item in the list then place its children to the same level as currentItem. - * Same as shift+tab for all of these children. - * - * If there is a previous sibling then place children right after target item + * On other Enters, get content from caret till the end of the block + * And move it to the new item */ - if (!previousItem) { - /** - * The first item in the list - * - * Before: - * 1. Hello - * 1.1. |My - * 1.1.1. Wonderful - * 1.1.2. World - * - * After: - * 1. Hello|My - * 1.1. Wonderful - * 1.2. World - */ - currentItem.after(item); - } else { - /** - * Not the first item - * - * Before: - * 1. Hello - * 1.1. My - * 1.2. |Dear - * 1.2.1. Wonderful - * 1.2.2. World - * - * After: - * 1. Hello - * 1.1. My|Dear - * 1.2. Wonderful - * 1.3. World - */ - targetItem.after(item); - } - }); + endingHTML = getContenteditableSlice(currentItemContent, currentNode, offset, 'right', true); + } + const itemChildren = getItemChildWrapper(currentItem) /** - * Remove current item element + * Create the new list item */ - currentItem.remove(); + const itemEl = this.renderItem(endingHTML); /** - * Restore the caret position + * Move new item after current */ - this.caret.restore(); - } + currentItem?.after(itemEl); + /** + * If current item has children, move them to the new item + */ + if (itemChildren) { + itemEl.appendChild(itemChildren); + } + + focusItem(itemEl); + } /** - * Reduce indentation for current item - * - * @param {KeyboardEvent} event - keydown - * @returns {void} + * Method that is used for merging current item with previous one + * Content of the current item would be appended to the previous item + * Current item children would not change nesting level + * @param currentItem - current item html element */ - shiftTab(event: KeyboardEvent): void { + mergeItemWithPrevious(item: ItemElement): void { + const previousItem = item.previousElementSibling; + + const currentItemParentNode = item.parentNode; + /** - * Prevent editor.js behaviour + * Check that parent node of the current element exists */ - event.stopPropagation(); + if (currentItemParentNode === null) { + return; + } + if (!isHtmlElement(currentItemParentNode)) { + return; + } + + const parentItem = currentItemParentNode.closest(`.${DefaultListCssClasses.item}`); /** - * Prevent browser tab behaviour + * Check that current item has any previous siblings to be merged with */ - event.preventDefault(); + if (!previousItem && !parentItem) { + return; + } /** - * Move item from current list to parent list + * Make sure previousItem is an HTMLElement */ - this.unshiftItem(); - } - - - /** - * Decrease indentation of the current item - * - * @returns {void} - */ - unshiftItem(): void { - const currentItem = this.currentItem; - if (!currentItem) { + if (previousItem && !isHtmlElement(previousItem)) { return; } - if (!currentItem.parentNode) { - return; + + /** + * Lets compute the item which will be merged with current item text + */ + let targetItem: ItemElement | null; + + /** + * If there is a previous item then we get a deepest item in its sublists + * + * Otherwise we will use the parent item + */ + if (previousItem) { + /** + * Get list of all levels children of the previous item + */ + const childrenOfPreviousItem = getChildItems(previousItem, false); + + /** + * Target item would be deepest child of the previous item or previous item itself + */ + if (childrenOfPreviousItem.length !== 0 && childrenOfPreviousItem.length !== 0) { + targetItem = childrenOfPreviousItem[childrenOfPreviousItem.length - 1]; + } else { + targetItem = previousItem; + } + } else { + targetItem = parentItem; } - if (!isHtmlElement(currentItem.parentNode)) { + + /** + * Get current item content + */ + const currentItemContent = this.renderer.getItemContent(item); + + /** + * Get the target item content element + */ + if (!targetItem) { return; } - const parentItem = currentItem.parentNode.closest(`.${DefaultListCssClasses.item}`); + /** + * Get target item content element + */ + const targetItemContentElement = getItemContentElement(targetItem); /** - * If item in the first-level list then no need to do anything + * Set a new place for caret */ - if (!parentItem) { + if (!targetItemContentElement) { return; } + focus(targetItemContentElement, false); - this.caret.save(); + /** + * Save the caret position + */ + const restore = saveCaret(); - parentItem.after(currentItem); + /** + * Update target item content by merging with current item html content + */ + targetItemContentElement.insertAdjacentHTML('beforeend', currentItemContent); - this.caret.restore(); + /** + * Get child list of the currentItem + */ + const currentItemChildrenList = getChildItems(item); /** - * If previous parent's children list is now empty, remove it. + * Check that current item has any children */ - const prevParentChildrenList = parentItem.querySelector( - `.${DefaultListCssClasses.itemChildren}` - ); - if (!prevParentChildrenList) { + if (currentItemChildrenList.length === 0) { + /** + * Remove current item element + */ + item.remove(); + + /** + * Restore the caret position + */ + restore(); + return; } - const isPrevParentChildrenEmpty = - prevParentChildrenList.children.length === 0; - if (isPrevParentChildrenEmpty) { - prevParentChildrenList.remove(); + /** + * Get target for child list of the currentItem + * Note that previous item and parent item could not be null at the same time + * This case is checked before + */ + const targetForChildItems = previousItem ? previousItem : parentItem!; + + const targetChildWrapper = getItemChildWrapper(targetForChildItems) ?? this.renderer.renderWrapper(false); + + /** + * Add child current item children to the target childWrapper + */ + if (previousItem) { + currentItemChildrenList.forEach(childItem => { + targetChildWrapper.appendChild(childItem); + }) + } else { + currentItemChildrenList.forEach(childItem => { + targetChildWrapper.prepend(childItem); + }) } - } + /** + * If we created new wrapper, then append childWrapper to the target item + */ + if (getItemChildWrapper(targetForChildItems) === null) { + targetItem.appendChild(targetChildWrapper) + } + + /** + * Remove current item element + */ + item.remove(); + + /** + * Restore the caret position + */ + restore(); + } /** * Add indentation to current item @@ -735,93 +881,112 @@ export default class ListTabulator { if (!currentItem) { return; } + + /** + * Check that the item has potential parent + * Previous sibling is potential parent in case of adding tab + * After adding tab current item would be moved to the previous sibling's child list + */ const prevItem = currentItem.previousSibling; - if (!prevItem) { + + if (prevItem === null) { return; } if (!isHtmlElement(prevItem)) { return; } - if (currentItem.querySelector(`.${DefaultListCssClasses.itemChildren}`) !== null) { - return; - } - const isFirstChild = !prevItem; - /** - * In the first item we should not handle Tabs (because there is no parent item above) - */ - if (isFirstChild) { - return; - } - - const prevItemChildrenList = prevItem.querySelector( - `.${DefaultListCssClasses.itemChildren}` - ); + const prevItemChildrenList = getItemChildWrapper(prevItem); - this.caret.save(); + const restore = saveCaret(); /** * If prev item has child items, just append current to them + * Else render new child wrapper for previous item */ if (prevItemChildrenList) { /** - * CurrentItem would not be removed soon (it should be cleared content and checkbox would be removed) - * after that elements with child items would be moveable too + * Previous item would be appended with current item and it's sublists + * After that sublists would be moved one level back */ - currentItem.remove(); - const newSublistItem = this.list!.renderItem(this.list!.getItemContent(currentItem), {checked: false}); - prevItemChildrenList.appendChild(newSublistItem); - } else { + prevItemChildrenList.appendChild(currentItem); + /** - * CurrentItem would not be removed soon (it should be cleared content and checkbox would be removed) - * after that elements with child items would be moveable too + * Get all current item child to be moved to previous nesting level */ - currentItem.remove(); + const currentItemChildrenList = getChildItems(currentItem); + /** - * If prev item has no child items - * - Create and append children wrapper to the previous item - * - Append current item to it + * Move current item sublists one level back */ - const sublistWrapper = this.list!.renderWrapper(1); - const newSublistItem = this.list!.renderItem(this.list!.getItemContent(currentItem), {checked: false}); + currentItemChildrenList.forEach((child) => { + prevItemChildrenList.appendChild(child); + }) + } else { + const prevItemChildrenListWrapper = this.renderer!.renderWrapper(false); - sublistWrapper.appendChild(newSublistItem); + /** + * Previous item would be appended with current item and it's sublists + * After that sublists would be moved one level back + */ + prevItemChildrenListWrapper.appendChild(currentItem); - console.log(prevItem, sublistWrapper) + /** + * Get all current item child to be moved to previous nesting level + */ + const currentItemChildrenList = getChildItems(currentItem); - prevItem?.appendChild(sublistWrapper); + /** + * Move current item sublists one level back + */ + currentItemChildrenList.forEach((child) => { + prevItemChildrenListWrapper.appendChild(child); + }) + + prevItem.appendChild(prevItemChildrenListWrapper); } - this.caret.restore(); + restore(); } /** - * Sets focus to the item's content - * - * @param {Element} item - item (
  • ) to select - * @param {boolean} atStart - where to set focus: at the start or at the end + * Get out from List Tool by Enter on the empty last item + * @param index - optional parameter represents index, where would be inseted default block * @returns {void} */ - focusItem(item: Element, atStart: boolean = true): void { - const itemContent = item.querySelector( - `.${DefaultListCssClasses.itemContent}` - ); - if (!itemContent) { - return; + getOutOfList(index?: number): void { + let newBlock; + + /** + * Check that index passed + */ + if (index !== undefined) { + newBlock = this.api.blocks.insert(undefined, undefined, undefined, index); + } else { + newBlock = this.api.blocks.insert(); } - Caret.focus(itemContent, atStart); + this.currentItem?.remove(); + this.api.caret.setToBlock(newBlock); } /** - * Get out from List Tool by Enter on the empty last item - * - * @returns {void} + * Method that calls render function of the renderer with a necessary item meta cast + * @param item - item to be rendered + * @returns html element of the rendered item */ - getOutOfList(): void { - this.currentItem?.remove(); + renderItem(itemContent: ListItem['content'], meta?: ListItem['meta']): ItemElement { + const itemMeta = meta ?? this.renderer.composeDefaultMeta(); + + switch (true) { + case this.renderer instanceof OrderedListRenderer: + return this.renderer.renderItem(itemContent, itemMeta as OrderedListItemMeta); - this.api.blocks.insert(); - this.api.caret.setToBlock(this.api.blocks.getCurrentBlockIndex()); + case this.renderer instanceof UnorderedListRenderer: + return this.renderer.renderItem(itemContent, itemMeta as UnorderedListItemMeta); + + default: + return this.renderer.renderItem(itemContent, itemMeta as ChecklistItemMeta); } + } } diff --git a/src/index.ts b/src/index.ts index ba0d4f12..702358a6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -import type { API, PasteConfig, ToolboxConfig } from '@editorjs/editorjs'; +import type { API, BlockAPI, PasteConfig, ToolboxConfig } from '@editorjs/editorjs'; import type { BlockToolConstructorOptions, TunesMenuConfig, @@ -6,6 +6,8 @@ import type { import { IconListBulleted, IconListNumbered, IconChecklist } from '@codexteam/icons'; import { NestedListConfig, ListData, ListDataStyle, ListItem } from './types/ListParams'; import ListTabulator from './ListTabulator'; +import { CheckListRenderer, OrderedListRenderer, UnorderedListRenderer } from './ListRenderer'; +import { ListRenderer } from './types/ListRenderer'; /** * Build styles @@ -71,20 +73,12 @@ export default class NestedList { set listStyle(style: ListDataStyle) { this.data.style = style; + this.changeTabulatorByStyle(style); + /** - * Create new instance of list + * Create new list element */ - this.list = new ListTabulator( - { - data: this.data, - api: this.api, - readOnly: this.readOnly, - config: this.config, - }, - this.listStyle - ); - - const newListElement = this.list.render() + const newListElement = this.list!.render() this.listElement?.replaceWith(newListElement); @@ -104,7 +98,7 @@ export default class NestedList { /** * Tool's configuration */ - private config?: NestedListConfig; + private config: NestedListConfig; /** * Default list style @@ -116,10 +110,15 @@ export default class NestedList { */ private data: ListData; + /** + * Editor block api + */ + private block: BlockAPI; + /** * Class that is responsible for list complete list rendering and saving */ - list: ListTabulator | undefined; + list: ListTabulator | undefined; /** * Main constant wrapper of the whole list @@ -136,10 +135,11 @@ export default class NestedList { * @param {object} params.api - Editor.js API * @param {boolean} params.readOnly - read-only mode flag */ - constructor({ data, config, api, readOnly }: ListParams) { + constructor({ data, config, api, readOnly, block }: ListParams) { this.api = api; this.readOnly = readOnly; this.config = config; + this.block = block; /** * Set the default list style from the config or presetted 'ordered'. @@ -152,6 +152,8 @@ export default class NestedList { }; this.data = data && Object.keys(data).length ? data : initialData; + + this.changeTabulatorByStyle(this.defaultListStyle); } /** @@ -159,16 +161,7 @@ export default class NestedList { * @returns rendered list wrapper with all contents */ render() { - this.list = new ListTabulator({ - data: this.data, - readOnly: this.readOnly, - api: this.api, - config: this.config, - }, - this.listStyle - ); - - this.listElement = this.list.render(); + this.listElement = this.list!.render(); return this.listElement; } @@ -183,6 +176,10 @@ export default class NestedList { return this.data } + merge(data: ListData) { + this.list!.merge(data); + } + /** * Creates Block Tune allowing to change the list style * @@ -220,6 +217,53 @@ export default class NestedList { })); } + /** + * This method allows changing + * @param style + */ + changeTabulatorByStyle(style: ListDataStyle) { + switch (this.listStyle) { + case 'ordered': + this.list = new ListTabulator({ + data: this.data, + readOnly: this.readOnly, + api: this.api, + config: this.config, + block: this.block, + }, + new OrderedListRenderer(this.readOnly, this.config), + ); + + break; + + case 'unordered': + this.list = new ListTabulator({ + data: this.data, + readOnly: this.readOnly, + api: this.api, + config: this.config, + block: this.block, + }, + new UnorderedListRenderer(this.readOnly, this.config), + ); + + break; + + case 'checklist': + this.list = new ListTabulator({ + data: this.data, + readOnly: this.readOnly, + api: this.api, + config: this.config, + block: this.block, + }, + new CheckListRenderer(this.readOnly, this.config), + ); + + break; + } + } + /** * On paste sanitzation config. Allow only tags that are allowed in the Tool. * diff --git a/src/types/Elements.ts b/src/types/Elements.ts new file mode 100644 index 00000000..0f13050b --- /dev/null +++ b/src/types/Elements.ts @@ -0,0 +1,14 @@ +/** + * Type that represents the list item + */ +export type ItemElement = HTMLElement; + +/** + * Type that represents children wrapper of the list item + */ +export type ItemChildWrapperElement = HTMLElement; + +/** + * Type that represents content element of the item + */ +export type ItemContentElement = HTMLElement diff --git a/src/types/ListParams.ts b/src/types/ListParams.ts index 9316df25..39f5502d 100644 --- a/src/types/ListParams.ts +++ b/src/types/ListParams.ts @@ -10,7 +10,7 @@ export type ListDataStyle = 'ordered' | 'unordered' | 'checklist'; */ export interface ListData { /** - * list type 'ordered' or 'unordered' + * list type 'ordered' or 'unordered' or 'checklist' */ style: ListDataStyle; /** diff --git a/src/types/ListRenderer.ts b/src/types/ListRenderer.ts new file mode 100644 index 00000000..c41c5fb5 --- /dev/null +++ b/src/types/ListRenderer.ts @@ -0,0 +1,6 @@ +import { CheckListRenderer, OrderedListRenderer, UnorderedListRenderer } from '../ListRenderer'; + +/** + * Type that represents all possible list renderer types + */ +export type ListRenderer = CheckListRenderer | OrderedListRenderer | UnorderedListRenderer; diff --git a/src/utils/Caret.ts b/src/utils/Caret.ts deleted file mode 100644 index 69e982f0..00000000 --- a/src/utils/Caret.ts +++ /dev/null @@ -1,245 +0,0 @@ -import * as dom from './Dom'; -import { isHtmlElement } from './type-guards'; - -/** - * Helper for working with caret - */ -export default class Caret { - /** - * The for caret saving/restoring - */ - savedFakeCaret: HTMLElement | undefined; - - /** - * Store internal properties - */ - constructor() { - /** - * The hidden for caret saving/restoring - */ - this.savedFakeCaret = undefined; - } - - /** - * Saves caret position using hidden - * - * @returns {void} - */ - save(): void { - const range = Caret.range; - const cursor = dom.make('span'); - - cursor.hidden = true; - - if (!range) { - return; - } - range.insertNode(cursor); - - this.savedFakeCaret = cursor; - } - - /** - * Restores the caret position saved by the save() method - * - * @returns {void} - */ - restore(): void { - if (!this.savedFakeCaret) { - return; - } - - const sel = window.getSelection(); - if (!sel) { - return; - } - - const range = new Range(); - - range.setStartAfter(this.savedFakeCaret); - range.setEndAfter(this.savedFakeCaret); - - sel.removeAllRanges(); - sel.addRange(range); - - /** - * A little timeout uses to allow browser to set caret after element before we remove it. - */ - setTimeout(() => { - this.savedFakeCaret?.remove(); - }, 150); - } - - /** - * Returns the first range - * - * @returns {Range|null} - */ - static get range(): Range | null { - const selection = window.getSelection(); - - return selection && selection.rangeCount ? selection.getRangeAt(0) : null; - } - - /** - * Extract content fragment from Caret position to the end of contenteditable element - * - * @returns {DocumentFragment|void} - */ - static extractFragmentFromCaretPositionTillTheEnd(): DocumentFragment | void { - const selection = window.getSelection(); - - if (!selection) { - return; - } - - if (!selection.rangeCount) { - return; - } - - const selectRange = selection.getRangeAt(0); - let startNode = selectRange.startContainer; - - /** - * selectRange.startContainer can point to the Text node which has no .closest() method - */ - if (startNode.nodeType !== Node.ELEMENT_NODE) { - if (!startNode.parentNode) { - return; - } - startNode = startNode.parentNode; - } - - // if startNode is not htmlelement return - if (!isHtmlElement(startNode)) { - return; - } - - const currentBlockInput = startNode.closest('[contenteditable]'); - - if (!currentBlockInput) { - return; - } - - selectRange.deleteContents(); - - const range = selectRange.cloneRange(); - - range.selectNodeContents(currentBlockInput); - range.setStart(selectRange.endContainer, selectRange.endOffset); - - return range.extractContents(); - } - - /** - * Set focus to contenteditable or native input element - * - * @param {HTMLElement} element - element where to set focus - * @param {boolean} atStart - where to set focus: at the start or at the end - * @returns {void} - */ - static focus(element: HTMLElement, atStart: boolean = true): void { - const range = document.createRange(); - const selection = window.getSelection(); - if (!selection) { - return; - } - - range.selectNodeContents(element); - range.collapse(atStart); - - selection.removeAllRanges(); - selection.addRange(range); - } - - /** - * Check if the caret placed at the start of the contenteditable element - * - * @returns {boolean} - */ - static isAtStart(): boolean { - const selection = window.getSelection(); - - if (!selection) { - return false; - } - - if (selection.focusOffset > 0) { - return false; - } - - const focusNode = selection.focusNode; - - if (!focusNode) { - return false; - } - - // if focusNode is not htmlelement return false - if (!isHtmlElement(focusNode)) { - return false; - } - - /** - * In case of - *
    - *

    <-- first (and deepest) node is - * |adaddad <-- focus node - *
    - */ - const leftSiblings = Caret.getHigherLevelSiblings(focusNode, 'left'); - - const nothingAtLeft = leftSiblings.every((node) => { - return dom.isEmpty(node); - }); - - return nothingAtLeft; - } - - /** - * Get all first-level (first child of [contenteditabel]) siblings from passed node - * Then you can check it for emptiness - * - * @example - * - * @param {HTMLElement} from - element from which siblings should be searched - * @param {'left' | 'right'} direction - direction of search - * @returns {HTMLElement[]} - */ - static getHigherLevelSiblings( - from: HTMLElement, - direction: 'left' | 'right' = 'left' - ): HTMLElement[] { - let current = from; - const siblings: HTMLElement[] = []; - - /** - * Find passed node's firs-level parent (in example - blockquote) - */ - while ( - current.parentNode && - (current.parentNode as HTMLElement).contentEditable !== 'true' - ) { - current = current.parentNode as HTMLElement; - } - - const sibling = direction === 'left' ? 'previousSibling' : 'nextSibling'; - - /** - * Find all left/right siblings - */ - while (current[sibling]) { - current = current[sibling] as HTMLElement; - siblings.push(current); - } - - return siblings; - } -} diff --git a/src/utils/Dom.ts b/src/utils/Dom.ts deleted file mode 100644 index f15911df..00000000 --- a/src/utils/Dom.ts +++ /dev/null @@ -1,73 +0,0 @@ -/** - * HtmlElement's attribute that can be set - */ -type HtmlElementAttributes = Partial; - -/** - * Helper for making Elements with attributes - * - * @param {string} tagName - new Element tag name - * @param {Array|string} classNames - list or name of CSS classname(s) - * @param {object} attributes - any attributes - * @returns {Element} - */ -export function make( - tagName: string, - classNames: string[] | string | null = null, - attributes?: HtmlElementAttributes -): HTMLElement { - const el = document.createElement(tagName); - - if (Array.isArray(classNames)) { - el.classList.add(...classNames); - } else if (classNames) { - el.classList.add(classNames); - } - - for (const attrName in attributes) { - // as any is used to avoid TS error that read-only properties of HTMLElement are not assignable - (el[attrName as keyof HtmlElementAttributes] as any) = - attributes[attrName as keyof HtmlElementAttributes]; - } - - return el; -} - -/** - * Returns the HTML content of passed Document Fragment - * - * @param {DocumentFragment} fragment - document fragment to process - * @returns {string} - */ -export function fragmentToString(fragment: DocumentFragment): string { - const div = make('div'); - - div.appendChild(fragment); - - return div.innerHTML; -} - -/** - * breadth-first search (BFS) - * {@link https://en.wikipedia.org/wiki/Breadth-first_search} - * - * @description Pushes to stack all DOM leafs and checks for emptiness - * @param {Node} node - node to check - * @returns {boolean} - */ -export function isEmpty(node: Element): boolean { - let content: string | null; - - if (node.nodeType !== Node.ELEMENT_NODE) { - content = node.textContent; - } else { - content = node.innerHTML; - - /** - * Don't count
    s as content - */ - content = content.replaceAll('
    ', ''); - } - - return content?.trim().length === 0; -} diff --git a/src/utils/focusItem.ts b/src/utils/focusItem.ts new file mode 100644 index 00000000..49a345ee --- /dev/null +++ b/src/utils/focusItem.ts @@ -0,0 +1,20 @@ +import { focus } from "@editorjs/caret"; +import { ItemElement } from "../types/Elements"; +import { getItemContentElement } from "./getItemContentElement"; + +/** + * Sets focus to the item's content + * + * @param {Element} item - item (
  • ) to select + * @param {boolean} atStart - where to set focus: at the start or at the end + * @returns {void} + */ +export function focusItem(item: ItemElement, atStart: boolean = true): void { + const itemContent = getItemContentElement(item); + + if (!itemContent) { + return; + } + + focus(itemContent, atStart); +} diff --git a/src/utils/getChildItems.ts b/src/utils/getChildItems.ts new file mode 100644 index 00000000..3a55f21c --- /dev/null +++ b/src/utils/getChildItems.ts @@ -0,0 +1,39 @@ +import { DefaultListCssClasses } from "../ListRenderer"; +import { ItemChildWrapperElement, ItemElement } from "../types/Elements"; + +/** + * Get child items of the passed element + * @param element - element to get child items + * @param firstLevelChildren - if method should return all level child items or only first level ones + */ +export function getChildItems(element: ItemElement | ItemChildWrapperElement, firstLevelChildren: boolean = true): ItemElement[] { + let itemChildWrapper: HTMLElement = element; + + /** + * If passed element is list item than get item's child wrapper + */ + if (element.classList.contains(DefaultListCssClasses.item)) { + itemChildWrapper = element.querySelector(`.${DefaultListCssClasses.itemChildren}`) as HTMLElement; + } + + /** + * Check if itemChildWrapper is not null + */ + if (itemChildWrapper === null) { + return []; + } + + if (firstLevelChildren) { + /** + * Filter first level child items of the curret child item wrapper + * In case that child could be not only list item + */ + return Array.from(itemChildWrapper.querySelectorAll(`:scope > .${DefaultListCssClasses.item}`)) + } else { + /** + * Filter all levels child items of the current child item wrapper + * In case that child could be not only list item + */ + return Array.from(itemChildWrapper.querySelectorAll(`.${DefaultListCssClasses.item}`)) + } +} diff --git a/src/utils/getItemChildWrapper.ts b/src/utils/getItemChildWrapper.ts new file mode 100644 index 00000000..ef1e1d88 --- /dev/null +++ b/src/utils/getItemChildWrapper.ts @@ -0,0 +1,10 @@ +import { ItemChildWrapperElement, ItemElement } from "../types/Elements"; +import { DefaultListCssClasses } from "../ListRenderer"; + +/** + * Returns child wrapper element of the passed item + * @param item - item to get wrapper from + */ +export function getItemChildWrapper(item: ItemElement): ItemChildWrapperElement | null { + return item.querySelector(`.${DefaultListCssClasses.itemChildren}`); +} diff --git a/src/utils/getItemContentElement.ts b/src/utils/getItemContentElement.ts new file mode 100644 index 00000000..73a1db65 --- /dev/null +++ b/src/utils/getItemContentElement.ts @@ -0,0 +1,10 @@ +import { ItemContentElement, ItemElement } from "../types/Elements"; +import { DefaultListCssClasses } from "../ListRenderer"; + +/** + * Returns content element of the passed item + * @param item - item to get content element from + */ +export function getItemContentElement(item: ItemElement): ItemContentElement | null { + return item.querySelector(`.${DefaultListCssClasses.itemContent}`); +} diff --git a/src/utils/getSiblings.ts b/src/utils/getSiblings.ts new file mode 100644 index 00000000..85f98052 --- /dev/null +++ b/src/utils/getSiblings.ts @@ -0,0 +1,45 @@ +/** + * Get all siblings before passed element, or after it + */ +export function getSiblings(element: HTMLElement, direction: 'after' | 'before' = 'after'): Element[] | null { + const siblings: Element[] = []; + + let nextElementSibling: HTMLElement; + + function getNextElementSibling(element: HTMLElement): HTMLElement{ + /** + * Get first sibling element respectfully to passed direction + */ + switch (direction) { + case 'after': + return element.nextElementSibling as HTMLElement; + + case 'before': + return element.previousElementSibling as HTMLElement; + } + } + + nextElementSibling = getNextElementSibling(element); + + /** + * Iterate by all siblings elements + */ + while (nextElementSibling !== null) { + siblings.push(nextElementSibling); + + /** + * Get next element sibling + */ + nextElementSibling = getNextElementSibling(nextElementSibling); + } + + /** + * Check that formed siblings array is not empty + * If it is emtpy, return null + */ + if (siblings.length !== 0) { + return siblings; + } + + return null; +} diff --git a/src/utils/isLastItem.ts b/src/utils/isLastItem.ts new file mode 100644 index 00000000..8ca2c8db --- /dev/null +++ b/src/utils/isLastItem.ts @@ -0,0 +1,8 @@ +import { ItemElement } from "../types/Elements"; + +/** + * Check that passed item element is last item of the list + */ +export function isLastItem(item: ItemElement): boolean { + return item.nextElementSibling === null; +} diff --git a/src/utils/itemHasSublist.ts b/src/utils/itemHasSublist.ts new file mode 100644 index 00000000..55de3c8f --- /dev/null +++ b/src/utils/itemHasSublist.ts @@ -0,0 +1,9 @@ +import { ItemElement } from "../types/Elements"; +import { DefaultListCssClasses } from "../ListRenderer"; + +/** + * Check if passed item has the sublist + */ +export function itemHasSublist(item: ItemElement): boolean { + return item.querySelector(`.${DefaultListCssClasses.itemChildren}`) !== null +} diff --git a/src/utils/removeChildWrapperIfEmpty.ts b/src/utils/removeChildWrapperIfEmpty.ts new file mode 100644 index 00000000..510b216b --- /dev/null +++ b/src/utils/removeChildWrapperIfEmpty.ts @@ -0,0 +1,11 @@ +import { ItemChildWrapperElement } from "../types/Elements"; +import { getChildItems } from "./getChildItems"; + +/** + * Method that will remove passed child wrapper if it has no child items + */ +export function removeChildWrapperIfEmpty(childWrapper: ItemChildWrapperElement): void { + if (getChildItems(childWrapper) === null) { + childWrapper.remove(); + } +} diff --git a/yarn.lock b/yarn.lock index 95902792..45c0391a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,35 +5,74 @@ "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: "@babel/highlight" "^7.10.4" -"@babel/helper-validator-identifier@^7.15.7": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== + +"@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== "@babel/highlight@^7.10.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== dependencies: - "@babel/helper-validator-identifier" "^7.15.7" - chalk "^2.0.0" + "@babel/helper-validator-identifier" "^7.24.7" + chalk "^2.4.2" js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/parser@^7.24.4": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85" - integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw== +"@babel/parser@^7.24.7": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" + integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== + dependencies: + "@babel/types" "^7.25.2" + +"@babel/types@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" + integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== + dependencies: + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" "@codexteam/icons@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@codexteam/icons/-/icons-0.3.2.tgz#b7aed0ba7b344e07953101f5476cded570d4f150" integrity sha512-P1ep2fHoy0tv4wx85eic+uee5plDnZQ1Qa6gDfv7eHPkCXorMtVqJhzMb75o1izogh6G7380PqmFDXV3bW3Pig== +"@editorjs/caret@^0.0.7": + version "0.0.7" + resolved "https://registry.yarnpkg.com/@editorjs/caret/-/caret-0.0.7.tgz#4197786834e51eea057c5af89c7383daf70fd8a0" + integrity sha512-xMTkSnqZXfAAtnf8JI3vV4L+MWdQpWGQ/x54Szj6ZuEIyk70d1XTAGU1eQvIU5i2CJeT5qDNnCk6+OXnFdFasg== + dependencies: + "@editorjs/dom" "^0.0.7" + +"@editorjs/dom@^0.0.7": + version "0.0.7" + resolved "https://registry.yarnpkg.com/@editorjs/dom/-/dom-0.0.7.tgz#790ff250dbe10d055c87f3dd599a6e01b7c2ea6c" + integrity sha512-dJH20v58MtTE7U8iYwvWBpPgeqm2dn8DDfovWlp7+bWKEe2q1g0PT/5sxVZT5wPIPWEE73K2EnTqB/3XTuV/rQ== + dependencies: + "@editorjs/helpers" "^0.0.7" + "@editorjs/editorjs@^2.29.1": - version "2.29.1" - resolved "https://registry.yarnpkg.com/@editorjs/editorjs/-/editorjs-2.29.1.tgz#d7c644c5c3fc1ea1022373cbf2c8c3ac9f990b7b" - integrity sha512-WRT2pCfikMsvySQJqpCU21LfTZaPuxUWsDO8aFGrPx4MKzOR9D+Ur4mNb3jq0FXx2EMqvIWfTyFixJxtjGHTyQ== + version "2.30.5" + resolved "https://registry.yarnpkg.com/@editorjs/editorjs/-/editorjs-2.30.5.tgz#c1a6fc2b99f567a0271408c0edd51d3da21b4534" + integrity sha512-sE7m/UPbuf+nSGjv9cmWggFsfvtYlgEX7PCby2lZWvOsOLbRxuLT+ZYlwbWshD+8BFJwiAmBj9e+ScZcOjCzeg== + +"@editorjs/helpers@^0.0.7": + version "0.0.7" + resolved "https://registry.yarnpkg.com/@editorjs/helpers/-/helpers-0.0.7.tgz#2156ec7b60a133d1e1ff87c50eb09b95b0a40ce0" + integrity sha512-jMFbtfWKip6mSS1Pyhr1ShyOfPKfxg1Z2ESRExyXJrwjWnPF7Xqipzsig8R6ZfJDXVnvhRcKNwQcHGQZuYMjkA== "@esbuild/android-arm64@0.18.20": version "0.18.20" @@ -153,13 +192,14 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.10.0": - version "4.10.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.1.tgz#361461e5cb3845d874e61731c11cfedd664d83a0" - integrity sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA== + version "4.11.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" + integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -174,6 +214,7 @@ "@humanwhocodes/config-array@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== dependencies: "@humanwhocodes/object-schema" "^1.2.0" debug "^4.1.1" @@ -182,11 +223,12 @@ "@humanwhocodes/object-schema@^1.2.0": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@jridgewell/sourcemap-codec@^1.4.15": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@microsoft/api-extractor-model@7.28.13": version "7.28.13" @@ -310,65 +352,66 @@ integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/json-schema@^7.0.5": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@typescript-eslint/eslint-plugin@^7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.1.tgz#cdc521c8bca38b55585cf30db787fb2abad3f9fd" - integrity sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg== + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" + integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.13.1" - "@typescript-eslint/type-utils" "7.13.1" - "@typescript-eslint/utils" "7.13.1" - "@typescript-eslint/visitor-keys" "7.13.1" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/type-utils" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" "@typescript-eslint/parser@^7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.13.1.tgz#fac57811b3e519185f7259bac312291f7b9c4e72" - integrity sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A== - dependencies: - "@typescript-eslint/scope-manager" "7.13.1" - "@typescript-eslint/types" "7.13.1" - "@typescript-eslint/typescript-estree" "7.13.1" - "@typescript-eslint/visitor-keys" "7.13.1" + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" + integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== + dependencies: + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz#c08041206904bf36f0e6997efdb0ca775e0c452e" - integrity sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg== +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" + integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== dependencies: - "@typescript-eslint/types" "7.13.1" - "@typescript-eslint/visitor-keys" "7.13.1" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" -"@typescript-eslint/type-utils@7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.13.1.tgz#63bec3f1fb43cf0bc409cbdb88ef96d118ca8632" - integrity sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg== +"@typescript-eslint/type-utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" + integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== dependencies: - "@typescript-eslint/typescript-estree" "7.13.1" - "@typescript-eslint/utils" "7.13.1" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/utils" "7.18.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.13.1.tgz#787db283bd0b58751094c90d5b58bbf5e9fc9bd8" - integrity sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw== +"@typescript-eslint/types@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" + integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== -"@typescript-eslint/typescript-estree@7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz#3412841b130e070db2f675e3d9b8cb1ae49e1c3f" - integrity sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw== +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" + integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== dependencies: - "@typescript-eslint/types" "7.13.1" - "@typescript-eslint/visitor-keys" "7.13.1" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -376,22 +419,22 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.13.1.tgz#611083379caa0d3a2c09d126c65065a3e4337ba2" - integrity sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ== +"@typescript-eslint/utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" + integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "7.13.1" - "@typescript-eslint/types" "7.13.1" - "@typescript-eslint/typescript-estree" "7.13.1" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" -"@typescript-eslint/visitor-keys@7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz#9c229a795a919db61f2d7f2337ef584ac05fbe96" - integrity sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA== +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" + integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== dependencies: - "@typescript-eslint/types" "7.13.1" + "@typescript-eslint/types" "7.18.0" eslint-visitor-keys "^3.4.3" "@volar/language-core@1.11.1", "@volar/language-core@~1.11.1": @@ -416,24 +459,24 @@ "@volar/language-core" "1.11.1" path-browserify "^1.0.1" -"@vue/compiler-core@3.4.27": - version "3.4.27" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.27.tgz#e69060f4b61429fe57976aa5872cfa21389e4d91" - integrity sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg== +"@vue/compiler-core@3.4.38": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.38.tgz#326dfe3c92fa2b0f1dc9b39a948a231980253496" + integrity sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A== dependencies: - "@babel/parser" "^7.24.4" - "@vue/shared" "3.4.27" + "@babel/parser" "^7.24.7" + "@vue/shared" "3.4.38" entities "^4.5.0" estree-walker "^2.0.2" source-map-js "^1.2.0" "@vue/compiler-dom@^3.3.0": - version "3.4.27" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz#d51d35f40d00ce235d7afc6ad8b09dfd92b1cc1c" - integrity sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw== + version "3.4.38" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.38.tgz#90348fac1130e0bbd408b650635cb626b3b9df06" + integrity sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ== dependencies: - "@vue/compiler-core" "3.4.27" - "@vue/shared" "3.4.27" + "@vue/compiler-core" "3.4.38" + "@vue/shared" "3.4.38" "@vue/language-core@1.8.27", "@vue/language-core@^1.8.27": version "1.8.27" @@ -450,26 +493,30 @@ path-browserify "^1.0.1" vue-template-compiler "^2.7.14" -"@vue/shared@3.4.27", "@vue/shared@^3.3.0": - version "3.4.27" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.27.tgz#f05e3cd107d157354bb4ae7a7b5fc9cf73c63b50" - integrity sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA== +"@vue/shared@3.4.38", "@vue/shared@^3.3.0": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.38.tgz#552a6770098bfd556fa3e2c686c9d3b4f4cd94c2" + integrity sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw== acorn-jsx@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== ajv@^6.10.0, ajv@^6.12.4, ajv@~6.12.6: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -477,37 +524,43 @@ ajv@^6.10.0, ajv@^6.12.4, ajv@~6.12.6: uri-js "^4.2.2" ajv@^8.0.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.8.2.tgz#01b4fef2007a28bf75f0b7fc009f62679de4abbb" + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" argparse@^1.0.7, argparse@~1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" @@ -519,18 +572,22 @@ array-union@^2.1.0: astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -552,10 +609,12 @@ braces@^3.0.3: callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -chalk@^2.0.0, chalk@^2.4.1: +chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" @@ -564,6 +623,7 @@ chalk@^2.0.0, chalk@^2.4.1: chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -571,22 +631,26 @@ chalk@^4.0.0: color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== commander@^10.0.0: version "10.0.1" @@ -596,6 +660,7 @@ commander@^10.0.0: commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== computeds@^0.0.1: version "0.0.1" @@ -605,10 +670,12 @@ computeds@^0.0.1: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -617,28 +684,24 @@ cross-spawn@^7.0.2: cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== -debug@^4.0.1, debug@^4.1.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - dependencies: - ms "2.1.2" - -debug@^4.3.4: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== +debug@^4.0.1, debug@^4.1.1, debug@^4.3.4: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== dependencies: ms "2.1.2" deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== dir-glob@^3.0.1: version "3.0.1" @@ -650,22 +713,27 @@ dir-glob@^3.0.1: doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" + strip-ansi "^6.0.1" entities@^4.5.0: version "4.5.0" @@ -703,14 +771,17 @@ esbuild@^0.18.10: escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-loader@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-4.0.2.tgz#386a1e21bcb613b3cf2d252a3b708023ccfb41ec" + integrity sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw== dependencies: find-cache-dir "^3.3.1" fs-extra "^8.1.0" @@ -721,6 +792,7 @@ eslint-loader@^4.0.2: eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" estraverse "^4.1.1" @@ -728,16 +800,19 @@ eslint-scope@^5.1.1: eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint-visitor-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3: version "3.4.3" @@ -747,6 +822,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3: eslint@^7.22.0: version "7.32.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== dependencies: "@babel/code-frame" "7.12.11" "@eslint/eslintrc" "^0.4.3" @@ -792,6 +868,7 @@ eslint@^7.22.0: espree@^7.3.0, espree@^7.3.1: version "7.3.1" resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== dependencies: acorn "^7.4.0" acorn-jsx "^5.3.1" @@ -800,26 +877,31 @@ espree@^7.3.0, espree@^7.3.1: esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^2.0.2: version "2.0.2" @@ -829,10 +911,12 @@ estree-walker@^2.0.2: esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.9: version "3.3.2" @@ -848,10 +932,17 @@ fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-uri@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" + integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== fastq@^1.6.0: version "1.17.1" @@ -863,6 +954,7 @@ fastq@^1.6.0: file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" @@ -876,6 +968,7 @@ fill-range@^7.1.1: find-cache-dir@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" make-dir "^3.0.2" @@ -884,24 +977,29 @@ find-cache-dir@^3.3.1: find-up@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" path-exists "^4.0.0" flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.1.0" + flatted "^3.2.9" + keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.1.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" jsonfile "^4.0.0" @@ -919,6 +1017,7 @@ fs-extra@~7.0.1: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.3" @@ -933,27 +1032,31 @@ function-bind@^1.1.2: functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob@^7.1.3: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" globals@^13.6.0, globals@^13.9.0: - version "13.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" @@ -969,15 +1072,11 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -graceful-fs@^4.1.2: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" @@ -986,12 +1085,14 @@ graphemer@^1.4.0: has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -hasown@^2.0.0: +hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -1006,15 +1107,17 @@ he@^1.2.0: ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.2.0, ignore@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -1027,10 +1130,12 @@ import-lazy@~4.0.0: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -1038,25 +1143,29 @@ inflight@^1.0.4: inherits@2: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== is-core-module@^2.1.0, is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + version "2.15.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea" + integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -1068,6 +1177,7 @@ is-number@^7.0.0: isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== jju@~1.4.0: version "1.4.0" @@ -1077,38 +1187,55 @@ jju@~1.4.0: js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - dependencies: - minimist "^1.2.5" + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + kolorist@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c" @@ -1117,13 +1244,15 @@ kolorist@^1.8.0: levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" type-check "~0.4.0" loader-utils@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" @@ -1132,6 +1261,7 @@ loader-utils@^2.0.0: locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" @@ -1148,10 +1278,12 @@ lodash.isequal@^4.5.0: lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== lodash@~4.17.15: version "4.17.21" @@ -1161,19 +1293,21 @@ lodash@~4.17.15: lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" magic-string@^0.30.8: - version "0.30.10" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" - integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== + version "0.30.11" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.11.tgz#301a6f93b3e8c2cb13ac1a7a673492c0dfd12954" + integrity sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A== dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" + "@jridgewell/sourcemap-codec" "^1.5.0" make-dir@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" @@ -1190,16 +1324,17 @@ micromatch@^4.0.4: braces "^3.0.3" picomatch "^2.3.1" -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^9.0.3, minimatch@^9.0.4: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" @@ -1210,20 +1345,17 @@ minimatch@~3.0.3: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== muggle-string@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a" integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== -nanoid@^3.3.6: +nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== @@ -1231,47 +1363,55 @@ nanoid@^3.3.6: natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== object-hash@^2.0.3: version "2.2.0" resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" + integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" + word-wrap "^1.2.5" p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" @@ -1283,14 +1423,17 @@ path-browserify@^1.0.1: path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" @@ -1302,10 +1445,10 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== picomatch@^2.3.1: version "2.3.1" @@ -1315,12 +1458,14 @@ picomatch@^2.3.1: pkg-dir@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" postcss-nested-ancestors@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postcss-nested-ancestors/-/postcss-nested-ancestors-2.0.0.tgz#957ef27fb9e37cb082786d95b5e310d4b47470fe" + integrity sha512-r8WbA1XLqbDuOGdCWpQ5nXdHvL4eKdnCEcDAnUlIAUHk7ZIQAESqPdxrWGPlq70ZB+FKw4wPbX1850dgFuxUKQ== dependencies: escape-string-regexp "^1.0.5" postcss "^6.0.0" @@ -1329,16 +1474,19 @@ postcss-nested-ancestors@^2.0.0: postcss-nested@^5.0.3: version "5.0.6" resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.6.tgz#466343f7fc8d3d46af3e7dba3fcd47d052a945bc" + integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA== dependencies: postcss-selector-parser "^6.0.6" postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" + version "0.1.6" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz#3d84dec809f34de020372c41b039956966896686" + integrity sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw== postcss-selector-parser@^6.0.6: - version "6.0.6" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" + version "6.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -1346,31 +1494,35 @@ postcss-selector-parser@^6.0.6: postcss@^6.0.0: version "6.0.23" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== dependencies: chalk "^2.4.1" source-map "^0.6.1" supports-color "^5.4.0" postcss@^8.4.27: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + version "8.4.41" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.41.tgz#d6104d3ba272d882fe18fc07d15dc2da62fa2681" + integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ== dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" + nanoid "^3.3.7" + picocolors "^1.0.1" + source-map-js "^1.2.0" prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== queue-microtask@^1.2.2: version "1.2.3" @@ -1380,14 +1532,17 @@ queue-microtask@^1.2.2: regexpp@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve@~1.19.0: version "1.19.0" @@ -1414,6 +1569,7 @@ reusify@^1.0.4: rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" @@ -1434,25 +1590,21 @@ run-parallel@^1.1.9: schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== dependencies: "@types/json-schema" "^7.0.5" ajv "^6.12.4" ajv-keywords "^3.5.2" semver@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.2.1: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - dependencies: - lru-cache "^6.0.0" - -semver@^7.5.4, semver@^7.6.0: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== +semver@^7.2.1, semver@^7.5.4, semver@^7.6.0: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== semver@~7.5.4: version "7.5.4" @@ -1464,12 +1616,14 @@ semver@~7.5.4: shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== slash@^3.0.0: version "3.0.0" @@ -1479,16 +1633,12 @@ slash@^3.0.0: slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - source-map-js@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" @@ -1497,10 +1647,12 @@ source-map-js@^1.2.0: source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== string-argv@~0.3.1: version "0.3.2" @@ -1510,6 +1662,7 @@ string-argv@~0.3.1: string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" @@ -1518,22 +1671,26 @@ string-width@^4.2.3: strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-json-comments@^3.1.0, strip-json-comments@^3.1.1, strip-json-comments@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" @@ -1550,8 +1707,9 @@ supports-preserve-symlinks-flag@^1.0.0: integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== table@^6.0.9: - version "6.7.3" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.3.tgz#255388439715a738391bd2ee4cbca89a4d05a9b7" + version "6.8.2" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" + integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -1562,6 +1720,12 @@ table@^6.0.9: text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" @@ -1578,12 +1742,14 @@ ts-api-utils@^1.3.0: type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== typescript@5.4.2: version "5.4.2" @@ -1591,27 +1757,31 @@ typescript@5.4.2: integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== typescript@^5.4.5: - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + version "2.4.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" + integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== validator@^13.7.0: version "13.12.0" @@ -1619,9 +1789,9 @@ validator@^13.7.0: integrity sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg== vite-plugin-css-injected-by-js@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/vite-plugin-css-injected-by-js/-/vite-plugin-css-injected-by-js-3.3.0.tgz#c19480a9e42a95c5bced976a9dde1446f9bd91ff" - integrity sha512-xG+jyHNCmUqi/TXp6q88wTJGeAOrNLSyUUTp4qEQ9QZLGcHWQQsCsSSKa59rPMQr8sOzfzmWDd8enGqfH/dBew== + version "3.5.1" + resolved "https://registry.yarnpkg.com/vite-plugin-css-injected-by-js/-/vite-plugin-css-injected-by-js-3.5.1.tgz#b9c568c21b131d08e31aa6d368ee39c9d6c1b6c1" + integrity sha512-9ioqwDuEBxW55gNoWFEDhfLTrVKXEEZgl5adhWmmqa88EQGKfTmexy4v1Rh0pAS6RhKQs2bUYQArprB32JpUZQ== vite-plugin-dts@^3.9.1: version "3.9.1" @@ -1637,9 +1807,9 @@ vite-plugin-dts@^3.9.1: vue-tsc "^1.8.27" vite@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.0.tgz#ec406295b4167ac3bc23e26f9c8ff559287cff26" - integrity sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw== + version "4.5.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.3.tgz#d88a4529ea58bae97294c7e2e6f0eab39a50fb1a" + integrity sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg== dependencies: esbuild "^0.18.10" postcss "^8.4.27" @@ -1667,20 +1837,24 @@ vue-tsc@^1.8.27: which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== z-schema@~5.0.2: version "5.0.6"