From c46792e04f0cf8a088fddbff770e7c590d9e2a6d Mon Sep 17 00:00:00 2001 From: filip mertens Date: Sat, 23 Dec 2023 13:02:07 +0100 Subject: [PATCH] bootstrap --- .../src/app/plugins/electron/fsPlugin.ts | 2 + apps/remixdesktop/src/plugins/fsPlugin.ts | 11 +- .../checkbox/src/lib/remix-ui-checkbox.tsx | 2 +- .../copy-to-clipboard/copy-to-clipboard.tsx | 2 +- .../file-decoration-tooltip.tsx | 4 +- .../src/lib/components/custom-tooltip.tsx | 30 ++--- .../helper/src/types/customtooltip.ts | 2 +- .../src/lib/components/file-explorer-menu.tsx | 2 +- .../src/lib/components/file-explorer.tsx | 25 ++-- .../components/file-recursive-item-input.tsx | 59 +++++++++ .../components/file-recursive-tree-item.tsx | 66 ++++++++++ .../lib/components/file-recursive-tree.tsx | 74 ++++------- .../components/workspace-hamburger-item.tsx | 2 +- .../workspace/src/lib/reducers/workspace.ts | 1 + .../remix-ui/workspace/src/lib/types/index.ts | 2 +- package.json | 2 +- yarn.lock | 122 +++++++++--------- 17 files changed, 259 insertions(+), 149 deletions(-) create mode 100644 libs/remix-ui/workspace/src/lib/components/file-recursive-item-input.tsx create mode 100644 libs/remix-ui/workspace/src/lib/components/file-recursive-tree-item.tsx diff --git a/apps/remix-ide/src/app/plugins/electron/fsPlugin.ts b/apps/remix-ide/src/app/plugins/electron/fsPlugin.ts index 5c04d5d841..d1555b0eb9 100644 --- a/apps/remix-ide/src/app/plugins/electron/fsPlugin.ts +++ b/apps/remix-ide/src/app/plugins/electron/fsPlugin.ts @@ -47,6 +47,7 @@ export class fsPlugin extends ElectronPlugin { return await this.call('fs', 'rmdir', path) }, readdir: async (path: string) => { + console.log('readdir', path) path = fixPath(path) const files = await this.call('fs', 'readdir', path) return files @@ -60,6 +61,7 @@ export class fsPlugin extends ElectronPlugin { return await this.call('fs', 'mkdir', path) }, readFile: async (path: string, options) => { + console.log('readFile', path) try { path = fixPath(path) const file = await this.call('fs', 'readFile', path, options) diff --git a/apps/remixdesktop/src/plugins/fsPlugin.ts b/apps/remixdesktop/src/plugins/fsPlugin.ts index 95f090970b..78b376473f 100644 --- a/apps/remixdesktop/src/plugins/fsPlugin.ts +++ b/apps/remixdesktop/src/plugins/fsPlugin.ts @@ -195,20 +195,23 @@ class FSPluginClient extends ElectronBasePluginClient { async watch(): Promise { try { + this.off('filePanel' as any, 'expandPathChanged') this.on('filePanel' as any, 'expandPathChanged', async (paths: string[]) => { + console.log('expandPathChanged', paths) this.expandedPaths = ['.', ...paths] // add root + console.log(Object.keys(this.watchers)) + paths = paths.map((path) => this.fixPath(path)) for (let path of paths) { - if (!this.watchers[path]) { - path = this.fixPath(path) + if (!Object.keys(this.watchers).includes(path)) { this.watchers[path] = await this.watcherInit(path) console.log('added watcher', path) } } - paths = paths.map((path) => this.fixPath(path)) + for (const watcher in this.watchers) { if (watcher === this.workingDir) continue if (!paths.includes(watcher)) { - this.watchers[watcher].close() + await this.watchers[watcher].close() delete this.watchers[watcher] console.log('removed watcher', watcher) } diff --git a/libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx b/libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx index 2a81dcb622..5c11d96b0f 100644 --- a/libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx +++ b/libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx @@ -1,7 +1,7 @@ import {CustomTooltip} from '@remix-ui/helper' import React, {CSSProperties} from 'react' //eslint-disable-line import './remix-ui-checkbox.css' -import {Placement} from 'react-bootstrap/esm/types' +import {Placement} from 'react-bootstrap/esm/Overlay' /* eslint-disable-next-line */ export interface RemixUiCheckboxProps { diff --git a/libs/remix-ui/clipboard/src/lib/copy-to-clipboard/copy-to-clipboard.tsx b/libs/remix-ui/clipboard/src/lib/copy-to-clipboard/copy-to-clipboard.tsx index a709f25cee..dd301671b6 100644 --- a/libs/remix-ui/clipboard/src/lib/copy-to-clipboard/copy-to-clipboard.tsx +++ b/libs/remix-ui/clipboard/src/lib/copy-to-clipboard/copy-to-clipboard.tsx @@ -1,6 +1,6 @@ import React, {useState} from 'react' import copy from 'copy-to-clipboard' -import {Placement} from 'react-bootstrap/esm/types' +import {Placement} from 'react-bootstrap/esm/Overlay' import './copy-to-clipboard.css' import {CustomTooltip} from '@remix-ui/helper' diff --git a/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-tooltip.tsx b/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-tooltip.tsx index 83f6465bcb..7eaf905a84 100644 --- a/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-tooltip.tsx +++ b/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-tooltip.tsx @@ -22,9 +22,9 @@ const FileDecorationTooltip = (props: {fileDecoration: fileDecoration; icon: JSX placement="auto" overlay={ - +
{getComments(props.fileDecoration)}
-
+
} > diff --git a/libs/remix-ui/helper/src/lib/components/custom-tooltip.tsx b/libs/remix-ui/helper/src/lib/components/custom-tooltip.tsx index 7f5a1ac932..974ceda61f 100644 --- a/libs/remix-ui/helper/src/lib/components/custom-tooltip.tsx +++ b/libs/remix-ui/helper/src/lib/components/custom-tooltip.tsx @@ -1,7 +1,7 @@ import { use } from 'chai' import React, { useEffect } from 'react' import { Fragment } from 'react' -import { OverlayTrigger, Popover } from 'react-bootstrap' +import { OverlayTrigger, Popover, Tooltip } from 'react-bootstrap' import { CustomTooltipType } from '../../types/customtooltip' export function CustomTooltip({ children, placement, tooltipId, tooltipClasses, tooltipText, tooltipTextClasses, delay, hide }: CustomTooltipType) { @@ -15,22 +15,18 @@ export function CustomTooltip({ children, placement, tooltipId, tooltipClasses, return ( (!hide ? ( - - - - <>{typeof tooltipText === 'string' ? {tooltipText} : tooltipText} - - - } - delay={delay} - > - <>{children} + + + {typeof tooltipText === 'string' ? {tooltipText} : tooltipText} + + + + }> + {children} ) : ( diff --git a/libs/remix-ui/helper/src/types/customtooltip.ts b/libs/remix-ui/helper/src/types/customtooltip.ts index 4aa93e35df..7afb63f091 100644 --- a/libs/remix-ui/helper/src/types/customtooltip.ts +++ b/libs/remix-ui/helper/src/types/customtooltip.ts @@ -1,4 +1,4 @@ -import { Placement } from 'react-bootstrap/esm/types' +import { Placement } from 'react-bootstrap/esm/Overlay' import { OverlayDelay, OverlayTriggerRenderProps } from 'react-bootstrap/esm/OverlayTrigger' export type CustomTooltipType = { diff --git a/libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx b/libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx index d4a4adc654..313512cd67 100644 --- a/libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx +++ b/libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx @@ -1,7 +1,7 @@ import {CustomTooltip} from '@remix-ui/helper' import React, {useState, useEffect, useContext} from 'react' //eslint-disable-line import {FormattedMessage} from 'react-intl' -import {Placement} from 'react-bootstrap/esm/types' +import {Placement} from 'react-bootstrap/esm/Overlay' import {FileExplorerMenuProps} from '../types' import { FileSystemContext } from '../contexts' const _paq = (window._paq = window._paq || []) diff --git a/libs/remix-ui/workspace/src/lib/components/file-explorer.tsx b/libs/remix-ui/workspace/src/lib/components/file-explorer.tsx index 6115441504..8c42e9cb71 100644 --- a/libs/remix-ui/workspace/src/lib/components/file-explorer.tsx +++ b/libs/remix-ui/workspace/src/lib/components/file-explorer.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState, useRef, SyntheticEvent } from 'react' // eslint-disable-line +import React, { useEffect, useState, useRef, SyntheticEvent, useTransition } from 'react' // eslint-disable-line import { useIntl } from 'react-intl' import { TreeView } from '@remix-ui/tree-view' // eslint-disable-line import { FileExplorerMenu } from './file-explorer-menu' // eslint-disable-line @@ -8,12 +8,11 @@ import { FileExplorerProps, FileType, WorkSpaceState, WorkspaceElement } from '. import '../css/file-explorer.css' import { checkSpecialChars, extractNameFromKey, extractParentFromKey, getPathIcon, joinPath } from '@remix-ui/helper' // eslint-disable-next-line @typescript-eslint/no-unused-vars -import { FileRender } from './file-render' import { Drag, Draggable } from '@remix-ui/drag-n-drop' import { ROOT_PATH } from '../utils/constants' import { fileKeySort } from '../utils' import { moveFileIsAllowed, moveFolderIsAllowed } from '../actions' -import { RecursiveTreeItem, RecursiveTree } from './file-recursive-tree' +import { RecursiveTree } from './file-recursive-tree' export const FileExplorer = (props: FileExplorerProps) => { const intl = useIntl() @@ -34,6 +33,7 @@ export const FileExplorer = (props: FileExplorerProps) => { fileState } = props const [state, setState] = useState(workspaceState) + const [isPending, startTransition] = useTransition(); const treeRef = useRef(null) const [childrenKeys, setChildrenKeys] = useState([]) @@ -153,6 +153,7 @@ export const FileExplorer = (props: FileExplorerProps) => { } const handleClickFile = (path: string, type: WorkspaceElement) => { + console.log('handleClickFile', path, type) if (!state.ctrlKey) { props.dispatchHandleClickFile(path, type) } else { @@ -187,14 +188,14 @@ export const FileExplorer = (props: FileExplorerProps) => { } } else { let expandPath = [] - + if (!props.expandPath.includes(path)) { expandPath = [...new Set([...props.expandPath, path])] props.dispatchFetchDirectory(path) } else { expandPath = [...new Set(props.expandPath.filter((key) => key && typeof key === 'string' && !key.startsWith(path)))] } - + console.log('handleClickFolder', path, type) props.dispatchSetFocusElement([{ key: path, type }]) props.dispatchHandleExpandPath(expandPath) } @@ -416,12 +417,18 @@ export const FileExplorer = (props: FileExplorerProps) => {
- +
- -
-
+ +
diff --git a/libs/remix-ui/workspace/src/lib/components/file-recursive-item-input.tsx b/libs/remix-ui/workspace/src/lib/components/file-recursive-item-input.tsx new file mode 100644 index 0000000000..58268d43a0 --- /dev/null +++ b/libs/remix-ui/workspace/src/lib/components/file-recursive-item-input.tsx @@ -0,0 +1,59 @@ +import React, { useState, useRef, useEffect } from "react" +import { FileType } from "../types" + +interface RecursiveItemInputProps { + file: FileType + editModeOff: (content: string) => void +} + +export const RecursiveItemInput = (props: RecursiveItemInputProps) => { + const { file, editModeOff } = props + const [value, setValue] = useState(file.name) + const ref = useRef(null) + + const handleKeyDown = (e: any) => { + if (e.which === 13) { + e.preventDefault() + editModeOff(value) + } + if (e.which === 27) { + e.preventDefault() + // don't change it + editModeOff(file.name) + } + } + + const handleEditBlur = (event: React.SyntheticEvent) => { + event.stopPropagation() + // don't change it + editModeOff(file.name) + } + + const handleFocus = (e: any) => { + // select the file name without the extension + const val = e.target.value + const dotIndex = val.lastIndexOf('.') + if (dotIndex > 0) { + e.target.setSelectionRange(0, dotIndex) + } else { + e.target.setSelectionRange(0, val.length) + } + } + + useEffect(() => { + ref.current.focus() + },[]) + + return( setValue(e.target.value)} + defaultValue={file.name}> + ) +} \ No newline at end of file diff --git a/libs/remix-ui/workspace/src/lib/components/file-recursive-tree-item.tsx b/libs/remix-ui/workspace/src/lib/components/file-recursive-tree-item.tsx new file mode 100644 index 0000000000..1cc0165f7c --- /dev/null +++ b/libs/remix-ui/workspace/src/lib/components/file-recursive-tree-item.tsx @@ -0,0 +1,66 @@ +import { getPathIcon } from "@remix-ui/helper"; +import React, { useEffect, useState } from "react"; +import { FileType, WorkspaceElement } from "../types"; +import { RecursiveItemInput } from "./file-recursive-item-input"; + +interface RecursiveTreeItemProps { + file: FileType + expandPath?: string[] + focusEdit: {element: string; type: string; isNew: boolean; lastEdit: string} + editModeOff: (content: string) => void + focusElement: {key: string; type: WorkspaceElement}[] + focusContext: {element: string; x: number; y: number; type: string} +} + +export const RecursiveTreeItem = (props: RecursiveTreeItemProps) => { + + const [hover, setHover] = useState(false) + const { file, expandPath, focusEdit, editModeOff } = props + + useEffect(() => { + console.log('item render') + },[]) + + const labelClass = + props.focusEdit.element === file.path + ? 'bg-light' + : props.focusElement.findIndex((item) => item.key === file.path) !== -1 + ? 'bg-secondary' + : hover + ? 'bg-light border-no-shift' + : props.focusContext.element === file.path && props.focusEdit.element !== file.path + ? 'bg-light border-no-shift' + : '' + + return ( + <> +
  • +
    setHover(true)} + onMouseOut={() => setHover(false)} + > +
    + {focusEdit && file.path && focusEdit.element === file.path ? + : + {file.name}} +
    +
      + { + expandPath && expandPath.includes(file.path) && + file.child && Object.keys(file.child).map((key, index) => { + //console.log('recursive tree', file.child[key]) + return () + }) + } +
    +
  • + ) +} \ No newline at end of file diff --git a/libs/remix-ui/workspace/src/lib/components/file-recursive-tree.tsx b/libs/remix-ui/workspace/src/lib/components/file-recursive-tree.tsx index 8429304515..b92cf83275 100644 --- a/libs/remix-ui/workspace/src/lib/components/file-recursive-tree.tsx +++ b/libs/remix-ui/workspace/src/lib/components/file-recursive-tree.tsx @@ -1,15 +1,17 @@ -import { CustomTooltip, getPathIcon } from '@remix-ui/helper' -import e from 'express' import React, { SyntheticEvent, useEffect, useRef, useState } from 'react' -import { Overlay, OverlayTrigger, Popover, Tooltip } from 'react-bootstrap' -import { FileType } from '../types' +import { Popover } from 'react-bootstrap' +import { FileType, WorkspaceElement } from '../types' import { ROOT_PATH } from '../utils/constants' - +import { RecursiveTreeItem } from './file-recursive-tree-item' interface RecursiveTreeProps { files: { [x: string]: Record }, expandPath: string[], handleContextMenu: (pageX: number, pageY: number, path: string, content: string, type: string) => void + focusEdit: {element: string; type: string; isNew: boolean; lastEdit: string} + focusElement: {key: string; type: WorkspaceElement}[] + focusContext: {element: string; x: number; y: number; type: string} + editModeOff: (content: string) => void } let mouseTimer: any = { @@ -19,7 +21,7 @@ let mouseTimer: any = { export const RecursiveTree = (props: RecursiveTreeProps) => { - const { files, expandPath } = props + const { files, expandPath, editModeOff } = props const ref = useRef(null) const [mouseOverTarget, setMouseOverTarget] = useState<{ path: string, @@ -33,11 +35,15 @@ export const RecursiveTree = (props: RecursiveTreeProps) => { const [showMouseOverTarget, setShowMouseOverTarget] = useState(false) useEffect(() => { - console.log('EXPAND', expandPath) + console.log('focus edit', props.focusEdit) + },[props.focusEdit]) + + useEffect(() => { + console.log('STATE', props.focusContext, props.focusElement, props.focusEdit, expandPath) //files[ROOT_PATH] && Object.keys(files[ROOT_PATH]).map((key, index) => { // console.log('recursive tree', files[ROOT_PATH][key]) //}) - }, [expandPath]) + }, [props.focusContext, props.focusElement, props.focusEdit, expandPath]) const getEventTarget = async (e: any, useLabel: boolean = false) => { let target = e.target as HTMLElement @@ -68,7 +74,6 @@ export const RecursiveTree = (props: RecursiveTreeProps) => { const handleContextMenu = async (e: any) => { e.preventDefault() e.stopPropagation() - console.log('context menu', e) const target = await getEventTarget(e) if (target) { props.handleContextMenu(e.pageX, e.pageY, target.path, target.content, target.type) @@ -135,9 +140,9 @@ export const RecursiveTree = (props: RecursiveTreeProps) => { return (
    + {showMouseOverTarget && mouseOverTarget && { left: `${mouseOverTarget.position.left}px`, minWidth: 'fit-content' } - }> - + {mouseOverTarget && mouseOverTarget.path} - + }
      {files[ROOT_PATH] && Object.keys(files[ROOT_PATH]).map((key, index) => { + //console.log('recursive tree', files[ROOT_PATH][key]) return ( { ) } -interface RecursiveTreeItemProps { - file: FileType - expandPath?: string[] -} -export const RecursiveTreeItem = (props: RecursiveTreeItemProps) => { - const [hover, setHover] = useState(false) - const { file, expandPath } = props - const labelClass = - hover - ? 'bg-light border-no-shift' - : '' - return ( - <> -
    • -
      setHover(true)} - onMouseOut={() => setHover(false)} - > -
      - {file.name} -
      -
        - { - expandPath && expandPath.includes(file.path) && - file.child && Object.keys(file.child).map((key, index) => { - return () - }) - } -
      -
    • - ) -} \ No newline at end of file + diff --git a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx index 322b62469e..930f48ef00 100644 --- a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx +++ b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx @@ -78,7 +78,7 @@ export interface HamburgerSubMenuItemProps { export function HamburgerSubMenuItem(props: HamburgerSubMenuItemProps) { return ( <> - + {props.subMenus.map((item) => ( ))} diff --git a/libs/remix-ui/workspace/src/lib/reducers/workspace.ts b/libs/remix-ui/workspace/src/lib/reducers/workspace.ts index b1cded3b15..448755c1f9 100644 --- a/libs/remix-ui/workspace/src/lib/reducers/workspace.ts +++ b/libs/remix-ui/workspace/src/lib/reducers/workspace.ts @@ -122,6 +122,7 @@ export const browserInitialState: BrowserState = { } export const browserReducer = (state = browserInitialState, action: Actions) => { + console.log('browserReducer', action) switch (action.type) { case 'SET_CURRENT_WORKSPACE': { const payload = action.payload diff --git a/libs/remix-ui/workspace/src/lib/types/index.ts b/libs/remix-ui/workspace/src/lib/types/index.ts index a856dec49c..ebe272389e 100644 --- a/libs/remix-ui/workspace/src/lib/types/index.ts +++ b/libs/remix-ui/workspace/src/lib/types/index.ts @@ -5,7 +5,7 @@ import { fileDecoration } from '@remix-ui/file-decorators' import { RemixAppManager } from 'libs/remix-ui/plugin-manager/src/types' import { ViewPlugin } from '@remixproject/engine-web' import { appPlatformTypes } from '@remix-ui/app' -import { Placement } from 'react-bootstrap/esm/types' +import { Placement } from 'react-bootstrap/esm/Overlay' export type action = { name: string, type?: Array, path?: string[], extension?: string[], pattern?: string[], id: string, multiselect: boolean, label: string, sticky?: boolean, group: number, platform?: appPlatformTypes } export interface JSONStandardInput { diff --git a/package.json b/package.json index 3b7d5bc98a..8797b1e092 100644 --- a/package.json +++ b/package.json @@ -200,7 +200,7 @@ "raw-loader": "^4.0.2", "react": "^18.2.0", "react-beautiful-dnd": "^13.1.0", - "react-bootstrap": "^2.9.0", + "react-bootstrap": "^1.6.4", "react-dom": "^18.2.0", "react-draggable": "^4.4.4", "react-intl": "^6.0.4", diff --git a/yarn.lock b/yarn.lock index 464f4b0bc7..bae735ac75 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1656,6 +1656,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.13.8": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d" + integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.14.8": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" @@ -1677,13 +1684,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d" - integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/template@^7.15.4", "@babel/template@^7.20.7", "@babel/template@^7.3.3", "@babel/template@^7.4.0": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" @@ -4964,13 +4964,6 @@ unbzip2-stream "1.4.3" yargs "17.7.1" -"@react-aria/ssr@^3.5.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.0.tgz#457310129e1447b09d2f4aa2fdd62ab0e668d88c" - integrity sha512-Bz6BqP6ZorCme9tSWHZVmmY+s7AU8l6Vl2NUYmBzezD//fVHHfFo4lFBn5tBuAaJEm3AuCLaJQ6H2qhxNSb7zg== - dependencies: - "@swc/helpers" "^0.5.0" - "@remix-run/router@1.14.0": version "1.14.0" resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.14.0.tgz#9bc39a5a3a71b81bdb310eba6def5bc3966695b7" @@ -5054,28 +5047,18 @@ "@remixproject/plugin-utils" "0.3.42" events "3.2.0" -"@restart/hooks@^0.4.9": +"@restart/context@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@restart/context/-/context-2.1.4.tgz#a99d87c299a34c28bd85bb489cb07bfd23149c02" + integrity sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q== + +"@restart/hooks@^0.4.7": version "0.4.15" resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.15.tgz#70990085c9b79d1f3e140db824b29218bdc2b5bb" integrity sha512-cZFXYTxbpzYcieq/mBwSyXgqnGMHoBVh3J7MU0CCoIB4NRZxV9/TuwTBAaLMqpNhC3zTPMCgkQ5Ey07L02Xmcw== dependencies: dequal "^2.0.3" -"@restart/ui@^1.6.6": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.6.6.tgz#3481e2eaf15d7cae55bb2f518624e10d19c75800" - integrity sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA== - dependencies: - "@babel/runtime" "^7.21.0" - "@popperjs/core" "^2.11.6" - "@react-aria/ssr" "^3.5.0" - "@restart/hooks" "^0.4.9" - "@types/warning" "^3.0.0" - dequal "^2.0.3" - dom-helpers "^5.2.0" - uncontrollable "^8.0.1" - warning "^4.0.3" - "@ricarso/react-image-magnifiers@^1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@ricarso/react-image-magnifiers/-/react-image-magnifiers-1.9.0.tgz#c743620a05acc6c288797dac93e91f229ada9cb0" @@ -5597,13 +5580,6 @@ "@svgr/plugin-jsx" "^6.5.1" "@svgr/plugin-svgo" "^6.5.1" -"@swc/helpers@^0.5.0": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.3.tgz#98c6da1e196f5f08f977658b80d6bd941b5f294f" - integrity sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A== - dependencies: - tslib "^2.4.0" - "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -5968,6 +5944,11 @@ dependencies: "@types/node" "*" +"@types/invariant@^2.2.33": + version "2.2.37" + resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.37.tgz#1709741e534364d653c87dff22fc76fa94aa7bc0" + integrity sha512-IwpIMieE55oGWiXkQPSBY1nw1nFs6bsKXTFskNY8sdS17K24vyEBRQZEwlRS7ZmXCWnJcQtbxWzly+cODWGs2A== + "@types/isomorphic-git__lightning-fs@^4.4.2": version "4.4.2" resolved "https://registry.yarnpkg.com/@types/isomorphic-git__lightning-fs/-/isomorphic-git__lightning-fs-4.4.2.tgz#aead17cb1ab1a965b69a5247a7d4087336ad5df7" @@ -6136,6 +6117,11 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== +"@types/prop-types@^15.7.3": + version "15.7.11" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" + integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== + "@types/qs@*": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -6206,14 +6192,14 @@ "@types/history" "*" "@types/react" "*" -"@types/react-transition-group@^4.4.6": +"@types/react-transition-group@^4.4.1": version "4.4.10" resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.10.tgz#6ee71127bdab1f18f11ad8fb3322c6da27c327ac" integrity sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.9.11", "@types/react@^18.2.0": +"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.14.8", "@types/react@>=16.9.11", "@types/react@^18.2.0": version "18.2.45" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.45.tgz#253f4fac288e7e751ab3dc542000fb687422c15c" integrity sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg== @@ -9160,9 +9146,9 @@ boom@2.x.x: hoek "2.x.x" bootstrap@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.2.2.tgz#834e053eed584a65e244d8aa112a6959f56e27a0" - integrity sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ== + version "5.3.2" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.2.tgz#97226583f27aae93b2b28ab23f4c114757ff16ae" + integrity sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g== borc@^2.1.2: version "2.1.2" @@ -10320,7 +10306,7 @@ classic-level@^1.2.0: napi-macros "^2.2.2" node-gyp-build "^4.3.0" -classnames@^2.3.2: +classnames@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== @@ -23850,21 +23836,26 @@ react-beautiful-dnd@^13.1.0: redux "^4.0.4" use-memo-one "^1.1.1" -react-bootstrap@^2.9.0: - version "2.9.1" - resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.9.1.tgz#c1ab48ae2b2cfe6d5ac957c2042eb36fcafdb1d2" - integrity sha512-ezgmh/ARCYp18LbZEqPp0ppvy+ytCmycDORqc8vXSKYV3cer4VH7OReV8uMOoKXmYzivJTxgzGHalGrHamryHA== - dependencies: - "@babel/runtime" "^7.22.5" - "@restart/hooks" "^0.4.9" - "@restart/ui" "^1.6.6" - "@types/react-transition-group" "^4.4.6" - classnames "^2.3.2" +react-bootstrap@^1.6.4: + version "1.6.7" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-1.6.7.tgz#7afea926cada8175d67df07b893dbad2998ae463" + integrity sha512-IzCYXuLSKDEjGFglbFWk0/iHmdhdcJzTmtS6lXxc0kaNFx2PFgrQf5jKnx5sarF2tiXh9Tgx3pSt3pdK7YwkMA== + dependencies: + "@babel/runtime" "^7.14.0" + "@restart/context" "^2.1.4" + "@restart/hooks" "^0.4.7" + "@types/invariant" "^2.2.33" + "@types/prop-types" "^15.7.3" + "@types/react" ">=16.14.8" + "@types/react-transition-group" "^4.4.1" + "@types/warning" "^3.0.0" + classnames "^2.3.1" dom-helpers "^5.2.1" invariant "^2.2.4" - prop-types "^15.8.1" + prop-types "^15.7.2" prop-types-extra "^1.1.0" - react-transition-group "^4.4.5" + react-overlays "^5.1.2" + react-transition-group "^4.4.1" uncontrollable "^7.2.1" warning "^4.0.3" @@ -23968,6 +23959,20 @@ react-multi-carousel@^2.8.2: resolved "https://registry.yarnpkg.com/react-multi-carousel/-/react-multi-carousel-2.8.2.tgz#4bbd7a9656d8e49e081745331593e5500eefdbe4" integrity sha512-M9Y7DfAp8bA/r6yexttU6RLA7uyppje4c0ELRuCHZWswH+u7nr0uVP6qHNPjc4XGOEY1MYFOb5nBg7JvoKutuQ== +react-overlays@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-5.2.1.tgz#49dc007321adb6784e1f212403f0fb37a74ab86b" + integrity sha512-GLLSOLWr21CqtJn8geSwQfoJufdt3mfdsnIiQswouuQ2MMPns+ihZklxvsTDKD3cR2tF8ELbi5xUsvqVhR6WvA== + dependencies: + "@babel/runtime" "^7.13.8" + "@popperjs/core" "^2.11.6" + "@restart/hooks" "^0.4.7" + "@types/warning" "^3.0.0" + dom-helpers "^5.2.0" + prop-types "^15.7.2" + uncontrollable "^7.2.1" + warning "^4.0.3" + react-property@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/react-property/-/react-property-2.0.0.tgz#2156ba9d85fa4741faf1918b38efc1eae3c6a136" @@ -24022,7 +24027,7 @@ react-textarea-autosize@^8.3.2: use-composed-ref "^1.3.0" use-latest "^1.2.1" -react-transition-group@^4.4.5: +react-transition-group@^4.4.1: version "4.4.5" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== @@ -27883,11 +27888,6 @@ uncontrollable@^7.2.1: invariant "^2.2.4" react-lifecycles-compat "^3.0.4" -uncontrollable@^8.0.1: - version "8.0.4" - resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-8.0.4.tgz#a0a8307f638795162fafd0550f4a1efa0f8c5eb6" - integrity sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ== - undeclared-identifiers@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f"