diff --git a/govtool/frontend/.env.example b/govtool/frontend/.env.example
index 2489d65a0..9fad9f100 100644
--- a/govtool/frontend/.env.example
+++ b/govtool/frontend/.env.example
@@ -7,6 +7,7 @@ VITE_GTM_ID=""
VITE_IS_DEV=true
VITE_USERSNAP_SPACE_API_KEY=""
VITE_IS_PROPOSAL_DISCUSSION_FORUM_ENABLED='true'
+VITE_IS_GOVERNANCE_OUTCOMES_PILLAR_ENABLED=true
VITE_PDF_API_URL=""
VITE_IPFS_GATEWAY=""
VITE_IPFS_PROJECT_ID=""
\ No newline at end of file
diff --git a/govtool/frontend/package.json b/govtool/frontend/package.json
index 97fa61f31..94d3c5254 100644
--- a/govtool/frontend/package.json
+++ b/govtool/frontend/package.json
@@ -27,6 +27,7 @@
"@emotion/styled": "^11.11.0",
"@emurgo/cardano-serialization-lib-asmjs": "^12.1.1",
"@hookform/resolvers": "^3.3.1",
+ "@intersect.mbo/govtool-outcomes-pillar-ui": "^1.0.0-beta.1",
"@intersect.mbo/intersectmbo.org-icons-set": "^1.0.8",
"@intersect.mbo/pdf-ui": "^0.5.6",
"@mui/icons-material": "^5.14.3",
diff --git a/govtool/frontend/src/App.tsx b/govtool/frontend/src/App.tsx
index 553d5295f..38fa605a5 100644
--- a/govtool/frontend/src/App.tsx
+++ b/govtool/frontend/src/App.tsx
@@ -2,7 +2,7 @@ import { useCallback, useEffect } from "react";
import { Route, Routes, useNavigate } from "react-router-dom";
import { Modal, ScrollToTop } from "@atoms";
-import { PATHS, PDF_PATHS } from "@consts";
+import { PATHS, PDF_PATHS, OUTCOMES_PATHS, USER_PATHS } from "@consts";
import { useCardano, useFeatureFlag, useModal } from "@context";
import { useWalletConnectionListener } from "@hooks";
import {
@@ -39,9 +39,13 @@ import {
import { PublicRoute } from "./pages/PublicRoute";
import { TopBanners } from "./components/organisms/TopBanners";
import { DashboardHome } from "./pages/DashboardHome";
+import { GovernanceActionOutComesPillar } from "./pages/GovernanceActionOutComes";
export default () => {
- const { isProposalDiscussionForumEnabled } = useFeatureFlag();
+ const {
+ isProposalDiscussionForumEnabled,
+ isGovernanceOutcomesPillarEnabled,
+ } = useFeatureFlag();
const { enable, isEnabled } = useCardano();
const navigate = useNavigate();
const { modal, openModal, modals } = useModal();
@@ -111,6 +115,18 @@ export default () => {
element={}
/>
)}
+ {isGovernanceOutcomesPillarEnabled && (
+ <>
+ }
+ />
+ }
+ />
+ >
+ )}
}
diff --git a/govtool/frontend/src/components/organisms/DashboardDrawerMobile.tsx b/govtool/frontend/src/components/organisms/DashboardDrawerMobile.tsx
index 00bb80cec..ac88387cc 100644
--- a/govtool/frontend/src/components/organisms/DashboardDrawerMobile.tsx
+++ b/govtool/frontend/src/components/organisms/DashboardDrawerMobile.tsx
@@ -18,7 +18,7 @@ export const DashboardDrawerMobile = ({
isDrawerOpen,
setIsDrawerOpen,
}: DashboardDrawerMobileProps) => {
- const { isProposalDiscussionForumEnabled } = useFeatureFlag();
+ const { isProposalDiscussionForumEnabled, isGovernanceOutcomesPillarEnabled } = useFeatureFlag();
const { screenWidth } = useScreenDimension();
const { voter } = useGetVoterInfo();
@@ -75,26 +75,60 @@ export const DashboardDrawerMobile = ({
{CONNECTED_NAV_ITEMS.map((navItem) => {
- if (
- !isProposalDiscussionForumEnabled &&
- navItem.dataTestId === "proposal-discussion-link"
- ) {
- return null;
- }
-
return (
{
- // TODO: Refine if it is needed to remove this eslint-disable
- // eslint-disable-next-line no-unused-expressions
- navItem.newTabLink && openInNewTab(navItem.newTabLink);
+ if (navItem.newTabLink) {
+ openInNewTab(navItem.newTabLink);
+ }
setIsDrawerOpen(false);
}}
isConnectWallet
/>
+ {navItem.childNavItems && (
+
+ {navItem.childNavItems.map((childItem) => {
+ if (
+ !isProposalDiscussionForumEnabled &&
+ childItem.dataTestId === "proposal-discussion-link"
+ ) {
+ return null;
+ }
+
+ if (
+ !isGovernanceOutcomesPillarEnabled &&
+ (childItem.dataTestId === "governance-actions-voted-by-me-link" ||
+ childItem.dataTestId === "governance-actions-outcomes-link")
+ ) {
+ return null;
+ }
+
+ return (
+ {
+ if (childItem.newTabLink) {
+ openInNewTab(childItem.newTabLink);
+ }
+ setIsDrawerOpen(false);
+ }}
+ isConnectWallet
+ />
+ );
+ })}
+
+ )}
);
})}
diff --git a/govtool/frontend/src/components/organisms/Drawer.tsx b/govtool/frontend/src/components/organisms/Drawer.tsx
index 02b74ae1e..87a8d50ab 100644
--- a/govtool/frontend/src/components/organisms/Drawer.tsx
+++ b/govtool/frontend/src/components/organisms/Drawer.tsx
@@ -9,7 +9,7 @@ import { WalletInfoCard, DRepInfoCard } from "@molecules";
import { openInNewTab } from "@utils";
export const Drawer = () => {
- const { isProposalDiscussionForumEnabled } = useFeatureFlag();
+ const { isProposalDiscussionForumEnabled, isGovernanceOutcomesPillarEnabled } = useFeatureFlag();
const { voter } = useGetVoterInfo();
return (
@@ -47,13 +47,6 @@ export const Drawer = () => {
rowGap={2}
>
{CONNECTED_NAV_ITEMS.map((navItem) => {
- if (
- !isProposalDiscussionForumEnabled &&
- navItem.dataTestId === "proposal-discussion-link"
- ) {
- return null;
- }
-
return (
{
: undefined
}
/>
+ {navItem.childNavItems && (
+
+ {navItem.childNavItems.map((childItem) => {
+ if (
+ !isProposalDiscussionForumEnabled &&
+ childItem.dataTestId === "proposal-discussion-link"
+ ) {
+ return null;
+ }
+
+ if (
+ !isGovernanceOutcomesPillarEnabled &&
+ (childItem.dataTestId === "governance-actions-voted-by-me-link" ||
+ childItem.dataTestId === "governance-actions-outcomes-link")
+ ) {
+ return null;
+ }
+
+ return (
+ openInNewTab(childItem.newTabLink!)
+ : undefined
+ }
+ />
+ );
+ })}
+
+ )}
);
})}
diff --git a/govtool/frontend/src/consts/navItems.tsx b/govtool/frontend/src/consts/navItems.tsx
index 74795d562..922f2b360 100644
--- a/govtool/frontend/src/consts/navItems.tsx
+++ b/govtool/frontend/src/consts/navItems.tsx
@@ -4,7 +4,7 @@ import { theme } from "@/theme";
import { ICONS } from "./icons";
import { LINKS } from "./links";
-import { PATHS, PDF_PATHS } from "./paths";
+import { PATHS, PDF_PATHS, OUTCOMES_PATHS, USER_PATHS } from "./paths";
export const NAV_ITEMS = [
{
@@ -59,6 +59,7 @@ export const CONNECTED_NAV_ITEMS = [
navTo: PATHS.dashboardDRepDirectory,
activeIcon: ICONS.dRepDirectoryActiveIcon,
icon: ICONS.dRepDirectoryIcon,
+ newTabLink: null,
},
{
dataTestId: "governance-actions-link",
@@ -67,28 +68,54 @@ export const CONNECTED_NAV_ITEMS = [
activeIcon: ICONS.governanceActionsActiveIcon,
icon: ICONS.governanceActionsIcon,
newTabLink: null,
- },
- {
- dataTestId: "proposal-discussion-link",
- label: i18n.t("proposalDiscussion.title"),
- navTo: PDF_PATHS.proposalDiscussion,
- activeIcon: (
-
- ),
- icon: (
-
- ),
- newTabLink: null,
+ childNavItems: [
+ {
+ dataTestId: "proposal-discussion-link",
+ label: i18n.t("proposalDiscussion.title"),
+ navTo: PDF_PATHS.proposalDiscussion,
+ activeIcon: (
+
+ ),
+ icon: (
+
+ ),
+ newTabLink: null,
+ },
+ {
+ dataTestId: "governance-actions-live-voting-link",
+ label: i18n.t("govActions.liveVoting.title"),
+ navTo: OUTCOMES_PATHS.governanceActionsLiveVoting,
+ activeIcon: ICONS.governanceActionsActiveIcon,
+ icon: ICONS.governanceActionsIcon,
+ newTabLink: null,
+ },
+ {
+ dataTestId: "governance-actions-outcomes-link",
+ label: i18n.t("govActions.outcomes.title"),
+ navTo: OUTCOMES_PATHS.governanceActionsOutcomes,
+ activeIcon: ICONS.governanceActionsActiveIcon,
+ icon: ICONS.governanceActionsIcon,
+ newTabLink: null,
+ },
+ {
+ dataTestId: "governance-actions-voted-by-me-link",
+ label: i18n.t("govActions.votedByMe.title"),
+ navTo: USER_PATHS.governanceActionsVotedByMe,
+ activeIcon: ICONS.governanceActionsActiveIcon,
+ icon: ICONS.governanceActionsIcon,
+ newTabLink: null,
+ },
+ ],
},
{
dataTestId: "guides-link",
diff --git a/govtool/frontend/src/consts/paths.ts b/govtool/frontend/src/consts/paths.ts
index 296b61d7e..a392aeb12 100644
--- a/govtool/frontend/src/consts/paths.ts
+++ b/govtool/frontend/src/consts/paths.ts
@@ -31,3 +31,13 @@ export const PDF_PATHS = {
proposalDiscussionProposal: "/proposal_discussion/:id",
proposalDiscussionPropose: "/proposal_discussion/propose",
};
+
+export const USER_PATHS = {
+ governanceActionsVotedByMe: "/my/votes_and_favorites",
+};
+
+export const OUTCOMES_PATHS = {
+ governanceActionsOutcomes: "/outcomes",
+ governanceActionOutcomes: "/outcomes/governance_actions/:id",
+ governanceActionsLiveVoting: "/connected/governance_actions",
+};
\ No newline at end of file
diff --git a/govtool/frontend/src/context/featureFlag.tsx b/govtool/frontend/src/context/featureFlag.tsx
index 23b1a9ecd..b45eacaa5 100644
--- a/govtool/frontend/src/context/featureFlag.tsx
+++ b/govtool/frontend/src/context/featureFlag.tsx
@@ -15,6 +15,7 @@ import { useAppContext } from "./appContext";
*/
type FeatureFlagContextType = {
isProposalDiscussionForumEnabled: boolean;
+ isGovernanceOutcomesPillarEnabled: boolean;
isVotingOnGovernanceActionEnabled: (
governanceActionType: GovernanceActionType,
) => boolean;
@@ -33,6 +34,7 @@ type FeatureFlagContextType = {
const FeatureFlagContext = createContext({
isProposalDiscussionForumEnabled: false,
+ isGovernanceOutcomesPillarEnabled: false,
isVotingOnGovernanceActionEnabled: () => false,
areDRepVoteTotalsDisplayed: () => false,
areSPOVoteTotalsDisplayed: () => false,
@@ -129,6 +131,10 @@ const FeatureFlagProvider = ({ children }: PropsWithChildren) => {
import.meta.env.VITE_IS_PROPOSAL_DISCUSSION_FORUM_ENABLED === "true" ||
import.meta.env.VITE_IS_PROPOSAL_DISCUSSION_FORUM_ENABLED === true ||
false,
+ isGovernanceOutcomesPillarEnabled:
+ import.meta.env.VITE_IS_GOVERNANCE_OUTCOMES_PILLAR_ENABLED === "true" ||
+ import.meta.env.VITE_IS_GOVERNANCE_OUTCOMES_PILLAR_ENABLED === true ||
+ false,
isVotingOnGovernanceActionEnabled,
areDRepVoteTotalsDisplayed,
areSPOVoteTotalsDisplayed,
diff --git a/govtool/frontend/src/i18n/locales/en.json b/govtool/frontend/src/i18n/locales/en.json
index d3faf4074..75b45a80d 100644
--- a/govtool/frontend/src/i18n/locales/en.json
+++ b/govtool/frontend/src/i18n/locales/en.json
@@ -455,6 +455,18 @@
"title": "Info Action",
"label": "Info Action"
}
+ },
+ "liveVoting": {
+ "title": "Live Voting",
+ "label": "Live Voting"
+ },
+ "outcomes": {
+ "title": "Outcomes",
+ "label": "Outcomes"
+ },
+ "votedByMe": {
+ "title": "Voted by me",
+ "label": "Voted by me"
}
},
"hero": {
diff --git a/govtool/frontend/src/pages/Dashboard.tsx b/govtool/frontend/src/pages/Dashboard.tsx
index 18f7a504b..77d9181d7 100644
--- a/govtool/frontend/src/pages/Dashboard.tsx
+++ b/govtool/frontend/src/pages/Dashboard.tsx
@@ -19,12 +19,18 @@ export const Dashboard = () => {
const getPageTitle = (path: string) => {
if (path === PATHS.dashboard) return t("dashboard.title");
- return (
- Object.values(CONNECTED_NAV_ITEMS).find(({ navTo }) =>
- pathname.startsWith(navTo),
- )?.label ?? ""
- );
+ return findNavItem(CONNECTED_NAV_ITEMS, path) ?? "";
};
+
+ const findNavItem = (items: NavItem[], targetPath: string): string | null => (
+ items.reduce((result, item) => (
+ result ?? (
+ targetPath === item.navTo
+ ? item.label
+ : (item.childNavItems ? findNavItem(item.childNavItems, targetPath) : null)
+ )
+ ), null)
+ );
useEffect(() => {
if (divRef.current && pathname !== PATHS.dashboardGovernanceActions) {
diff --git a/govtool/frontend/src/pages/GovernanceActionOutComes.tsx b/govtool/frontend/src/pages/GovernanceActionOutComes.tsx
new file mode 100644
index 000000000..62b389343
--- /dev/null
+++ b/govtool/frontend/src/pages/GovernanceActionOutComes.tsx
@@ -0,0 +1,49 @@
+import { Footer, TopNav } from "@/components/organisms";
+import { useCardano } from "@/context";
+import { useScreenDimension } from "@/hooks";
+import Outcomes from "@intersect.mbo/govtool-outcomes-pillar-ui";
+import { Box, CircularProgress } from "@mui/material";
+import { Suspense } from "react";
+
+export const GovernanceActionOutComesPillar = () => {
+ const { pagePadding } = useScreenDimension();
+ const { ...context } = useCardano();
+ return (
+
+ {!context.isEnabled && }
+
+
+
+
+ }
+ >
+
+
+
+ {!context.isEnabled && }
+
+ );
+};
diff --git a/govtool/frontend/src/types/global.d.ts b/govtool/frontend/src/types/global.d.ts
index bc7222156..567ca02ef 100644
--- a/govtool/frontend/src/types/global.d.ts
+++ b/govtool/frontend/src/types/global.d.ts
@@ -63,4 +63,14 @@ declare global {
label: string;
uri: string;
};
+
+ interface NavItem {
+ dataTestId: string;
+ label: string;
+ navTo: string;
+ activeIcon: JSX.Element | string;
+ icon: JSX.Element | string;
+ newTabLink: string | null;
+ childNavItems?: NavItem[];
+ }
}
diff --git a/govtool/frontend/yarn.lock b/govtool/frontend/yarn.lock
index 9032e4f42..005c381d3 100644
--- a/govtool/frontend/yarn.lock
+++ b/govtool/frontend/yarn.lock
@@ -1466,6 +1466,14 @@
resolved "https://registry.npmjs.org/@inquirer/type/-/type-3.0.1.tgz"
integrity sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==
+"@intersect.mbo/govtool-outcomes-pillar-ui@^1.0.0-beta.1":
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/@intersect.mbo/govtool-outcomes-pillar-ui/-/govtool-outcomes-pillar-ui-1.0.7.tgz#3db52ec87d7c26707ab6e9197b78d28d33a17465"
+ integrity sha512-I214XRhLfrQUWmfy8XfoCZDjtz7kWB2qf5/Fh5Jh/QfJ95H+AkO4R3jWvCAwN3apjKy5nhgWchCgD09464EovQ==
+ dependencies:
+ rollup-plugin-livereload "^2.0.5"
+ rollup-plugin-serve "^1.1.1"
+
"@intersect.mbo/intersectmbo.org-icons-set@^1.0.8":
version "1.1.0"
resolved "https://registry.npmjs.org/@intersect.mbo/intersectmbo.org-icons-set/-/intersectmbo.org-icons-set-1.1.0.tgz"
@@ -3328,9 +3336,9 @@ ansi-styles@^6.1.0:
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz"
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
-anymatch@^3.0.3:
+anymatch@^3.0.3, anymatch@~3.1.2:
version "3.1.3"
- resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
dependencies:
normalize-path "^3.0.0"
@@ -3666,6 +3674,11 @@ big.js@^5.2.2:
resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz"
integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+binary-extensions@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
+ integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
+
blakejs@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz"
@@ -3686,9 +3699,9 @@ brace-expansion@^2.0.1:
dependencies:
balanced-match "^1.0.0"
-braces@^3.0.3:
+braces@^3.0.3, braces@~3.0.2:
version "3.0.3"
- resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
dependencies:
fill-range "^7.1.1"
@@ -3881,6 +3894,21 @@ check-error@^2.1.1:
resolved "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz"
integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==
+chokidar@^3.5.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
+ integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
chromatic@^11.20.0:
version "11.20.0"
resolved "https://registry.npmjs.org/chromatic/-/chromatic-11.20.0.tgz"
@@ -5297,9 +5325,9 @@ gitdiff-parser@^0.3.1:
resolved "https://registry.npmjs.org/gitdiff-parser/-/gitdiff-parser-0.3.1.tgz"
integrity sha512-YQJnY8aew65id8okGxKCksH3efDCJ9HzV7M9rsvd65habf39Pkh4cgYJ27AaoDMqo1X98pgNJhNMrm/kpV7UVQ==
-glob-parent@^5.1.2:
+glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
- resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
dependencies:
is-glob "^4.0.1"
@@ -5715,6 +5743,13 @@ is-bigint@^1.0.1:
dependencies:
has-bigints "^1.0.1"
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
is-boolean-object@^1.1.0:
version "1.1.2"
resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz"
@@ -5793,7 +5828,7 @@ is-generator-function@^1.0.10, is-generator-function@^1.0.7:
dependencies:
has-tostringtag "^1.0.0"
-is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
@@ -6712,6 +6747,21 @@ lines-and-columns@^1.1.6:
resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+livereload-js@^3.3.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-3.4.1.tgz#ba90fbc708ed1b9a024bb89c4ee12c96ea03d66f"
+ integrity sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==
+
+livereload@^0.9.1:
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/livereload/-/livereload-0.9.3.tgz#a714816375ed52471408bede8b49b2ee6a0c55b1"
+ integrity sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==
+ dependencies:
+ chokidar "^3.5.0"
+ livereload-js "^3.3.1"
+ opts ">= 1.2.0"
+ ws "^7.4.3"
+
loader-utils@^2.0.0:
version "2.0.4"
resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz"
@@ -7465,6 +7515,11 @@ mime-types@^2.1.12:
dependencies:
mime-db "1.52.0"
+mime@^2:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
+ integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
+
mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz"
@@ -7603,9 +7658,9 @@ node-releases@^2.0.18:
resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz"
integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==
-normalize-path@^3.0.0:
+normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
- resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
npm-run-path@^4.0.1:
@@ -7754,6 +7809,11 @@ open@^8.0.4:
is-docker "^2.1.1"
is-wsl "^2.2.0"
+opener@1:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
+ integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
+
optionator@^0.9.3:
version "0.9.4"
resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz"
@@ -7766,6 +7826,11 @@ optionator@^0.9.3:
type-check "^0.4.0"
word-wrap "^1.2.5"
+"opts@>= 1.2.0":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/opts/-/opts-2.0.2.tgz#a17e189fbbfee171da559edd8a42423bc5993ce1"
+ integrity sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==
+
os-homedir@^1.0.1:
version "1.0.2"
resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz"
@@ -7953,7 +8018,7 @@ picocolors@^1.0.0, picocolors@^1.1.0, picocolors@^1.1.1:
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz"
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
-picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1:
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1:
version "2.3.1"
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
@@ -8308,6 +8373,13 @@ readable-stream@^3.1.1:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
recast@^0.23.5:
version "0.23.9"
resolved "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz"
@@ -8542,6 +8614,21 @@ rimraf@^2.6.3:
dependencies:
glob "^7.1.3"
+rollup-plugin-livereload@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-livereload/-/rollup-plugin-livereload-2.0.5.tgz#4747fa292a2cceb0c972c573d71b3d66b4252b37"
+ integrity sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==
+ dependencies:
+ livereload "^0.9.1"
+
+rollup-plugin-serve@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-serve/-/rollup-plugin-serve-1.1.1.tgz#bc06363a23d0a207f61f9b2bed8100a539481cbd"
+ integrity sha512-H0VarZRtFR0lfiiC9/P8jzCDvtFf1liOX4oSdIeeYqUCKrmFA7vNiQ0rg2D+TuoP7leaa/LBR8XBts5viF6lnw==
+ dependencies:
+ mime "^2"
+ opener "1"
+
rollup@^4.20.0, rollup@^4.23.0:
version "4.27.4"
resolved "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz"
@@ -9984,6 +10071,11 @@ write-file-atomic@^4.0.2:
imurmurhash "^0.1.4"
signal-exit "^3.0.7"
+ws@^7.4.3:
+ version "7.5.10"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9"
+ integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==
+
ws@^8.16.0, ws@^8.18.0, ws@^8.2.3:
version "8.18.0"
resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz"