diff --git a/polaris-icons/package.json b/polaris-icons/package.json index a6a8e0b8b3b..66b740457ce 100644 --- a/polaris-icons/package.json +++ b/polaris-icons/package.json @@ -61,7 +61,6 @@ "hast-util-select": "^3.0.0", "js-yaml": "^4.0.0", "rehype-parse": "^7.0.1", - "svgo": "^2.8.0", "unified": "^9.2.1" } } diff --git a/polaris.shopify.com/content/components/index.mdx b/polaris.shopify.com/content/components/index.mdx index eff9fb7b251..a2773b0afea 100644 --- a/polaris.shopify.com/content/components/index.mdx +++ b/polaris.shopify.com/content/components/index.mdx @@ -2,7 +2,6 @@ title: Components order: 7 icon: AppsMajor -previewImg: /images/components.png --- # {frontmatter.title} diff --git a/polaris.shopify.com/package.json b/polaris.shopify.com/package.json index 4744d9364e1..357b9109062 100644 --- a/polaris.shopify.com/package.json +++ b/polaris.shopify.com/package.json @@ -20,7 +20,7 @@ "create-component": "generact --root src/components src/components/Template/Template.tsx", "gen-sitemap": "yarn next-sitemap", "get-props": "./scripts/get-props/src/get-props.ts", - "gen-assets": "yarn get-props && node scripts/gen-cache-json.mjs && ts-node scripts/gen-site-map.ts && ts-node scripts/gen-og-images.ts", + "gen-assets": "yarn get-props && node scripts/gen-cache-json.mjs && ts-node scripts/gen-site-map.ts && ts-node scripts/gen-og-images.tsx", "gen-colors": "ts-node ./scripts/gen-colors.ts" }, "dependencies": { @@ -64,6 +64,7 @@ }, "devDependencies": { "@esm2cjs/p-map": "^5.5.0", + "@napi-rs/image": "^1.7.0", "@types/base-64": "^1.0.0", "@types/gtag.js": "^0.0.10", "@types/js-yaml": "^4.0.5", @@ -84,6 +85,7 @@ "generact": "^0.4.0", "get-site-urls": "3.0.0-alpha.1", "globby": "^11.1.0", + "inter-ui": "3.19.3", "is-ci": "^3.0.1", "js-yaml": "^4.1.0", "lodash.set": "^4.3.2", @@ -91,8 +93,8 @@ "ora": "^5.4.1", "p-map": "^5.5.0", "playroom": "^0.28.0", - "puppeteer": "^16.0.0", "sass": "^1.49.9", + "satori": "^0.10.11", "style-loader": "^3.3.1", "ts-node": "^10.7.0", "typescript": "^4.9.3" diff --git a/polaris.shopify.com/scripts/gen-og-images.ts b/polaris.shopify.com/scripts/gen-og-images.ts deleted file mode 100644 index 4a51c2259fe..00000000000 --- a/polaris.shopify.com/scripts/gen-og-images.ts +++ /dev/null @@ -1,200 +0,0 @@ -import * as polarisIcons from '@shopify/polaris-icons'; -import puppeteer from 'puppeteer'; -import {existsSync} from 'fs'; -import path from 'path'; -import {writeFile, readFile, mkdir, rm} from 'fs/promises'; -import pMap from '@esm2cjs/p-map'; -import ora from 'ora'; -import typedSiteJSON from '../.cache/site'; - -const imgDir = path.join(process.cwd(), 'public/og-images'); - -const shopifyLogo = ` - - - -`; - -const defaultImage = ` - - - - -`; - -const generateHTML = async (data, url) => { - const {frontMatter} = data[url]; - const title = frontMatter.title; - - let htmlImg = `
${defaultImage}
`; - - if (url.startsWith('/components/')) { - const imgPath = path.join(process.cwd(), `public/images${url}.png`); - const image = await readFile(imgPath); - const base64 = Buffer.from(image).toString('base64'); - htmlImg = ``; - } - - if ( - url.startsWith('/foundations/') || - url.startsWith('/design/') || - url.startsWith('/content/') - ) { - if (frontMatter?.icon && frontMatter?.icon in polarisIcons) { - const iconFilePath = path.join( - process.cwd(), - `../polaris-icons/dist/svg/${frontMatter.icon}.svg`, - ); - const iconData = await readFile(iconFilePath); - - htmlImg = `
${iconData}
`; - } - } - - const html = ` - - - -

