diff --git a/app/scripts/components/common/banner/index.tsx b/app/scripts/components/common/banner/index.tsx
new file mode 100644
index 000000000..888631905
--- /dev/null
+++ b/app/scripts/components/common/banner/index.tsx
@@ -0,0 +1,64 @@
+import React, { useState } from "react";
+import { Icon } from "@trussworks/react-uswds";
+import { USWDSBanner, USWDSBannerContent } from "$components/common/uswds/banner";
+
+const BANNER_KEY = 'dismissedBannerUrl';
+
+function hasExpired(expiryDatetime) {
+ const expiryDate = new Date(expiryDatetime);
+ const currentDate = new Date();
+ return !!(currentDate > expiryDate);
+}
+
+enum BannerType {
+ info = 'info',
+ warning ='warning'
+}
+
+const infoTypeFlag = BannerType.info;
+interface BannerProps {
+ appTitle: string,
+ expires: Date,
+ url: string,
+ text: string,
+ type?: BannerType
+}
+
+export default function Banner({appTitle, expires, url, text, type = infoTypeFlag }: BannerProps) {
+
+ const showBanner = localStorage.getItem(BANNER_KEY) !== url;
+ const [isOpen, setIsOpen] = useState(showBanner && !(hasExpired(expires)));
+
+ function onClose () {
+ localStorage.setItem(
+ BANNER_KEY,
+ url
+ );
+ setIsOpen(false);
+ }
+
+ return (
+
+ );
+}
diff --git a/app/scripts/components/common/layout-root/index.tsx b/app/scripts/components/common/layout-root/index.tsx
index f16edd26e..e77f9ca4d 100644
--- a/app/scripts/components/common/layout-root/index.tsx
+++ b/app/scripts/components/common/layout-root/index.tsx
@@ -2,11 +2,11 @@ import React, { ReactNode, useContext, useCallback } from 'react';
import { useDeepCompareEffect } from 'use-deep-compare';
import styled from 'styled-components';
import { Outlet } from 'react-router';
-
import { reveal } from '@devseed-ui/animation';
import MetaTags from '../meta-tags';
import PageFooter from '../page-footer';
+import Banner from '../banner';
import { LayoutRootContext } from './context';
import { useGoogleTagManager } from '$utils/use-google-tag-manager';
@@ -36,7 +36,7 @@ function LayoutRoot(props: { children?: ReactNode }) {
useGoogleTagManager();
- const { title, thumbnail, description, hideFooter } =
+ const { title, thumbnail, description, banner, hideFooter } =
useContext(LayoutRootContext);
const truncatedTitle =
@@ -50,6 +50,7 @@ function LayoutRoot(props: { children?: ReactNode }) {
description={description || appDescription}
thumbnail={thumbnail}
/>
+ {banner && }
diff --git a/app/scripts/components/common/smart-link.tsx b/app/scripts/components/common/smart-link.tsx
index a8dfe81f9..f3f657b18 100644
--- a/app/scripts/components/common/smart-link.tsx
+++ b/app/scripts/components/common/smart-link.tsx
@@ -1,23 +1,24 @@
-import React from 'react';
+import React, { ReactNode } from 'react';
import { Link } from 'react-router-dom';
import { getLinkProps } from '$utils/url';
interface SmartLinkProps {
to: string;
+ children?: ReactNode;
}
/**
* Switches between a `a` and a `Link` depending on the url.
*/
export default function SmartLink(props: SmartLinkProps) {
- const { to, ...rest } = props;
+ const { to, children, ...rest } = props;
const isExternalLink = /^https?:\/\//.test(to);
const linkProps = getLinkProps(to);
return isExternalLink ? (
-
+ {children}
) : (
-
+ {children}
);
}
diff --git a/app/scripts/components/common/uswds/banner.tsx b/app/scripts/components/common/uswds/banner.tsx
new file mode 100644
index 000000000..ed6cb535e
--- /dev/null
+++ b/app/scripts/components/common/uswds/banner.tsx
@@ -0,0 +1,10 @@
+import React from "react";
+import { Banner, BannerContent } from "@trussworks/react-uswds";
+
+export function USWDSBanner (props) {
+ return ;
+}
+
+export function USWDSBannerContent (props) {
+ return ;
+}
\ No newline at end of file
diff --git a/app/scripts/components/home/index.tsx b/app/scripts/components/home/index.tsx
index 495e2fcde..3bf4f02af 100644
--- a/app/scripts/components/home/index.tsx
+++ b/app/scripts/components/home/index.tsx
@@ -5,7 +5,7 @@ import { Button } from '@devseed-ui/button';
import { glsp, listReset, media, themeVal } from '@devseed-ui/theme-provider';
import { Heading } from '@devseed-ui/typography';
import { CollecticonChevronRightSmall } from '@devseed-ui/collecticons';
-import { getOverride } from 'veda';
+import { getOverride, getBanner } from 'veda';
import rootCoverImage from '../../../graphics/layout/root-welcome--cover.jpg';
@@ -131,9 +131,15 @@ const getCoverProps = () => {
function RootHome() {
const { show: showFeedbackModal } = useFeedbackModal();
+ const banner = getBanner();
+ const renderBanner = !!banner && banner.text && banner.url && banner.expires;
+
return (
-
+
import('$components/sandbox'));
const UserPagesComponent = lazy(() => import('$components/user-pages'));
-
// Contexts
import { ReactQueryProvider } from '$context/react-query';
import {
diff --git a/app/scripts/styles/styles.scss b/app/scripts/styles/styles.scss
index a049dbfc2..ee5c40457 100644
--- a/app/scripts/styles/styles.scss
+++ b/app/scripts/styles/styles.scss
@@ -1 +1,5 @@
-@forward 'uswds-theme';
\ No newline at end of file
+@forward 'uswds-theme';
+
+@use "uswds-utilities";
+@use "usa-banner";
+@use "usa-button";
diff --git a/docs/content/CONFIGURATION.md b/docs/content/CONFIGURATION.md
index b2fb7e680..1c2170dc8 100644
--- a/docs/content/CONFIGURATION.md
+++ b/docs/content/CONFIGURATION.md
@@ -49,6 +49,25 @@ strings: {
}
```
+### Banner
+
+`Banner` object allows you to display a site-wide banner that sits atop your application. To create a banner, you need to provide four attributes (one optional) as outlined below.
+
+```
+expires: Date,
+url: string,
+text: string,
+type?: BannerType
+```
+
+| Option | Type | Description| Example|
+|---|---|---|---|
+| expires | Date | The date and time when the banner expires. (ISO 8601 format) | '2024-08-03T12:00:00-04:00'|
+| url | string | The URL that will be triggered when the user clicks on the banner. | 'stories/emit-and-aviris-3' |
+| text | string | The text content to display in the banner. This can be an HTML string. | 'Read the new data insight on using EMIT and AVIRIS-3 for monitoring large methane emission events.' |
+| type | enum('info', 'warning') |The type of information delivered by the banner, which determines its background color. | 'info'|
+
+
## Meta files
_There is currently not a lot of customization that can be done to meta images._
diff --git a/mock/veda.config.js b/mock/veda.config.js
index 48c2939df..4ba57a478 100644
--- a/mock/veda.config.js
+++ b/mock/veda.config.js
@@ -16,5 +16,11 @@ module.exports = {
one: 'Story',
other: 'Stories'
}
+ },
+ banner: {
+ text: 'Read the new data insight on using EMIT and AVIRIS-3 for monitoring large methane emission events.',
+ url: 'stories/emit-and-aviris-3',
+ expires: '2024-08-03T12:00:00-04:00',
+ type: 'info'
}
};
diff --git a/package.json b/package.json
index dac9c4a1d..4a27f77cc 100644
--- a/package.json
+++ b/package.json
@@ -44,6 +44,7 @@
"@babel/preset-env": "^7.16.0",
"@babel/preset-react": "^7.16.0",
"@babel/preset-typescript": "^7.18.6",
+ "@fullhuman/postcss-purgecss": "^6.0.0",
"@mdx-js/mdx": "^2.0.0",
"@parcel/packager-raw-url": "2.7.0",
"@parcel/packager-ts": "2.12.0",
@@ -86,8 +87,8 @@
"jest-css-modules-transform": "^4.3.0",
"lint-staged": "14.0.1",
"parcel": "^2.12.0",
- "parcel-resolver-ignore": "^2.1.3",
"parcel-resolver-alias": "link:./parcel-resolver-alias",
+ "parcel-resolver-ignore": "^2.1.3",
"parcel-resolver-veda": "link:./parcel-resolver-veda",
"parcel-transformer-mdx": "link:./parcel-transformer-mdx",
"parcel-transformer-mdx-frontmatter": "link:./parcel-transformer-mdx-frontmatter",
diff --git a/parcel-resolver-veda/index.d.ts b/parcel-resolver-veda/index.d.ts
index 893801aac..6ed9c8368 100644
--- a/parcel-resolver-veda/index.d.ts
+++ b/parcel-resolver-veda/index.d.ts
@@ -251,6 +251,24 @@ export interface LayerInfo {
id: string;
name: string;
}
+ /**
+ * Not exporting this type
+ * Since we are moving forward to ditching VEDA faux module
+ */
+
+ enum BannerType {
+ info = 'info',
+ warning ='warning'
+ }
+
+ const infoTypeFlag = BannerType.info;
+ interface BannerData {
+ expires: Date,
+ url: string,
+ text: string,
+ type?: BannerType
+ }
+
/**
* Named exports: datasets.
@@ -294,6 +312,8 @@ export interface LayerInfo {
export const getBoolean: (variable: string) => boolean;
+ export const getBanner: () => BannerData | undefined;
+
/**
* List of custom user defined pages.
*/
diff --git a/parcel-resolver-veda/index.js b/parcel-resolver-veda/index.js
index 58e307e4c..afa4f8e25 100644
--- a/parcel-resolver-veda/index.js
+++ b/parcel-resolver-veda/index.js
@@ -194,7 +194,8 @@ module.exports = new Resolver({
logger
)},
strings: ${JSON.stringify(withDefaultStrings(result.strings))},
- booleans: ${JSON.stringify(withDefaultStrings(result.booleans))}
+ booleans: ${JSON.stringify(withDefaultStrings(result.booleans))},
+ banner: ${JSON.stringify(result.banner)}
};
export const theme = ${JSON.stringify(result.theme) || null};
@@ -211,6 +212,9 @@ module.exports = new Resolver({
export const getString = (variable) => config.strings[variable];
export const getBoolean = (variable) => config.booleans[variable];
+ export const getConfig = () => config;
+ export const getBanner = () => config.banner;
+
export const datasets = ${generateMdxDataObject(datasetsImportData)};
export const stories = ${generateMdxDataObject(storiesImportData)};
`;
diff --git a/postcss.config.js b/postcss.config.js
index 08f7b4d32..4187d2ae1 100644
--- a/postcss.config.js
+++ b/postcss.config.js
@@ -1,8 +1,19 @@
+let plugins = [require('autoprefixer'), require('postcss-import')];
+const purge = require('@fullhuman/postcss-purgecss')({
+ content: [
+ './app/**/*.{js,jsx,ts,tsx}',
+ '@trussworks/react-uswds/lib/index.css'
+ ],
+ safelist: {
+ deep: [/usa-banner$/],
+ greedy: [/^usa-banner/]
+ }
+});
+
+if (process.env.NODE_ENV !== 'development') plugins = [...plugins, purge];
+
module.exports = {
syntax: 'postcss-scss',
parser: 'postcss-safe-parser',
- plugins: [
- require('autoprefixer'),
- require('postcss-import'),
- ]
+ plugins
};
diff --git a/yarn.lock b/yarn.lock
index 2aa899370..269165fbd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1690,6 +1690,13 @@
resolved "http://verdaccio.ds.io:4873/@floating-ui%2futils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2"
integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==
+"@fullhuman/postcss-purgecss@^6.0.0":
+ version "6.0.0"
+ resolved "http://verdaccio.ds.io:4873/@fullhuman%2fpostcss-purgecss/-/postcss-purgecss-6.0.0.tgz#c6c27075aa5c5edc53f7fcf08e8f625ca48bf40e"
+ integrity sha512-sUvk5PV7O5xvTJcxDYrQ00xlKtSxivvJdZrwgxE8F1GmNMs7w9U+dSbr83N/qEs9b+f+6QsZKXDs0k8nMjBIqA==
+ dependencies:
+ purgecss "^6.0.0"
+
"@gulp-sourcemaps/identity-map@^2.0.1":
version "2.0.1"
resolved "http://verdaccio.ds.io:4873/@gulp-sourcemaps%2fidentity-map/-/identity-map-2.0.1.tgz#a6e8b1abec8f790ec6be2b8c500e6e68037c0019"
@@ -1723,6 +1730,18 @@
resolved "http://verdaccio.ds.io:4873/@humanwhocodes%2fobject-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+"@isaacs/cliui@^8.0.2":
+ version "8.0.2"
+ resolved "http://verdaccio.ds.io:4873/@isaacs%2fcliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+ integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+ dependencies:
+ string-width "^5.1.2"
+ string-width-cjs "npm:string-width@^4.2.0"
+ strip-ansi "^7.0.1"
+ strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+ wrap-ansi "^8.1.0"
+ wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
"@istanbuljs/load-nyc-config@^1.0.0":
version "1.1.0"
resolved "http://verdaccio.ds.io:4873/@istanbuljs%2fload-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
@@ -2460,18 +2479,6 @@
"@parcel/utils" "2.12.0"
nullthrows "^1.1.1"
-"@parcel/bundler-experimental@^2.7.0":
- version "2.7.0"
- resolved "http://verdaccio.ds.io:4873/@parcel%2fbundler-experimental/-/bundler-experimental-2.7.0.tgz#b1bdb830732ac77e5997ed7ed4a31448dd6a5866"
- integrity sha512-FrQVMiyy/yQHKiXwpgnphnaThRdPe5qmBh/6MZTzHRIUszONOvA1oGvVskDJhVG4zE/l5lCkdvlJH/aaR//s7A==
- dependencies:
- "@parcel/diagnostic" "2.7.0"
- "@parcel/graph" "2.7.0"
- "@parcel/hash" "2.7.0"
- "@parcel/plugin" "2.7.0"
- "@parcel/utils" "2.7.0"
- nullthrows "^1.1.1"
-
"@parcel/cache@2.12.0":
version "2.12.0"
resolved "http://verdaccio.ds.io:4873/@parcel%2fcache/-/cache-2.12.0.tgz#b8fd2ea2bc7a2353a9b20344cc191bfb4f8284f3"
@@ -2684,14 +2691,6 @@
"@parcel/watcher" "^2.0.0"
"@parcel/workers" "2.7.0"
-"@parcel/graph@2.7.0":
- version "2.7.0"
- resolved "http://verdaccio.ds.io:4873/@parcel%2fgraph/-/graph-2.7.0.tgz#2ae326c62764aaa53324b89d9c83ec0bc6ad55bf"
- integrity sha512-Q6E94GS6q45PtsZh+m+gvFRp/N1Qopxhu2sxjcWsGs5iBd6IWn2oYLWOH5iVzEjWuYpW2HkB08lH6J50O63uOA==
- dependencies:
- "@parcel/utils" "2.7.0"
- nullthrows "^1.1.1"
-
"@parcel/graph@3.2.0":
version "3.2.0"
resolved "http://verdaccio.ds.io:4873/@parcel%2fgraph/-/graph-3.2.0.tgz#309e6e3f19ef4ea7f71b2341ec1bcc08e7c43523"
@@ -3509,6 +3508,11 @@
chrome-trace-event "^1.0.2"
nullthrows "^1.1.1"
+"@pkgjs/parseargs@^0.11.0":
+ version "0.11.0"
+ resolved "http://verdaccio.ds.io:4873/@pkgjs%2fparseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+ integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+
"@popperjs/core@^2.9.0":
version "2.11.5"
resolved "http://verdaccio.ds.io:4873/@popperjs%2fcore/-/core-2.11.5.tgz#db5a11bf66bdab39569719555b0f76e138d7bd64"
@@ -5400,6 +5404,13 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
+brace-expansion@^2.0.1:
+ version "2.0.1"
+ resolved "http://verdaccio.ds.io:4873/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ dependencies:
+ balanced-match "^1.0.0"
+
braces@^2.3.1, braces@^2.3.2:
version "2.3.2"
resolved "http://verdaccio.ds.io:4873/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
@@ -6029,6 +6040,11 @@ commander@7, commander@^7.0.0, commander@^7.2.0:
resolved "http://verdaccio.ds.io:4873/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+commander@^12.0.0:
+ version "12.1.0"
+ resolved "http://verdaccio.ds.io:4873/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3"
+ integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==
+
component-emitter@^1.2.1:
version "1.3.0"
resolved "http://verdaccio.ds.io:4873/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
@@ -6133,7 +6149,7 @@ crelt@^1.0.5:
resolved "http://3.220.121.64:4873/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72"
integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==
-cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "http://verdaccio.ds.io:4873/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -7856,6 +7872,14 @@ for-own@^1.0.0:
dependencies:
for-in "^1.0.1"
+foreground-child@^3.1.0:
+ version "3.2.1"
+ resolved "http://verdaccio.ds.io:4873/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7"
+ integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==
+ dependencies:
+ cross-spawn "^7.0.0"
+ signal-exit "^4.0.1"
+
form-data@^3.0.0:
version "3.0.1"
resolved "http://verdaccio.ds.io:4873/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
@@ -8140,6 +8164,18 @@ glob-watcher@^5.0.3:
normalize-path "^3.0.0"
object.defaults "^1.1.0"
+glob@^10.3.10:
+ version "10.4.5"
+ resolved "http://verdaccio.ds.io:4873/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956"
+ integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==
+ dependencies:
+ foreground-child "^3.1.0"
+ jackspeak "^3.1.2"
+ minimatch "^9.0.4"
+ minipass "^7.1.2"
+ package-json-from-dist "^1.0.0"
+ path-scurry "^1.11.1"
+
glob@^7.1.1, glob@^7.1.3, glob@^7.1.4:
version "7.2.3"
resolved "http://verdaccio.ds.io:4873/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
@@ -9351,6 +9387,15 @@ istextorbinary@^3.0.0:
binaryextensions "^2.2.0"
textextensions "^3.2.0"
+jackspeak@^3.1.2:
+ version "3.4.3"
+ resolved "http://verdaccio.ds.io:4873/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a"
+ integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==
+ dependencies:
+ "@isaacs/cliui" "^8.0.2"
+ optionalDependencies:
+ "@pkgjs/parseargs" "^0.11.0"
+
javascript-stringify@^2.1.0:
version "2.1.0"
resolved "http://verdaccio.ds.io:4873/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79"
@@ -10307,6 +10352,11 @@ lowercase-keys@^2.0.0:
resolved "http://verdaccio.ds.io:4873/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+lru-cache@^10.2.0:
+ version "10.4.3"
+ resolved "http://verdaccio.ds.io:4873/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
+ integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
+
lru-cache@^2.7.0:
version "2.7.3"
resolved "http://verdaccio.ds.io:4873/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
@@ -11258,6 +11308,13 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
dependencies:
brace-expansion "^1.1.7"
+minimatch@^9.0.4:
+ version "9.0.5"
+ resolved "http://verdaccio.ds.io:4873/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
+ integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
+ dependencies:
+ brace-expansion "^2.0.1"
+
minimist-options@4.1.0, minimist-options@^4.0.2:
version "4.1.0"
resolved "http://verdaccio.ds.io:4873/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
@@ -11282,6 +11339,11 @@ minimist@^1.2.8:
resolved "http://verdaccio.ds.io:4873/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2:
+ version "7.1.2"
+ resolved "http://verdaccio.ds.io:4873/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
+ integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
+
mixin-deep@^1.2.0:
version "1.3.2"
resolved "http://verdaccio.ds.io:4873/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
@@ -11808,6 +11870,11 @@ p-try@^2.0.0:
resolved "http://verdaccio.ds.io:4873/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+package-json-from-dist@^1.0.0:
+ version "1.0.0"
+ resolved "http://verdaccio.ds.io:4873/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00"
+ integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==
+
pako@~1.0.2:
version "1.0.11"
resolved "http://verdaccio.ds.io:4873/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
@@ -12010,6 +12077,14 @@ path-root@^0.1.1:
dependencies:
path-root-regex "^0.1.0"
+path-scurry@^1.11.1:
+ version "1.11.1"
+ resolved "http://verdaccio.ds.io:4873/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2"
+ integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==
+ dependencies:
+ lru-cache "^10.2.0"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
path-type@^1.0.0:
version "1.1.0"
resolved "http://verdaccio.ds.io:4873/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
@@ -12233,6 +12308,14 @@ postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.6:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
+postcss-selector-parser@^6.0.7:
+ version "6.1.1"
+ resolved "http://verdaccio.ds.io:4873/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz#5be94b277b8955904476a2400260002ce6c56e38"
+ integrity sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
postcss-syntax@^0.36.2:
version "0.36.2"
resolved "http://verdaccio.ds.io:4873/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c"
@@ -12274,7 +12357,7 @@ postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.
picocolors "^1.0.0"
source-map-js "^1.0.2"
-postcss@^8.4.39:
+postcss@^8.4.39, postcss@^8.4.4:
version "8.4.39"
resolved "http://verdaccio.ds.io:4873/postcss/-/postcss-8.4.39.tgz#aa3c94998b61d3a9c259efa51db4b392e1bde0e3"
integrity sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==
@@ -12475,6 +12558,16 @@ punycode@^2.1.0, punycode@^2.1.1:
resolved "http://verdaccio.ds.io:4873/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+purgecss@^6.0.0:
+ version "6.0.0"
+ resolved "http://verdaccio.ds.io:4873/purgecss/-/purgecss-6.0.0.tgz#ffea0a4d32092f660402a4ba14250e927c1a4cfe"
+ integrity sha512-s3EBxg5RSWmpqd0KGzNqPiaBbWDz1/As+2MzoYVGMqgDqRTLBhJW6sywfTBek7OwNfoS/6pS0xdtvChNhFj2cw==
+ dependencies:
+ commander "^12.0.0"
+ glob "^10.3.10"
+ postcss "^8.4.4"
+ postcss-selector-parser "^6.0.7"
+
qs-state-hook@^2.0.0:
version "2.0.0"
resolved "http://verdaccio.ds.io:4873/qs-state-hook/-/qs-state-hook-2.0.0.tgz#56732eeeb915818f0c353bcc77181375aa31236c"
@@ -13602,6 +13695,11 @@ signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
resolved "http://verdaccio.ds.io:4873/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+signal-exit@^4.0.1:
+ version "4.1.0"
+ resolved "http://verdaccio.ds.io:4873/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
simple-swizzle@^0.2.2:
version "0.2.2"
resolved "http://verdaccio.ds.io:4873/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
@@ -13876,6 +13974,15 @@ string-length@^4.0.1:
char-regex "^1.0.2"
strip-ansi "^6.0.0"
+"string-width-cjs@npm:string-width@^4.2.0":
+ version "4.2.3"
+ resolved "http://verdaccio.ds.io:4873/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
string-width@^1.0.1, string-width@^1.0.2:
version "1.0.2"
resolved "http://verdaccio.ds.io:4873/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
@@ -13894,7 +14001,7 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
-string-width@^5.0.0, string-width@^5.0.1:
+string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2:
version "5.1.2"
resolved "http://verdaccio.ds.io:4873/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
@@ -13957,6 +14064,13 @@ stringify-entities@^4.0.0:
character-entities-html4 "^2.0.0"
character-entities-legacy "^3.0.0"
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
+ version "6.0.1"
+ resolved "http://verdaccio.ds.io:4873/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
resolved "http://verdaccio.ds.io:4873/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
@@ -15263,6 +15377,15 @@ word@~0.3.0:
resolved "http://verdaccio.ds.io:4873/word/-/word-0.3.0.tgz#8542157e4f8e849f4a363a288992d47612db9961"
integrity sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
+ version "7.0.0"
+ resolved "http://verdaccio.ds.io:4873/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
wrap-ansi@^2.0.0:
version "2.1.0"
resolved "http://verdaccio.ds.io:4873/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"