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 ( +
+ {isOpen && + (
+ + + +

+ + + +

+ +
+
)} +
+ ); +} 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"