${title}

- ${htmlImg} - -`; - - return Buffer.from(html).toString('base64'); -}; - -const genOgImages = async () => { - const spinner = ora('Generating Open Graph images from sitemap').start(); - if (existsSync(imgDir)) { - await rm(imgDir, {recursive: true}); - } - - await mkdir(imgDir, {recursive: true}); - const urls = Object.keys(typedSiteJSON); - const browser = await puppeteer.launch({ - defaultViewport: {width: 1200, height: 630}, - args: ['--no-sandbox', '--disable-setuid-sandbox'], - }); - - let completed = 0; - - const getPNG = async (url) => { - try { - const imgPath = - url === '' - ? 'home' - : new URL(url, 'https://polaris.shopify.com').pathname; - const html = await generateHTML(typedSiteJSON, url); - const encodedUrl = `data:text/html;charset=utf-8;base64,${html}`; - const page = await browser.newPage(); - await page.goto(encodedUrl, {waitUntil: 'networkidle0'}); - const image = await page.screenshot(); - if (!existsSync(`${imgDir}${imgPath}`)) { - await mkdir(`${imgDir}${imgPath}`, {recursive: true}); - } - await writeFile(`${imgDir}${imgPath}.png`, image); - await page.close(); - completed++; - spinner.text = `Generated ${completed} of ${urls.length} Open Graph images from sitemap`; - } catch (error) { - spinner.fail(`Failed to generate Open Graph png for ${url}`); - throw error; - } - }; - - const generateImages = await pMap(urls, getPNG, {concurrency: 30}); - - await Promise.all(generateImages); - - await browser.close(); - spinner.succeed( - `Generated ${urls.length} of ${urls.length} Open Graph images from sitemap`, - ); -}; - -genOgImages().then(() => { - console.log('✅ OG Image creation done'); -}); diff --git a/polaris.shopify.com/scripts/gen-og-images.tsx b/polaris.shopify.com/scripts/gen-og-images.tsx new file mode 100644 index 00000000000..084cc3f9603 --- /dev/null +++ b/polaris.shopify.com/scripts/gen-og-images.tsx @@ -0,0 +1,212 @@ +import React from 'react'; +import * as polarisIcons from '@shopify/polaris-icons'; +import {Transformer, ResizeFilterType} from '@napi-rs/image'; + +import fs from 'node:fs'; +import path from 'node:path'; +import {writeFile, mkdir, rm} from 'fs/promises'; +import ora from 'ora'; +import satori, {type SatoriOptions} from 'satori'; +import typedSiteJSON from '../.cache/site'; + +const WIDTH = 1200; +const HEIGHT = 630; +const PADDING = 60; +const LOGO_SCALE = 0.9; +// To maintain a 1:1 aspect ratio, we can't use regular CSS (we're using a +// limited set of yoga), so we calculate it manually here. +const IMG_SIZE = (HEIGHT - PADDING * 2) * LOGO_SCALE; + +const interDir = path.join( + path.dirname(require.resolve('inter-ui')), + 'Inter (web)', +); + +const imgDir = path.join(process.cwd(), 'public/og-images'); + +const shopifyLogo = ( + + + + +); + +const defaultImage = ( + + + + + +); + +const generateSvg = async (url, frontMatter, satoriConfig: SatoriOptions) => { + const title = frontMatter.title; + let logo = shopifyLogo; + + return satori( +
+ {defaultImage} +
+
+

+ {title} +

+
+
+ {logo} Polaris +
+
+
, + + satoriConfig, + ); +}; + +const genOgImages = async () => { + const spinner = ora( + 'Generating Open Graph images from .cache/site.ts', + ).start(); + if (fs.existsSync(imgDir)) { + await rm(imgDir, {recursive: true}); + } + + const interMedium = fs.readFileSync(path.join(interDir, 'Inter-Medium.woff')); + const interBold = fs.readFileSync(path.join(interDir, 'Inter-Bold.woff')); + + const satoriConfig: SatoriOptions = { + width: WIDTH, + height: HEIGHT, + fonts: [ + { + name: 'Inter', + data: interMedium, + weight: 500, + style: 'normal', + }, + { + name: 'Inter', + data: interBold, + weight: 700, + style: 'normal', + }, + ], + }; + + let completed = 0; + return Promise.all( + Object.entries({ + '/home': { + frontMatter: { + title: 'Polaris', + }, + }, + ...typedSiteJSON, + }).map(async ([url, {frontMatter}]) => { + try { + const imgPath = + url === '' + ? '/home' + : new URL(url, 'https://polaris.shopify.com').pathname; + const svg = await generateSvg(url, frontMatter, satoriConfig); + + const imgFile = `${imgDir}${imgPath}.png`; + await mkdir(path.dirname(imgFile), {recursive: true}); + + const pngData = await Transformer.fromSvg(svg) + // svg comes in at 2x size for some reason. + .crop(0, 0, WIDTH, HEIGHT) + .png(); + await writeFile(imgFile, pngData); + completed++; + } catch (error) { + spinner.fail(`Failed to generate Open Graph png for ${url}`); + throw error; + } + }), + ).then(() => { + spinner.succeed( + `Generated ${completed} Open Graph images from .cache/site.ts`, + ); + }); +}; + +genOgImages().then(() => {}); diff --git a/polaris.shopify.com/tsconfig.json b/polaris.shopify.com/tsconfig.json index 3de738d3376..bc5caac466b 100644 --- a/polaris.shopify.com/tsconfig.json +++ b/polaris.shopify.com/tsconfig.json @@ -37,7 +37,8 @@ "transpileOnly": true, "files": true, "compilerOptions": { - "module": "CommonJS" + "module": "CommonJS", + "jsx": "react" } } } diff --git a/yarn.lock b/yarn.lock index a6832eb758c..01cef283955 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2200,6 +2200,84 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" +"@napi-rs/image-android-arm-eabi@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@napi-rs/image-android-arm-eabi/-/image-android-arm-eabi-1.7.0.tgz#cc0a09aef43e4b529e9116d6305c683a936b26de" + integrity sha512-lpyqxaIYUrdk096xoJjvPGin5jY1Ehor0RxryqDvowGUhVU3TDgolsjjuFPEki3cfvV6zzAm7bWUkmxIci2zaw== + +"@napi-rs/image-android-arm64@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@napi-rs/image-android-arm64/-/image-android-arm64-1.7.0.tgz#57d38856946348eeabf1b907a09610be83573523" + integrity sha512-ojzi1ORsFZ53upLh0YVF1J8Qxvq+V2s6Xwbi4p4+ZLgk3MMd9ephERxxNExOf3/nyj4k+izEz6C/RbJwnSJXpw== + +"@napi-rs/image-darwin-arm64@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@napi-rs/image-darwin-arm64/-/image-darwin-arm64-1.7.0.tgz#972e8e6443e7e84b0f66c3b71dc7dfb350e8a10a" + integrity sha512-SadObhsP0E/og6FGDzwafWFEwePSkdEKmwh7ssWePopwN2PfTnIyQq4MfVE/iSLgHfiHgQwwwssY6j815P8YwA== + +"@napi-rs/image-darwin-x64@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@napi-rs/image-darwin-x64/-/image-darwin-x64-1.7.0.tgz#dfd58c53b3b0c50d35805ff6d50d75e811c87b3a" + integrity sha512-lbUpy3deqxsbGMZRRwkSAMs4uWN+f8RER4BI7kwVK9rjUwvmnI+JMC+TCD03j+AMviANhsR/umDjSTS4HAbKdQ== + +"@napi-rs/image-freebsd-x64@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@napi-rs/image-freebsd-x64/-/image-freebsd-x64-1.7.0.tgz#02c508296beca1acdd532ce23844c20ecd9e783f" + integrity sha512-DCFov4Ibk7pNUI30dBAR2SqtBSKTEtlsqkOJGWRiqGlTSqt7xPR3YcdM3N8JYN1lFHCN2SoJnInV3/p3yiKVLQ== + +"@napi-rs/image-linux-arm-gnueabihf@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@napi-rs/image-linux-arm-gnueabihf/-/image-linux-arm-gnueabihf-1.7.0.tgz#c3a6c978fa89874d92abbace684ca63bf356314a" + integrity sha512-392foWTx3vIsBs5lNDZt0H0qn/x3PLR92GCbY1SWNtbE11+D47IDxHauLqcU/18IVule9nODFZ6KLLhuLjdqJA== + +"@napi-rs/image-linux-arm64-gnu@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@napi-rs/image-linux-arm64-gnu/-/image-linux-arm64-gnu-1.7.0.tgz#4fee6e9a95fd85e5bf891ee0f462fa3e894c2a23" + integrity sha512-oYTCK6VsyywMPjcOJh5hk8vTA7i2coekXnkfHErBbyKm7v5F+3pdOXrhmKQHYojENHT/LkWWKlkr0jF8QB4U3w== + +"@napi-rs/image-linux-arm64-musl@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@napi-rs/image-linux-arm64-musl/-/image-linux-arm64-musl-1.7.0.tgz#4be9b48ad8d9336540bc80952964c305fee840d2" + integrity sha512-x3Z3YmhdMut2ULdXSjxAihp3rGcTvxUG5bhHMVc7bfezhGOViqfPJ5Qknra8egEZpXe6C0PKkBcIBm7hSlaubg== + +"@napi-rs/image-linux-x64-gnu@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@napi-rs/image-linux-x64-gnu/-/image-linux-x64-gnu-1.7.0.tgz#a528578a6e46a6ba2a3b2451c0c5412c4dae45c0" + integrity sha512-5+FEzLr7yNGljdXXPyMJLJAQG8z9c1rawFTnT4dUidFjtpP/C4AP923eWDeo7B2Zz2psT7A8hgXhK+uAqyj4WQ== + +"@napi-rs/image-linux-x64-musl@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@napi-rs/image-linux-x64-musl/-/image-linux-x64-musl-1.7.0.tgz#592abcf1b0ff9e19f6e3026f9011e7ffe4d193a8" + integrity sha512-LhzaYQ/z3axPUDPZefdyvgHz1qQ3NF2oDUHHFkVgpWNLJ3wGxa4GpM5TD+/jJCOChACAGYcZPpx96XLJGKNZfQ== + +"@napi-rs/image-win32-ia32-msvc@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@napi-rs/image-win32-ia32-msvc/-/image-win32-ia32-msvc-1.7.0.tgz#62ce6b1426656d093ee633c1236d2ce7b6ae66ea" + integrity sha512-taCxMQTssuZW2hviOzJxo1iji0cAwjXY9m7CkiAAM8KftVUxAbmDGkPyEGRyt43ftYJ/rXRMz1vEEz/gxiZ5rQ== + +"@napi-rs/image-win32-x64-msvc@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@napi-rs/image-win32-x64-msvc/-/image-win32-x64-msvc-1.7.0.tgz#238b3f1d1e239335fd2253a6bf86325b0698a3a9" + integrity sha512-hfnpTipEv6mrvhaNHRHBdYoVPUPyWnJ5KDpPAabJbTcsVb4x2TUiVI54r5GzF8zQ0RJc5mGtWdu9KFvyEBVJkg== + +"@napi-rs/image@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@napi-rs/image/-/image-1.7.0.tgz#b66e8f406d5300c7e1fb5fb874ee0638dc38f9f8" + integrity sha512-UI8bJKz4MwYsf2toiyxodbXeyHNe9yxhXz0KJdiDgliYs7ObCiu7DatPA899yuNscOApkweKV6yx2ag1lpVbbw== + optionalDependencies: + "@napi-rs/image-android-arm-eabi" "1.7.0" + "@napi-rs/image-android-arm64" "1.7.0" + "@napi-rs/image-darwin-arm64" "1.7.0" + "@napi-rs/image-darwin-x64" "1.7.0" + "@napi-rs/image-freebsd-x64" "1.7.0" + "@napi-rs/image-linux-arm-gnueabihf" "1.7.0" + "@napi-rs/image-linux-arm64-gnu" "1.7.0" + "@napi-rs/image-linux-arm64-musl" "1.7.0" + "@napi-rs/image-linux-x64-gnu" "1.7.0" + "@napi-rs/image-linux-x64-musl" "1.7.0" + "@napi-rs/image-win32-ia32-msvc" "1.7.0" + "@napi-rs/image-win32-x64-msvc" "1.7.0" + "@next/env@13.0.6": version "13.0.6" resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.6.tgz#3fcab11ffbe95bff127827d9f7f3139bc5e6adff" @@ -2800,6 +2878,14 @@ resolved "https://registry.yarnpkg.com/@shopify/useful-types/-/useful-types-5.0.0.tgz#1a06976ecff33de9b36c822c4f2f89a92940f27b" integrity sha512-3T9AZNKK3Tjxz++Z10DFtNnAXfdoE9kPkJTiCfsRcxZ3IVfFORzAUKTv4mgKT5P8IyRbIRtmxfzZzRCxn4fIgQ== +"@shuding/opentype.js@1.4.0-beta.0": + version "1.4.0-beta.0" + resolved "https://registry.yarnpkg.com/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz#5d1e7e9e056f546aad41df1c5043f8f85d39e24b" + integrity sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA== + dependencies: + fflate "^0.7.3" + string.prototype.codepointat "^0.2.1" + "@sinclair/typebox@^0.23.3": version "0.23.4" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.23.4.tgz#6ff93fd2585ce44f7481c9ff6af610fbb5de98a4" @@ -5901,6 +5987,11 @@ base-64@^1.0.0: resolved "https://registry.yarnpkg.com/base-64/-/base-64-1.0.0.tgz#09d0f2084e32a3fd08c2475b973788eee6ae8f4a" integrity sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg== +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw== + base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -6600,6 +6691,11 @@ camelcase@^6.2.0, camelcase@^6.3.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +camelize@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" + integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== + caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -7181,7 +7277,7 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0, color-name@~1.1.4: +color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -7714,6 +7810,21 @@ crypto-random-string@^4.0.0: dependencies: type-fest "^1.0.1" +css-background-parser@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/css-background-parser/-/css-background-parser-0.1.0.tgz#48a17f7fe6d4d4f1bca3177ddf16c5617950741b" + integrity sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA== + +css-box-shadow@1.0.0-3: + version "1.0.0-3" + resolved "https://registry.yarnpkg.com/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz#9eaeb7140947bf5d649fc49a19e4bbaa5f602713" + integrity sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg== + +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== + css-declaration-sorter@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz#bfd2f6f50002d6a3ae779a87d3a0c5d5b10e0f02" @@ -7783,6 +7894,15 @@ css-selector-parser@^1.3.0: resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g== +css-to-react-native@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32" + integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^4.0.2" + css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" @@ -8253,11 +8373,6 @@ devtools-protocol@0.0.1001819: resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1001819.tgz#0a98f44cefdb02cc684f3d5e6bd898a1690231d9" integrity sha512-G6OsIFnv/rDyxSqBa2lDLR6thp9oJioLsb2Gl+LbQlyoA9/OBAkrTU9jiCcQ8Pnh7z4d6slDiLaogR5hzgJLmQ== -devtools-protocol@0.0.1019158: - version "0.0.1019158" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz#4b08d06108a784a2134313149626ba55f030a86f" - integrity sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ== - devtools-protocol@0.0.981744: version "0.0.981744" resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.981744.tgz#9960da0370284577d46c28979a0b32651022bacf" @@ -8538,6 +8653,11 @@ emittery@^0.8.1: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emoji-regex@^10.2.1: + version "10.3.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" + integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -9676,6 +9796,11 @@ fetch-retry@^5.0.2: resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.3.tgz#edfa3641892995f9afee94f25b168827aa97fe3d" integrity sha512-uJQyMrX5IJZkhoEUBQ3EjxkeiZkppBd5jS/fMTJmfZxLSiaQjv2zD0kTvuvkSH89uFvgSlB6ueGpjD3HWN7Bxw== +fflate@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.7.4.tgz#61587e5d958fdabb5a9368a302c25363f4f69f50" + integrity sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw== + figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -11097,6 +11222,11 @@ header-case@^2.0.4: capital-case "^1.0.4" tslib "^2.0.3" +hex-rgb@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/hex-rgb/-/hex-rgb-4.3.0.tgz#af5e974e83bb2fefe44d55182b004ec818c07776" + integrity sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw== + hey-listen@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" @@ -11719,6 +11849,11 @@ inquirer@^8.2.2, inquirer@^8.2.4: through "^2.3.6" wrap-ansi "^7.0.0" +inter-ui@3.19.3: + version "3.19.3" + resolved "https://registry.yarnpkg.com/inter-ui/-/inter-ui-3.19.3.tgz#cf4b4b6d30de8d5463e2462588654b325206488c" + integrity sha512-5FG9fjuYOXocIfjzcCBhICL5cpvwEetseL3FU6tP3d6Bn7g8wODhB+I9RNGRTizCT7CUG4GOK54OPxqq3msQgg== + internal-slot@^1.0.3, internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" @@ -13490,6 +13625,14 @@ lilconfig@^2.0.3: resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== +linebreak@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b" + integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ== + dependencies: + base64-js "0.0.8" + unicode-trie "^2.0.0" + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -16228,6 +16371,11 @@ pacote@^2.7.36: unique-filename "^1.1.0" which "^1.2.12" +pako@^0.2.5: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== + pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -16275,6 +16423,14 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.6: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-css-color@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/parse-css-color/-/parse-css-color-0.2.1.tgz#b687a583f2e42e66ffdfce80a570706966e807c9" + integrity sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg== + dependencies: + color-name "^1.1.4" + hex-rgb "^4.1.0" + parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" @@ -17209,7 +17365,7 @@ postcss-unique-selectors@^5.1.1: dependencies: postcss-selector-parser "^6.0.5" -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== @@ -17611,24 +17767,6 @@ puppeteer@^14.4.1: unbzip2-stream "1.4.3" ws "8.7.0" -puppeteer@^16.0.0: - version "16.0.0" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-16.0.0.tgz#9efb6cdb57e3e51cf060a33f6289e88200dd4672" - integrity sha512-FgSe21IHNHkqv1SiJiob4ANsxVujcINa4p3MaDEMyoZsocbgSgwYE0c9lnF8eoinw4id3vx4DOXwhFdOOwVlDg== - dependencies: - cross-fetch "3.1.5" - debug "4.3.4" - devtools-protocol "0.0.1019158" - extract-zip "2.0.1" - https-proxy-agent "5.0.1" - pkg-dir "4.2.0" - progress "2.0.3" - proxy-from-env "1.1.0" - rimraf "3.0.2" - tar-fs "2.1.1" - unbzip2-stream "1.4.3" - ws "8.8.1" - qs@6.11.0, qs@^6.10.0, qs@^6.9.1: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" @@ -18778,6 +18916,22 @@ sass@^1.49.9: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" +satori@^0.10.11: + version "0.10.11" + resolved "https://registry.yarnpkg.com/satori/-/satori-0.10.11.tgz#4d198beef405668120566d29a554411c534d8a5d" + integrity sha512-yLm1xPRPZUaKcBZJ6nmezoJjHB4MqV8x7Mu0PyZUJodRWRDD27UbeMwzuY9LEGG57WYLO4CQsGPlbHWV1Ex9TQ== + dependencies: + "@shuding/opentype.js" "1.4.0-beta.0" + css-background-parser "^0.1.0" + css-box-shadow "1.0.0-3" + css-to-react-native "^3.0.0" + emoji-regex "^10.2.1" + escape-html "^1.0.3" + linebreak "^1.1.0" + parse-css-color "^0.2.1" + postcss-value-parser "^4.2.0" + yoga-wasm-web "^0.3.3" + sax@>=0.6.0: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -19720,6 +19874,11 @@ string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string.prototype.codepointat@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz#004ad44c8afc727527b108cd462b4d971cd469bc" + integrity sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg== + "string.prototype.matchall@^4.0.0 || ^3.0.1", string.prototype.matchall@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" @@ -20089,7 +20248,7 @@ svg-tags@^1.0.0: resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= -svgo@^2.7.0, svgo@^2.8.0: +svgo@^2.7.0: version "2.8.0" resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== @@ -20431,6 +20590,11 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +tiny-inflate@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" + integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== + tiny-lru@^10.0.0: version "10.3.0" resolved "https://registry.yarnpkg.com/tiny-lru/-/tiny-lru-10.3.0.tgz#2ddc88bbe8d9a2c761df673ebef52a82182a64b3" @@ -20944,6 +21108,14 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== +unicode-trie@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" + integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== + dependencies: + pako "^0.2.5" + tiny-inflate "^1.0.0" + unified@9.2.0: version "9.2.0" resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" @@ -22175,16 +22347,16 @@ ws@8.7.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.7.0.tgz#eaf9d874b433aa00c0e0d8752532444875db3957" integrity sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg== -ws@8.8.1, ws@^8.2.3, ws@^8.4.2: - version "8.8.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" - integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== - ws@^7.3.1, ws@^7.4.6: version "7.5.7" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== +ws@^8.2.3, ws@^8.4.2: + version "8.8.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" + integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== + x-default-browser@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/x-default-browser/-/x-default-browser-0.4.0.tgz#70cf0da85da7c0ab5cb0f15a897f2322a6bdd481" @@ -22361,6 +22533,11 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== +yoga-wasm-web@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz#eb8e9fcb18e5e651994732f19a220cb885d932ba" + integrity sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA== + zip-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79"