diff --git a/apps/web/package.json b/apps/web/package.json index 680bc5452b..336dd23d29 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -85,6 +85,7 @@ "react-toastify": "9.1.3", "react-virtualized-auto-sizer": "1.0.7", "react-window": "1.8.7", + "sharp": "^0.33.5", "strapi-sdk-js": "2.3.3", "sushi": "4.0.5", "swr": "2.1.5", diff --git a/apps/web/src/app/(non-evm)/aptos/pool/ui/tables/pools/cells/pool-name-cell.tsx b/apps/web/src/app/(non-evm)/aptos/pool/ui/tables/pools/cells/pool-name-cell.tsx index a540bb2914..92026338c0 100644 --- a/apps/web/src/app/(non-evm)/aptos/pool/ui/tables/pools/cells/pool-name-cell.tsx +++ b/apps/web/src/app/(non-evm)/aptos/pool/ui/tables/pools/cells/pool-name-cell.tsx @@ -2,7 +2,6 @@ import { Badge, TooltipContent } from '@sushiswap/ui' import { Tooltip, TooltipProvider, TooltipTrigger } from '@sushiswap/ui' import { AptosCircle } from '@sushiswap/ui/icons/network/circle/AptosCircle' import React, { FC } from 'react' -// import { ProtocolBadge } from 'src/ui/pool/PoolNameCell' import { formatNumber } from 'sushi' import { CurrencyIcon } from '~aptos/_common/ui/currency/currency-icon' import { CurrencyIconList } from '~aptos/_common/ui/currency/currency-icon-list' diff --git a/apps/web/src/ui/swap/simple/simple-swap-widget.tsx b/apps/web/src/ui/swap/simple/simple-swap-widget.tsx index cb2fb0210f..60a937067c 100644 --- a/apps/web/src/ui/swap/simple/simple-swap-widget.tsx +++ b/apps/web/src/ui/swap/simple/simple-swap-widget.tsx @@ -1,3 +1,4 @@ +import { StrapiBanner } from '../strapi-banner/strapi-banner' import { SwapModeButtons } from '../swap-mode-buttons' import { SimpleSwapBridgeBanner } from './simple-swap-bridge-banner' import { SimpleSwapHeader } from './simple-swap-header' @@ -27,6 +28,7 @@ export const SimpleSwapWidget = () => { + ) diff --git a/apps/web/src/ui/swap/strapi-banner/strapi-banner-content.tsx b/apps/web/src/ui/swap/strapi-banner/strapi-banner-content.tsx new file mode 100644 index 0000000000..fad1550887 --- /dev/null +++ b/apps/web/src/ui/swap/strapi-banner/strapi-banner-content.tsx @@ -0,0 +1,71 @@ +'use client' + +import { XMarkIcon } from '@heroicons/react/20/solid' +import { Banner } from '@sushiswap/graph-client/strapi' +import { LinkExternal, classNames } from '@sushiswap/ui' +import type { RequestCookie } from 'next/dist/compiled/@edge-runtime/cookies' +import Image from 'next/legacy/image' +import { MouseEventHandler, useCallback, useMemo, useState } from 'react' +import { getOptimizedMedia } from 'src/app/(cms)/lib/media' + +export function StrapiBannerContent({ + banner, + cookie: _cookie, +}: { banner: Banner; cookie: RequestCookie | undefined }) { + const [cookie, setCookie] = useState(_cookie) + const [isImageLoading, setImageLoading] = useState(true) + + const hiddenBannerIds = useMemo(() => { + return cookie ? cookie.value.split(',') : [] + }, [cookie]) + + const onHide = useCallback( + (event: Parameters>[0]) => { + event.preventDefault() + + const newHiddenBannerIds = [...hiddenBannerIds, banner.id] + + document.cookie = `hidden-banner-ids=${newHiddenBannerIds.join( + ',', + )}; path=/; max-age=31536000` + + setCookie({ + name: 'hidden-banner-ids', + value: newHiddenBannerIds.join(','), + }) + }, + [banner, hiddenBannerIds], + ) + + if (hiddenBannerIds.includes(banner.id)) { + return <> + } + + const image = banner.image.attributes + + return ( +
+ + {/* biome-ignore lint/a11y/useKeyWithClickEvents: stupid */} +
+ +
+ {image.alternativeText setImageLoading(false)} + className={classNames( + 'rounded-xl absolute bg-secondary', + isImageLoading && 'animate-pulse', + )} + /> +
+
+ ) +} diff --git a/apps/web/src/ui/swap/strapi-banner/strapi-banner.tsx b/apps/web/src/ui/swap/strapi-banner/strapi-banner.tsx new file mode 100644 index 0000000000..7fbb0cef52 --- /dev/null +++ b/apps/web/src/ui/swap/strapi-banner/strapi-banner.tsx @@ -0,0 +1,29 @@ +import { getBanners } from '@sushiswap/graph-client/strapi' +import ms from 'ms' +import { unstable_cache } from 'next/cache' +import { cookies } from 'next/headers' +import { StrapiBannerContent } from './strapi-banner-content' + +export async function StrapiBanner() { + let banners + + try { + banners = await unstable_cache(() => getBanners(), ['banners'], { + revalidate: ms('1h'), + })() + } catch {} + + if (!banners) return <> + + // Only supporting one active banner at a time for now + const activeBanner = banners.find((banner) => banner.isActive) + + if (!activeBanner) return <> + + return ( + + ) +} diff --git a/packages/graph-client/src/subgraphs/strapi/index.ts b/packages/graph-client/src/subgraphs/strapi/index.ts index cf0c2c868a..5f94c401fa 100644 --- a/packages/graph-client/src/subgraphs/strapi/index.ts +++ b/packages/graph-client/src/subgraphs/strapi/index.ts @@ -1,4 +1,5 @@ export * from './queries/academy-articles' +export * from './queries/banners' export * from './queries/blog-articles' export * from './queries/difficulties' export * from './queries/products' diff --git a/packages/graph-client/src/subgraphs/strapi/queries/banners.ts b/packages/graph-client/src/subgraphs/strapi/queries/banners.ts new file mode 100644 index 0000000000..231e02a239 --- /dev/null +++ b/packages/graph-client/src/subgraphs/strapi/queries/banners.ts @@ -0,0 +1,67 @@ +import type { VariablesOf } from 'gql.tada' + +import { request, type RequestOptions } from 'src/lib/request' +import { graphql } from '../graphql' +import { STRAPI_GRAPHQL_URL } from 'src/subgraphs/strapi/constants' +import { ImageFieldsFragment } from 'src/subgraphs/strapi/fragments/image-fields' + +export const StrapiBannersQuery = graphql( + `query Banners { + banners { + data { + id + attributes { + dateFrom + dateTo + link + image { + data { + ...ImageFields + } + } + } + } + } + }`, + [ImageFieldsFragment], +) + +export type GetBanners = VariablesOf + +export type Banner = Awaited>[number] + +export async function getBanners( + _variables: GetBanners = {}, + options?: RequestOptions, +) { + const variables = _variables as VariablesOf + + const result = await request( + { + url: STRAPI_GRAPHQL_URL, + document: StrapiBannersQuery, + variables, + }, + options, + ) + + if (!result.banners) { + throw new Error('Failed to fetch banners') + } + + return result.banners.data.map((topic) => { + const dateFrom = new Date(topic.attributes.dateFrom) + const dateTo = new Date(topic.attributes.dateTo) + + const isActive = dateFrom <= new Date() && dateTo >= new Date() + + return { + id: topic.id, + dateFrom, + dateTo, + link: topic.attributes.link, + image: topic.attributes.image.data, + isActive, + } + }) +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f8a2c011d..e54f934ec3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -388,6 +388,9 @@ importers: react-window: specifier: 1.8.7 version: 1.8.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + sharp: + specifier: ^0.33.5 + version: 0.33.5 strapi-sdk-js: specifier: 2.3.3 version: 2.3.3 @@ -770,6 +773,10 @@ importers: specifier: 5.5.4 version: 5.5.4 + packages/sushi/dist/_cjs: {} + + packages/sushi/dist/_esm: {} + packages/telemetry: devDependencies: '@tsconfig/esm': @@ -2593,6 +2600,9 @@ packages: resolution: {integrity: sha512-0dEVyRLM/lG4gp1R/Ik5bfPl/1wX00xFwd5KcNH602tzBa09oF7pbTKETEhR1GjZ75K6OJnYFu8II2dyMhONMw==} engines: {node: '>=16'} + '@emnapi/runtime@1.2.0': + resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} + '@emotion/hash@0.9.1': resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} @@ -3551,6 +3561,111 @@ packages: '@aptos-labs/ts-sdk': 1.18.1 aptos: ^1.20.0 + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@ioredis/commands@1.2.0': resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} @@ -8783,10 +8898,17 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + colorette@1.4.0: resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} @@ -9426,6 +9548,10 @@ packages: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -11218,6 +11344,9 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-async-function@2.0.0: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} @@ -14476,6 +14605,10 @@ packages: shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -14525,6 +14658,9 @@ packages: simple-get@2.8.2: resolution: {integrity: sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==} + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-update-notifier@2.0.0: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} @@ -18575,6 +18711,11 @@ snapshots: dependencies: '@edge-runtime/primitives': 4.1.0 + '@emnapi/runtime@1.2.0': + dependencies: + tslib: 2.7.0 + optional: true + '@emotion/hash@0.9.1': {} '@emotion/is-prop-valid@0.8.8': @@ -19391,6 +19532,81 @@ snapshots: '@aptos-labs/ts-sdk': 1.27.0 aptos: 1.21.0 + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.2.0 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + '@ioredis/commands@1.2.0': {} '@isaacs/cliui@8.0.2': @@ -20446,7 +20662,7 @@ snapshots: nopt: 7.2.0 proc-log: 3.0.0 read-package-json-fast: 3.0.2 - semver: 7.6.0 + semver: 7.6.3 walk-up-path: 3.0.1 '@npmcli/map-workspaces@3.0.4': @@ -20862,7 +21078,7 @@ snapshots: '@types/shimmer': 1.0.5 import-in-the-middle: 1.11.0 require-in-the-middle: 7.3.0 - semver: 7.6.0 + semver: 7.6.3 shimmer: 1.2.1 transitivePeerDependencies: - supports-color @@ -24738,7 +24954,7 @@ snapshots: debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 + semver: 7.6.3 tsutils: 3.21.0(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 @@ -24753,7 +24969,7 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.0 + semver: 7.6.3 ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 @@ -27485,8 +27701,18 @@ snapshots: color-name@1.1.4: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + color-support@1.1.3: {} + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + colorette@1.4.0: {} colorette@2.0.20: {} @@ -28140,6 +28366,8 @@ snapshots: detect-libc@2.0.2: {} + detect-libc@2.0.3: {} + detect-newline@3.1.0: optional: true @@ -30657,6 +30885,8 @@ snapshots: is-arrayish@0.2.1: {} + is-arrayish@0.3.2: {} + is-async-function@2.0.0: dependencies: has-tostringtag: 1.0.2 @@ -31926,7 +32156,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.0 + semver: 7.6.3 make-error@1.3.6: {} @@ -34807,6 +35037,32 @@ snapshots: shallowequal@1.1.0: {} + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.6.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 @@ -34852,6 +35108,10 @@ snapshots: once: 1.4.0 simple-concat: 1.0.1 + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + simple-update-notifier@2.0.0: dependencies: semver: 7.5.4 @@ -34926,7 +35186,7 @@ snapshots: git-hooks-list: 3.1.0 globby: 13.2.2 is-plain-obj: 4.1.0 - semver: 7.6.0 + semver: 7.6.3 sort-object-keys: 1.1.3 sort-package-json@2.6.0: