From 3a857eb434905697d20163d25636abc9e7bdec40 Mon Sep 17 00:00:00 2001 From: Romain Tetley Date: Fri, 5 Apr 2024 13:07:54 +0200 Subject: [PATCH 1/5] PpString formatting first version Working "responsive" goal view. The goals break along the break hints when the window is resized. Done with a naive "break" selection algorithm. --- client/goal-view-ui/package.json | 2 + .../src/components/atoms/Goal.tsx | 7 +- .../src/components/atoms/Hypothesis.tsx | 8 +- .../src/components/atoms/Message.tsx | 7 +- .../src/components/atoms/PpString.module.css | 1 + .../components/organisms/GoalTabs.module.css | 3 + .../src/components/organisms/GoalTabs.tsx | 4 +- .../components/templates/GoalPage.module.css | 4 + .../components/templates/ProovViewPage.tsx | 8 +- client/goal-view-ui/src/types.ts | 15 +- .../goal-view-ui/src/utilities/Pp.module.css | 8 + .../src/utilities/PpBox.module.css | 24 ++ .../src/utilities/PpGlue.module.css | 4 + .../goal-view-ui/src/utilities/pp-break.tsx | 40 ++++ client/goal-view-ui/src/utilities/pp.tsx | 205 +++++++++++++++--- client/goal-view-ui/yarn.lock | 29 +++ client/src/protocol/types.ts | 15 +- 17 files changed, 334 insertions(+), 50 deletions(-) create mode 100644 client/goal-view-ui/src/components/organisms/GoalTabs.module.css create mode 100644 client/goal-view-ui/src/utilities/Pp.module.css create mode 100644 client/goal-view-ui/src/utilities/PpBox.module.css create mode 100644 client/goal-view-ui/src/utilities/PpGlue.module.css create mode 100644 client/goal-view-ui/src/utilities/pp-break.tsx diff --git a/client/goal-view-ui/package.json b/client/goal-view-ui/package.json index 7bebddeaf..6e1c17c57 100644 --- a/client/goal-view-ui/package.json +++ b/client/goal-view-ui/package.json @@ -9,10 +9,12 @@ "preview": "vite preview" }, "dependencies": { + "@react-hook/resize-observer": "^1.2.6", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "^1.2.1", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-hook": "^0.0.1", "react-icons": "^4.7.1" }, "devDependencies": { diff --git a/client/goal-view-ui/src/components/atoms/Goal.tsx b/client/goal-view-ui/src/components/atoms/Goal.tsx index 9bb0d445b..5b5583f1e 100644 --- a/client/goal-view-ui/src/components/atoms/Goal.tsx +++ b/client/goal-view-ui/src/components/atoms/Goal.tsx @@ -2,7 +2,7 @@ import React, {FunctionComponent} from 'react'; import classes from './PpString.module.css'; import { PpString } from '../../types'; -import { fragmentOfPpString } from '../../utilities/pp'; +import PpDisplay from '../../utilities/pp'; type GoalProps = { goal: PpString, @@ -14,7 +14,10 @@ const goal : FunctionComponent = (props) => { return (
- {fragmentOfPpString(goal, classes)} +
); }; diff --git a/client/goal-view-ui/src/components/atoms/Hypothesis.tsx b/client/goal-view-ui/src/components/atoms/Hypothesis.tsx index e197fafe9..ce6d3b47b 100644 --- a/client/goal-view-ui/src/components/atoms/Hypothesis.tsx +++ b/client/goal-view-ui/src/components/atoms/Hypothesis.tsx @@ -2,7 +2,7 @@ import React, {FunctionComponent} from 'react'; import classes from './PpString.module.css'; import { Hyp } from '../../types'; -import { fragmentOfPpString } from '../../utilities/pp'; +import PpDisplay from '../../utilities/pp'; type HypothesisProps = { content: Hyp; @@ -14,8 +14,10 @@ const hypothesis: FunctionComponent = (props) => { return (
- {fragmentOfPpString(content, classes)} -
+
); }; diff --git a/client/goal-view-ui/src/components/atoms/Message.tsx b/client/goal-view-ui/src/components/atoms/Message.tsx index 01c05738d..5285ad333 100644 --- a/client/goal-view-ui/src/components/atoms/Message.tsx +++ b/client/goal-view-ui/src/components/atoms/Message.tsx @@ -2,7 +2,7 @@ import React, {FunctionComponent} from 'react'; import classes from './PpString.module.css'; import { MessageSeverity, PpString } from '../../types'; -import { fragmentOfPpString } from '../../utilities/pp'; +import PpDisplay from '../../utilities/pp'; type MessageProps = { message: PpString, @@ -35,7 +35,10 @@ const message : FunctionComponent = (props) => { return ( - {fragmentOfPpString(message, classes)} + ); }; diff --git a/client/goal-view-ui/src/components/atoms/PpString.module.css b/client/goal-view-ui/src/components/atoms/PpString.module.css index ed33fccf6..e835b99f0 100644 --- a/client/goal-view-ui/src/components/atoms/PpString.module.css +++ b/client/goal-view-ui/src/components/atoms/PpString.module.css @@ -36,6 +36,7 @@ font-weight: var(--vscode-editor-font-weight); font-size: var(--vscode-editor-font-size); display: flex; + white-space: pre-wrap; } .IdentifierBlock { diff --git a/client/goal-view-ui/src/components/organisms/GoalTabs.module.css b/client/goal-view-ui/src/components/organisms/GoalTabs.module.css new file mode 100644 index 000000000..8e796cd81 --- /dev/null +++ b/client/goal-view-ui/src/components/organisms/GoalTabs.module.css @@ -0,0 +1,3 @@ +.View { + width: 100%; +} \ No newline at end of file diff --git a/client/goal-view-ui/src/components/organisms/GoalTabs.tsx b/client/goal-view-ui/src/components/organisms/GoalTabs.tsx index 9b02f6775..759784e8e 100644 --- a/client/goal-view-ui/src/components/organisms/GoalTabs.tsx +++ b/client/goal-view-ui/src/components/organisms/GoalTabs.tsx @@ -8,6 +8,8 @@ import { import GoalBlock from '../molecules/GoalBlock'; import { Goal } from '../../types'; +import classes from './GoalTabs.module.css'; + type GoalSectionProps = { goals: Goal[]; }; @@ -54,7 +56,7 @@ const goalSection: FunctionComponent = (props) => { }); return ( - + {goalPanelTabs} {goalPanelViews} diff --git a/client/goal-view-ui/src/components/templates/GoalPage.module.css b/client/goal-view-ui/src/components/templates/GoalPage.module.css index d2736056a..71e588f48 100644 --- a/client/goal-view-ui/src/components/templates/GoalPage.module.css +++ b/client/goal-view-ui/src/components/templates/GoalPage.module.css @@ -8,4 +8,8 @@ flex-direction: column; width: 100%; overflow: auto; +} + +.View { + width: 100%; } \ No newline at end of file diff --git a/client/goal-view-ui/src/components/templates/ProovViewPage.tsx b/client/goal-view-ui/src/components/templates/ProovViewPage.tsx index 8b686e357..890419b39 100644 --- a/client/goal-view-ui/src/components/templates/ProovViewPage.tsx +++ b/client/goal-view-ui/src/components/templates/ProovViewPage.tsx @@ -39,7 +39,7 @@ const proofViewPage: FunctionComponent = (props) => { ]; const views = [ - + = (props) => { } /> , - + = (props) => { emptyMessage='There are no shelved goals' /> , - + = (props) => { ]; return ( - + {tabs} {views} diff --git a/client/goal-view-ui/src/types.ts b/client/goal-view-ui/src/types.ts index f78e17f86..060f3a44b 100644 --- a/client/goal-view-ui/src/types.ts +++ b/client/goal-view-ui/src/types.ts @@ -3,11 +3,18 @@ type Nullable = T | null; export type PpTag = string; +export enum PpMode { + horizontal = "Pp_hbox", + vertical = "Pp_vbox", + hvBox = "Pp_hvbox", + hovBox = "Pp_hovbox" +} + export type BlockType = - | ["Pp_hbox"] - | ["Pp_vbox", integer] - | ["Pp_hvbox", integer] - | ["Pp_hovbox", integer]; + | [PpMode.horizontal] + | [PpMode.vertical, integer] + | [PpMode.hvBox, integer] + | [PpMode.hovBox, integer]; export type PpString = | ["Ppcmd_empty"] diff --git a/client/goal-view-ui/src/utilities/Pp.module.css b/client/goal-view-ui/src/utilities/Pp.module.css new file mode 100644 index 000000000..58386b52c --- /dev/null +++ b/client/goal-view-ui/src/utilities/Pp.module.css @@ -0,0 +1,8 @@ +.Container { + display:block; + width: 100%; +} + +.Content { + white-space: pre; +} \ No newline at end of file diff --git a/client/goal-view-ui/src/utilities/PpBox.module.css b/client/goal-view-ui/src/utilities/PpBox.module.css new file mode 100644 index 000000000..2016599cf --- /dev/null +++ b/client/goal-view-ui/src/utilities/PpBox.module.css @@ -0,0 +1,24 @@ +.SpanBox { + white-space: nowrap; + width: 100%; + overflow: hidden; + display: block; +} + +.SpanContent { + width: max-content; + display: inline-block; +} + +.Box { + display: flex; + flex-wrap: wrap; +} + +.Vertical { + flex-direction: column; +} + +.Horizontal { + flex-direction: row; +} \ No newline at end of file diff --git a/client/goal-view-ui/src/utilities/PpGlue.module.css b/client/goal-view-ui/src/utilities/PpGlue.module.css new file mode 100644 index 000000000..3d4ecaacd --- /dev/null +++ b/client/goal-view-ui/src/utilities/PpGlue.module.css @@ -0,0 +1,4 @@ +.Break { + flex-basis: 100%; + height: 0; +} \ No newline at end of file diff --git a/client/goal-view-ui/src/utilities/pp-break.tsx b/client/goal-view-ui/src/utilities/pp-break.tsx new file mode 100644 index 000000000..f9585ba93 --- /dev/null +++ b/client/goal-view-ui/src/utilities/pp-break.tsx @@ -0,0 +1,40 @@ +import React, {FunctionComponent, useState, useEffect} from 'react'; +import {PpMode} from '../types'; + +type PpBreakProps = { + mode: PpMode, + horizontalIndent: number, + indent: number, + lineBreak: boolean +}; + +const ppBreak: FunctionComponent = (props) => { + + const {mode, lineBreak, indent, horizontalIndent} = props; + + switch(mode) { + case PpMode.horizontal: + return {" ".repeat(horizontalIndent)}; + case PpMode.vertical: + return
; + case PpMode.hvBox: + if(lineBreak) { + return
; + } + return ; + case PpMode.hovBox: + if(lineBreak) { + return ( + <> +
+ + {" ".repeat(indent ? indent : 0)} + + + ); + } + return ; + } +}; + +export default ppBreak; \ No newline at end of file diff --git a/client/goal-view-ui/src/utilities/pp.tsx b/client/goal-view-ui/src/utilities/pp.tsx index c88d0b10b..60f126399 100644 --- a/client/goal-view-ui/src/utilities/pp.tsx +++ b/client/goal-view-ui/src/utilities/pp.tsx @@ -1,41 +1,180 @@ -import { ReactElement, ReactFragment } from 'react'; -import { PpString } from '../types'; +import { FunctionComponent, ReactFragment, useRef, useState, useEffect, useLayoutEffect } from 'react'; +import useResizeObserver from '@react-hook/resize-observer'; +import {ResizeObserverEntry} from '@juggle/resize-observer'; +import { PpString, PpMode } from '../types'; +import PpBreak from './pp-break'; -enum PpMode { vertical, horizontal } +import classes from './Pp.module.css'; -const fragmentOfPpStringWithMode = (pp:PpString, mode: PpMode, classes:CSSModuleClasses) : ReactFragment => { + +type PpProps = { + pp: PpString; + coqCss: CSSModuleClasses; +}; + +const ppDisplay : FunctionComponent = (props) => { + + const {pp, coqCss} = props; + + const [maxBreaks, setMaxBreaks] = useState(0); + const [neededBreaks, setNeededBreaks] = useState(0); + const [possibleBreakIds, setPossibleBreakIds] = useState([]); + const [breakIds, setBreakIds] = useState([]); + const [lastEntry, setLastEntry] = useState(null); + const container = useRef(null); + const content = useRef(null); + + useResizeObserver(container, (entry) => { + + if(container.current) { + if(content.current) { + if(lastEntry) { + if(Math.abs(entry.contentRect.width - lastEntry.contentRect.width) <= 10) {return;} + console.log("ENTRIES: " + entry.contentRect.width + ", " + lastEntry.contentRect.width); + if(entry.contentRect.width > lastEntry.contentRect.width) { + setNeededBreaks(0); + } else { + computeNeededBreaks(maxBreaks); + } + } else { + computeNeededBreaks(maxBreaks); + } + } + } + setLastEntry(entry); + }); + + useEffect(() => { + computeNeededBreaks(maxBreaks); + setMaxBreaks(computeNumBreaks(pp, 0)); + getBreakIds(pp, 0); + }, []); + + useEffect(() => { + setBreakIds(possibleBreakIds.slice(0, neededBreaks)); + }, [neededBreaks]); + + useLayoutEffect(() => { + computeNeededBreaks(maxBreaks); + }); + + const computeNeededBreaks = (maxBreaks: number) => { + + if(container.current) { + if(content.current) { + const containerRect = container.current.getBoundingClientRect(); + const contentRect = content.current.getBoundingClientRect(); + console.log("container width: " + containerRect.width); + console.log("content width: " + contentRect.width); + if(containerRect.width < contentRect.width) { + if(neededBreaks < maxBreaks) { + console.log("Setting needed breaks: " + (neededBreaks + 1)); + setNeededBreaks((neededBreaks) => {return neededBreaks + 1;}); + } + } + } + } + + }; + + const computeNumBreaks = (pp: PpString, acc: number) : number => { + switch(pp[0]) { + case "Ppcmd_empty": + return acc; + case "Ppcmd_string": + return acc; + case "Ppcmd_glue": + const nbBreaks = pp[1].map(pp => computeNumBreaks(pp, 0)); + const nb = nbBreaks.reduce((pv, cv) => {return pv + cv;}, 0); + return acc + nb; + case "Ppcmd_box": + case "Ppcmd_tag": + return computeNumBreaks(pp[2], acc); + case "Ppcmd_print_break": + return acc + 1; + case "Ppcmd_force_newline": + return acc; + case "Ppcmd_comment": + return acc; + } + }; + + const getBreakIds = (pp: PpString, id: number) => { + switch(pp[0]) { + case "Ppcmd_empty": + return; + case "Ppcmd_string": + return; + case "Ppcmd_glue": + pp[1].map((pp, index) => getBreakIds(pp, id + index + 1)); + return; + case "Ppcmd_box": + case "Ppcmd_tag": + getBreakIds(pp[2], id + 1); + return; + case "Ppcmd_print_break": + setPossibleBreakIds((possibleBreakIds) => { + return possibleBreakIds.concat([id]); + }); + return; + case "Ppcmd_force_newline": + return; + case "Ppcmd_comment": + return; + } + }; + + console.log("NEEDED BREAKS: " + neededBreaks); + return ( +
+ + {fragmentOfPpString(pp, coqCss, 0, breakIds)} + +
+ ); + +}; + + +const fragmentOfPpStringWithMode = ( + pp:PpString, + mode: PpMode, + coqCss:CSSModuleClasses, + id: number, + breakIds: number[], + indent:number = 0 +) : ReactFragment => { switch (pp[0]) { case "Ppcmd_empty": return <>; case "Ppcmd_string": return pp[1]; case "Ppcmd_glue": - return pp[1].map(pp => fragmentOfPpStringWithMode(pp, mode, classes)); + return pp[1].map((pp, index) => { + return fragmentOfPpStringWithMode(pp, mode, coqCss, id + index + 1, breakIds, indent); + }); case "Ppcmd_box": - switch (pp[1][0]) { - case "Pp_hbox": - mode = PpMode.horizontal; - break; - case "Pp_vbox": - mode = PpMode.vertical; - break; - case "Pp_hvbox": - mode = PpMode.horizontal; // TODO proper support for hvbox - break; - case "Pp_hovbox": - mode = PpMode.horizontal; // TODO proper support for hovbox - break; - }; - return fragmentOfPpStringWithMode(pp[2], mode, classes); + const m = pp[1][0]; + const i = (m !== PpMode.horizontal) ? pp[1][1] : 0; + return ( + fragmentOfPpStringWithMode(pp[2], m, coqCss, id + 1, breakIds, i + indent) + ); case "Ppcmd_tag": - return {fragmentOfPpStringWithMode(pp[2], mode, classes)}; + return ( + + {fragmentOfPpStringWithMode(pp[2], mode, coqCss, id + 1, breakIds, indent)} + + ); case "Ppcmd_print_break": - switch (mode) { - case PpMode.horizontal: - return " ".repeat(pp[1]); - case PpMode.vertical: - return
; - } + console.log("ID:" + id); + console.log("BREAK IDS: " + breakIds); + const lineBreak = breakIds.find(breakId => breakId === id) !== undefined; + return ; case "Ppcmd_force_newline": return
; case "Ppcmd_comment": @@ -43,6 +182,12 @@ const fragmentOfPpStringWithMode = (pp:PpString, mode: PpMode, classes:CSSModule } }; -export const fragmentOfPpString = (pp:PpString, classes:CSSModuleClasses) : ReactFragment => { - return fragmentOfPpStringWithMode(pp, PpMode.horizontal, classes); -}; \ No newline at end of file +const fragmentOfPpString = ( + pp:PpString, coqCss:CSSModuleClasses, + id: number, + breakIds: number[] +) : ReactFragment => { + return fragmentOfPpStringWithMode(pp, PpMode.horizontal, coqCss, id, breakIds); +}; + +export default ppDisplay; \ No newline at end of file diff --git a/client/goal-view-ui/yarn.lock b/client/goal-view-ui/yarn.lock index c2cdef833..1379dcd77 100644 --- a/client/goal-view-ui/yarn.lock +++ b/client/goal-view-ui/yarn.lock @@ -376,6 +376,11 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@juggle/resize-observer@^3.3.1": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" + integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== + "@microsoft/fast-element@^1.11.0", "@microsoft/fast-element@^1.6.2", "@microsoft/fast-element@^1.9.0": version "1.11.0" resolved "https://registry.npmjs.org/@microsoft/fast-element/-/fast-element-1.11.0.tgz" @@ -406,6 +411,25 @@ dependencies: exenv-es6 "^1.1.1" +"@react-hook/latest@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@react-hook/latest/-/latest-1.0.3.tgz#c2d1d0b0af8b69ec6e2b3a2412ba0768ac82db80" + integrity sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg== + +"@react-hook/passive-layout-effect@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@react-hook/passive-layout-effect/-/passive-layout-effect-1.2.1.tgz#c06dac2d011f36d61259aa1c6df4f0d5e28bc55e" + integrity sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg== + +"@react-hook/resize-observer@^1.2.6": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@react-hook/resize-observer/-/resize-observer-1.2.6.tgz#9a8cf4c5abb09becd60d1d65f6bf10eec211e291" + integrity sha512-DlBXtLSW0DqYYTW3Ft1/GQFZlTdKY5VAFIC4+km6IK5NiPPDFchGbEJm1j6pSgMqPRHbUQgHJX7RaR76ic1LWA== + dependencies: + "@juggle/resize-observer" "^3.3.1" + "@react-hook/latest" "^1.0.2" + "@react-hook/passive-layout-effect" "^1.2.0" + "@rollup/pluginutils@^4.2.1": version "4.2.1" resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz" @@ -806,6 +830,11 @@ react-dom@^17.0.2: object-assign "^4.1.1" scheduler "^0.20.2" +react-hook@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/react-hook/-/react-hook-0.0.1.tgz#decb8a9f8cedcc88223d3c45853f32366f8cb4a5" + integrity sha512-2/Guf88/dGyFgUT7QDtBJ1l7V5yqTcAHlNRIZNTu2xg0KkDjaiYZp79ah49NDaLMI/J7voWcKLU8wMONG4A/1g== + react-icons@^4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.7.1.tgz#0f4b25a5694e6972677cb189d2a72eabea7a8345" diff --git a/client/src/protocol/types.ts b/client/src/protocol/types.ts index 2a96d4d0a..bc6045675 100644 --- a/client/src/protocol/types.ts +++ b/client/src/protocol/types.ts @@ -5,11 +5,18 @@ type Nullable = T | null; export type PpTag = string; +export enum PpMode { + horizontal = "Pp_hbox", + vertical = "Pp_vbox", + hvBox = "Pp_hvbox", + hovBox = "Pp_hovbox" +} + export type BlockType = - | ["Pp_hbox"] - | ["Pp_vbox", integer] - | ["Pp_hvbox", integer] - | ["Pp_hovbox", integer]; + | [PpMode.horizontal] + | [PpMode.vertical, integer] + | [PpMode.hvBox, integer] + | [PpMode.hovBox, integer]; export type PpString = | ["Ppcmd_empty"] From 37f36614315124dcfdd9a2026103d0ea53f31f48 Mon Sep 17 00:00:00 2001 From: Romain Tetley Date: Fri, 17 May 2024 16:09:24 +0200 Subject: [PATCH 2/5] Take boxes into account. Heuristic which sorts breaks with respect to their box hierarchy. --- .../src/utilities/PpBox.module.css | 24 -- .../src/utilities/PpGlue.module.css | 4 - client/goal-view-ui/src/utilities/pp-box.tsx | 34 +++ .../goal-view-ui/src/utilities/pp-break.tsx | 2 +- client/goal-view-ui/src/utilities/pp.tsx | 213 ++++++++++++++---- 5 files changed, 205 insertions(+), 72 deletions(-) delete mode 100644 client/goal-view-ui/src/utilities/PpBox.module.css delete mode 100644 client/goal-view-ui/src/utilities/PpGlue.module.css create mode 100644 client/goal-view-ui/src/utilities/pp-box.tsx diff --git a/client/goal-view-ui/src/utilities/PpBox.module.css b/client/goal-view-ui/src/utilities/PpBox.module.css deleted file mode 100644 index 2016599cf..000000000 --- a/client/goal-view-ui/src/utilities/PpBox.module.css +++ /dev/null @@ -1,24 +0,0 @@ -.SpanBox { - white-space: nowrap; - width: 100%; - overflow: hidden; - display: block; -} - -.SpanContent { - width: max-content; - display: inline-block; -} - -.Box { - display: flex; - flex-wrap: wrap; -} - -.Vertical { - flex-direction: column; -} - -.Horizontal { - flex-direction: row; -} \ No newline at end of file diff --git a/client/goal-view-ui/src/utilities/PpGlue.module.css b/client/goal-view-ui/src/utilities/PpGlue.module.css deleted file mode 100644 index 3d4ecaacd..000000000 --- a/client/goal-view-ui/src/utilities/PpGlue.module.css +++ /dev/null @@ -1,4 +0,0 @@ -.Break { - flex-basis: 100%; - height: 0; -} \ No newline at end of file diff --git a/client/goal-view-ui/src/utilities/pp-box.tsx b/client/goal-view-ui/src/utilities/pp-box.tsx new file mode 100644 index 000000000..1a14f6af8 --- /dev/null +++ b/client/goal-view-ui/src/utilities/pp-box.tsx @@ -0,0 +1,34 @@ +import React, {FunctionComponent, useEffect, useRef} from 'react'; +import {PpMode, PpString} from '../types'; +import { fragmentOfPpStringWithMode } from './pp'; + +type PpBoxProps = { + pp: PpString, + mode: PpMode, + recordWidth: (id: number, w: number) => void, + coqCss:CSSModuleClasses, + indent: number, + id: number, + breaks: number[] +}; + +const ppBox: FunctionComponent = (props) => { + + const {pp, mode, recordWidth, coqCss, id, indent, breaks} = props; + const boxElement = useRef(null); + + useEffect(() => { + if(boxElement.current) { + const boxRect = boxElement.current.getBoundingClientRect(); + recordWidth(id, boxRect.width); + } + }, [breaks]); + + return ( + + {fragmentOfPpStringWithMode(pp, mode, coqCss, id + 1, breaks, indent, recordWidth)} + + ); +}; + +export default ppBox; \ No newline at end of file diff --git a/client/goal-view-ui/src/utilities/pp-break.tsx b/client/goal-view-ui/src/utilities/pp-break.tsx index f9585ba93..8c3f70bde 100644 --- a/client/goal-view-ui/src/utilities/pp-break.tsx +++ b/client/goal-view-ui/src/utilities/pp-break.tsx @@ -1,4 +1,4 @@ -import React, {FunctionComponent, useState, useEffect} from 'react'; +import React, {FunctionComponent} from 'react'; import {PpMode} from '../types'; type PpBreakProps = { diff --git a/client/goal-view-ui/src/utilities/pp.tsx b/client/goal-view-ui/src/utilities/pp.tsx index 60f126399..d308e04d7 100644 --- a/client/goal-view-ui/src/utilities/pp.tsx +++ b/client/goal-view-ui/src/utilities/pp.tsx @@ -1,8 +1,9 @@ -import { FunctionComponent, ReactFragment, useRef, useState, useEffect, useLayoutEffect } from 'react'; +import { FunctionComponent, ReactFragment, useRef, useState, useEffect, useLayoutEffect} from 'react'; import useResizeObserver from '@react-hook/resize-observer'; import {ResizeObserverEntry} from '@juggle/resize-observer'; import { PpString, PpMode } from '../types'; import PpBreak from './pp-break'; +import PpBox from './pp-box'; import classes from './Pp.module.css'; @@ -12,15 +13,26 @@ type PpProps = { coqCss: CSSModuleClasses; }; +type Box = { + id: number, + mode: PpMode; + indent: number; + depth: number; + width: number; + possibleBreaks: number[]; + breaks: number[]; +}; + const ppDisplay : FunctionComponent = (props) => { const {pp, coqCss} = props; const [maxBreaks, setMaxBreaks] = useState(0); - const [neededBreaks, setNeededBreaks] = useState(0); - const [possibleBreakIds, setPossibleBreakIds] = useState([]); const [breakIds, setBreakIds] = useState([]); + const [boxes, setBoxes] = useState([]); + const [saturatedBoxes, setSaturatedBoxes] = useState([]); const [lastEntry, setLastEntry] = useState(null); + const container = useRef(null); const content = useRef(null); @@ -30,9 +42,17 @@ const ppDisplay : FunctionComponent = (props) => { if(content.current) { if(lastEntry) { if(Math.abs(entry.contentRect.width - lastEntry.contentRect.width) <= 10) {return;} - console.log("ENTRIES: " + entry.contentRect.width + ", " + lastEntry.contentRect.width); + + //When we enlarge the window we should try and recomputed boxes if(entry.contentRect.width > lastEntry.contentRect.width) { - setNeededBreaks(0); + setBreakIds([]); + setBoxes(boxes => { + const newBoxes = boxes.map(box => { + return {...box, breaks: []}; + }); + return newBoxes; + }); + setSaturatedBoxes([]); } else { computeNeededBreaks(maxBreaks); } @@ -45,31 +65,48 @@ const ppDisplay : FunctionComponent = (props) => { }); useEffect(() => { - computeNeededBreaks(maxBreaks); - setMaxBreaks(computeNumBreaks(pp, 0)); - getBreakIds(pp, 0); - }, []); - - useEffect(() => { - setBreakIds(possibleBreakIds.slice(0, neededBreaks)); - }, [neededBreaks]); + const breaks = computeNumBreaks(pp, 0); + setMaxBreaks(breaks); + setBreakIds([]); + setSaturatedBoxes([]); + setBoxes(getBoxes(pp, 0, 0, [])); + computeNeededBreaks(breaks); + }, [pp]); useLayoutEffect(() => { computeNeededBreaks(maxBreaks); }); + const updateBoxWidth = (id: number, width: number) => { + + setBoxes(boxes => { + return boxes.map(b => { + if(b.id === id) { + return {...b, width: width}; + } + return b; + }).sort((b1, b2) => { + if(b1.depth !== b2.depth) { + return b1.depth - b2.depth; + } + else { + return b2.width - b1.width; + } + + }); + }); + + }; + const computeNeededBreaks = (maxBreaks: number) => { if(container.current) { if(content.current) { const containerRect = container.current.getBoundingClientRect(); const contentRect = content.current.getBoundingClientRect(); - console.log("container width: " + containerRect.width); - console.log("content width: " + contentRect.width); if(containerRect.width < contentRect.width) { - if(neededBreaks < maxBreaks) { - console.log("Setting needed breaks: " + (neededBreaks + 1)); - setNeededBreaks((neededBreaks) => {return neededBreaks + 1;}); + if(breakIds.length < maxBreaks) { + getNextBreak(); } } } @@ -77,6 +114,59 @@ const ppDisplay : FunctionComponent = (props) => { }; + const getNextBreak = () => { + if(boxes) { + // Filter out the boxes that are saturated (all the breaks have been used) + // The box widths are sorted by descending order => we always try to break the largest box first + const sortedBoxes = boxes.filter(box => !saturatedBoxes.find(id => id === box.id)); + + for(let i = 0; i < sortedBoxes.length; i++) { + const box = sortedBoxes[i]; + if(box && box.possibleBreaks) { + //Ignore horizontal or vertical boxes + if(box.mode === PpMode.horizontal) { continue; } + else if (box.mode === PpMode.vertical) { continue; } + //In the case of an hvbox trigger all breaks + else if (box.mode === PpMode.hvBox) { + setBreakIds(breakIds => { + return breakIds.concat(box.possibleBreaks); + }); + setSaturatedBoxes(saturatedBoxes => { + return saturatedBoxes.concat([box.id]); + }); + break; + } + //Otherwise find the next breakId + else { + const breakId = box.possibleBreaks.find((candidateId) => !breakIds.find(id => id === candidateId)); + if(breakId) { + setBreakIds(breakIds => { + return breakIds.concat([breakId]); + }); + const boxBreaks = box.breaks.concat([breakId]); + setBoxes(boxes => { + return boxes.map(b => { + if(b.id === box.id) { + return {...box, breaks: boxBreaks}; + } + return b; + }); + }); + if(boxBreaks.length === box.possibleBreaks.length) { + setSaturatedBoxes(saturatedBoxes => { + return saturatedBoxes.concat([box.id]); + }); + } + break; + } + + } + + } + } + } + }; + const computeNumBreaks = (pp: PpString, acc: number) : number => { switch(pp[0]) { case "Ppcmd_empty": @@ -99,36 +189,65 @@ const ppDisplay : FunctionComponent = (props) => { } }; - const getBreakIds = (pp: PpString, id: number) => { + const getBoxBreaks = (pp: PpString, id: number, acc: number[]) : number[] => { + switch(pp[0]) { + case "Ppcmd_empty": + return acc; + case "Ppcmd_string": + return acc; + case "Ppcmd_glue": + const nbBreaks = pp[1].map((pp, index) => getBoxBreaks(pp, id + index + 1 , [])); + const breaks = nbBreaks.reduce((pv, cv) => {return pv.concat(cv);}, []); + return acc.concat(breaks); + case "Ppcmd_box": + return acc; + case "Ppcmd_tag": + return getBoxBreaks(pp[2], id + 1, acc); + case "Ppcmd_print_break": + return acc.concat([id]); + case "Ppcmd_force_newline": + return acc; + case "Ppcmd_comment": + return acc; + } + }; + + const getBoxes = (pp: PpString, id: number, depth: number, acc: Box[]) : Box[] => { switch(pp[0]) { case "Ppcmd_empty": - return; + return acc; case "Ppcmd_string": - return; + return acc; case "Ppcmd_glue": - pp[1].map((pp, index) => getBreakIds(pp, id + index + 1)); - return; + const boxes = pp[1].map((pp, index) => getBoxes(pp, id + index + 1, depth, [])); + return acc.concat(boxes.reduce((boxes, acc) => {return boxes.concat(acc); })); case "Ppcmd_box": + const breaks = getBoxBreaks(pp[2], id + 1, []); + const box = { + id: id, + mode: pp[1][0], + indent: pp[1][1] ? pp[1][1] : 0, + depth: depth, + width: 0, + possibleBreaks: breaks, //.reverse(), + breaks: [] + }; + return getBoxes(pp[2], id + 1, depth + 1, acc.concat([box])); case "Ppcmd_tag": - getBreakIds(pp[2], id + 1); - return; + return getBoxes(pp[2], id + 1, depth, acc); case "Ppcmd_print_break": - setPossibleBreakIds((possibleBreakIds) => { - return possibleBreakIds.concat([id]); - }); - return; + return acc; case "Ppcmd_force_newline": - return; + return acc; case "Ppcmd_comment": - return; + return acc; } }; - console.log("NEEDED BREAKS: " + neededBreaks); return (
- {fragmentOfPpString(pp, coqCss, 0, breakIds)} + {fragmentOfPpString(pp, coqCss, 0, breakIds, updateBoxWidth)}
); @@ -136,13 +255,14 @@ const ppDisplay : FunctionComponent = (props) => { }; -const fragmentOfPpStringWithMode = ( +export const fragmentOfPpStringWithMode = ( pp:PpString, mode: PpMode, coqCss:CSSModuleClasses, id: number, breakIds: number[], - indent:number = 0 + indent:number = 0, + updateBoxWidth: (id: number, width: number) => void, ) : ReactFragment => { switch (pp[0]) { case "Ppcmd_empty": @@ -151,23 +271,29 @@ const fragmentOfPpStringWithMode = ( return pp[1]; case "Ppcmd_glue": return pp[1].map((pp, index) => { - return fragmentOfPpStringWithMode(pp, mode, coqCss, id + index + 1, breakIds, indent); + return fragmentOfPpStringWithMode(pp, mode, coqCss, id + index + 1, breakIds, indent, updateBoxWidth); }); case "Ppcmd_box": const m = pp[1][0]; - const i = (m !== PpMode.horizontal) ? pp[1][1] : 0; + const i = (m !== PpMode.horizontal) ? pp[1][1] + indent : indent; return ( - fragmentOfPpStringWithMode(pp[2], m, coqCss, id + 1, breakIds, i + indent) + ); case "Ppcmd_tag": return ( - {fragmentOfPpStringWithMode(pp[2], mode, coqCss, id + 1, breakIds, indent)} + {fragmentOfPpStringWithMode(pp[2], mode, coqCss, id + 1, breakIds, indent, updateBoxWidth)} ); case "Ppcmd_print_break": - console.log("ID:" + id); - console.log("BREAK IDS: " + breakIds); const lineBreak = breakIds.find(breakId => breakId === id) !== undefined; return void ) : ReactFragment => { - return fragmentOfPpStringWithMode(pp, PpMode.horizontal, coqCss, id, breakIds); + return fragmentOfPpStringWithMode(pp, PpMode.horizontal, coqCss, id, breakIds, 0, updateBoxWidth); }; export default ppDisplay; \ No newline at end of file From 55903d0714788e4d9174d15ff77367948af36e00 Mon Sep 17 00:00:00 2001 From: Romain Tetley Date: Thu, 23 May 2024 16:30:52 +0200 Subject: [PATCH 3/5] Working on break order Trying to find a better algorithm for break selection --- client/goal-view-ui/src/types.ts | 9 + .../goal-view-ui/src/utilities/Pp.module.css | 12 + client/goal-view-ui/src/utilities/pp-box.tsx | 19 +- .../goal-view-ui/src/utilities/pp-break.tsx | 40 ++- client/goal-view-ui/src/utilities/pp.tsx | 268 +++++++++++------- 5 files changed, 233 insertions(+), 115 deletions(-) diff --git a/client/goal-view-ui/src/types.ts b/client/goal-view-ui/src/types.ts index 060f3a44b..2807cd08c 100644 --- a/client/goal-view-ui/src/types.ts +++ b/client/goal-view-ui/src/types.ts @@ -28,6 +28,15 @@ export type PpString = export type Hyp = PpString; +export type FlattenedPpString = + | ["Ppcmd_empty"] + | ["Ppcmd_string", string] + | ["Ppcmd_box", BlockType, PpString[]] + | ["Ppcmd_tag", PpTag, PpString] + | ["Ppcmd_print_break", integer, integer] + | ["Ppcmd_force_newline"] + | ["Ppcmd_comment", string[]]; + export interface Goal { id: string, goal: PpString, diff --git a/client/goal-view-ui/src/utilities/Pp.module.css b/client/goal-view-ui/src/utilities/Pp.module.css index 58386b52c..076d6008d 100644 --- a/client/goal-view-ui/src/utilities/Pp.module.css +++ b/client/goal-view-ui/src/utilities/Pp.module.css @@ -5,4 +5,16 @@ .Content { white-space: pre; +} + +.Box { + display: inline; +} + +.Box + .Text { + vertical-align: bottom; +} + +.Box + .Tag { + vertical-align: bottom; } \ No newline at end of file diff --git a/client/goal-view-ui/src/utilities/pp-box.tsx b/client/goal-view-ui/src/utilities/pp-box.tsx index 1a14f6af8..9e328efa3 100644 --- a/client/goal-view-ui/src/utilities/pp-box.tsx +++ b/client/goal-view-ui/src/utilities/pp-box.tsx @@ -1,15 +1,21 @@ -import React, {FunctionComponent, useEffect, useRef} from 'react'; +import React, {FunctionComponent, useEffect, useState, useLayoutEffect, useRef} from 'react'; import {PpMode, PpString} from '../types'; import { fragmentOfPpStringWithMode } from './pp'; +import classes from './Pp.module.css'; + +type BreakInfo = { + id: string, + offset: number +}; type PpBoxProps = { pp: PpString, mode: PpMode, - recordWidth: (id: number, w: number) => void, + recordWidth: (id: string, w: number) => void, coqCss:CSSModuleClasses, indent: number, id: number, - breaks: number[] + breaks: BreakInfo[] }; const ppBox: FunctionComponent = (props) => { @@ -20,12 +26,15 @@ const ppBox: FunctionComponent = (props) => { useEffect(() => { if(boxElement.current) { const boxRect = boxElement.current.getBoundingClientRect(); - recordWidth(id, boxRect.width); + recordWidth("box-"+id, boxRect.width); + boxElement.current.closest(classes.Box); + } }, [breaks]); + const boxId = "box-"+id; return ( - + {fragmentOfPpStringWithMode(pp, mode, coqCss, id + 1, breaks, indent, recordWidth)} ); diff --git a/client/goal-view-ui/src/utilities/pp-break.tsx b/client/goal-view-ui/src/utilities/pp-break.tsx index 8c3f70bde..1946b1bc4 100644 --- a/client/goal-view-ui/src/utilities/pp-break.tsx +++ b/client/goal-view-ui/src/utilities/pp-break.tsx @@ -2,38 +2,56 @@ import React, {FunctionComponent} from 'react'; import {PpMode} from '../types'; type PpBreakProps = { + id: number, + offset: number, mode: PpMode, horizontalIndent: number, indent: number, - lineBreak: boolean + lineBreak: boolean, }; const ppBreak: FunctionComponent = (props) => { - const {mode, lineBreak, indent, horizontalIndent} = props; - + const {mode, lineBreak, indent, horizontalIndent, id, offset} = props; + const style = { + marginLeft: offset + }; + + const breakId = 'break-'+id; switch(mode) { case PpMode.horizontal: - return {" ".repeat(horizontalIndent)}; + return {" ".repeat(horizontalIndent)}; case PpMode.vertical: - return
; + return ( + +
+ + {" ".repeat(indent ? indent : 0)} + +
+ ); case PpMode.hvBox: if(lineBreak) { - return
; + +
+ + {" ".repeat(indent ? indent : 0)} + +
; } - return ; + return ; case PpMode.hovBox: if(lineBreak) { return ( - <> +
- + {" ".repeat(indent ? indent : 0)} - + ); } - return ; + return ; } }; diff --git a/client/goal-view-ui/src/utilities/pp.tsx b/client/goal-view-ui/src/utilities/pp.tsx index d308e04d7..73101e24a 100644 --- a/client/goal-view-ui/src/utilities/pp.tsx +++ b/client/goal-view-ui/src/utilities/pp.tsx @@ -14,13 +14,23 @@ type PpProps = { }; type Box = { - id: number, + id: string, mode: PpMode; indent: number; depth: number; width: number; - possibleBreaks: number[]; - breaks: number[]; + possibleBreaks: string[]; + breaks: string[]; +}; + +type BreakInfo = { + id: string, + offset: number +}; + +type DisplayState = { + breakIds: BreakInfo[]; + boxes: Box[]; }; const ppDisplay : FunctionComponent = (props) => { @@ -28,9 +38,7 @@ const ppDisplay : FunctionComponent = (props) => { const {pp, coqCss} = props; const [maxBreaks, setMaxBreaks] = useState(0); - const [breakIds, setBreakIds] = useState([]); - const [boxes, setBoxes] = useState([]); - const [saturatedBoxes, setSaturatedBoxes] = useState([]); + const [displayState, setDisplayState] = useState({breakIds: [], boxes: []}); const [lastEntry, setLastEntry] = useState(null); const container = useRef(null); @@ -40,19 +48,22 @@ const ppDisplay : FunctionComponent = (props) => { if(container.current) { if(content.current) { + //in this case the window has already been resized if(lastEntry) { + + //don't trigger a recomputation for small resizes if(Math.abs(entry.contentRect.width - lastEntry.contentRect.width) <= 10) {return;} - //When we enlarge the window we should try and recomputed boxes + //When we enlarge the window we should try and recompute boxes if(entry.contentRect.width > lastEntry.contentRect.width) { - setBreakIds([]); - setBoxes(boxes => { - const newBoxes = boxes.map(box => { - return {...box, breaks: []}; - }); - return newBoxes; + setDisplayState(ds => { + return { + breakIds: [], + boxes: ds.boxes.map(box => { + return {...box, possibleBreaks: box.possibleBreaks.concat(box.breaks), breaks: []}; + }) + }; }); - setSaturatedBoxes([]); } else { computeNeededBreaks(maxBreaks); } @@ -67,46 +78,59 @@ const ppDisplay : FunctionComponent = (props) => { useEffect(() => { const breaks = computeNumBreaks(pp, 0); setMaxBreaks(breaks); - setBreakIds([]); - setSaturatedBoxes([]); - setBoxes(getBoxes(pp, 0, 0, [])); + setDisplayState({ + breakIds: [], + boxes: getBoxes(pp, 0, 0, []) + }); computeNeededBreaks(breaks); }, [pp]); useLayoutEffect(() => { + //computeBoxMargins(); computeNeededBreaks(maxBreaks); - }); + }, [displayState]); - const updateBoxWidth = (id: number, width: number) => { + const updateBoxWidth = (id: string, width: number) => { + setDisplayState(ds => { + return { + ...ds, + boxes: ds.boxes.map(b => { + if(b.id === id) { + return {...b, width: width}; + } + return b; + }) + }; + }); + }; - setBoxes(boxes => { - return boxes.map(b => { - if(b.id === id) { - return {...b, width: width}; - } - return b; - }).sort((b1, b2) => { - if(b1.depth !== b2.depth) { - return b1.depth - b2.depth; - } - else { - return b2.width - b1.width; + const computeBoxMargins = () => { + if(content.current) { + displayState.boxes.map(box => { + if(box.depth = 0) {return;} + const id = "box-" + box.id; + const boxHtml = content.current!.querySelector(id); + if(boxHtml) { + const prev = boxHtml.previousElementSibling; + if(prev) { + const rect = prev.getBoundingClientRect(); + boxHtml.setAttribute('style', `marginLeft:${rect.left}`); + } + } - + return; }); - }); - + } }; const computeNeededBreaks = (maxBreaks: number) => { - if(container.current) { if(content.current) { const containerRect = container.current.getBoundingClientRect(); const contentRect = content.current.getBoundingClientRect(); if(containerRect.width < contentRect.width) { - if(breakIds.length < maxBreaks) { - getNextBreak(); + if(displayState.breakIds.length < maxBreaks) { + checkBreaks(containerRect.width); } } } @@ -114,55 +138,97 @@ const ppDisplay : FunctionComponent = (props) => { }; - const getNextBreak = () => { - if(boxes) { - // Filter out the boxes that are saturated (all the breaks have been used) - // The box widths are sorted by descending order => we always try to break the largest box first - const sortedBoxes = boxes.filter(box => !saturatedBoxes.find(id => id === box.id)); - - for(let i = 0; i < sortedBoxes.length; i++) { - const box = sortedBoxes[i]; - if(box && box.possibleBreaks) { - //Ignore horizontal or vertical boxes - if(box.mode === PpMode.horizontal) { continue; } - else if (box.mode === PpMode.vertical) { continue; } - //In the case of an hvbox trigger all breaks - else if (box.mode === PpMode.hvBox) { - setBreakIds(breakIds => { - return breakIds.concat(box.possibleBreaks); - }); - setSaturatedBoxes(saturatedBoxes => { - return saturatedBoxes.concat([box.id]); - }); + const checkBreaks = (containerWidth: number) => { + if(content.current) { + let breakInfo : BreakInfo | null = null; + let currBox : Element | null = null; + const boxes = content.current.querySelectorAll("."+classes.Box); + // const firstBox = displayState.boxes.length ? content.current.querySelector("#"+displayState.boxes[0].id) : null; + // const initialOffset = firstBox ? firstBox.getBoundingClientRect().x : 0; + for(let box of boxes) { + const breaks = box.querySelectorAll(`:scope > :not(.${classes.Box}):not(.${classes.Tag}):not(.${classes.Text})`); + for(let br of breaks) { + const breakId = br.id; + if(displayState.breakIds.find(info => info.id === breakId)) {continue; } + + const next = br.nextElementSibling; + if(next && next.getBoundingClientRect().right > containerWidth) { + const parentBox = box.closest(`:not(#${box.id}).${classes.Box}`); + const parentOffset = parentBox ? parentBox.getBoundingClientRect().left : 0; + const offset = box.getBoundingClientRect().left - parentOffset; + breakInfo = {id: breakId, offset: offset}; break; } - //Otherwise find the next breakId - else { - const breakId = box.possibleBreaks.find((candidateId) => !breakIds.find(id => id === candidateId)); - if(breakId) { - setBreakIds(breakIds => { - return breakIds.concat([breakId]); - }); - const boxBreaks = box.breaks.concat([breakId]); - setBoxes(boxes => { - return boxes.map(b => { - if(b.id === box.id) { - return {...box, breaks: boxBreaks}; - } - return b; - }); - }); - if(boxBreaks.length === box.possibleBreaks.length) { - setSaturatedBoxes(saturatedBoxes => { - return saturatedBoxes.concat([box.id]); - }); + } + if(breakInfo) { + currBox = box; + break; + } + }; + + if(breakInfo && currBox) { + setDisplayState(ds => { + return { + breakIds: ds.breakIds.concat([breakInfo!]), + boxes: ds.boxes.map(b => { + if(b.id === currBox!.id) { + return {...b, breaks: b.breaks.concat([breakInfo!.id]), possibleBreaks: b.possibleBreaks.filter(id => id !== breakInfo!.id)}; } - break; - } + return b; + }) + }; + }); + } + } + }; - } + const getNextBreak = (containerWidth: number) => { + if(displayState.boxes) { + // Filter out the boxes that are saturated (all the breaks have been used) + // The box widths are sorted by descending order => we always try to break the largest box first + const candidateBoxes = displayState.boxes.filter(box => (box.width > containerWidth) && (box.possibleBreaks.length > 0)); + console.log("---------------------------------"); + console.log("ContainerWidth: ", containerWidth); + console.log("BOXES:"); + console.log(candidateBoxes); + console.log("---------------------------------"); + + for(let i = 0; i < candidateBoxes.length; i++) { + const box = candidateBoxes[i]; + //Ignore horizontal or vertical boxes + if(box.mode === PpMode.horizontal) { continue; } + else if (box.mode === PpMode.vertical) { continue; } + //In the case of an hvbox trigger all breaks + else if (box.mode === PpMode.hvBox) { + setDisplayState(ds => { + return { + breakIds: ds.breakIds.concat(box.possibleBreaks.map(id => {return {id: id, offset: 0}; })), + boxes: ds.boxes.map(b => { + if(b.id === box.id) { + return {...box, breaks: box.possibleBreaks, possibleBreaks: []}; + } + return b; + }) + }; + }); + } + //Otherwise find the next breakId + else { + + setDisplayState(ds => { + return { + breakIds: ds.breakIds.concat([{id: box.possibleBreaks[0], offset: 0}]), + boxes: ds.boxes.map(b => { + if(b.id === box.id) { + return {...b, breaks: box.breaks.concat([box.possibleBreaks[0]]), possibleBreaks: box.possibleBreaks.slice(1)}; + } + return b; + }) + }; + }); } + } } }; @@ -189,7 +255,7 @@ const ppDisplay : FunctionComponent = (props) => { } }; - const getBoxBreaks = (pp: PpString, id: number, acc: number[]) : number[] => { + const getBoxBreaks = (pp: PpString, id: number, acc: string[]) : string[] => { switch(pp[0]) { case "Ppcmd_empty": return acc; @@ -204,7 +270,7 @@ const ppDisplay : FunctionComponent = (props) => { case "Ppcmd_tag": return getBoxBreaks(pp[2], id + 1, acc); case "Ppcmd_print_break": - return acc.concat([id]); + return acc.concat(["break-"+id]); case "Ppcmd_force_newline": return acc; case "Ppcmd_comment": @@ -224,12 +290,12 @@ const ppDisplay : FunctionComponent = (props) => { case "Ppcmd_box": const breaks = getBoxBreaks(pp[2], id + 1, []); const box = { - id: id, + id: "box-"+id, mode: pp[1][0], indent: pp[1][1] ? pp[1][1] : 0, depth: depth, width: 0, - possibleBreaks: breaks, //.reverse(), + possibleBreaks: breaks, breaks: [] }; return getBoxes(pp[2], id + 1, depth + 1, acc.concat([box])); @@ -247,7 +313,7 @@ const ppDisplay : FunctionComponent = (props) => { return (
- {fragmentOfPpString(pp, coqCss, 0, breakIds, updateBoxWidth)} + {fragmentOfPpString(pp, coqCss, 0, displayState.breakIds, updateBoxWidth)}
); @@ -260,22 +326,22 @@ export const fragmentOfPpStringWithMode = ( mode: PpMode, coqCss:CSSModuleClasses, id: number, - breakIds: number[], + breakIds: BreakInfo[], indent:number = 0, - updateBoxWidth: (id: number, width: number) => void, + updateBoxWidth: (id: string, width: number) => void, ) : ReactFragment => { switch (pp[0]) { case "Ppcmd_empty": return <>; case "Ppcmd_string": - return pp[1]; + return {pp[1]}; case "Ppcmd_glue": return pp[1].map((pp, index) => { return fragmentOfPpStringWithMode(pp, mode, coqCss, id + index + 1, breakIds, indent, updateBoxWidth); }); case "Ppcmd_box": const m = pp[1][0]; - const i = (m !== PpMode.horizontal) ? pp[1][1] + indent : indent; + const i = (m !== PpMode.horizontal) ? pp[1][1] : 0; return ( + {fragmentOfPpStringWithMode(pp[2], mode, coqCss, id + 1, breakIds, indent, updateBoxWidth)} ); case "Ppcmd_print_break": - const lineBreak = breakIds.find(breakId => breakId === id) !== undefined; - return ; + const br = breakIds.find(br => br.id === "break-"+id); + return ( + + ); case "Ppcmd_force_newline": return
; case "Ppcmd_comment": @@ -311,8 +381,8 @@ export const fragmentOfPpStringWithMode = ( const fragmentOfPpString = ( pp:PpString, coqCss:CSSModuleClasses, id: number, - breakIds: number[], - updateBoxWidth: (id: number, width: number) => void + breakIds: BreakInfo[], + updateBoxWidth: (id: string, width: number) => void ) : ReactFragment => { return fragmentOfPpStringWithMode(pp, PpMode.horizontal, coqCss, id, breakIds, 0, updateBoxWidth); }; From 4d66630f15277fd8388a0231c275b1c0dd80adf1 Mon Sep 17 00:00:00 2001 From: Romain Tetley Date: Wed, 29 May 2024 17:01:02 +0200 Subject: [PATCH 4/5] Final version for PpString formatting Changed the philosophy: rework the received data into something more workable for my goal view. I use css selectors to select the boxes and breaks which leads to a break algo akin to Format. Later down the line I can re-work the break algo. --- client/goal-view-ui/package.json | 3 +- client/goal-view-ui/src/types.ts | 39 ++ client/goal-view-ui/src/utilities/pp-box.tsx | 75 ++-- .../goal-view-ui/src/utilities/pp-break.tsx | 17 +- client/goal-view-ui/src/utilities/pp.tsx | 403 +++++++----------- client/goal-view-ui/yarn.lock | 18 + 6 files changed, 275 insertions(+), 280 deletions(-) diff --git a/client/goal-view-ui/package.json b/client/goal-view-ui/package.json index 6e1c17c57..e554ea840 100644 --- a/client/goal-view-ui/package.json +++ b/client/goal-view-ui/package.json @@ -15,7 +15,8 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "react-hook": "^0.0.1", - "react-icons": "^4.7.1" + "react-icons": "^4.7.1", + "uuidv4": "^6.2.13" }, "devDependencies": { "@types/react": "^17.0.33", diff --git a/client/goal-view-ui/src/types.ts b/client/goal-view-ui/src/types.ts index 2807cd08c..78e885d5c 100644 --- a/client/goal-view-ui/src/types.ts +++ b/client/goal-view-ui/src/types.ts @@ -16,6 +16,8 @@ export type BlockType = | [PpMode.hvBox, integer] | [PpMode.hovBox, integer]; +export type PpBox = ["Ppcmd_box", BlockType, PpString]; + export type PpString = | ["Ppcmd_empty"] | ["Ppcmd_string", string] @@ -37,6 +39,43 @@ export type FlattenedPpString = | ["Ppcmd_force_newline"] | ["Ppcmd_comment", string[]]; +export enum DisplayType { + box = "box", + term = "term", + break = "break" +} + +export type BreakInfo = { + id: string, + offset: number +}; + +export interface Break { + id: string, + type: DisplayType.break, + offset: number, + mode: PpMode, + horizontalIndent: number, + indent: number, + shouldBreak: boolean, +} + +export interface Term { + type: DisplayType.term, + classList: string[], + content: string, +} + +export type BoxDisplay = Break | Term | Box | null; + +export interface Box { + id: string, + type: DisplayType.box, + mode: PpMode, + indent: number, + boxChildren: BoxDisplay[] +} + export interface Goal { id: string, goal: PpString, diff --git a/client/goal-view-ui/src/utilities/pp-box.tsx b/client/goal-view-ui/src/utilities/pp-box.tsx index 9e328efa3..6331018ae 100644 --- a/client/goal-view-ui/src/utilities/pp-box.tsx +++ b/client/goal-view-ui/src/utilities/pp-box.tsx @@ -1,43 +1,58 @@ -import React, {FunctionComponent, useEffect, useState, useLayoutEffect, useRef} from 'react'; -import {PpMode, PpString} from '../types'; -import { fragmentOfPpStringWithMode } from './pp'; +import React, {FunctionComponent, useEffect, useState, useLayoutEffect, useRef, ReactFragment} from 'react'; +import {Box, DisplayType, BreakInfo} from '../types'; +import PpBreak from './pp-break'; import classes from './Pp.module.css'; -type BreakInfo = { - id: string, - offset: number -}; - -type PpBoxProps = { - pp: PpString, - mode: PpMode, - recordWidth: (id: string, w: number) => void, - coqCss:CSSModuleClasses, - indent: number, - id: number, +interface PpBoxProps extends Box { + coqCss: CSSModuleClasses, breaks: BreakInfo[] -}; +} -const ppBox: FunctionComponent = (props) => { +const PpBox: FunctionComponent = (props) => { - const {pp, mode, recordWidth, coqCss, id, indent, breaks} = props; - const boxElement = useRef(null); - - useEffect(() => { - if(boxElement.current) { - const boxRect = boxElement.current.getBoundingClientRect(); - recordWidth("box-"+id, boxRect.width); - boxElement.current.closest(classes.Box); + const {mode, coqCss, id, indent, breaks, boxChildren} = props; + const inner = boxChildren.map(child => { + if(child) { + if (child.type === DisplayType.box) { + return ( + + ); + } else if (child.type === DisplayType.break) { + const lineBreak = (breaks.find(br => br.id === child.id)); + return ( + + ); + } else { + return ( + + {child.content} + + ); + } } - }, [breaks]); + }); - const boxId = "box-"+id; return ( - - {fragmentOfPpStringWithMode(pp, mode, coqCss, id + 1, breaks, indent, recordWidth)} + + {inner} ); }; -export default ppBox; \ No newline at end of file +export default PpBox; \ No newline at end of file diff --git a/client/goal-view-ui/src/utilities/pp-break.tsx b/client/goal-view-ui/src/utilities/pp-break.tsx index 1946b1bc4..9819ecef7 100644 --- a/client/goal-view-ui/src/utilities/pp-break.tsx +++ b/client/goal-view-ui/src/utilities/pp-break.tsx @@ -2,7 +2,7 @@ import React, {FunctionComponent} from 'react'; import {PpMode} from '../types'; type PpBreakProps = { - id: number, + id: string, offset: number, mode: PpMode, horizontalIndent: number, @@ -16,14 +16,13 @@ const ppBreak: FunctionComponent = (props) => { const style = { marginLeft: offset }; - - const breakId = 'break-'+id; + switch(mode) { case PpMode.horizontal: - return {" ".repeat(horizontalIndent)}; + return {" ".repeat(horizontalIndent)}; case PpMode.vertical: return ( - +
{" ".repeat(indent ? indent : 0)} @@ -32,18 +31,18 @@ const ppBreak: FunctionComponent = (props) => { ); case PpMode.hvBox: if(lineBreak) { - +
{" ".repeat(indent ? indent : 0)}
; } - return ; + return ; case PpMode.hovBox: if(lineBreak) { return ( - +
{" ".repeat(indent ? indent : 0)} @@ -51,7 +50,7 @@ const ppBreak: FunctionComponent = (props) => { ); } - return ; + return ; } }; diff --git a/client/goal-view-ui/src/utilities/pp.tsx b/client/goal-view-ui/src/utilities/pp.tsx index 73101e24a..8a43dc163 100644 --- a/client/goal-view-ui/src/utilities/pp.tsx +++ b/client/goal-view-ui/src/utilities/pp.tsx @@ -1,11 +1,14 @@ import { FunctionComponent, ReactFragment, useRef, useState, useEffect, useLayoutEffect} from 'react'; import useResizeObserver from '@react-hook/resize-observer'; import {ResizeObserverEntry} from '@juggle/resize-observer'; -import { PpString, PpMode } from '../types'; +import { v4 as uuid } from 'uuid'; + +import { PpString, PpMode, BoxDisplay, Term, Break, Box, DisplayType, BreakInfo } from '../types'; import PpBreak from './pp-break'; import PpBox from './pp-box'; import classes from './Pp.module.css'; +import { off } from 'process'; type PpProps = { @@ -13,24 +16,9 @@ type PpProps = { coqCss: CSSModuleClasses; }; -type Box = { - id: string, - mode: PpMode; - indent: number; - depth: number; - width: number; - possibleBreaks: string[]; - breaks: string[]; -}; - -type BreakInfo = { - id: string, - offset: number -}; - type DisplayState = { breakIds: BreakInfo[]; - boxes: Box[]; + display: Box | null; }; const ppDisplay : FunctionComponent = (props) => { @@ -38,7 +26,7 @@ const ppDisplay : FunctionComponent = (props) => { const {pp, coqCss} = props; const [maxBreaks, setMaxBreaks] = useState(0); - const [displayState, setDisplayState] = useState({breakIds: [], boxes: []}); + const [displayState, setDisplayState] = useState({breakIds: [], display: null}); const [lastEntry, setLastEntry] = useState(null); const container = useRef(null); @@ -56,12 +44,11 @@ const ppDisplay : FunctionComponent = (props) => { //When we enlarge the window we should try and recompute boxes if(entry.contentRect.width > lastEntry.contentRect.width) { + //Reinit breaks setDisplayState(ds => { return { - breakIds: [], - boxes: ds.boxes.map(box => { - return {...box, possibleBreaks: box.possibleBreaks.concat(box.breaks), breaks: []}; - }) + ...ds, + breakIds: [] }; }); } else { @@ -80,46 +67,145 @@ const ppDisplay : FunctionComponent = (props) => { setMaxBreaks(breaks); setDisplayState({ breakIds: [], - boxes: getBoxes(pp, 0, 0, []) + display: boxifyPpString(pp) }); computeNeededBreaks(breaks); }, [pp]); useLayoutEffect(() => { - //computeBoxMargins(); computeNeededBreaks(maxBreaks); }, [displayState]); - const updateBoxWidth = (id: string, width: number) => { - setDisplayState(ds => { - return { - ...ds, - boxes: ds.boxes.map(b => { - if(b.id === id) { - return {...b, width: width}; - } - return b; - }) - }; + const getPpTag = (pp: PpString, tag: string) => { + switch(pp[0]) { + case 'Ppcmd_empty': + console.error('Recieved PpTag with empty'); + return null; + case 'Ppcmd_string': + return { + type: DisplayType.term, + classList: [classes.Tag, tag], + content: pp[1] + } as Term; + case 'Ppcmd_glue': + console.error('Recieved PpTag with glue'); + return null; + case 'Ppcmd_force_newline': + console.error('Recieved PpTag with fnl'); + return null; + case 'Ppcmd_comment': + console.error('Recieved PpTag with comment'); + return null; + case 'Ppcmd_box': + console.error('Recieved PpTag with box'); + return null; + case 'Ppcmd_tag': + console.error('Recieved PpTag with tag'); + return null; + case 'Ppcmd_print_break': + console.error('Recieved PpTag with br'); + return null; + } + }; + + const flattenGlue = (glue: PpString[], mode: PpMode, indent: number, boxId: string) : BoxDisplay[] => { + + const g = glue.map(pp => { + switch(pp[0]) { + case 'Ppcmd_empty': + return null; + case 'Ppcmd_string': + return { + type: DisplayType.term, + classList: [classes.Text], + content: pp[1] + } as Term; + case 'Ppcmd_glue': + console.error('Found a PpGlue inside a PpGlue'); + return null; + case 'Ppcmd_force_newline': + return { + id: "fnl", + type: DisplayType.break, + offset: 0, + mode: mode, + horizontalIndent: 0, + indent: indent, + shouldBreak: true, + } as Break; + case 'Ppcmd_comment': + return null; + case 'Ppcmd_box': + return boxifyPpString(pp); + case 'Ppcmd_tag': + return getPpTag(pp[2], coqCss[pp[1].replaceAll(".", "-")]); + case 'Ppcmd_print_break': + const brId = uuid(); + return { + id: "box-"+boxId+"break-"+brId, + type: DisplayType.break, + offset: 0, + mode: mode, + horizontalIndent: pp[1], + indent: indent, + shouldBreak: false + } as Break; + } }); + return g; }; - const computeBoxMargins = () => { - if(content.current) { - displayState.boxes.map(box => { - if(box.depth = 0) {return;} - const id = "box-" + box.id; - const boxHtml = content.current!.querySelector(id); - if(boxHtml) { - const prev = boxHtml.previousElementSibling; - if(prev) { - const rect = prev.getBoundingClientRect(); - boxHtml.setAttribute('style', `marginLeft:${rect.left}`); - } - - } - return; - }); + const getBoxChildren = (pp : PpString, mode: PpMode, indent: number, boxId: string) : BoxDisplay[] => { + switch(pp[0]) { + case "Ppcmd_empty": + return []; + case "Ppcmd_glue": + return flattenGlue(pp[1], mode, indent, boxId); + case 'Ppcmd_string': + return [{ + type: DisplayType.term, + classList: [classes.Text], + content: pp[1] + } as Term]; + case 'Ppcmd_force_newline': + return []; + case 'Ppcmd_comment': + return []; + case 'Ppcmd_box': + return [ + boxifyPpString(pp) + ]; + case 'Ppcmd_tag': + return [ + getPpTag(pp[2], coqCss[pp[1].replaceAll(".", "-")]) + ]; + case 'Ppcmd_print_break': + return []; + } + }; + + const boxifyPpString = (pp : PpString) => { + const id = uuid(); + switch (pp[0]) { + case 'Ppcmd_empty': + case 'Ppcmd_string': + case 'Ppcmd_glue': + case 'Ppcmd_force_newline': + case 'Ppcmd_comment': + case 'Ppcmd_tag': + case 'Ppcmd_print_break': + console.error('Goal contains non-boxed PpString'); + return null; + case 'Ppcmd_box': + const mode = pp[1][0]; + const indent = (mode !== PpMode.horizontal) ? pp[1][1] : 0; + return { + id: "box-"+id, + type: DisplayType.box, + mode: mode, + indent: indent, + boxChildren: getBoxChildren(pp[2], mode, indent, id) + } as Box; } }; @@ -141,98 +227,44 @@ const ppDisplay : FunctionComponent = (props) => { const checkBreaks = (containerWidth: number) => { if(content.current) { let breakInfo : BreakInfo | null = null; - let currBox : Element | null = null; const boxes = content.current.querySelectorAll("."+classes.Box); - // const firstBox = displayState.boxes.length ? content.current.querySelector("#"+displayState.boxes[0].id) : null; - // const initialOffset = firstBox ? firstBox.getBoundingClientRect().x : 0; + for(let box of boxes) { + + const parentBox = box.closest(`:not(#${box.id}).${classes.Box}`); + const parentOffset = parentBox ? parentBox.getBoundingClientRect().left : 0; + const offset =parentBox ? box.getBoundingClientRect().left - parentOffset : 0; + const breaks = box.querySelectorAll(`:scope > :not(.${classes.Box}):not(.${classes.Tag}):not(.${classes.Text})`); + for(let br of breaks) { const breakId = br.id; - if(displayState.breakIds.find(info => info.id === breakId)) {continue; } + if(displayState.breakIds.find(info => info.id === breakId)) { continue; } const next = br.nextElementSibling; if(next && next.getBoundingClientRect().right > containerWidth) { - const parentBox = box.closest(`:not(#${box.id}).${classes.Box}`); - const parentOffset = parentBox ? parentBox.getBoundingClientRect().left : 0; - const offset = box.getBoundingClientRect().left - parentOffset; + // const offset = offsetLevel; breakInfo = {id: breakId, offset: offset}; break; } } + if(breakInfo) { - currBox = box; break; } }; - if(breakInfo && currBox) { + if(breakInfo) { setDisplayState(ds => { return { - breakIds: ds.breakIds.concat([breakInfo!]), - boxes: ds.boxes.map(b => { - if(b.id === currBox!.id) { - return {...b, breaks: b.breaks.concat([breakInfo!.id]), possibleBreaks: b.possibleBreaks.filter(id => id !== breakInfo!.id)}; - } - return b; - }) + ...ds, + breakIds: ds.breakIds.concat([breakInfo!]) }; }); } } }; - const getNextBreak = (containerWidth: number) => { - if(displayState.boxes) { - // Filter out the boxes that are saturated (all the breaks have been used) - // The box widths are sorted by descending order => we always try to break the largest box first - const candidateBoxes = displayState.boxes.filter(box => (box.width > containerWidth) && (box.possibleBreaks.length > 0)); - console.log("---------------------------------"); - console.log("ContainerWidth: ", containerWidth); - console.log("BOXES:"); - console.log(candidateBoxes); - console.log("---------------------------------"); - - for(let i = 0; i < candidateBoxes.length; i++) { - const box = candidateBoxes[i]; - //Ignore horizontal or vertical boxes - if(box.mode === PpMode.horizontal) { continue; } - else if (box.mode === PpMode.vertical) { continue; } - //In the case of an hvbox trigger all breaks - else if (box.mode === PpMode.hvBox) { - setDisplayState(ds => { - return { - breakIds: ds.breakIds.concat(box.possibleBreaks.map(id => {return {id: id, offset: 0}; })), - boxes: ds.boxes.map(b => { - if(b.id === box.id) { - return {...box, breaks: box.possibleBreaks, possibleBreaks: []}; - } - return b; - }) - }; - }); - } - //Otherwise find the next breakId - else { - - setDisplayState(ds => { - return { - breakIds: ds.breakIds.concat([{id: box.possibleBreaks[0], offset: 0}]), - boxes: ds.boxes.map(b => { - if(b.id === box.id) { - return {...b, breaks: box.breaks.concat([box.possibleBreaks[0]]), possibleBreaks: box.possibleBreaks.slice(1)}; - } - return b; - }) - }; - }); - - } - - } - } - }; - const computeNumBreaks = (pp: PpString, acc: number) : number => { switch(pp[0]) { case "Ppcmd_empty": @@ -255,65 +287,22 @@ const ppDisplay : FunctionComponent = (props) => { } }; - const getBoxBreaks = (pp: PpString, id: number, acc: string[]) : string[] => { - switch(pp[0]) { - case "Ppcmd_empty": - return acc; - case "Ppcmd_string": - return acc; - case "Ppcmd_glue": - const nbBreaks = pp[1].map((pp, index) => getBoxBreaks(pp, id + index + 1 , [])); - const breaks = nbBreaks.reduce((pv, cv) => {return pv.concat(cv);}, []); - return acc.concat(breaks); - case "Ppcmd_box": - return acc; - case "Ppcmd_tag": - return getBoxBreaks(pp[2], id + 1, acc); - case "Ppcmd_print_break": - return acc.concat(["break-"+id]); - case "Ppcmd_force_newline": - return acc; - case "Ppcmd_comment": - return acc; - } - }; - - const getBoxes = (pp: PpString, id: number, depth: number, acc: Box[]) : Box[] => { - switch(pp[0]) { - case "Ppcmd_empty": - return acc; - case "Ppcmd_string": - return acc; - case "Ppcmd_glue": - const boxes = pp[1].map((pp, index) => getBoxes(pp, id + index + 1, depth, [])); - return acc.concat(boxes.reduce((boxes, acc) => {return boxes.concat(acc); })); - case "Ppcmd_box": - const breaks = getBoxBreaks(pp[2], id + 1, []); - const box = { - id: "box-"+id, - mode: pp[1][0], - indent: pp[1][1] ? pp[1][1] : 0, - depth: depth, - width: 0, - possibleBreaks: breaks, - breaks: [] - }; - return getBoxes(pp[2], id + 1, depth + 1, acc.concat([box])); - case "Ppcmd_tag": - return getBoxes(pp[2], id + 1, depth, acc); - case "Ppcmd_print_break": - return acc; - case "Ppcmd_force_newline": - return acc; - case "Ppcmd_comment": - return acc; - } - }; - return (
- {fragmentOfPpString(pp, coqCss, 0, displayState.breakIds, updateBoxWidth)} + { + displayState.display ? + + : null + }
); @@ -321,70 +310,4 @@ const ppDisplay : FunctionComponent = (props) => { }; -export const fragmentOfPpStringWithMode = ( - pp:PpString, - mode: PpMode, - coqCss:CSSModuleClasses, - id: number, - breakIds: BreakInfo[], - indent:number = 0, - updateBoxWidth: (id: string, width: number) => void, -) : ReactFragment => { - switch (pp[0]) { - case "Ppcmd_empty": - return <>; - case "Ppcmd_string": - return {pp[1]}; - case "Ppcmd_glue": - return pp[1].map((pp, index) => { - return fragmentOfPpStringWithMode(pp, mode, coqCss, id + index + 1, breakIds, indent, updateBoxWidth); - }); - case "Ppcmd_box": - const m = pp[1][0]; - const i = (m !== PpMode.horizontal) ? pp[1][1] : 0; - return ( - - ); - case "Ppcmd_tag": - return ( - - {fragmentOfPpStringWithMode(pp[2], mode, coqCss, id + 1, breakIds, indent, updateBoxWidth)} - - ); - case "Ppcmd_print_break": - const br = breakIds.find(br => br.id === "break-"+id); - return ( - - ); - case "Ppcmd_force_newline": - return
; - case "Ppcmd_comment": - return pp[1]; - } -}; - -const fragmentOfPpString = ( - pp:PpString, coqCss:CSSModuleClasses, - id: number, - breakIds: BreakInfo[], - updateBoxWidth: (id: string, width: number) => void -) : ReactFragment => { - return fragmentOfPpStringWithMode(pp, PpMode.horizontal, coqCss, id, breakIds, 0, updateBoxWidth); -}; - export default ppDisplay; \ No newline at end of file diff --git a/client/goal-view-ui/yarn.lock b/client/goal-view-ui/yarn.lock index 1379dcd77..b08698b98 100644 --- a/client/goal-view-ui/yarn.lock +++ b/client/goal-view-ui/yarn.lock @@ -464,6 +464,11 @@ resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/uuid@8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + "@types/vscode-webview@^1.57.0": version "1.57.1" resolved "https://registry.npmjs.org/@types/vscode-webview/-/vscode-webview-1.57.1.tgz" @@ -927,6 +932,19 @@ update-browserslist-db@^1.0.9: escalade "^3.1.1" picocolors "^1.0.0" +uuid@8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuidv4@^6.2.13: + version "6.2.13" + resolved "https://registry.yarnpkg.com/uuidv4/-/uuidv4-6.2.13.tgz#8f95ec5ef22d1f92c8e5d4c70b735d1c89572cb7" + integrity sha512-AXyzMjazYB3ovL3q051VLH06Ixj//Knx7QnUSi1T//Ie3io6CpsPu9nVMOx5MoLWh6xV0B9J0hIaxungxXUbPQ== + dependencies: + "@types/uuid" "8.3.4" + uuid "8.3.2" + vite@^2.9.17: version "2.9.17" resolved "https://registry.yarnpkg.com/vite/-/vite-2.9.17.tgz#6b770525e12fa2a2e3a0fa0d028d304f4f7dc7d4" From ad6ce615a49d9861e22427dcf2f2d908b8a93425 Mon Sep 17 00:00:00 2001 From: Romain Tetley Date: Fri, 31 May 2024 08:54:24 +0200 Subject: [PATCH 5/5] Fixing yarn.nix --- client/goal-view-ui/yarn.nix | 342 ++++++++++++++++++++--------------- 1 file changed, 200 insertions(+), 142 deletions(-) diff --git a/client/goal-view-ui/yarn.nix b/client/goal-view-ui/yarn.nix index 03df9e307..72797bc6f 100644 --- a/client/goal-view-ui/yarn.nix +++ b/client/goal-view-ui/yarn.nix @@ -1,17 +1,11 @@ -{ - fetchurl, - fetchgit, - linkFarm, - runCommand, - gnutar, -}: rec { +{ fetchurl, fetchgit, linkFarm, runCommand, gnutar }: rec { offline_cache = linkFarm "offline" packages; packages = [ { name = "https___registry.npmjs.org__ampproject_remapping___remapping_2.2.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org__ampproject_remapping___remapping_2.2.0.tgz"; - url = "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz"; + url = "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz"; sha512 = "qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w=="; }; } @@ -19,7 +13,7 @@ name = "https___registry.npmjs.org__babel_code_frame___code_frame_7.18.6.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_code_frame___code_frame_7.18.6.tgz"; - url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz"; + url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz"; sha512 = "TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q=="; }; } @@ -27,7 +21,7 @@ name = "_babel_code_frame___code_frame_7.22.13.tgz"; path = fetchurl { name = "_babel_code_frame___code_frame_7.22.13.tgz"; - url = "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz"; + url = "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz"; sha512 = "XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w=="; }; } @@ -35,7 +29,7 @@ name = "https___registry.npmjs.org__babel_compat_data___compat_data_7.20.10.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_compat_data___compat_data_7.20.10.tgz"; - url = "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz"; + url = "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz"; sha512 = "sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg=="; }; } @@ -43,7 +37,7 @@ name = "https___registry.npmjs.org__babel_core___core_7.20.12.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_core___core_7.20.12.tgz"; - url = "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz"; + url = "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz"; sha512 = "XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg=="; }; } @@ -51,7 +45,7 @@ name = "https___registry.npmjs.org__babel_generator___generator_7.20.7.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_generator___generator_7.20.7.tgz"; - url = "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz"; + url = "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz"; sha512 = "7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw=="; }; } @@ -59,7 +53,7 @@ name = "_babel_generator___generator_7.23.0.tgz"; path = fetchurl { name = "_babel_generator___generator_7.23.0.tgz"; - url = "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz"; sha512 = "lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g=="; }; } @@ -67,7 +61,7 @@ name = "https___registry.npmjs.org__babel_helper_annotate_as_pure___helper_annotate_as_pure_7.18.6.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_helper_annotate_as_pure___helper_annotate_as_pure_7.18.6.tgz"; - url = "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz"; + url = "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz"; sha512 = "duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA=="; }; } @@ -75,7 +69,7 @@ name = "https___registry.npmjs.org__babel_helper_compilation_targets___helper_compilation_targets_7.20.7.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_helper_compilation_targets___helper_compilation_targets_7.20.7.tgz"; - url = "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz"; + url = "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz"; sha512 = "4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ=="; }; } @@ -83,7 +77,7 @@ name = "https___registry.npmjs.org__babel_helper_environment_visitor___helper_environment_visitor_7.18.9.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_helper_environment_visitor___helper_environment_visitor_7.18.9.tgz"; - url = "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz"; + url = "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz"; sha512 = "3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg=="; }; } @@ -91,7 +85,7 @@ name = "_babel_helper_environment_visitor___helper_environment_visitor_7.22.20.tgz"; path = fetchurl { name = "_babel_helper_environment_visitor___helper_environment_visitor_7.22.20.tgz"; - url = "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz"; sha512 = "zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA=="; }; } @@ -99,7 +93,7 @@ name = "_babel_helper_function_name___helper_function_name_7.23.0.tgz"; path = fetchurl { name = "_babel_helper_function_name___helper_function_name_7.23.0.tgz"; - url = "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz"; sha512 = "OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw=="; }; } @@ -107,7 +101,7 @@ name = "_babel_helper_hoist_variables___helper_hoist_variables_7.22.5.tgz"; path = fetchurl { name = "_babel_helper_hoist_variables___helper_hoist_variables_7.22.5.tgz"; - url = "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz"; sha512 = "wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw=="; }; } @@ -115,7 +109,7 @@ name = "https___registry.npmjs.org__babel_helper_module_imports___helper_module_imports_7.18.6.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_helper_module_imports___helper_module_imports_7.18.6.tgz"; - url = "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz"; + url = "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz"; sha512 = "0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA=="; }; } @@ -123,7 +117,7 @@ name = "https___registry.npmjs.org__babel_helper_module_transforms___helper_module_transforms_7.20.11.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_helper_module_transforms___helper_module_transforms_7.20.11.tgz"; - url = "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz"; + url = "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz"; sha512 = "uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg=="; }; } @@ -131,7 +125,7 @@ name = "https___registry.npmjs.org__babel_helper_plugin_utils___helper_plugin_utils_7.20.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_helper_plugin_utils___helper_plugin_utils_7.20.2.tgz"; - url = "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz"; + url = "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz"; sha512 = "8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ=="; }; } @@ -139,7 +133,7 @@ name = "https___registry.npmjs.org__babel_helper_simple_access___helper_simple_access_7.20.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_helper_simple_access___helper_simple_access_7.20.2.tgz"; - url = "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz"; + url = "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz"; sha512 = "+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA=="; }; } @@ -147,7 +141,7 @@ name = "https___registry.npmjs.org__babel_helper_split_export_declaration___helper_split_export_declaration_7.18.6.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_helper_split_export_declaration___helper_split_export_declaration_7.18.6.tgz"; - url = "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz"; + url = "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz"; sha512 = "bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA=="; }; } @@ -155,7 +149,7 @@ name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.22.6.tgz"; path = fetchurl { name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.22.6.tgz"; - url = "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz"; sha512 = "AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g=="; }; } @@ -163,7 +157,7 @@ name = "https___registry.npmjs.org__babel_helper_string_parser___helper_string_parser_7.19.4.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_helper_string_parser___helper_string_parser_7.19.4.tgz"; - url = "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz"; + url = "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz"; sha512 = "nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw=="; }; } @@ -171,7 +165,7 @@ name = "_babel_helper_string_parser___helper_string_parser_7.22.5.tgz"; path = fetchurl { name = "_babel_helper_string_parser___helper_string_parser_7.22.5.tgz"; - url = "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz"; sha512 = "mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="; }; } @@ -179,7 +173,7 @@ name = "https___registry.npmjs.org__babel_helper_validator_identifier___helper_validator_identifier_7.19.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_helper_validator_identifier___helper_validator_identifier_7.19.1.tgz"; - url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz"; + url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz"; sha512 = "awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w=="; }; } @@ -187,7 +181,7 @@ name = "_babel_helper_validator_identifier___helper_validator_identifier_7.22.20.tgz"; path = fetchurl { name = "_babel_helper_validator_identifier___helper_validator_identifier_7.22.20.tgz"; - url = "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz"; sha512 = "Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="; }; } @@ -195,7 +189,7 @@ name = "https___registry.npmjs.org__babel_helper_validator_option___helper_validator_option_7.18.6.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_helper_validator_option___helper_validator_option_7.18.6.tgz"; - url = "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz"; + url = "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz"; sha512 = "XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw=="; }; } @@ -203,7 +197,7 @@ name = "https___registry.npmjs.org__babel_helpers___helpers_7.20.13.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_helpers___helpers_7.20.13.tgz"; - url = "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz"; + url = "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz"; sha512 = "nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg=="; }; } @@ -211,7 +205,7 @@ name = "https___registry.npmjs.org__babel_highlight___highlight_7.18.6.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_highlight___highlight_7.18.6.tgz"; - url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz"; + url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz"; sha512 = "u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g=="; }; } @@ -219,7 +213,7 @@ name = "_babel_highlight___highlight_7.22.20.tgz"; path = fetchurl { name = "_babel_highlight___highlight_7.22.20.tgz"; - url = "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz"; + url = "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz"; sha512 = "dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg=="; }; } @@ -227,7 +221,7 @@ name = "https___registry.npmjs.org__babel_parser___parser_7.20.13.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_parser___parser_7.20.13.tgz"; - url = "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz"; + url = "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz"; sha512 = "gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw=="; }; } @@ -235,7 +229,7 @@ name = "_babel_parser___parser_7.23.0.tgz"; path = fetchurl { name = "_babel_parser___parser_7.23.0.tgz"; - url = "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz"; sha512 = "vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw=="; }; } @@ -243,7 +237,7 @@ name = "https___registry.npmjs.org__babel_plugin_syntax_jsx___plugin_syntax_jsx_7.18.6.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_plugin_syntax_jsx___plugin_syntax_jsx_7.18.6.tgz"; - url = "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz"; + url = "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz"; sha512 = "6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q=="; }; } @@ -251,7 +245,7 @@ name = "https___registry.npmjs.org__babel_plugin_transform_react_jsx_development___plugin_transform_react_jsx_development_7.18.6.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_plugin_transform_react_jsx_development___plugin_transform_react_jsx_development_7.18.6.tgz"; - url = "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz"; + url = "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz"; sha512 = "SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA=="; }; } @@ -259,7 +253,7 @@ name = "https___registry.npmjs.org__babel_plugin_transform_react_jsx_self___plugin_transform_react_jsx_self_7.18.6.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_plugin_transform_react_jsx_self___plugin_transform_react_jsx_self_7.18.6.tgz"; - url = "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz"; + url = "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz"; sha512 = "A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig=="; }; } @@ -267,7 +261,7 @@ name = "https___registry.npmjs.org__babel_plugin_transform_react_jsx_source___plugin_transform_react_jsx_source_7.19.6.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_plugin_transform_react_jsx_source___plugin_transform_react_jsx_source_7.19.6.tgz"; - url = "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz"; + url = "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz"; sha512 = "RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ=="; }; } @@ -275,7 +269,7 @@ name = "https___registry.npmjs.org__babel_plugin_transform_react_jsx___plugin_transform_react_jsx_7.20.13.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_plugin_transform_react_jsx___plugin_transform_react_jsx_7.20.13.tgz"; - url = "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz"; + url = "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz"; sha512 = "MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw=="; }; } @@ -283,7 +277,7 @@ name = "https___registry.npmjs.org__babel_template___template_7.20.7.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_template___template_7.20.7.tgz"; - url = "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz"; + url = "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz"; sha512 = "8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw=="; }; } @@ -291,7 +285,7 @@ name = "_babel_template___template_7.22.15.tgz"; path = fetchurl { name = "_babel_template___template_7.22.15.tgz"; - url = "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz"; + url = "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz"; sha512 = "QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w=="; }; } @@ -299,7 +293,7 @@ name = "_babel_traverse___traverse_7.23.2.tgz"; path = fetchurl { name = "_babel_traverse___traverse_7.23.2.tgz"; - url = "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz"; sha512 = "azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw=="; }; } @@ -307,7 +301,7 @@ name = "https___registry.npmjs.org__babel_types___types_7.20.7.tgz"; path = fetchurl { name = "https___registry.npmjs.org__babel_types___types_7.20.7.tgz"; - url = "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz"; + url = "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz"; sha512 = "69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg=="; }; } @@ -315,7 +309,7 @@ name = "_babel_types___types_7.23.0.tgz"; path = fetchurl { name = "_babel_types___types_7.23.0.tgz"; - url = "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz"; sha512 = "0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg=="; }; } @@ -323,7 +317,7 @@ name = "_esbuild_linux_loong64___linux_loong64_0.14.54.tgz"; path = fetchurl { name = "_esbuild_linux_loong64___linux_loong64_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz"; sha512 = "bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw=="; }; } @@ -331,7 +325,7 @@ name = "https___registry.npmjs.org__jridgewell_gen_mapping___gen_mapping_0.1.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org__jridgewell_gen_mapping___gen_mapping_0.1.1.tgz"; - url = "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz"; + url = "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz"; sha512 = "sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w=="; }; } @@ -339,7 +333,7 @@ name = "https___registry.npmjs.org__jridgewell_gen_mapping___gen_mapping_0.3.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org__jridgewell_gen_mapping___gen_mapping_0.3.2.tgz"; - url = "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz"; + url = "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz"; sha512 = "mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A=="; }; } @@ -347,7 +341,7 @@ name = "https___registry.npmjs.org__jridgewell_resolve_uri___resolve_uri_3.1.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org__jridgewell_resolve_uri___resolve_uri_3.1.0.tgz"; - url = "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz"; + url = "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz"; sha512 = "F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="; }; } @@ -355,7 +349,7 @@ name = "_jridgewell_resolve_uri___resolve_uri_3.1.1.tgz"; path = fetchurl { name = "_jridgewell_resolve_uri___resolve_uri_3.1.1.tgz"; - url = "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz"; + url = "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz"; sha512 = "dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA=="; }; } @@ -363,7 +357,7 @@ name = "https___registry.npmjs.org__jridgewell_set_array___set_array_1.1.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org__jridgewell_set_array___set_array_1.1.2.tgz"; - url = "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz"; + url = "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz"; sha512 = "xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="; }; } @@ -371,7 +365,7 @@ name = "https___registry.npmjs.org__jridgewell_sourcemap_codec___sourcemap_codec_1.4.14.tgz"; path = fetchurl { name = "https___registry.npmjs.org__jridgewell_sourcemap_codec___sourcemap_codec_1.4.14.tgz"; - url = "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz"; + url = "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz"; sha512 = "XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="; }; } @@ -379,7 +373,7 @@ name = "_jridgewell_sourcemap_codec___sourcemap_codec_1.4.15.tgz"; path = fetchurl { name = "_jridgewell_sourcemap_codec___sourcemap_codec_1.4.15.tgz"; - url = "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"; + url = "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"; sha512 = "eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="; }; } @@ -387,7 +381,7 @@ name = "_jridgewell_trace_mapping___trace_mapping_0.3.20.tgz"; path = fetchurl { name = "_jridgewell_trace_mapping___trace_mapping_0.3.20.tgz"; - url = "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz"; + url = "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz"; sha512 = "R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q=="; }; } @@ -395,15 +389,23 @@ name = "https___registry.npmjs.org__jridgewell_trace_mapping___trace_mapping_0.3.17.tgz"; path = fetchurl { name = "https___registry.npmjs.org__jridgewell_trace_mapping___trace_mapping_0.3.17.tgz"; - url = "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz"; + url = "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz"; sha512 = "MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g=="; }; } + { + name = "_juggle_resize_observer___resize_observer_3.4.0.tgz"; + path = fetchurl { + name = "_juggle_resize_observer___resize_observer_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz"; + sha512 = "dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA=="; + }; + } { name = "https___registry.npmjs.org__microsoft_fast_element___fast_element_1.11.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org__microsoft_fast_element___fast_element_1.11.0.tgz"; - url = "https://registry.npmjs.org/@microsoft/fast-element/-/fast-element-1.11.0.tgz"; + url = "https://registry.npmjs.org/@microsoft/fast-element/-/fast-element-1.11.0.tgz"; sha512 = "VKJYMkS5zgzHHb66sY7AFpYv6IfFhXrjQcAyNgi2ivD65My1XOhtjfKez5ELcLFRJfgZNAxvI8kE69apXERTkw=="; }; } @@ -411,7 +413,7 @@ name = "https___registry.npmjs.org__microsoft_fast_foundation___fast_foundation_2.47.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org__microsoft_fast_foundation___fast_foundation_2.47.0.tgz"; - url = "https://registry.npmjs.org/@microsoft/fast-foundation/-/fast-foundation-2.47.0.tgz"; + url = "https://registry.npmjs.org/@microsoft/fast-foundation/-/fast-foundation-2.47.0.tgz"; sha512 = "EyFuioaZQ9ngjUNRQi8R3dIPPsaNQdUOS+tP0G7b1MJRhXmQWIitBM6IeveQA6ZvXG6H21dqgrfEWlsYrUZ2sw=="; }; } @@ -419,7 +421,7 @@ name = "https___registry.npmjs.org__microsoft_fast_react_wrapper___fast_react_wrapper_0.1.48.tgz"; path = fetchurl { name = "https___registry.npmjs.org__microsoft_fast_react_wrapper___fast_react_wrapper_0.1.48.tgz"; - url = "https://registry.npmjs.org/@microsoft/fast-react-wrapper/-/fast-react-wrapper-0.1.48.tgz"; + url = "https://registry.npmjs.org/@microsoft/fast-react-wrapper/-/fast-react-wrapper-0.1.48.tgz"; sha512 = "9NvEjru9Kn5ZKjomAMX6v+eF0DR+eDkxKDwDfi+Wb73kTbrNzcnmlwd4diN15ygH97kldgj2+lpvI4CKLQQWLg=="; }; } @@ -427,15 +429,39 @@ name = "https___registry.npmjs.org__microsoft_fast_web_utilities___fast_web_utilities_5.4.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org__microsoft_fast_web_utilities___fast_web_utilities_5.4.1.tgz"; - url = "https://registry.npmjs.org/@microsoft/fast-web-utilities/-/fast-web-utilities-5.4.1.tgz"; + url = "https://registry.npmjs.org/@microsoft/fast-web-utilities/-/fast-web-utilities-5.4.1.tgz"; sha512 = "ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg=="; }; } + { + name = "_react_hook_latest___latest_1.0.3.tgz"; + path = fetchurl { + name = "_react_hook_latest___latest_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/@react-hook/latest/-/latest-1.0.3.tgz"; + sha512 = "dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg=="; + }; + } + { + name = "_react_hook_passive_layout_effect___passive_layout_effect_1.2.1.tgz"; + path = fetchurl { + name = "_react_hook_passive_layout_effect___passive_layout_effect_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/@react-hook/passive-layout-effect/-/passive-layout-effect-1.2.1.tgz"; + sha512 = "IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg=="; + }; + } + { + name = "_react_hook_resize_observer___resize_observer_1.2.6.tgz"; + path = fetchurl { + name = "_react_hook_resize_observer___resize_observer_1.2.6.tgz"; + url = "https://registry.yarnpkg.com/@react-hook/resize-observer/-/resize-observer-1.2.6.tgz"; + sha512 = "DlBXtLSW0DqYYTW3Ft1/GQFZlTdKY5VAFIC4+km6IK5NiPPDFchGbEJm1j6pSgMqPRHbUQgHJX7RaR76ic1LWA=="; + }; + } { name = "https___registry.npmjs.org__rollup_pluginutils___pluginutils_4.2.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org__rollup_pluginutils___pluginutils_4.2.1.tgz"; - url = "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz"; + url = "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz"; sha512 = "iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ=="; }; } @@ -443,7 +469,7 @@ name = "https___registry.npmjs.org__types_prop_types___prop_types_15.7.5.tgz"; path = fetchurl { name = "https___registry.npmjs.org__types_prop_types___prop_types_15.7.5.tgz"; - url = "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz"; + url = "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz"; sha512 = "JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="; }; } @@ -451,7 +477,7 @@ name = "https___registry.npmjs.org__types_react_dom___react_dom_17.0.18.tgz"; path = fetchurl { name = "https___registry.npmjs.org__types_react_dom___react_dom_17.0.18.tgz"; - url = "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.18.tgz"; + url = "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.18.tgz"; sha512 = "rLVtIfbwyur2iFKykP2w0pl/1unw26b5td16d5xMgp7/yjTHomkyxPYChFoCr/FtEX1lN9wY6lFj1qvKdS5kDw=="; }; } @@ -459,7 +485,7 @@ name = "https___registry.npmjs.org__types_react___react_17.0.53.tgz"; path = fetchurl { name = "https___registry.npmjs.org__types_react___react_17.0.53.tgz"; - url = "https://registry.npmjs.org/@types/react/-/react-17.0.53.tgz"; + url = "https://registry.npmjs.org/@types/react/-/react-17.0.53.tgz"; sha512 = "1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw=="; }; } @@ -467,15 +493,23 @@ name = "https___registry.npmjs.org__types_scheduler___scheduler_0.16.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org__types_scheduler___scheduler_0.16.2.tgz"; - url = "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz"; + url = "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz"; sha512 = "hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="; }; } + { + name = "_types_uuid___uuid_8.3.4.tgz"; + path = fetchurl { + name = "_types_uuid___uuid_8.3.4.tgz"; + url = "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz"; + sha512 = "c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw=="; + }; + } { name = "https___registry.npmjs.org__types_vscode_webview___vscode_webview_1.57.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org__types_vscode_webview___vscode_webview_1.57.1.tgz"; - url = "https://registry.npmjs.org/@types/vscode-webview/-/vscode-webview-1.57.1.tgz"; + url = "https://registry.npmjs.org/@types/vscode-webview/-/vscode-webview-1.57.1.tgz"; sha512 = "ghW5SfuDmsGDS2A4xkvGsLwDRNc3Vj5rS6rPOyPm/IryZuf3wceZKxgYaUoW+k9f0f/CB7y2c1rRsdOWZWn0PQ=="; }; } @@ -483,7 +517,7 @@ name = "https___registry.npmjs.org__vitejs_plugin_react___plugin_react_1.3.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org__vitejs_plugin_react___plugin_react_1.3.2.tgz"; - url = "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-1.3.2.tgz"; + url = "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-1.3.2.tgz"; sha512 = "aurBNmMo0kz1O4qRoY+FM4epSA39y3ShWGuqfLRA/3z0oEJAdtoSfgA3aO98/PCCHAqMaduLxIxErWrVKIFzXA=="; }; } @@ -491,7 +525,7 @@ name = "https___registry.npmjs.org__vscode_codicons___codicons_0.0.32.tgz"; path = fetchurl { name = "https___registry.npmjs.org__vscode_codicons___codicons_0.0.32.tgz"; - url = "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.32.tgz"; + url = "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.32.tgz"; sha512 = "3lgSTWhAzzWN/EPURoY4ZDBEA80OPmnaknNujA3qnI4Iu7AONWd9xF3iE4L+4prIe8E3TUnLQ4pxoaFTEEZNwg=="; }; } @@ -499,7 +533,7 @@ name = "https___registry.npmjs.org__vscode_webview_ui_toolkit___webview_ui_toolkit_1.2.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org__vscode_webview_ui_toolkit___webview_ui_toolkit_1.2.1.tgz"; - url = "https://registry.npmjs.org/@vscode/webview-ui-toolkit/-/webview-ui-toolkit-1.2.1.tgz"; + url = "https://registry.npmjs.org/@vscode/webview-ui-toolkit/-/webview-ui-toolkit-1.2.1.tgz"; sha512 = "ZpVqLxoFWWk8mmAN7jr1v9yjD6NGBIoflAedNSusmaViqwHZ2znKBwAwcumLOlNlqmST6QMkiTVys7O8rzfd0w=="; }; } @@ -507,7 +541,7 @@ name = "https___registry.npmjs.org_ansi_styles___ansi_styles_3.2.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org_ansi_styles___ansi_styles_3.2.1.tgz"; - url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"; + url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"; sha512 = "VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="; }; } @@ -515,7 +549,7 @@ name = "https___registry.npmjs.org_browserslist___browserslist_4.21.4.tgz"; path = fetchurl { name = "https___registry.npmjs.org_browserslist___browserslist_4.21.4.tgz"; - url = "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz"; + url = "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz"; sha512 = "CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw=="; }; } @@ -523,7 +557,7 @@ name = "https___registry.npmjs.org_caniuse_lite___caniuse_lite_1.0.30001447.tgz"; path = fetchurl { name = "https___registry.npmjs.org_caniuse_lite___caniuse_lite_1.0.30001447.tgz"; - url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001447.tgz"; + url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001447.tgz"; sha512 = "bdKU1BQDPeEXe9A39xJnGtY0uRq/z5osrnXUw0TcK+EYno45Y+U7QU9HhHEyzvMDffpYadFXi3idnSNkcwLkTw=="; }; } @@ -531,7 +565,7 @@ name = "https___registry.npmjs.org_chalk___chalk_2.4.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org_chalk___chalk_2.4.2.tgz"; - url = "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"; + url = "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"; sha512 = "Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="; }; } @@ -539,7 +573,7 @@ name = "https___registry.npmjs.org_color_convert___color_convert_1.9.3.tgz"; path = fetchurl { name = "https___registry.npmjs.org_color_convert___color_convert_1.9.3.tgz"; - url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"; + url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"; sha512 = "QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="; }; } @@ -547,7 +581,7 @@ name = "https___registry.npmjs.org_color_name___color_name_1.1.3.tgz"; path = fetchurl { name = "https___registry.npmjs.org_color_name___color_name_1.1.3.tgz"; - url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"; + url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"; sha512 = "72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="; }; } @@ -555,7 +589,7 @@ name = "https___registry.npmjs.org_convert_source_map___convert_source_map_1.9.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org_convert_source_map___convert_source_map_1.9.0.tgz"; - url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz"; + url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz"; sha512 = "ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="; }; } @@ -563,7 +597,7 @@ name = "https___registry.npmjs.org_csstype___csstype_3.1.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org_csstype___csstype_3.1.1.tgz"; - url = "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz"; + url = "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz"; sha512 = "DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="; }; } @@ -571,7 +605,7 @@ name = "https___registry.npmjs.org_debug___debug_4.3.4.tgz"; path = fetchurl { name = "https___registry.npmjs.org_debug___debug_4.3.4.tgz"; - url = "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"; + url = "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"; sha512 = "PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="; }; } @@ -579,7 +613,7 @@ name = "https___registry.npmjs.org_electron_to_chromium___electron_to_chromium_1.4.284.tgz"; path = fetchurl { name = "https___registry.npmjs.org_electron_to_chromium___electron_to_chromium_1.4.284.tgz"; - url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz"; + url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz"; sha512 = "M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="; }; } @@ -587,7 +621,7 @@ name = "esbuild_android_64___esbuild_android_64_0.14.54.tgz"; path = fetchurl { name = "esbuild_android_64___esbuild_android_64_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz"; sha512 = "Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ=="; }; } @@ -595,7 +629,7 @@ name = "esbuild_android_arm64___esbuild_android_arm64_0.14.54.tgz"; path = fetchurl { name = "esbuild_android_arm64___esbuild_android_arm64_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz"; sha512 = "F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg=="; }; } @@ -603,7 +637,7 @@ name = "esbuild_darwin_64___esbuild_darwin_64_0.14.54.tgz"; path = fetchurl { name = "esbuild_darwin_64___esbuild_darwin_64_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz"; sha512 = "jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug=="; }; } @@ -611,7 +645,7 @@ name = "esbuild_darwin_arm64___esbuild_darwin_arm64_0.14.54.tgz"; path = fetchurl { name = "esbuild_darwin_arm64___esbuild_darwin_arm64_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz"; sha512 = "OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw=="; }; } @@ -619,7 +653,7 @@ name = "esbuild_freebsd_64___esbuild_freebsd_64_0.14.54.tgz"; path = fetchurl { name = "esbuild_freebsd_64___esbuild_freebsd_64_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz"; sha512 = "OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg=="; }; } @@ -627,7 +661,7 @@ name = "esbuild_freebsd_arm64___esbuild_freebsd_arm64_0.14.54.tgz"; path = fetchurl { name = "esbuild_freebsd_arm64___esbuild_freebsd_arm64_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz"; sha512 = "sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q=="; }; } @@ -635,7 +669,7 @@ name = "esbuild_linux_32___esbuild_linux_32_0.14.54.tgz"; path = fetchurl { name = "esbuild_linux_32___esbuild_linux_32_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz"; sha512 = "1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw=="; }; } @@ -643,7 +677,7 @@ name = "https___registry.npmjs.org_esbuild_linux_64___esbuild_linux_64_0.14.54.tgz"; path = fetchurl { name = "https___registry.npmjs.org_esbuild_linux_64___esbuild_linux_64_0.14.54.tgz"; - url = "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz"; + url = "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz"; sha512 = "EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg=="; }; } @@ -651,7 +685,7 @@ name = "esbuild_linux_arm64___esbuild_linux_arm64_0.14.54.tgz"; path = fetchurl { name = "esbuild_linux_arm64___esbuild_linux_arm64_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz"; sha512 = "WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig=="; }; } @@ -659,7 +693,7 @@ name = "esbuild_linux_arm___esbuild_linux_arm_0.14.54.tgz"; path = fetchurl { name = "esbuild_linux_arm___esbuild_linux_arm_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz"; sha512 = "qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw=="; }; } @@ -667,7 +701,7 @@ name = "esbuild_linux_mips64le___esbuild_linux_mips64le_0.14.54.tgz"; path = fetchurl { name = "esbuild_linux_mips64le___esbuild_linux_mips64le_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz"; sha512 = "qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw=="; }; } @@ -675,7 +709,7 @@ name = "esbuild_linux_ppc64le___esbuild_linux_ppc64le_0.14.54.tgz"; path = fetchurl { name = "esbuild_linux_ppc64le___esbuild_linux_ppc64le_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz"; sha512 = "j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ=="; }; } @@ -683,7 +717,7 @@ name = "esbuild_linux_riscv64___esbuild_linux_riscv64_0.14.54.tgz"; path = fetchurl { name = "esbuild_linux_riscv64___esbuild_linux_riscv64_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz"; sha512 = "y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg=="; }; } @@ -691,7 +725,7 @@ name = "esbuild_linux_s390x___esbuild_linux_s390x_0.14.54.tgz"; path = fetchurl { name = "esbuild_linux_s390x___esbuild_linux_s390x_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz"; sha512 = "zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA=="; }; } @@ -699,7 +733,7 @@ name = "esbuild_netbsd_64___esbuild_netbsd_64_0.14.54.tgz"; path = fetchurl { name = "esbuild_netbsd_64___esbuild_netbsd_64_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz"; sha512 = "PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w=="; }; } @@ -707,7 +741,7 @@ name = "esbuild_openbsd_64___esbuild_openbsd_64_0.14.54.tgz"; path = fetchurl { name = "esbuild_openbsd_64___esbuild_openbsd_64_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz"; sha512 = "Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw=="; }; } @@ -715,7 +749,7 @@ name = "esbuild_sunos_64___esbuild_sunos_64_0.14.54.tgz"; path = fetchurl { name = "esbuild_sunos_64___esbuild_sunos_64_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz"; sha512 = "28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw=="; }; } @@ -723,7 +757,7 @@ name = "esbuild_windows_32___esbuild_windows_32_0.14.54.tgz"; path = fetchurl { name = "esbuild_windows_32___esbuild_windows_32_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz"; sha512 = "T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w=="; }; } @@ -731,7 +765,7 @@ name = "esbuild_windows_64___esbuild_windows_64_0.14.54.tgz"; path = fetchurl { name = "esbuild_windows_64___esbuild_windows_64_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz"; sha512 = "AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ=="; }; } @@ -739,7 +773,7 @@ name = "esbuild_windows_arm64___esbuild_windows_arm64_0.14.54.tgz"; path = fetchurl { name = "esbuild_windows_arm64___esbuild_windows_arm64_0.14.54.tgz"; - url = "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz"; + url = "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz"; sha512 = "M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg=="; }; } @@ -747,7 +781,7 @@ name = "https___registry.npmjs.org_esbuild___esbuild_0.14.54.tgz"; path = fetchurl { name = "https___registry.npmjs.org_esbuild___esbuild_0.14.54.tgz"; - url = "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz"; + url = "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz"; sha512 = "Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA=="; }; } @@ -755,7 +789,7 @@ name = "https___registry.npmjs.org_escalade___escalade_3.1.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org_escalade___escalade_3.1.1.tgz"; - url = "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"; + url = "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"; sha512 = "k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="; }; } @@ -763,7 +797,7 @@ name = "https___registry.npmjs.org_escape_string_regexp___escape_string_regexp_1.0.5.tgz"; path = fetchurl { name = "https___registry.npmjs.org_escape_string_regexp___escape_string_regexp_1.0.5.tgz"; - url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"; + url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"; sha512 = "vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="; }; } @@ -771,7 +805,7 @@ name = "https___registry.npmjs.org_estree_walker___estree_walker_2.0.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org_estree_walker___estree_walker_2.0.2.tgz"; - url = "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz"; + url = "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz"; sha512 = "Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="; }; } @@ -779,7 +813,7 @@ name = "https___registry.npmjs.org_exenv_es6___exenv_es6_1.1.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org_exenv_es6___exenv_es6_1.1.1.tgz"; - url = "https://registry.npmjs.org/exenv-es6/-/exenv-es6-1.1.1.tgz"; + url = "https://registry.npmjs.org/exenv-es6/-/exenv-es6-1.1.1.tgz"; sha512 = "vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ=="; }; } @@ -787,7 +821,7 @@ name = "fsevents___fsevents_2.3.2.tgz"; path = fetchurl { name = "fsevents___fsevents_2.3.2.tgz"; - url = "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz"; + url = "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz"; sha512 = "xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="; }; } @@ -795,7 +829,7 @@ name = "https___registry.npmjs.org_function_bind___function_bind_1.1.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org_function_bind___function_bind_1.1.1.tgz"; - url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"; + url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"; sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="; }; } @@ -803,7 +837,7 @@ name = "https___registry.npmjs.org_gensync___gensync_1.0.0_beta.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org_gensync___gensync_1.0.0_beta.2.tgz"; - url = "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz"; + url = "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz"; sha512 = "3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="; }; } @@ -811,7 +845,7 @@ name = "https___registry.npmjs.org_globals___globals_11.12.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org_globals___globals_11.12.0.tgz"; - url = "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"; + url = "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"; sha512 = "WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="; }; } @@ -819,7 +853,7 @@ name = "https___registry.npmjs.org_has_flag___has_flag_3.0.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org_has_flag___has_flag_3.0.0.tgz"; - url = "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"; + url = "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"; sha512 = "sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="; }; } @@ -827,7 +861,7 @@ name = "https___registry.npmjs.org_has___has_1.0.3.tgz"; path = fetchurl { name = "https___registry.npmjs.org_has___has_1.0.3.tgz"; - url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz"; + url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz"; sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw=="; }; } @@ -835,7 +869,7 @@ name = "https___registry.npmjs.org_is_core_module___is_core_module_2.11.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org_is_core_module___is_core_module_2.11.0.tgz"; - url = "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz"; + url = "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz"; sha512 = "RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw=="; }; } @@ -843,7 +877,7 @@ name = "https___registry.npmjs.org_js_tokens___js_tokens_4.0.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org_js_tokens___js_tokens_4.0.0.tgz"; - url = "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"; + url = "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"; sha512 = "RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="; }; } @@ -851,7 +885,7 @@ name = "https___registry.npmjs.org_jsesc___jsesc_2.5.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org_jsesc___jsesc_2.5.2.tgz"; - url = "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"; + url = "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"; sha512 = "OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="; }; } @@ -859,7 +893,7 @@ name = "https___registry.npmjs.org_json5___json5_2.2.3.tgz"; path = fetchurl { name = "https___registry.npmjs.org_json5___json5_2.2.3.tgz"; - url = "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz"; + url = "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz"; sha512 = "XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="; }; } @@ -867,7 +901,7 @@ name = "https___registry.npmjs.org_loose_envify___loose_envify_1.4.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org_loose_envify___loose_envify_1.4.0.tgz"; - url = "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"; + url = "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"; sha512 = "lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="; }; } @@ -875,7 +909,7 @@ name = "https___registry.npmjs.org_lru_cache___lru_cache_5.1.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org_lru_cache___lru_cache_5.1.1.tgz"; - url = "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz"; + url = "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz"; sha512 = "KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="; }; } @@ -883,7 +917,7 @@ name = "https___registry.npmjs.org_ms___ms_2.1.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org_ms___ms_2.1.2.tgz"; - url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"; + url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"; sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="; }; } @@ -891,7 +925,7 @@ name = "nanoid___nanoid_3.3.6.tgz"; path = fetchurl { name = "nanoid___nanoid_3.3.6.tgz"; - url = "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz"; + url = "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz"; sha512 = "BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="; }; } @@ -899,7 +933,7 @@ name = "https___registry.npmjs.org_node_releases___node_releases_2.0.8.tgz"; path = fetchurl { name = "https___registry.npmjs.org_node_releases___node_releases_2.0.8.tgz"; - url = "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz"; + url = "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz"; sha512 = "dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A=="; }; } @@ -907,7 +941,7 @@ name = "https___registry.npmjs.org_object_assign___object_assign_4.1.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org_object_assign___object_assign_4.1.1.tgz"; - url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"; + url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"; sha512 = "rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="; }; } @@ -915,7 +949,7 @@ name = "https___registry.npmjs.org_path_parse___path_parse_1.0.7.tgz"; path = fetchurl { name = "https___registry.npmjs.org_path_parse___path_parse_1.0.7.tgz"; - url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"; + url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"; sha512 = "LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="; }; } @@ -923,7 +957,7 @@ name = "https___registry.npmjs.org_picocolors___picocolors_1.0.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org_picocolors___picocolors_1.0.0.tgz"; - url = "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"; + url = "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"; sha512 = "1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="; }; } @@ -931,7 +965,7 @@ name = "https___registry.npmjs.org_picomatch___picomatch_2.3.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org_picomatch___picomatch_2.3.1.tgz"; - url = "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"; + url = "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"; sha512 = "JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="; }; } @@ -939,7 +973,7 @@ name = "postcss___postcss_8.4.31.tgz"; path = fetchurl { name = "postcss___postcss_8.4.31.tgz"; - url = "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz"; + url = "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz"; sha512 = "PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="; }; } @@ -947,15 +981,23 @@ name = "https___registry.npmjs.org_react_dom___react_dom_17.0.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org_react_dom___react_dom_17.0.2.tgz"; - url = "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz"; + url = "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz"; sha512 = "s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA=="; }; } + { + name = "react_hook___react_hook_0.0.1.tgz"; + path = fetchurl { + name = "react_hook___react_hook_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/react-hook/-/react-hook-0.0.1.tgz"; + sha512 = "2/Guf88/dGyFgUT7QDtBJ1l7V5yqTcAHlNRIZNTu2xg0KkDjaiYZp79ah49NDaLMI/J7voWcKLU8wMONG4A/1g=="; + }; + } { name = "react_icons___react_icons_4.7.1.tgz"; path = fetchurl { name = "react_icons___react_icons_4.7.1.tgz"; - url = "https://registry.yarnpkg.com/react-icons/-/react-icons-4.7.1.tgz"; + url = "https://registry.yarnpkg.com/react-icons/-/react-icons-4.7.1.tgz"; sha512 = "yHd3oKGMgm7zxo3EA7H2n7vxSoiGmHk5t6Ou4bXsfcgWyhfDKMpyKfhHR6Bjnn63c+YXBLBPUql9H4wPJM6sXw=="; }; } @@ -963,7 +1005,7 @@ name = "https___registry.npmjs.org_react_refresh___react_refresh_0.13.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org_react_refresh___react_refresh_0.13.0.tgz"; - url = "https://registry.npmjs.org/react-refresh/-/react-refresh-0.13.0.tgz"; + url = "https://registry.npmjs.org/react-refresh/-/react-refresh-0.13.0.tgz"; sha512 = "XP8A9BT0CpRBD+NYLLeIhld/RqG9+gktUjW1FkE+Vm7OCinbG1SshcK5tb9ls4kzvjZr9mOQc7HYgBngEyPAXg=="; }; } @@ -971,7 +1013,7 @@ name = "https___registry.npmjs.org_react___react_17.0.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org_react___react_17.0.2.tgz"; - url = "https://registry.npmjs.org/react/-/react-17.0.2.tgz"; + url = "https://registry.npmjs.org/react/-/react-17.0.2.tgz"; sha512 = "gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA=="; }; } @@ -979,7 +1021,7 @@ name = "https___registry.npmjs.org_resolve___resolve_1.22.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org_resolve___resolve_1.22.1.tgz"; - url = "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz"; + url = "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz"; sha512 = "nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw=="; }; } @@ -987,7 +1029,7 @@ name = "https___registry.npmjs.org_rollup___rollup_2.77.3.tgz"; path = fetchurl { name = "https___registry.npmjs.org_rollup___rollup_2.77.3.tgz"; - url = "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz"; + url = "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz"; sha512 = "/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g=="; }; } @@ -995,7 +1037,7 @@ name = "https___registry.npmjs.org_scheduler___scheduler_0.20.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org_scheduler___scheduler_0.20.2.tgz"; - url = "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz"; + url = "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz"; sha512 = "2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ=="; }; } @@ -1003,7 +1045,7 @@ name = "semver___semver_6.3.1.tgz"; path = fetchurl { name = "semver___semver_6.3.1.tgz"; - url = "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz"; sha512 = "BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="; }; } @@ -1011,7 +1053,7 @@ name = "https___registry.npmjs.org_source_map_js___source_map_js_1.0.2.tgz"; path = fetchurl { name = "https___registry.npmjs.org_source_map_js___source_map_js_1.0.2.tgz"; - url = "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"; + url = "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"; sha512 = "R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="; }; } @@ -1019,7 +1061,7 @@ name = "https___registry.npmjs.org_supports_color___supports_color_5.5.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org_supports_color___supports_color_5.5.0.tgz"; - url = "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"; + url = "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"; sha512 = "QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="; }; } @@ -1027,7 +1069,7 @@ name = "https___registry.npmjs.org_supports_preserve_symlinks_flag___supports_preserve_symlinks_flag_1.0.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org_supports_preserve_symlinks_flag___supports_preserve_symlinks_flag_1.0.0.tgz"; - url = "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"; + url = "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"; sha512 = "ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="; }; } @@ -1035,7 +1077,7 @@ name = "https___registry.npmjs.org_tabbable___tabbable_5.3.3.tgz"; path = fetchurl { name = "https___registry.npmjs.org_tabbable___tabbable_5.3.3.tgz"; - url = "https://registry.npmjs.org/tabbable/-/tabbable-5.3.3.tgz"; + url = "https://registry.npmjs.org/tabbable/-/tabbable-5.3.3.tgz"; sha512 = "QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA=="; }; } @@ -1043,7 +1085,7 @@ name = "https___registry.npmjs.org_to_fast_properties___to_fast_properties_2.0.0.tgz"; path = fetchurl { name = "https___registry.npmjs.org_to_fast_properties___to_fast_properties_2.0.0.tgz"; - url = "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz"; + url = "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz"; sha512 = "/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="; }; } @@ -1051,7 +1093,7 @@ name = "https___registry.npmjs.org_tslib___tslib_1.14.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org_tslib___tslib_1.14.1.tgz"; - url = "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"; + url = "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"; sha512 = "Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="; }; } @@ -1059,7 +1101,7 @@ name = "https___registry.npmjs.org_typescript___typescript_4.9.4.tgz"; path = fetchurl { name = "https___registry.npmjs.org_typescript___typescript_4.9.4.tgz"; - url = "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz"; + url = "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz"; sha512 = "Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg=="; }; } @@ -1067,15 +1109,31 @@ name = "https___registry.npmjs.org_update_browserslist_db___update_browserslist_db_1.0.10.tgz"; path = fetchurl { name = "https___registry.npmjs.org_update_browserslist_db___update_browserslist_db_1.0.10.tgz"; - url = "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz"; + url = "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz"; sha512 = "OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ=="; }; } + { + name = "uuid___uuid_8.3.2.tgz"; + path = fetchurl { + name = "uuid___uuid_8.3.2.tgz"; + url = "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz"; + sha512 = "+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="; + }; + } + { + name = "uuidv4___uuidv4_6.2.13.tgz"; + path = fetchurl { + name = "uuidv4___uuidv4_6.2.13.tgz"; + url = "https://registry.yarnpkg.com/uuidv4/-/uuidv4-6.2.13.tgz"; + sha512 = "AXyzMjazYB3ovL3q051VLH06Ixj//Knx7QnUSi1T//Ie3io6CpsPu9nVMOx5MoLWh6xV0B9J0hIaxungxXUbPQ=="; + }; + } { name = "vite___vite_2.9.17.tgz"; path = fetchurl { name = "vite___vite_2.9.17.tgz"; - url = "https://registry.yarnpkg.com/vite/-/vite-2.9.17.tgz"; + url = "https://registry.yarnpkg.com/vite/-/vite-2.9.17.tgz"; sha512 = "XxcRzra6d7xrKXH66jZUgb+srThoPu+TLJc06GifUyKq9JmjHkc1Numc8ra0h56rju2jfVWw3B3fs5l3OFMvUw=="; }; } @@ -1083,7 +1141,7 @@ name = "https___registry.npmjs.org_yallist___yallist_3.1.1.tgz"; path = fetchurl { name = "https___registry.npmjs.org_yallist___yallist_3.1.1.tgz"; - url = "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz"; + url = "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz"; sha512 = "a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="; }; }