From 6a5bcd53cc399d2ebf9f9387d00a16f9a71463e7 Mon Sep 17 00:00:00 2001 From: Juan Andrade Date: Fri, 31 May 2024 13:49:46 -0400 Subject: [PATCH 01/17] Configure panda-css, add panda support to View --- .gitignore | 4 + .storybook/index.css | 2 + .storybook/main.ts | 7 + .storybook/preview.tsx | 2 + __docs__/wonder-blocks-core/view.stories.tsx | 64 +- package.json | 5 +- packages/tsconfig-shared.json | 3 +- .../src/components/view.tsx | 93 +- packages/wonder-blocks-core/src/util/types.ts | 3 +- panda.config.ts | 66 ++ postcss.config.cjs | 5 + postcss.config.js | 3 + tsconfig.json | 4 +- yarn.lock | 921 +++++++++++++++++- 14 files changed, 1091 insertions(+), 91 deletions(-) create mode 100644 .storybook/index.css create mode 100644 panda.config.ts create mode 100644 postcss.config.cjs create mode 100644 postcss.config.js diff --git a/.gitignore b/.gitignore index 534b41e9ef..4d19becdce 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,7 @@ storybook-static !.vscode .DS_Store yarn-error.log + +## Panda +styled-system +styled-system-studio \ No newline at end of file diff --git a/.storybook/index.css b/.storybook/index.css new file mode 100644 index 0000000000..d331dc00c2 --- /dev/null +++ b/.storybook/index.css @@ -0,0 +1,2 @@ +@layer reset, base, tokens, recipes, utilities; +/* @layer utilities; */ \ No newline at end of file diff --git a/.storybook/main.ts b/.storybook/main.ts index 276a879c33..c43916f03e 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -34,6 +34,13 @@ const config: StorybookConfig = { "../packages/wonder-blocks$1/src", ), }, + { + find: /^\@\/styled-system\/([\w]+)/, + replacement: resolve( + __dirname, + "../styled-system/$1", + ), + }, ], }, }); diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx index 00ec0c0131..718349dc57 100644 --- a/.storybook/preview.tsx +++ b/.storybook/preview.tsx @@ -7,6 +7,8 @@ import {ThemeSwitcherContext} from "@khanacademy/wonder-blocks-theming"; import {RenderStateRoot} from "../packages/wonder-blocks-core/src"; import {Preview} from "@storybook/react"; +import "./index.css"; + /** * WB Official breakpoints * @see https://khanacademy.atlassian.net/wiki/spaces/WB/pages/2099970518/Layout+Breakpoints diff --git a/__docs__/wonder-blocks-core/view.stories.tsx b/__docs__/wonder-blocks-core/view.stories.tsx index c360788757..878c92e076 100644 --- a/__docs__/wonder-blocks-core/view.stories.tsx +++ b/__docs__/wonder-blocks-core/view.stories.tsx @@ -1,7 +1,12 @@ import * as React from "react"; -import {StyleSheet} from "aphrodite"; +// import {StyleSheet} from "aphrodite"; import type {Meta, StoryObj} from "@storybook/react"; +import {css, cx} from "@/styled-system/css"; +// ISSUE(juan): Panda CSS does not support external files. +// This is due to the fact that static analysis is not possible with external +// references. +// https://panda-css.com/docs/guides/dynamic-styling#what-you-cant-do import {color, spacing} from "@khanacademy/wonder-blocks-tokens"; import { HeadingMedium, @@ -51,11 +56,15 @@ export const InlineStyles: StoryComponentType = () => ( The style prop can accept a (nested) array of Aphrodite styles and @@ -133,21 +142,28 @@ DefiningLayout.parameters = { }, }; -const styles = StyleSheet.create({ - container: { - background: color.offBlack8, - gap: spacing.medium_16, - padding: spacing.xLarge_32, - }, - - view: { - border: `1px dashed ${color.lightBlue}`, - gap: spacing.medium_16, - padding: spacing.medium_16, - }, - - item: { - background: color.offBlack32, - padding: spacing.medium_16, - }, -}); +const styles = { + // HACK(juan): css.raw needs to be used so that the compiler can identify + // that the tokens are being used and extract them via static analysis. + // https://panda-css.com/docs/guides/dynamic-styling#alternative + container: css.raw({ + background: "offBlack8", + gap: "medium_16", + padding: "xLarge_32", + }), + + view: css.raw({ + // ISSUE(juan): shorthand property defined in view.tsx will take + // precedence over the longhand property. This means that the border + // will be 0px (instead of 1px). + // https://panda-css.com/docs/concepts/writing-styles#property-conflicts + border: `1px dashed {colors.lightBlue}`, + gap: "medium_16", + padding: "medium_16", + }), + + item: css.raw({ + background: "offBlack32", + padding: "medium_16", + }), +}; diff --git a/package.json b/package.json index b6f4110f9f..ad9fd74901 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "node": ">=16" }, "scripts": { + "prepare": "panda codegen", "alex": "alex packages/", "build": "rollup -c ./build-settings/rollup.config.js", "build:types": "yarn tsc --build tsconfig-build.json && node -r @swc-node/register build-settings/remove-test-types-from-dist.ts", @@ -50,6 +51,7 @@ "@khanacademy/eslint-config": "^2.0.0", "@khanacademy/eslint-plugin": "^2.0.0", "@khanacademy/wonder-stuff-testing": "^3.0.1", + "@pandacss/dev": "^0.40.0", "@rollup/plugin-node-resolve": "^15.0.2", "@storybook/addon-a11y": "^8.0.0", "@storybook/addon-designs": "^7.0.5", @@ -104,6 +106,7 @@ "jest-extended": "^3.2.4", "jscodeshift": "^0.15.1", "npm-package-json-lint": "^6.4.0", + "postcss": "^8.4.38", "prettier": "^2.8.1", "react-refresh": "^0.14.0", "rollup": "^2.79.1", @@ -111,7 +114,7 @@ "rollup-plugin-babel": "^4.0.0-beta.2", "storybook": "^8.0.0", "storybook-addon-pseudo-states": "^2.1.2", - "typescript": "^4.9.5", + "typescript": "5.1.6", "typescript-coverage-report": "^0.7.0", "vite": "^4.4.8", "vite-plugin-turbosnap": "^1.0.2" diff --git a/packages/tsconfig-shared.json b/packages/tsconfig-shared.json index de5642d244..27c520aaef 100644 --- a/packages/tsconfig-shared.json +++ b/packages/tsconfig-shared.json @@ -14,7 +14,8 @@ "paths": { "@khanacademy/*": [ "./*/src" - ] + ], + "@/styled-system/*": ["../styled-system/*"] }, }, } diff --git a/packages/wonder-blocks-core/src/components/view.tsx b/packages/wonder-blocks-core/src/components/view.tsx index c2213d4b02..c6dad78e74 100644 --- a/packages/wonder-blocks-core/src/components/view.tsx +++ b/packages/wonder-blocks-core/src/components/view.tsx @@ -1,28 +1,51 @@ -// WARNING: If you modify this file you must update view.js.flow. -import * as React from "react"; import {StyleSheet} from "aphrodite"; +import * as React from "react"; +import {css, cx} from "@/styled-system/css"; +import type {SystemStyleObject} from "@/styled-system/types"; +// import {css, cx} from "../../../../styled-system/css"; + +import type {StyleType, TextViewSharedProps} from "../util/types"; -import addStyle from "../util/add-style"; +import {processStyleList} from "../util/util"; -import type {TextViewSharedProps} from "../util/types"; +// import addStyle from "../util/add-style"; + +function isAphroditeStyle( + style: SystemStyleObject | StyleType, +): style is StyleType { + return ( + (typeof style === "object" && + Object.prototype.hasOwnProperty.call(style, "_definition")) || + (Array.isArray(style) && + style.length > 0 && + style.some( + (s) => + s && + typeof s === "object" && + Object.prototype.hasOwnProperty.call(s, "_definition"), + )) + ); +} + +// https://github.com/facebook/css-layout#default-values +const defaultStyle = { + alignItems: "stretch", + borderWidth: 0, + borderStyle: "solid", + boxSizing: "border-box", + display: "flex", + flexDirection: "column", + margin: 0, + padding: 0, + position: "relative", + zIndex: 0, + // fix flexbox bugs + minHeight: 0, + minWidth: 0, +}; const styles = StyleSheet.create({ - // https://github.com/facebook/css-layout#default-values - default: { - alignItems: "stretch", - borderWidth: 0, - borderStyle: "solid", - boxSizing: "border-box", - display: "flex", - flexDirection: "column", - margin: 0, - padding: 0, - position: "relative", - zIndex: 0, - // fix flexbox bugs - minHeight: 0, - minWidth: 0, - }, + default: defaultStyle, }); type ValidViewTags = "div" | "article" | "aside" | "nav" | "section"; @@ -33,11 +56,11 @@ type Props = TextViewSharedProps & { tag?: ValidViewTags; }; -const StyledDiv = addStyle("div", styles.default); -const StyledArticle = addStyle("article", styles.default); -const StyledAside = addStyle("aside", styles.default); -const StyledNav = addStyle("nav", styles.default); -const StyledSection = addStyle("section", styles.default); +const StyledDiv = "div"; //addStyle("div", styles.default); +const StyledArticle = "article"; // addStyle("article", styles.default); +const StyledAside = "aside"; // addStyle("aside", styles.default); +const StyledNav = "nav"; // addStyle("nav", styles.default); +const StyledSection = "section"; // addStyle("section", styles.default); /** * View is a building block for constructing other components. `View` roughly @@ -69,9 +92,27 @@ const StyledSection = addStyle("section", styles.default); const View: React.ForwardRefExoticComponent< Props & React.RefAttributes > = React.forwardRef(function View(props, ref) { - const {testId, tag = "div", ...restProps} = props; + const {style, testId, tag = "div", ...restProps} = props; + + let className = null; + let aphroditeStyle = null; + + // StyleType + if (isAphroditeStyle(style)) { + aphroditeStyle = processStyleList([styles.default, style]); + } else { + const extraStyles = Array.isArray(style) ? [...style] : style; + className = css(defaultStyle, extraStyles); + } + + const finalStyles = isAphroditeStyle(style) + ? aphroditeStyle?.className + : className; + const commonProps = { ...restProps, + className: cx(props.className, finalStyles), + style: aphroditeStyle?.style, // Note: this matches the default test id that Testing Library uses! "data-testid": testId, } as const; diff --git a/packages/wonder-blocks-core/src/util/types.ts b/packages/wonder-blocks-core/src/util/types.ts index b6d8db5d13..37122782d3 100644 --- a/packages/wonder-blocks-core/src/util/types.ts +++ b/packages/wonder-blocks-core/src/util/types.ts @@ -1,6 +1,7 @@ import * as React from "react"; import type {CSSProperties} from "aphrodite"; +import {SystemStyleObject} from "../../../../styled-system/types/index.d"; import type {AriaAttributes, AriaRole} from "./aria-types"; @@ -75,7 +76,7 @@ export type TextViewSharedProps = { /** * Optional custom styles. */ - style?: StyleType; + style?: StyleType | SystemStyleObject; /** * Test ID used for e2e testing. */ diff --git a/panda.config.ts b/panda.config.ts new file mode 100644 index 0000000000..a06bfaee75 --- /dev/null +++ b/panda.config.ts @@ -0,0 +1,66 @@ +import {defineConfig, defineTokens} from "@pandacss/dev"; +import {color, spacing} from "@khanacademy/wonder-blocks-tokens"; + +const wbTokenToPandaToken = (token: Record) => + Object.entries(token) + .map(([key, value]) => { + if (typeof value === "number") { + value = `${value}px`; + } + return { + [key]: { + value, + }, + }; + }) + .reduce((acc, curr) => ({...acc, ...curr}), {}) as { + [x: string]: { + value: string; + }; + }; + +// Map WB tokens to Panda CSS tokens +const tokens = defineTokens({ + colors: wbTokenToPandaToken(color), + spacing: wbTokenToPandaToken(spacing), +}); + +console.log("tokens: ", tokens); + +export default defineConfig({ + // Whether to use css reset + preflight: false, + + // Where to look for your css declarations + include: [ + "./packages/**/*.{ts,tsx}", + "./__docs__/**/*.{ts,tsx,mdx}", + "./.storybook/**/*.{ts,tsx}", + ], + + // Files to exclude + exclude: [], + + // Disable default tokens + presets: [], + + // Useful for theme customization + theme: { + tokens: tokens, + }, + + // The output directory for your css system + outdir: "styled-system", + + staticCss: { + css: [ + { + properties: { + background: ["*"], + }, + }, + ], + }, + + importMap: "@/styled-system", +}); diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000000..573efad20e --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + '@pandacss/dev/postcss': {}, + }, +} \ No newline at end of file diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000000..c81881e173 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,3 @@ +module.exports = { + plugins: [require("@pandacss/dev/postcss")()], +}; diff --git a/tsconfig.json b/tsconfig.json index 15616e6258..9d1a2af420 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,15 @@ // This file is used by the `typecheck` command in package.json /* Visit https://aka.ms/tsconfig to read more about this file */ { + "include": ["styled-system"], "exclude": ["**/dist", "coverage", "coverage-ts"], "extends": "./tsconfig-common.json", "compilerOptions": { "noEmit": true, "paths": { - "@khanacademy/*": ["./packages/*/src"] + "@khanacademy/*": ["./packages/*/src"], + "@/styled-system/*": ["./styled-system/*"] }, } } diff --git a/yarn.lock b/yarn.lock index 6b709498ed..e2b9b13e0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2521,6 +2521,36 @@ human-id "^1.0.2" prettier "^2.7.1" +"@clack/core@^0.3.3": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@clack/core/-/core-0.3.4.tgz#375e82fc8fe46650b37cab2f2ea8752c6b7f0450" + integrity sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw== + dependencies: + picocolors "^1.0.0" + sisteransi "^1.0.5" + +"@clack/prompts@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@clack/prompts/-/prompts-0.7.0.tgz#6aaef48ea803d91cce12bc80811cfcb8de2e75ea" + integrity sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA== + dependencies: + "@clack/core" "^0.3.3" + picocolors "^1.0.0" + sisteransi "^1.0.5" + +"@csstools/postcss-cascade-layers@4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.6.tgz#5a421cd2d5792d1eb8c28e682dc5f2c3b85cb045" + integrity sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA== + dependencies: + "@csstools/selector-specificity" "^3.1.1" + postcss-selector-parser "^6.0.13" + +"@csstools/selector-specificity@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz#63085d2995ca0f0e55aa8b8a07d69bfd48b844fe" + integrity sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA== + "@discoveryjs/json-ext@^0.5.3": version "0.5.7" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" @@ -2545,6 +2575,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz#eafa8775019b3650a77e8310ba4dbd17ca7af6d5" integrity sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA== +"@esbuild/aix-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" + integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== + "@esbuild/android-arm64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz#9e00eb6865ed5f2dbe71a1e96f2c52254cd92903" @@ -2555,6 +2590,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz#68791afa389550736f682c15b963a4f37ec2f5f6" integrity sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A== +"@esbuild/android-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" + integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== + "@esbuild/android-arm@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.17.tgz#1aa013b65524f4e9f794946b415b32ae963a4618" @@ -2565,6 +2605,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.1.tgz#38c91d8ee8d5196f7fbbdf4f0061415dde3a473a" integrity sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw== +"@esbuild/android-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" + integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== + "@esbuild/android-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.17.tgz#c2bd0469b04ded352de011fae34a7a1d4dcecb79" @@ -2575,6 +2620,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.1.tgz#93f6190ce997b313669c20edbf3645fc6c8d8f22" integrity sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA== +"@esbuild/android-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" + integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== + "@esbuild/darwin-arm64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz#0c21a59cb5bd7a2cec66c7a42431dca42aefeddd" @@ -2585,6 +2635,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz#0d391f2e81fda833fe609182cc2fbb65e03a3c46" integrity sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA== +"@esbuild/darwin-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" + integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== + "@esbuild/darwin-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz#92f8763ff6f97dff1c28a584da7b51b585e87a7b" @@ -2595,6 +2650,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz#92504077424584684862f483a2242cfde4055ba2" integrity sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA== +"@esbuild/darwin-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" + integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== + "@esbuild/freebsd-arm64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz#934f74bdf4022e143ba2f21d421b50fd0fead8f8" @@ -2605,6 +2665,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz#a1646fa6ba87029c67ac8a102bb34384b9290774" integrity sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw== +"@esbuild/freebsd-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" + integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== + "@esbuild/freebsd-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz#16b6e90ba26ecc865eab71c56696258ec7f5d8bf" @@ -2615,6 +2680,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz#41c9243ab2b3254ea7fb512f71ffdb341562e951" integrity sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg== +"@esbuild/freebsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" + integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== + "@esbuild/linux-arm64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz#179a58e8d4c72116eb068563629349f8f4b48072" @@ -2625,6 +2695,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz#f3c1e1269fbc9eedd9591a5bdd32bf707a883156" integrity sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w== +"@esbuild/linux-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" + integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== + "@esbuild/linux-arm@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz#9d78cf87a310ae9ed985c3915d5126578665c7b5" @@ -2635,6 +2710,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz#4503ca7001a8ee99589c072801ce9d7540717a21" integrity sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw== +"@esbuild/linux-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" + integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== + "@esbuild/linux-ia32@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz#6fed202602d37361bca376c9d113266a722a908c" @@ -2645,6 +2725,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz#98c474e3e0cbb5bcbdd8561a6e65d18f5767ce48" integrity sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw== +"@esbuild/linux-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" + integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== + "@esbuild/linux-loong64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz#cdc60304830be1e74560c704bfd72cab8a02fa06" @@ -2655,6 +2740,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz#a8097d28d14b9165c725fe58fc438f80decd2f33" integrity sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA== +"@esbuild/linux-loong64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" + integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== + "@esbuild/linux-mips64el@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz#c367b2855bb0902f5576291a2049812af2088086" @@ -2665,6 +2755,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz#c44f6f0d7d017c41ad3bb15bfdb69b690656b5ea" integrity sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA== +"@esbuild/linux-mips64el@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" + integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== + "@esbuild/linux-ppc64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz#7fdc0083d42d64a4651711ee0a7964f489242f45" @@ -2675,6 +2770,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz#0765a55389a99237b3c84227948c6e47eba96f0d" integrity sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw== +"@esbuild/linux-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" + integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== + "@esbuild/linux-riscv64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz#5198a417f3f5b86b10c95647b8bc032e5b6b2b1c" @@ -2685,6 +2785,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz#e4153b032288e3095ddf4c8be07893781b309a7e" integrity sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg== +"@esbuild/linux-riscv64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" + integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== + "@esbuild/linux-s390x@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz#7459c2fecdee2d582f0697fb76a4041f4ad1dd1e" @@ -2695,6 +2800,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz#b9ab8af6e4b73b26d63c1c426d7669a5d53eb5a7" integrity sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ== +"@esbuild/linux-s390x@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" + integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== + "@esbuild/linux-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz#948cdbf46d81c81ebd7225a7633009bc56a4488c" @@ -2705,6 +2815,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz#0b25da17ac38c3e11cdd06ca3691d4d6bef2755f" integrity sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA== +"@esbuild/linux-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" + integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== + "@esbuild/netbsd-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz#6bb89668c0e093c5a575ded08e1d308bd7fd63e7" @@ -2715,6 +2830,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz#3148e48406cd0d4f7ba1e0bf3f4d77d548c98407" integrity sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg== +"@esbuild/netbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" + integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== + "@esbuild/openbsd-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz#abac2ae75fef820ef6c2c48da4666d092584c79d" @@ -2725,6 +2845,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz#7b73e852986a9750192626d377ac96ac2b749b76" integrity sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw== +"@esbuild/openbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" + integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== + "@esbuild/sunos-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz#74a45fe1db8ea96898f1a9bb401dcf1dadfc8371" @@ -2735,6 +2860,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz#402a441cdac2eee98d8be378c7bc23e00c1861c5" integrity sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q== +"@esbuild/sunos-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" + integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== + "@esbuild/win32-arm64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz#fd95ffd217995589058a4ed8ac17ee72a3d7f615" @@ -2745,6 +2875,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz#36c4e311085806a6a0c5fc54d1ac4d7b27e94d7b" integrity sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A== +"@esbuild/win32-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" + integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== + "@esbuild/win32-ia32@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz#9b7ef5d0df97593a80f946b482e34fcba3fa4aaf" @@ -2755,6 +2890,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz#0cf933be3fb9dc58b45d149559fe03e9e22b54fe" integrity sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw== +"@esbuild/win32-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" + integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== + "@esbuild/win32-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz#bcb2e042631b3c15792058e189ed879a22b2968b" @@ -2765,6 +2905,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz#77583b6ea54cee7c1410ebbd54051b6a3fcbd8ba" integrity sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA== +"@esbuild/win32-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" + integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -3332,6 +3477,196 @@ resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== +"@pandacss/config@0.40.0", "@pandacss/config@^0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/config/-/config-0.40.0.tgz#ae698a4f67f37464a2ce8188d6f722ddeff873a7" + integrity sha512-MGVQciHCPDdDi04WKqj6cBqdvv++L9L9U04n5F9jEFi5Mv6LwTroDVdkHvTGClC4h5A4RgI+2d910eYVGQ5iRw== + dependencies: + "@pandacss/logger" "0.40.0" + "@pandacss/preset-base" "0.40.0" + "@pandacss/preset-panda" "0.40.0" + "@pandacss/shared" "0.40.0" + "@pandacss/types" "0.40.0" + bundle-n-require "1.1.1" + escalade "3.1.2" + merge-anything "5.1.7" + microdiff "1.3.2" + typescript "5.3.3" + +"@pandacss/core@0.40.0", "@pandacss/core@^0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/core/-/core-0.40.0.tgz#5ed7902cef6cee830639bf0f643e9fe26358a0cf" + integrity sha512-f3qx5rH265vvlgmU291yzWBk/WfsPzVpVNVRgfPpOFCjjxh/iWS2ZUZ8/BQ39CNM0ySIVz32je4FWXvf8V5zgA== + dependencies: + "@csstools/postcss-cascade-layers" "4.0.6" + "@pandacss/is-valid-prop" "^0.40.0" + "@pandacss/logger" "0.40.0" + "@pandacss/shared" "0.40.0" + "@pandacss/token-dictionary" "0.40.0" + "@pandacss/types" "0.40.0" + browserslist "4.23.0" + hookable "5.5.3" + lightningcss "1.23.0" + lodash.merge "4.6.2" + outdent "0.8.0" + postcss "8.4.38" + postcss-discard-duplicates "7.0.0" + postcss-discard-empty "7.0.0" + postcss-merge-rules "7.0.0" + postcss-minify-selectors "7.0.0" + postcss-nested "6.0.1" + postcss-normalize-whitespace "7.0.0" + postcss-selector-parser "6.0.16" + ts-pattern "5.0.8" + +"@pandacss/dev@^0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/dev/-/dev-0.40.0.tgz#0fca202f8b392f0a9c53ed81ccf77b3a1e8fd071" + integrity sha512-ut59w/rxU4dk7m5hUYni22XdhISk8QpMOfdsB11kNGA4SxrL+AVeRe4nUQeS1TpbZXcds6fBai3nf3ouKLtOlQ== + dependencies: + "@clack/prompts" "0.7.0" + "@pandacss/config" "0.40.0" + "@pandacss/logger" "0.40.0" + "@pandacss/node" "0.40.0" + "@pandacss/postcss" "0.40.0" + "@pandacss/preset-panda" "0.40.0" + "@pandacss/shared" "0.40.0" + "@pandacss/token-dictionary" "0.40.0" + "@pandacss/types" "0.40.0" + cac "6.7.14" + +"@pandacss/extractor@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/extractor/-/extractor-0.40.0.tgz#b784ad51b21ea7c3475282e01698206ca4e9ef1a" + integrity sha512-VhlF2YPjqnLd5+tKpJHXrRwq0W1GhLQx6z2jn+2z9kQMyMrXysEWncNK4je8dZvDLVzvP3pBRXlBYT6LK5cxSg== + dependencies: + "@pandacss/shared" "0.40.0" + ts-evaluator "1.2.0" + ts-morph "21.0.1" + +"@pandacss/generator@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/generator/-/generator-0.40.0.tgz#422a3eb2c4cf2b5168122770d98e6789c9b82311" + integrity sha512-0jLIqgs/PviVTJmkZKpfYtGpViEnehRxGSmqv5NQjztqiLWL+6VoEj5pcRDiEyFJUDVBq5XeuUFK3OGt1DJyEg== + dependencies: + "@pandacss/core" "0.40.0" + "@pandacss/is-valid-prop" "^0.40.0" + "@pandacss/logger" "0.40.0" + "@pandacss/shared" "0.40.0" + "@pandacss/token-dictionary" "0.40.0" + "@pandacss/types" "0.40.0" + javascript-stringify "2.1.0" + outdent " ^0.8.0" + pluralize "8.0.0" + postcss "8.4.38" + ts-pattern "5.0.8" + +"@pandacss/is-valid-prop@^0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/is-valid-prop/-/is-valid-prop-0.40.0.tgz#3d6e054ff0ebef78a694a8da2518f67f88f79929" + integrity sha512-SJk4hY84Kjr1jWd+A6tCdNAzGOi1dMpLahjK7urNdTkVb0lvFb/0SURFM5zj9+N90zXaqPNtWgOoUvN5o0E+kQ== + +"@pandacss/logger@0.40.0", "@pandacss/logger@^0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/logger/-/logger-0.40.0.tgz#52d5097a9d80a6a1a6667ee09c2605b4f01e8fa2" + integrity sha512-PsGHBigBWlwagh0mzBZ5GP8RgR1mwnxhEjQ7qFKlgsbch49EJgJQO8mwFod37sB9Bx2oF3KVMqWxqbPjRX4Jgg== + dependencies: + "@pandacss/types" "0.40.0" + kleur "4.1.5" + +"@pandacss/node@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/node/-/node-0.40.0.tgz#51289642ece73b91f79ad7ef5e6ae262870fc0d5" + integrity sha512-EGDCcQgzQKQVtphyNdvrvhZ3DK3QyjN1jfmd528blaSuJKiPWV0t3yyfC5U+6jHC9UESZoinDknd6vywJ+snUg== + dependencies: + "@pandacss/config" "0.40.0" + "@pandacss/core" "0.40.0" + "@pandacss/extractor" "0.40.0" + "@pandacss/generator" "0.40.0" + "@pandacss/logger" "0.40.0" + "@pandacss/parser" "0.40.0" + "@pandacss/shared" "0.40.0" + "@pandacss/token-dictionary" "0.40.0" + "@pandacss/types" "0.40.0" + browserslist "4.23.0" + chokidar "3.6.0" + fast-glob "3.3.2" + file-size "1.0.0" + filesize "10.1.2" + fs-extra "11.2.0" + glob-parent "6.0.2" + is-glob "4.0.3" + lodash.merge "4.6.2" + look-it-up "2.1.0" + outdent " ^0.8.0" + perfect-debounce "1.0.0" + pkg-types "1.0.3" + pluralize "8.0.0" + postcss "8.4.38" + preferred-pm "3.1.2" + prettier "3.2.5" + ts-morph "21.0.1" + ts-pattern "5.0.8" + tsconfck "3.0.2" + +"@pandacss/parser@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/parser/-/parser-0.40.0.tgz#01304dde85b29672ef23455508a15d116764d03f" + integrity sha512-KtdeHWT0nY2xPI94je7TPLnT7/RwNT7cRBxs2akxEZMXR0WXQGiu4x7GASATdPNKyO0qUcXKZ44950k4NWAu+g== + dependencies: + "@pandacss/config" "^0.40.0" + "@pandacss/core" "^0.40.0" + "@pandacss/extractor" "0.40.0" + "@pandacss/logger" "0.40.0" + "@pandacss/shared" "0.40.0" + "@pandacss/types" "0.40.0" + "@vue/compiler-sfc" "3.4.19" + magic-string "0.30.10" + ts-morph "21.0.1" + ts-pattern "5.0.8" + +"@pandacss/postcss@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/postcss/-/postcss-0.40.0.tgz#d39abbd55eccafced28addd5c33788d760626a40" + integrity sha512-wb7AyCqOmCHsWjCfiI5LhEkXq3dA3V7F43MKobhwR65TA43zDJHY9Tc3KCzRlvOwP7pQ76XbBZQczCyMQBAHxQ== + dependencies: + "@pandacss/node" "0.40.0" + postcss "8.4.38" + +"@pandacss/preset-base@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/preset-base/-/preset-base-0.40.0.tgz#04e8d76f85817e49a49ae3679226917816a4ea25" + integrity sha512-2iVg3W+CqezHjuj9EGST2/RB/yjuy4M1U8zrcS6pVK9dCsImD47/PZHijcQwjT4RjTOU+oVuQyV/TbjWtiswPQ== + dependencies: + "@pandacss/types" "0.40.0" + +"@pandacss/preset-panda@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/preset-panda/-/preset-panda-0.40.0.tgz#662efddb35a86ae4f87f2f6128ff9dee39f54ac2" + integrity sha512-/K/i2HQR+T1cbJxRRmTK7wQrOjtBD9MJata8CsqBWDp8CfhZQt7rl3zfyWxbOtMa+IAh4bKu5CIOxY76yFzXvg== + dependencies: + "@pandacss/types" "0.40.0" + +"@pandacss/shared@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/shared/-/shared-0.40.0.tgz#8ea9a6455efcfa1f3b466b3dcfafac805c455138" + integrity sha512-cf+2AR01tNOBNLcMdAMOS4+O+rQX9Pc+GFspJexciKiOk94fUC7eTj0gJFuIbbAsAxdD3J2OGh6w9j4Vk/5xxA== + +"@pandacss/token-dictionary@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/token-dictionary/-/token-dictionary-0.40.0.tgz#e74ed136a741b92f85ac2ef21d7720ea11b7925e" + integrity sha512-VgUw6CJIThYvrmdKSsQmvz6G+4oMGPtU5ZibodlkVxZ29B8GDJ9eVIAyUCWWe/dCuto9p3faB7PVayXK6ZrAtw== + dependencies: + "@pandacss/logger" "^0.40.0" + "@pandacss/shared" "0.40.0" + "@pandacss/types" "0.40.0" + ts-pattern "5.0.8" + +"@pandacss/types@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/types/-/types-0.40.0.tgz#7d0b6145dab16e7407a5ab6211142057bd2c07ab" + integrity sha512-oAzs5YvN7kuO+/4cQqpYBspmtDRmTNdNqwKgQQb5l232bGhjbrJzo1U4uE8OgP1Agl8in+nzwC5kf3wPaPOMWw== + "@phosphor-icons/core@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@phosphor-icons/core/-/core-2.0.2.tgz#108c0e5d798bcb76951ae8d0a61987cd549ac949" @@ -4272,6 +4607,16 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@ts-morph/common@~0.22.0": + version "0.22.0" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.22.0.tgz#8951d451622a26472fbc3a227d6c3a90e687a683" + integrity sha512-HqNBuV/oIlMKdkLshXd1zKBqNQCsuPEsgQOkfFQ/eUKjRlwndXW1AjN9LVkBEIukm00gGXSRmfkl0Wv5VXLnlw== + dependencies: + fast-glob "^3.3.2" + minimatch "^9.0.3" + mkdirp "^3.0.1" + path-browserify "^1.0.1" + "@types/acorn@^4.0.0": version "4.0.6" resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22" @@ -4652,6 +4997,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.37.tgz#abb38afa9d6e8a2f627a8cb52290b3c80fbe61ed" integrity sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA== +"@types/node@^17.0.36": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + "@types/node@^18.0.0": version "18.16.3" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.3.tgz#6bda7819aae6ea0b386ebc5b24bdf602f1b42b01" @@ -5072,6 +5422,53 @@ loupe "^2.3.6" pretty-format "^29.5.0" +"@vue/compiler-core@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.19.tgz#3161b1ede69da00f3ce8155dfab907a3eaa0515e" + integrity sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w== + dependencies: + "@babel/parser" "^7.23.9" + "@vue/shared" "3.4.19" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.0.2" + +"@vue/compiler-dom@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz#2457e57e978f431e3b5fd11fc50a3e92d5816f9a" + integrity sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA== + dependencies: + "@vue/compiler-core" "3.4.19" + "@vue/shared" "3.4.19" + +"@vue/compiler-sfc@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz#33b238ded6d63e51f6a7048b742626f6007df129" + integrity sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg== + dependencies: + "@babel/parser" "^7.23.9" + "@vue/compiler-core" "3.4.19" + "@vue/compiler-dom" "3.4.19" + "@vue/compiler-ssr" "3.4.19" + "@vue/shared" "3.4.19" + estree-walker "^2.0.2" + magic-string "^0.30.6" + postcss "^8.4.33" + source-map-js "^1.0.2" + +"@vue/compiler-ssr@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz#1f8ee06005ebbaa354f8783fad84e9f7ea4a69c2" + integrity sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw== + dependencies: + "@vue/compiler-dom" "3.4.19" + "@vue/shared" "3.4.19" + +"@vue/shared@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.19.tgz#28105147811bcf1e6612bf1c9ab0c6d91ada019c" + integrity sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw== + "@yarnpkg/esbuild-plugin-pnp@^3.0.0-rc.10": version "3.0.0-rc.15" resolved "https://registry.yarnpkg.com/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz#4e40e7d2eb28825c9a35ab9d04c363931d7c0e67" @@ -5146,7 +5543,7 @@ acorn@^8.0.0, acorn@^8.8.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== -acorn@^8.1.0, acorn@^8.8.1: +acorn@^8.1.0, acorn@^8.11.3, acorn@^8.8.1: version "8.11.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== @@ -5741,6 +6138,16 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" +browserslist@4.23.0, browserslist@^4.0.0, browserslist@^4.22.3, browserslist@^4.23.0: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + dependencies: + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + browserslist@^4.21.3, browserslist@^4.21.5: version "4.21.5" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" @@ -5771,16 +6178,6 @@ browserslist@^4.22.2: node-releases "^2.0.14" update-browserslist-db "^1.0.13" -browserslist@^4.22.3: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== - dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - bser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" @@ -5830,6 +6227,14 @@ builtins@^5.0.0: dependencies: semver "^7.0.0" +bundle-n-require@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bundle-n-require/-/bundle-n-require-1.1.1.tgz#857e6308ac92f29a9fe8e292ea7719247491e3e2" + integrity sha512-EB2wFjXF106LQLe/CYnKCMCdLeTW47AtcEtUfiqAOgr2a08k0+YgRklur2aLfEYHlhz6baMskZ8L2U92Hh0vyA== + dependencies: + esbuild "^0.20.0" + node-eval "^2.0.0" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -5840,6 +6245,11 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +cac@6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + cacheable-lookup@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" @@ -5905,6 +6315,21 @@ camelcase@^7.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0: + version "1.0.30001625" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001625.tgz#ead1b155ea691d6a87938754d3cb119c24465b03" + integrity sha512-4KE9N2gcRH+HQhpeiRZXd+1niLB/XNLAhSy4z7fI8EzcbcPoAqjNInxVHTiTwWfTIV4w096XG8OtCOCQQKPv3w== + caniuse-lite@^1.0.30001449: version "1.0.30001458" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001458.tgz#871e35866b4654a7d25eccca86864f411825540c" @@ -6015,6 +6440,21 @@ checksync@^4.0.0: resolved "https://registry.yarnpkg.com/checksync/-/checksync-4.0.0.tgz#fd74959cc91f665047ae94b541ab22007b0a9b53" integrity sha512-G+wpCe4LfFLUSLCD+cSwF/stWXP9tm4M2Iy+8CBKiBX0izZ53nHTzbQ02aKfVxg6Q87e1xd/Q7AJbPXqiQxacw== +chokidar@3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chokidar@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" @@ -6155,6 +6595,11 @@ co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" +code-block-writer@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-12.0.0.tgz#4dd58946eb4234105aff7f0035977b2afdc2a770" + integrity sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w== + collect-v8-coverage@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz#150ee634ac3650b71d9c985eb7f608942334feb1" @@ -6254,6 +6699,11 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" +confbox@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.7.tgz#ccfc0a2bcae36a84838e83a3b7f770fb17d6c579" + integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== + config-chain@^1.1.11: version "1.1.13" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" @@ -6366,6 +6816,13 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crosspath@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crosspath/-/crosspath-2.0.0.tgz#5714f30c6541cc776103754954602ce0d25f126c" + integrity sha512-ju88BYCQ2uvjO2bR+SsgLSTwTSctU+6Vp2ePbKPgSCZyy4MWZxYsT738DlKVRE5utUjobjPRm1MkTYKJxCmpTA== + dependencies: + "@types/node" "^17.0.36" + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" @@ -6390,6 +6847,16 @@ css.escape@^1.5.1: resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-utils@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-5.0.0.tgz#b53a0343dd5d21012911882db6ae7d2eae0e3687" + integrity sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ== + cssom@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" @@ -6672,6 +7139,11 @@ detect-indent@^6.0.0, detect-indent@^6.1.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -6874,7 +7346,7 @@ enquirer@^2.3.0: dependencies: ansi-colors "^4.1.1" -entities@^4.4.0: +entities@^4.4.0, entities@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== @@ -7064,6 +7536,40 @@ esbuild@^0.18.10: "@esbuild/win32-ia32" "0.18.17" "@esbuild/win32-x64" "0.18.17" +esbuild@^0.20.0: + version "0.20.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" + integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== + optionalDependencies: + "@esbuild/aix-ppc64" "0.20.2" + "@esbuild/android-arm" "0.20.2" + "@esbuild/android-arm64" "0.20.2" + "@esbuild/android-x64" "0.20.2" + "@esbuild/darwin-arm64" "0.20.2" + "@esbuild/darwin-x64" "0.20.2" + "@esbuild/freebsd-arm64" "0.20.2" + "@esbuild/freebsd-x64" "0.20.2" + "@esbuild/linux-arm" "0.20.2" + "@esbuild/linux-arm64" "0.20.2" + "@esbuild/linux-ia32" "0.20.2" + "@esbuild/linux-loong64" "0.20.2" + "@esbuild/linux-mips64el" "0.20.2" + "@esbuild/linux-ppc64" "0.20.2" + "@esbuild/linux-riscv64" "0.20.2" + "@esbuild/linux-s390x" "0.20.2" + "@esbuild/linux-x64" "0.20.2" + "@esbuild/netbsd-x64" "0.20.2" + "@esbuild/openbsd-x64" "0.20.2" + "@esbuild/sunos-x64" "0.20.2" + "@esbuild/win32-arm64" "0.20.2" + "@esbuild/win32-ia32" "0.20.2" + "@esbuild/win32-x64" "0.20.2" + +escalade@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -7588,6 +8094,17 @@ fast-glob@3, fast-glob@^3.2.11, fast-glob@^3.2.12: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@3.3.2, fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" @@ -7644,6 +8161,11 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-size@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-size/-/file-size-1.0.0.tgz#3338267d5d206bbf60f4df60c19d7ed3813a4657" + integrity sha512-tLIdonWTpABkU6Axg2yGChYdrOsy4V8xcm0IcyAP8fSsu6jiXLm5pgs083e4sq5fzNRZuAYolUbZyYmPvCKfwQ== + file-system-cache@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-2.3.0.tgz#201feaf4c8cd97b9d0d608e96861bb6005f46fe6" @@ -7659,6 +8181,11 @@ filelist@^1.0.4: dependencies: minimatch "^5.0.1" +filesize@10.1.2: + version "10.1.2" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-10.1.2.tgz#33bb71c5c134102499f1bc36e6f2863137f6cb0c" + integrity sha512-Dx770ai81ohflojxhU+oG+Z2QGvKdYxgEr9OSA8UVrqhwNHjfH9A8f5NKfg83fEH8ZFA5N5llJo5T3PIoZ4CRA== + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -7826,6 +8353,15 @@ fs-extra@11.1.1, fs-extra@^11.1.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -7998,6 +8534,13 @@ github-slugger@^2.0.0: resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a" integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw== +glob-parent@6.0.2, glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -8005,13 +8548,6 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - glob-promise@^4.2.0: version "4.2.2" resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-4.2.2.tgz#15f44bcba0e14219cd93af36da6bb905ff007877" @@ -8427,6 +8963,11 @@ hoist-non-react-statics@^3.1.0: dependencies: react-is "^16.7.0" +hookable@5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d" + integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ== + hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -8821,7 +9362,7 @@ is-generator-function@^1.0.7: dependencies: has-tostringtag "^1.0.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: +is-glob@4.0.3, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -9045,6 +9586,11 @@ is-weakset@^2.0.1: call-bind "^1.0.2" get-intrinsic "^1.1.1" +is-what@^4.1.8: + version "4.1.16" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.16.tgz#1ad860a19da8b4895ad5495da3182ce2acdd7a6f" + integrity sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A== + is-windows@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -9144,6 +9690,11 @@ jake@^10.8.5: filelist "^1.0.4" minimatch "^3.1.2" +javascript-stringify@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" + integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== + jest-changed-files@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" @@ -9761,6 +10312,11 @@ kind-of@^6.0.2, kind-of@^6.0.3: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +kleur@4.1.5, kleur@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -9771,11 +10327,6 @@ kleur@^4.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.4.tgz#8c202987d7e577766d039a8cd461934c01cda04d" integrity sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA== -kleur@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - language-subtag-registry@~0.3.2: version "0.3.21" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" @@ -9824,6 +10375,68 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lightningcss-darwin-arm64@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.23.0.tgz#11780f37158a458cead5e89202f74cd99b926e36" + integrity sha512-kl4Pk3Q2lnE6AJ7Qaij47KNEfY2/UXRZBT/zqGA24B8qwkgllr/j7rclKOf1axcslNXvvUdztjo4Xqh39Yq1aA== + +lightningcss-darwin-x64@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.23.0.tgz#8394edaa04f0984b971eab42b6f68edb1258b3ed" + integrity sha512-KeRFCNoYfDdcolcFXvokVw+PXCapd2yHS1Diko1z1BhRz/nQuD5XyZmxjWdhmhN/zj5sH8YvWsp0/lPLVzqKpg== + +lightningcss-freebsd-x64@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.23.0.tgz#d3f6faddc424f17ed046e8be9ca97868a5f804ed" + integrity sha512-xhnhf0bWPuZxcqknvMDRFFo2TInrmQRWZGB0f6YoAsZX8Y+epfjHeeOIGCfAmgF0DgZxHwYc8mIR5tQU9/+ROA== + +lightningcss-linux-arm-gnueabihf@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.23.0.tgz#040e9718c9a9dc088322da33983a894564ffcb10" + integrity sha512-fBamf/bULvmWft9uuX+bZske236pUZEoUlaHNBjnueaCTJ/xd8eXgb0cEc7S5o0Nn6kxlauMBnqJpF70Bgq3zg== + +lightningcss-linux-arm64-gnu@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.23.0.tgz#05cfcfa2cf47a042ca11cfce520ae9f91e4efcdb" + integrity sha512-RS7sY77yVLOmZD6xW2uEHByYHhQi5JYWmgVumYY85BfNoVI3DupXSlzbw+b45A9NnVKq45+oXkiN6ouMMtTwfg== + +lightningcss-linux-arm64-musl@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.23.0.tgz#3212a10dff37c70808113fbcf7cbd1b63c6cbc6f" + integrity sha512-cU00LGb6GUXCwof6ACgSMKo3q7XYbsyTj0WsKHLi1nw7pV0NCq8nFTn6ZRBYLoKiV8t+jWl0Hv8KkgymmK5L5g== + +lightningcss-linux-x64-gnu@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.23.0.tgz#3b27da32889285b1c5de3f26094ee234054634fc" + integrity sha512-q4jdx5+5NfB0/qMbXbOmuC6oo7caPnFghJbIAV90cXZqgV8Am3miZhC4p+sQVdacqxfd+3nrle4C8icR3p1AYw== + +lightningcss-linux-x64-musl@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.23.0.tgz#ad65b5a944f10d966cc10070bf20f81ddadd4240" + integrity sha512-G9Ri3qpmF4qef2CV/80dADHKXRAQeQXpQTLx7AiQrBYQHqBjB75oxqj06FCIe5g4hNCqLPnM9fsO4CyiT1sFSQ== + +lightningcss-win32-x64-msvc@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.23.0.tgz#62f3f619a7bb44f8713973103fbe1bcbd9d455f9" + integrity sha512-1rcBDJLU+obPPJM6qR5fgBUiCdZwZLafZM5f9kwjFLkb/UBNIzmae39uCSmh71nzPCTXZqHbvwu23OWnWEz+eg== + +lightningcss@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.23.0.tgz#58c94a533d02d8416d4f2ec9ab87641f61943c78" + integrity sha512-SEArWKMHhqn/0QzOtclIwH5pXIYQOUEkF8DgICd/105O+GCgd7jxjNod/QPnBCSWvpRHQBGVz5fQ9uScby03zA== + dependencies: + detect-libc "^1.0.3" + optionalDependencies: + lightningcss-darwin-arm64 "1.23.0" + lightningcss-darwin-x64 "1.23.0" + lightningcss-freebsd-x64 "1.23.0" + lightningcss-linux-arm-gnueabihf "1.23.0" + lightningcss-linux-arm64-gnu "1.23.0" + lightningcss-linux-arm64-musl "1.23.0" + lightningcss-linux-x64-gnu "1.23.0" + lightningcss-linux-x64-musl "1.23.0" + lightningcss-win32-x64-msvc "1.23.0" + limit-spawn@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/limit-spawn/-/limit-spawn-0.0.3.tgz#cc09c24467a0f0a1ed10a5196dba597cad3f65dc" @@ -9934,7 +10547,12 @@ lodash.kebabcase@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= -lodash.merge@^4.6.2: +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@4.6.2, lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== @@ -9949,6 +10567,11 @@ lodash.unionwith@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.unionwith/-/lodash.unionwith-4.6.0.tgz#74d140b5ca8146e6c643c3724f5152538d9ac1f0" integrity sha1-dNFAtcqBRubGQ8NyT1FSU42awfA= +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -9967,6 +10590,11 @@ longest-streak@^3.0.0: resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.0.1.tgz#c97315b7afa0e7d9525db9a5a2953651432bdc5d" integrity sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg== +look-it-up@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/look-it-up/-/look-it-up-2.1.0.tgz#278a7ffc9da60a928452a0bab5452bb8855d7d13" + integrity sha512-nMoGWW2HurtuJf6XAL56FWTDCWLOTSsanrgwOyaR5Y4e3zfG5N/0cU5xWZSEU3tBxhQugRbV1xL9jb+ug7yZww== + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -10027,6 +10655,13 @@ lz-string@^1.5.0: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== +magic-string@0.30.10, magic-string@^0.30.6: + version "0.30.10" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + magic-string@^0.27.0: version "0.27.0" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" @@ -10497,6 +11132,13 @@ meow@^9.0.0: type-fest "^0.18.0" yargs-parser "^20.2.3" +merge-anything@5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/merge-anything/-/merge-anything-5.1.7.tgz#94f364d2b0cf21ac76067b5120e429353b3525d7" + integrity sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ== + dependencies: + is-what "^4.1.8" + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -10517,6 +11159,11 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== +microdiff@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/microdiff/-/microdiff-1.3.2.tgz#b4fec53aca97371d5409a354913a65be2daec11d" + integrity sha512-pKy60S2febliZIbwdfEQKTtL5bLNxOyiRRmD400gueYl9XcHyNGxzHSlJWn9IMHwYXT0yohPYL08+bGozVk8cQ== + micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz#edff4c72e5993d93724a3c206970f5a15b0585ad" @@ -11262,6 +11909,13 @@ minimatch@^9.0.1: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.3: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0, minimist-options@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -11321,6 +11975,21 @@ mkdirp@^1.0.3: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mkdirp@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + +mlly@^1.2.0, mlly@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.0.tgz#587383ae40dda23cadb11c3c3cc972b277724271" + integrity sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ== + dependencies: + acorn "^8.11.3" + pathe "^1.1.2" + pkg-types "^1.1.0" + ufo "^1.5.3" + moment@2.29.4: version "2.29.4" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" @@ -11351,6 +12020,11 @@ nanoid@^3.3.6: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -11422,6 +12096,13 @@ node-dir@^0.1.17: dependencies: minimatch "^3.0.2" +node-eval@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/node-eval/-/node-eval-2.0.0.tgz#ae1d1299deb4c0e41352f9528c1af6401661d37f" + integrity sha512-Ap+L9HznXAVeJj3TJ1op6M6bg5xtTq8L5CU/PJxtkhea/DrIxdTknGKIECKd/v/Lgql95iuMAYvIzBNd0pmcMg== + dependencies: + path-is-absolute "1.0.1" + node-fetch-native@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.2.0.tgz#13ec6df98f33168958dbfb6945f10aedf42e7ea8" @@ -11579,6 +12260,11 @@ object-keys@~0.4.0: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= +object-path@^0.11.8: + version "0.11.8" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.8.tgz#ed002c02bbdd0070b78a27455e8ae01fc14d4742" + integrity sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA== + object.assign@^4.1.0, object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" @@ -11719,6 +12405,11 @@ os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" +"outdent@ ^0.8.0", outdent@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0" + integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A== + outdent@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff" @@ -11911,6 +12602,11 @@ parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -11926,7 +12622,7 @@ path-exists@^5.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== -path-is-absolute@^1.0.0: +path-is-absolute@1.0.1, path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= @@ -11988,6 +12684,11 @@ pathe@^1.1.0: resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== +pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + pathval@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" @@ -12009,6 +12710,11 @@ peek-stream@^1.1.0: duplexify "^3.5.0" through2 "^2.0.3" +perfect-debounce@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a" + integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -12064,6 +12770,24 @@ pkg-dir@^5.0.0: dependencies: find-up "^5.0.0" +pkg-types@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + +pkg-types@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.1.tgz#07b626880749beb607b0c817af63aac1845a73f2" + integrity sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ== + dependencies: + confbox "^0.1.7" + mlly "^1.7.0" + pathe "^1.1.2" + plur@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/plur/-/plur-4.0.0.tgz#729aedb08f452645fe8c58ef115bf16b0a73ef84" @@ -12071,7 +12795,7 @@ plur@^4.0.0: dependencies: irregular-plurals "^3.2.0" -pluralize@^8.0.0: +pluralize@8.0.0, pluralize@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== @@ -12088,6 +12812,77 @@ popper.js@^1.14.4: resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== +postcss-discard-duplicates@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.0.tgz#47ae1154cc89ad0a50099fbac1f74c942214c961" + integrity sha512-bAnSuBop5LpAIUmmOSsuvtKAAKREB6BBIYStWUTGq8oG5q9fClDMMuY8i4UPI/cEcDx2TN+7PMnXYIId20UVDw== + +postcss-discard-empty@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz#218829d1ef0a5d5142dd62f0aa60e00e599d2033" + integrity sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA== + +postcss-merge-rules@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-7.0.0.tgz#069a427807fdb1e2dcca3bf218d0a9f70103526a" + integrity sha512-Zty3VlOsD6VSjBMu6PiHCVpLegtBT/qtZRVBcSeyEZ6q1iU5qTYT0WtEoLRV+YubZZguS5/ycfP+NRiKfjv6aw== + dependencies: + browserslist "^4.23.0" + caniuse-api "^3.0.0" + cssnano-utils "^5.0.0" + postcss-selector-parser "^6.0.16" + +postcss-minify-selectors@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-7.0.0.tgz#5dedb26806f58d683a3bb362e095ad5aa24f1bf6" + integrity sha512-f00CExZhD6lNw2vTZbcnmfxVgaVKzUw6IRsIFX3JTT8GdsoABc1WnhhGwL1i8YPJ3sSWw39fv7XPtvLb+3Uitw== + dependencies: + postcss-selector-parser "^6.0.16" + +postcss-nested@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" + integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== + dependencies: + postcss-selector-parser "^6.0.11" + +postcss-normalize-whitespace@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz#46b025f0bea72139ddee63015619b0c21cebd845" + integrity sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@6.0.16: + version "6.0.16" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" + integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.16: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53" + integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +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== + +postcss@8.4.38, postcss@^8.4.33, postcss@^8.4.38: + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + postcss@^8.4.26: version "8.4.27" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057" @@ -12097,6 +12892,16 @@ postcss@^8.4.26: picocolors "^1.0.0" source-map-js "^1.0.2" +preferred-pm@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.1.2.tgz#aedb70550734a574dffcbf2ce82642bd1753bdd6" + integrity sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q== + dependencies: + find-up "^5.0.0" + find-yarn-workspace-root2 "1.2.16" + path-exists "^4.0.0" + which-pm "2.0.0" + preferred-pm@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.0.3.tgz#1b6338000371e3edbce52ef2e4f65eb2e73586d6" @@ -12123,6 +12928,11 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" +prettier@3.2.5, prettier@^3.1.1: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + prettier@^2.7.1: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" @@ -12133,11 +12943,6 @@ prettier@^2.8.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== -prettier@^3.1.1: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== - pretty-format@^27.0.2: version "27.4.6" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.6.tgz#1b784d2f53c68db31797b2348fa39b49e31846b7" @@ -13354,6 +14159,11 @@ source-map-js@^1.0.2: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" @@ -13923,6 +14733,33 @@ ts-dedent@^2.0.0, ts-dedent@^2.2.0: resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== +ts-evaluator@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-evaluator/-/ts-evaluator-1.2.0.tgz#046ea597417046c7fe31d100502a927c5a55c200" + integrity sha512-ncSGek1p92bj2ifB7s9UBgryHCkU9vwC5d+Lplt12gT9DH+e41X8dMoHRQjIMeAvyG7j9dEnuHmwgOtuRIQL+Q== + dependencies: + ansi-colors "^4.1.3" + crosspath "^2.0.0" + object-path "^0.11.8" + +ts-morph@21.0.1: + version "21.0.1" + resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-21.0.1.tgz#712302a0f6e9dbf1aa8d9cf33a4386c4b18c2006" + integrity sha512-dbDtVdEAncKctzrVZ+Nr7kHpHkv+0JDJb2MjjpBaj8bFeCkePU9rHfMklmhuLFnpeq/EJZk2IhStY6NzqgjOkg== + dependencies: + "@ts-morph/common" "~0.22.0" + code-block-writer "^12.0.0" + +ts-pattern@5.0.8: + version "5.0.8" + resolved "https://registry.yarnpkg.com/ts-pattern/-/ts-pattern-5.0.8.tgz#47fa76776350bfbffaa6252a69ce5990ae05db95" + integrity sha512-aafbuAQOTEeWmA7wtcL94w6I89EgLD7F+IlWkr596wYxeb0oveWDO5dQpv85YP0CGbxXT/qXBIeV6IYLcoZ2uA== + +tsconfck@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.0.2.tgz#d8e279f7a049d55f207f528d13fa493e1d8e7ceb" + integrity sha512-6lWtFjwuhS3XI4HsX4Zg0izOI3FU/AI9EGVlPEUMDIhvLPMD4wkiof0WCoDgW7qY+Dy198g4d9miAqUHWHFH6Q== + tsconfig-paths@^3.14.1: version "3.14.1" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" @@ -14094,10 +14931,20 @@ typescript-coverage-report@^0.7.0: semantic-ui-react "^0.88.2" type-coverage-core "^2.23.0" -typescript@^4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" + integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== + +typescript@5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + +ufo@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" + integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== uglify-js@^3.1.4: version "3.14.2" From 48a65fb31e958fe4c9c87a7061df8a3f0051d76d Mon Sep 17 00:00:00 2001 From: Juan Andrade Date: Fri, 31 May 2024 13:49:46 -0400 Subject: [PATCH 02/17] Configure panda-css, add panda support to View --- .changeset/small-parrots-smell.md | 5 + .gitignore | 4 + .storybook/index.css | 2 + .storybook/main.ts | 7 + .storybook/preview.tsx | 2 + __docs__/wonder-blocks-core/view.stories.tsx | 64 +- package.json | 5 +- packages/tsconfig-shared.json | 3 +- .../src/components/view.tsx | 93 +- packages/wonder-blocks-core/src/util/types.ts | 3 +- panda.config.ts | 64 ++ postcss.config.js | 3 + tsconfig.json | 4 +- yarn.lock | 921 +++++++++++++++++- 14 files changed, 1089 insertions(+), 91 deletions(-) create mode 100644 .changeset/small-parrots-smell.md create mode 100644 .storybook/index.css create mode 100644 panda.config.ts create mode 100644 postcss.config.js diff --git a/.changeset/small-parrots-smell.md b/.changeset/small-parrots-smell.md new file mode 100644 index 0000000000..fdbf1269dd --- /dev/null +++ b/.changeset/small-parrots-smell.md @@ -0,0 +1,5 @@ +--- +"@khanacademy/wonder-blocks-core": major +--- + +Use PandaCSS in View diff --git a/.gitignore b/.gitignore index 534b41e9ef..4d19becdce 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,7 @@ storybook-static !.vscode .DS_Store yarn-error.log + +## Panda +styled-system +styled-system-studio \ No newline at end of file diff --git a/.storybook/index.css b/.storybook/index.css new file mode 100644 index 0000000000..d331dc00c2 --- /dev/null +++ b/.storybook/index.css @@ -0,0 +1,2 @@ +@layer reset, base, tokens, recipes, utilities; +/* @layer utilities; */ \ No newline at end of file diff --git a/.storybook/main.ts b/.storybook/main.ts index 276a879c33..c43916f03e 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -34,6 +34,13 @@ const config: StorybookConfig = { "../packages/wonder-blocks$1/src", ), }, + { + find: /^\@\/styled-system\/([\w]+)/, + replacement: resolve( + __dirname, + "../styled-system/$1", + ), + }, ], }, }); diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx index 00ec0c0131..718349dc57 100644 --- a/.storybook/preview.tsx +++ b/.storybook/preview.tsx @@ -7,6 +7,8 @@ import {ThemeSwitcherContext} from "@khanacademy/wonder-blocks-theming"; import {RenderStateRoot} from "../packages/wonder-blocks-core/src"; import {Preview} from "@storybook/react"; +import "./index.css"; + /** * WB Official breakpoints * @see https://khanacademy.atlassian.net/wiki/spaces/WB/pages/2099970518/Layout+Breakpoints diff --git a/__docs__/wonder-blocks-core/view.stories.tsx b/__docs__/wonder-blocks-core/view.stories.tsx index c360788757..878c92e076 100644 --- a/__docs__/wonder-blocks-core/view.stories.tsx +++ b/__docs__/wonder-blocks-core/view.stories.tsx @@ -1,7 +1,12 @@ import * as React from "react"; -import {StyleSheet} from "aphrodite"; +// import {StyleSheet} from "aphrodite"; import type {Meta, StoryObj} from "@storybook/react"; +import {css, cx} from "@/styled-system/css"; +// ISSUE(juan): Panda CSS does not support external files. +// This is due to the fact that static analysis is not possible with external +// references. +// https://panda-css.com/docs/guides/dynamic-styling#what-you-cant-do import {color, spacing} from "@khanacademy/wonder-blocks-tokens"; import { HeadingMedium, @@ -51,11 +56,15 @@ export const InlineStyles: StoryComponentType = () => ( The style prop can accept a (nested) array of Aphrodite styles and @@ -133,21 +142,28 @@ DefiningLayout.parameters = { }, }; -const styles = StyleSheet.create({ - container: { - background: color.offBlack8, - gap: spacing.medium_16, - padding: spacing.xLarge_32, - }, - - view: { - border: `1px dashed ${color.lightBlue}`, - gap: spacing.medium_16, - padding: spacing.medium_16, - }, - - item: { - background: color.offBlack32, - padding: spacing.medium_16, - }, -}); +const styles = { + // HACK(juan): css.raw needs to be used so that the compiler can identify + // that the tokens are being used and extract them via static analysis. + // https://panda-css.com/docs/guides/dynamic-styling#alternative + container: css.raw({ + background: "offBlack8", + gap: "medium_16", + padding: "xLarge_32", + }), + + view: css.raw({ + // ISSUE(juan): shorthand property defined in view.tsx will take + // precedence over the longhand property. This means that the border + // will be 0px (instead of 1px). + // https://panda-css.com/docs/concepts/writing-styles#property-conflicts + border: `1px dashed {colors.lightBlue}`, + gap: "medium_16", + padding: "medium_16", + }), + + item: css.raw({ + background: "offBlack32", + padding: "medium_16", + }), +}; diff --git a/package.json b/package.json index b6f4110f9f..ad9fd74901 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "node": ">=16" }, "scripts": { + "prepare": "panda codegen", "alex": "alex packages/", "build": "rollup -c ./build-settings/rollup.config.js", "build:types": "yarn tsc --build tsconfig-build.json && node -r @swc-node/register build-settings/remove-test-types-from-dist.ts", @@ -50,6 +51,7 @@ "@khanacademy/eslint-config": "^2.0.0", "@khanacademy/eslint-plugin": "^2.0.0", "@khanacademy/wonder-stuff-testing": "^3.0.1", + "@pandacss/dev": "^0.40.0", "@rollup/plugin-node-resolve": "^15.0.2", "@storybook/addon-a11y": "^8.0.0", "@storybook/addon-designs": "^7.0.5", @@ -104,6 +106,7 @@ "jest-extended": "^3.2.4", "jscodeshift": "^0.15.1", "npm-package-json-lint": "^6.4.0", + "postcss": "^8.4.38", "prettier": "^2.8.1", "react-refresh": "^0.14.0", "rollup": "^2.79.1", @@ -111,7 +114,7 @@ "rollup-plugin-babel": "^4.0.0-beta.2", "storybook": "^8.0.0", "storybook-addon-pseudo-states": "^2.1.2", - "typescript": "^4.9.5", + "typescript": "5.1.6", "typescript-coverage-report": "^0.7.0", "vite": "^4.4.8", "vite-plugin-turbosnap": "^1.0.2" diff --git a/packages/tsconfig-shared.json b/packages/tsconfig-shared.json index de5642d244..27c520aaef 100644 --- a/packages/tsconfig-shared.json +++ b/packages/tsconfig-shared.json @@ -14,7 +14,8 @@ "paths": { "@khanacademy/*": [ "./*/src" - ] + ], + "@/styled-system/*": ["../styled-system/*"] }, }, } diff --git a/packages/wonder-blocks-core/src/components/view.tsx b/packages/wonder-blocks-core/src/components/view.tsx index c2213d4b02..c6dad78e74 100644 --- a/packages/wonder-blocks-core/src/components/view.tsx +++ b/packages/wonder-blocks-core/src/components/view.tsx @@ -1,28 +1,51 @@ -// WARNING: If you modify this file you must update view.js.flow. -import * as React from "react"; import {StyleSheet} from "aphrodite"; +import * as React from "react"; +import {css, cx} from "@/styled-system/css"; +import type {SystemStyleObject} from "@/styled-system/types"; +// import {css, cx} from "../../../../styled-system/css"; + +import type {StyleType, TextViewSharedProps} from "../util/types"; -import addStyle from "../util/add-style"; +import {processStyleList} from "../util/util"; -import type {TextViewSharedProps} from "../util/types"; +// import addStyle from "../util/add-style"; + +function isAphroditeStyle( + style: SystemStyleObject | StyleType, +): style is StyleType { + return ( + (typeof style === "object" && + Object.prototype.hasOwnProperty.call(style, "_definition")) || + (Array.isArray(style) && + style.length > 0 && + style.some( + (s) => + s && + typeof s === "object" && + Object.prototype.hasOwnProperty.call(s, "_definition"), + )) + ); +} + +// https://github.com/facebook/css-layout#default-values +const defaultStyle = { + alignItems: "stretch", + borderWidth: 0, + borderStyle: "solid", + boxSizing: "border-box", + display: "flex", + flexDirection: "column", + margin: 0, + padding: 0, + position: "relative", + zIndex: 0, + // fix flexbox bugs + minHeight: 0, + minWidth: 0, +}; const styles = StyleSheet.create({ - // https://github.com/facebook/css-layout#default-values - default: { - alignItems: "stretch", - borderWidth: 0, - borderStyle: "solid", - boxSizing: "border-box", - display: "flex", - flexDirection: "column", - margin: 0, - padding: 0, - position: "relative", - zIndex: 0, - // fix flexbox bugs - minHeight: 0, - minWidth: 0, - }, + default: defaultStyle, }); type ValidViewTags = "div" | "article" | "aside" | "nav" | "section"; @@ -33,11 +56,11 @@ type Props = TextViewSharedProps & { tag?: ValidViewTags; }; -const StyledDiv = addStyle("div", styles.default); -const StyledArticle = addStyle("article", styles.default); -const StyledAside = addStyle("aside", styles.default); -const StyledNav = addStyle("nav", styles.default); -const StyledSection = addStyle("section", styles.default); +const StyledDiv = "div"; //addStyle("div", styles.default); +const StyledArticle = "article"; // addStyle("article", styles.default); +const StyledAside = "aside"; // addStyle("aside", styles.default); +const StyledNav = "nav"; // addStyle("nav", styles.default); +const StyledSection = "section"; // addStyle("section", styles.default); /** * View is a building block for constructing other components. `View` roughly @@ -69,9 +92,27 @@ const StyledSection = addStyle("section", styles.default); const View: React.ForwardRefExoticComponent< Props & React.RefAttributes > = React.forwardRef(function View(props, ref) { - const {testId, tag = "div", ...restProps} = props; + const {style, testId, tag = "div", ...restProps} = props; + + let className = null; + let aphroditeStyle = null; + + // StyleType + if (isAphroditeStyle(style)) { + aphroditeStyle = processStyleList([styles.default, style]); + } else { + const extraStyles = Array.isArray(style) ? [...style] : style; + className = css(defaultStyle, extraStyles); + } + + const finalStyles = isAphroditeStyle(style) + ? aphroditeStyle?.className + : className; + const commonProps = { ...restProps, + className: cx(props.className, finalStyles), + style: aphroditeStyle?.style, // Note: this matches the default test id that Testing Library uses! "data-testid": testId, } as const; diff --git a/packages/wonder-blocks-core/src/util/types.ts b/packages/wonder-blocks-core/src/util/types.ts index b6d8db5d13..37122782d3 100644 --- a/packages/wonder-blocks-core/src/util/types.ts +++ b/packages/wonder-blocks-core/src/util/types.ts @@ -1,6 +1,7 @@ import * as React from "react"; import type {CSSProperties} from "aphrodite"; +import {SystemStyleObject} from "../../../../styled-system/types/index.d"; import type {AriaAttributes, AriaRole} from "./aria-types"; @@ -75,7 +76,7 @@ export type TextViewSharedProps = { /** * Optional custom styles. */ - style?: StyleType; + style?: StyleType | SystemStyleObject; /** * Test ID used for e2e testing. */ diff --git a/panda.config.ts b/panda.config.ts new file mode 100644 index 0000000000..84957c8d7d --- /dev/null +++ b/panda.config.ts @@ -0,0 +1,64 @@ +import {defineConfig, defineTokens} from "@pandacss/dev"; +import {color, spacing} from "@khanacademy/wonder-blocks-tokens"; + +const wbTokenToPandaToken = (token: Record) => + Object.entries(token) + .map(([key, value]) => { + if (typeof value === "number") { + value = `${value}px`; + } + return { + [key]: { + value, + }, + }; + }) + .reduce((acc, curr) => ({...acc, ...curr}), {}) as { + [x: string]: { + value: string; + }; + }; + +// Map WB tokens to Panda CSS tokens +const tokens = defineTokens({ + colors: wbTokenToPandaToken(color), + spacing: wbTokenToPandaToken(spacing), +}); + +export default defineConfig({ + // Whether to use css reset + preflight: false, + + // Where to look for your css declarations + include: [ + "./packages/**/*.{ts,tsx}", + "./__docs__/**/*.{ts,tsx,mdx}", + "./.storybook/**/*.{ts,tsx}", + ], + + // Files to exclude + exclude: [], + + // Disable default tokens + presets: [], + + // Useful for theme customization + theme: { + tokens: tokens, + }, + + // The output directory for your css system + outdir: "styled-system", + + staticCss: { + css: [ + { + properties: { + background: ["*"], + }, + }, + ], + }, + + importMap: "@/styled-system", +}); diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000000..c81881e173 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,3 @@ +module.exports = { + plugins: [require("@pandacss/dev/postcss")()], +}; diff --git a/tsconfig.json b/tsconfig.json index 15616e6258..9d1a2af420 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,15 @@ // This file is used by the `typecheck` command in package.json /* Visit https://aka.ms/tsconfig to read more about this file */ { + "include": ["styled-system"], "exclude": ["**/dist", "coverage", "coverage-ts"], "extends": "./tsconfig-common.json", "compilerOptions": { "noEmit": true, "paths": { - "@khanacademy/*": ["./packages/*/src"] + "@khanacademy/*": ["./packages/*/src"], + "@/styled-system/*": ["./styled-system/*"] }, } } diff --git a/yarn.lock b/yarn.lock index 6b709498ed..e2b9b13e0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2521,6 +2521,36 @@ human-id "^1.0.2" prettier "^2.7.1" +"@clack/core@^0.3.3": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@clack/core/-/core-0.3.4.tgz#375e82fc8fe46650b37cab2f2ea8752c6b7f0450" + integrity sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw== + dependencies: + picocolors "^1.0.0" + sisteransi "^1.0.5" + +"@clack/prompts@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@clack/prompts/-/prompts-0.7.0.tgz#6aaef48ea803d91cce12bc80811cfcb8de2e75ea" + integrity sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA== + dependencies: + "@clack/core" "^0.3.3" + picocolors "^1.0.0" + sisteransi "^1.0.5" + +"@csstools/postcss-cascade-layers@4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.6.tgz#5a421cd2d5792d1eb8c28e682dc5f2c3b85cb045" + integrity sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA== + dependencies: + "@csstools/selector-specificity" "^3.1.1" + postcss-selector-parser "^6.0.13" + +"@csstools/selector-specificity@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz#63085d2995ca0f0e55aa8b8a07d69bfd48b844fe" + integrity sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA== + "@discoveryjs/json-ext@^0.5.3": version "0.5.7" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" @@ -2545,6 +2575,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz#eafa8775019b3650a77e8310ba4dbd17ca7af6d5" integrity sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA== +"@esbuild/aix-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" + integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== + "@esbuild/android-arm64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz#9e00eb6865ed5f2dbe71a1e96f2c52254cd92903" @@ -2555,6 +2590,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz#68791afa389550736f682c15b963a4f37ec2f5f6" integrity sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A== +"@esbuild/android-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" + integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== + "@esbuild/android-arm@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.17.tgz#1aa013b65524f4e9f794946b415b32ae963a4618" @@ -2565,6 +2605,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.1.tgz#38c91d8ee8d5196f7fbbdf4f0061415dde3a473a" integrity sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw== +"@esbuild/android-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" + integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== + "@esbuild/android-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.17.tgz#c2bd0469b04ded352de011fae34a7a1d4dcecb79" @@ -2575,6 +2620,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.1.tgz#93f6190ce997b313669c20edbf3645fc6c8d8f22" integrity sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA== +"@esbuild/android-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" + integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== + "@esbuild/darwin-arm64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz#0c21a59cb5bd7a2cec66c7a42431dca42aefeddd" @@ -2585,6 +2635,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz#0d391f2e81fda833fe609182cc2fbb65e03a3c46" integrity sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA== +"@esbuild/darwin-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" + integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== + "@esbuild/darwin-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz#92f8763ff6f97dff1c28a584da7b51b585e87a7b" @@ -2595,6 +2650,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz#92504077424584684862f483a2242cfde4055ba2" integrity sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA== +"@esbuild/darwin-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" + integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== + "@esbuild/freebsd-arm64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz#934f74bdf4022e143ba2f21d421b50fd0fead8f8" @@ -2605,6 +2665,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz#a1646fa6ba87029c67ac8a102bb34384b9290774" integrity sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw== +"@esbuild/freebsd-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" + integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== + "@esbuild/freebsd-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz#16b6e90ba26ecc865eab71c56696258ec7f5d8bf" @@ -2615,6 +2680,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz#41c9243ab2b3254ea7fb512f71ffdb341562e951" integrity sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg== +"@esbuild/freebsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" + integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== + "@esbuild/linux-arm64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz#179a58e8d4c72116eb068563629349f8f4b48072" @@ -2625,6 +2695,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz#f3c1e1269fbc9eedd9591a5bdd32bf707a883156" integrity sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w== +"@esbuild/linux-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" + integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== + "@esbuild/linux-arm@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz#9d78cf87a310ae9ed985c3915d5126578665c7b5" @@ -2635,6 +2710,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz#4503ca7001a8ee99589c072801ce9d7540717a21" integrity sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw== +"@esbuild/linux-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" + integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== + "@esbuild/linux-ia32@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz#6fed202602d37361bca376c9d113266a722a908c" @@ -2645,6 +2725,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz#98c474e3e0cbb5bcbdd8561a6e65d18f5767ce48" integrity sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw== +"@esbuild/linux-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" + integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== + "@esbuild/linux-loong64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz#cdc60304830be1e74560c704bfd72cab8a02fa06" @@ -2655,6 +2740,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz#a8097d28d14b9165c725fe58fc438f80decd2f33" integrity sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA== +"@esbuild/linux-loong64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" + integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== + "@esbuild/linux-mips64el@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz#c367b2855bb0902f5576291a2049812af2088086" @@ -2665,6 +2755,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz#c44f6f0d7d017c41ad3bb15bfdb69b690656b5ea" integrity sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA== +"@esbuild/linux-mips64el@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" + integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== + "@esbuild/linux-ppc64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz#7fdc0083d42d64a4651711ee0a7964f489242f45" @@ -2675,6 +2770,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz#0765a55389a99237b3c84227948c6e47eba96f0d" integrity sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw== +"@esbuild/linux-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" + integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== + "@esbuild/linux-riscv64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz#5198a417f3f5b86b10c95647b8bc032e5b6b2b1c" @@ -2685,6 +2785,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz#e4153b032288e3095ddf4c8be07893781b309a7e" integrity sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg== +"@esbuild/linux-riscv64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" + integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== + "@esbuild/linux-s390x@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz#7459c2fecdee2d582f0697fb76a4041f4ad1dd1e" @@ -2695,6 +2800,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz#b9ab8af6e4b73b26d63c1c426d7669a5d53eb5a7" integrity sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ== +"@esbuild/linux-s390x@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" + integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== + "@esbuild/linux-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz#948cdbf46d81c81ebd7225a7633009bc56a4488c" @@ -2705,6 +2815,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz#0b25da17ac38c3e11cdd06ca3691d4d6bef2755f" integrity sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA== +"@esbuild/linux-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" + integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== + "@esbuild/netbsd-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz#6bb89668c0e093c5a575ded08e1d308bd7fd63e7" @@ -2715,6 +2830,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz#3148e48406cd0d4f7ba1e0bf3f4d77d548c98407" integrity sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg== +"@esbuild/netbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" + integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== + "@esbuild/openbsd-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz#abac2ae75fef820ef6c2c48da4666d092584c79d" @@ -2725,6 +2845,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz#7b73e852986a9750192626d377ac96ac2b749b76" integrity sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw== +"@esbuild/openbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" + integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== + "@esbuild/sunos-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz#74a45fe1db8ea96898f1a9bb401dcf1dadfc8371" @@ -2735,6 +2860,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz#402a441cdac2eee98d8be378c7bc23e00c1861c5" integrity sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q== +"@esbuild/sunos-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" + integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== + "@esbuild/win32-arm64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz#fd95ffd217995589058a4ed8ac17ee72a3d7f615" @@ -2745,6 +2875,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz#36c4e311085806a6a0c5fc54d1ac4d7b27e94d7b" integrity sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A== +"@esbuild/win32-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" + integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== + "@esbuild/win32-ia32@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz#9b7ef5d0df97593a80f946b482e34fcba3fa4aaf" @@ -2755,6 +2890,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz#0cf933be3fb9dc58b45d149559fe03e9e22b54fe" integrity sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw== +"@esbuild/win32-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" + integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== + "@esbuild/win32-x64@0.18.17": version "0.18.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz#bcb2e042631b3c15792058e189ed879a22b2968b" @@ -2765,6 +2905,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz#77583b6ea54cee7c1410ebbd54051b6a3fcbd8ba" integrity sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA== +"@esbuild/win32-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" + integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -3332,6 +3477,196 @@ resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== +"@pandacss/config@0.40.0", "@pandacss/config@^0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/config/-/config-0.40.0.tgz#ae698a4f67f37464a2ce8188d6f722ddeff873a7" + integrity sha512-MGVQciHCPDdDi04WKqj6cBqdvv++L9L9U04n5F9jEFi5Mv6LwTroDVdkHvTGClC4h5A4RgI+2d910eYVGQ5iRw== + dependencies: + "@pandacss/logger" "0.40.0" + "@pandacss/preset-base" "0.40.0" + "@pandacss/preset-panda" "0.40.0" + "@pandacss/shared" "0.40.0" + "@pandacss/types" "0.40.0" + bundle-n-require "1.1.1" + escalade "3.1.2" + merge-anything "5.1.7" + microdiff "1.3.2" + typescript "5.3.3" + +"@pandacss/core@0.40.0", "@pandacss/core@^0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/core/-/core-0.40.0.tgz#5ed7902cef6cee830639bf0f643e9fe26358a0cf" + integrity sha512-f3qx5rH265vvlgmU291yzWBk/WfsPzVpVNVRgfPpOFCjjxh/iWS2ZUZ8/BQ39CNM0ySIVz32je4FWXvf8V5zgA== + dependencies: + "@csstools/postcss-cascade-layers" "4.0.6" + "@pandacss/is-valid-prop" "^0.40.0" + "@pandacss/logger" "0.40.0" + "@pandacss/shared" "0.40.0" + "@pandacss/token-dictionary" "0.40.0" + "@pandacss/types" "0.40.0" + browserslist "4.23.0" + hookable "5.5.3" + lightningcss "1.23.0" + lodash.merge "4.6.2" + outdent "0.8.0" + postcss "8.4.38" + postcss-discard-duplicates "7.0.0" + postcss-discard-empty "7.0.0" + postcss-merge-rules "7.0.0" + postcss-minify-selectors "7.0.0" + postcss-nested "6.0.1" + postcss-normalize-whitespace "7.0.0" + postcss-selector-parser "6.0.16" + ts-pattern "5.0.8" + +"@pandacss/dev@^0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/dev/-/dev-0.40.0.tgz#0fca202f8b392f0a9c53ed81ccf77b3a1e8fd071" + integrity sha512-ut59w/rxU4dk7m5hUYni22XdhISk8QpMOfdsB11kNGA4SxrL+AVeRe4nUQeS1TpbZXcds6fBai3nf3ouKLtOlQ== + dependencies: + "@clack/prompts" "0.7.0" + "@pandacss/config" "0.40.0" + "@pandacss/logger" "0.40.0" + "@pandacss/node" "0.40.0" + "@pandacss/postcss" "0.40.0" + "@pandacss/preset-panda" "0.40.0" + "@pandacss/shared" "0.40.0" + "@pandacss/token-dictionary" "0.40.0" + "@pandacss/types" "0.40.0" + cac "6.7.14" + +"@pandacss/extractor@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/extractor/-/extractor-0.40.0.tgz#b784ad51b21ea7c3475282e01698206ca4e9ef1a" + integrity sha512-VhlF2YPjqnLd5+tKpJHXrRwq0W1GhLQx6z2jn+2z9kQMyMrXysEWncNK4je8dZvDLVzvP3pBRXlBYT6LK5cxSg== + dependencies: + "@pandacss/shared" "0.40.0" + ts-evaluator "1.2.0" + ts-morph "21.0.1" + +"@pandacss/generator@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/generator/-/generator-0.40.0.tgz#422a3eb2c4cf2b5168122770d98e6789c9b82311" + integrity sha512-0jLIqgs/PviVTJmkZKpfYtGpViEnehRxGSmqv5NQjztqiLWL+6VoEj5pcRDiEyFJUDVBq5XeuUFK3OGt1DJyEg== + dependencies: + "@pandacss/core" "0.40.0" + "@pandacss/is-valid-prop" "^0.40.0" + "@pandacss/logger" "0.40.0" + "@pandacss/shared" "0.40.0" + "@pandacss/token-dictionary" "0.40.0" + "@pandacss/types" "0.40.0" + javascript-stringify "2.1.0" + outdent " ^0.8.0" + pluralize "8.0.0" + postcss "8.4.38" + ts-pattern "5.0.8" + +"@pandacss/is-valid-prop@^0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/is-valid-prop/-/is-valid-prop-0.40.0.tgz#3d6e054ff0ebef78a694a8da2518f67f88f79929" + integrity sha512-SJk4hY84Kjr1jWd+A6tCdNAzGOi1dMpLahjK7urNdTkVb0lvFb/0SURFM5zj9+N90zXaqPNtWgOoUvN5o0E+kQ== + +"@pandacss/logger@0.40.0", "@pandacss/logger@^0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/logger/-/logger-0.40.0.tgz#52d5097a9d80a6a1a6667ee09c2605b4f01e8fa2" + integrity sha512-PsGHBigBWlwagh0mzBZ5GP8RgR1mwnxhEjQ7qFKlgsbch49EJgJQO8mwFod37sB9Bx2oF3KVMqWxqbPjRX4Jgg== + dependencies: + "@pandacss/types" "0.40.0" + kleur "4.1.5" + +"@pandacss/node@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/node/-/node-0.40.0.tgz#51289642ece73b91f79ad7ef5e6ae262870fc0d5" + integrity sha512-EGDCcQgzQKQVtphyNdvrvhZ3DK3QyjN1jfmd528blaSuJKiPWV0t3yyfC5U+6jHC9UESZoinDknd6vywJ+snUg== + dependencies: + "@pandacss/config" "0.40.0" + "@pandacss/core" "0.40.0" + "@pandacss/extractor" "0.40.0" + "@pandacss/generator" "0.40.0" + "@pandacss/logger" "0.40.0" + "@pandacss/parser" "0.40.0" + "@pandacss/shared" "0.40.0" + "@pandacss/token-dictionary" "0.40.0" + "@pandacss/types" "0.40.0" + browserslist "4.23.0" + chokidar "3.6.0" + fast-glob "3.3.2" + file-size "1.0.0" + filesize "10.1.2" + fs-extra "11.2.0" + glob-parent "6.0.2" + is-glob "4.0.3" + lodash.merge "4.6.2" + look-it-up "2.1.0" + outdent " ^0.8.0" + perfect-debounce "1.0.0" + pkg-types "1.0.3" + pluralize "8.0.0" + postcss "8.4.38" + preferred-pm "3.1.2" + prettier "3.2.5" + ts-morph "21.0.1" + ts-pattern "5.0.8" + tsconfck "3.0.2" + +"@pandacss/parser@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/parser/-/parser-0.40.0.tgz#01304dde85b29672ef23455508a15d116764d03f" + integrity sha512-KtdeHWT0nY2xPI94je7TPLnT7/RwNT7cRBxs2akxEZMXR0WXQGiu4x7GASATdPNKyO0qUcXKZ44950k4NWAu+g== + dependencies: + "@pandacss/config" "^0.40.0" + "@pandacss/core" "^0.40.0" + "@pandacss/extractor" "0.40.0" + "@pandacss/logger" "0.40.0" + "@pandacss/shared" "0.40.0" + "@pandacss/types" "0.40.0" + "@vue/compiler-sfc" "3.4.19" + magic-string "0.30.10" + ts-morph "21.0.1" + ts-pattern "5.0.8" + +"@pandacss/postcss@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/postcss/-/postcss-0.40.0.tgz#d39abbd55eccafced28addd5c33788d760626a40" + integrity sha512-wb7AyCqOmCHsWjCfiI5LhEkXq3dA3V7F43MKobhwR65TA43zDJHY9Tc3KCzRlvOwP7pQ76XbBZQczCyMQBAHxQ== + dependencies: + "@pandacss/node" "0.40.0" + postcss "8.4.38" + +"@pandacss/preset-base@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/preset-base/-/preset-base-0.40.0.tgz#04e8d76f85817e49a49ae3679226917816a4ea25" + integrity sha512-2iVg3W+CqezHjuj9EGST2/RB/yjuy4M1U8zrcS6pVK9dCsImD47/PZHijcQwjT4RjTOU+oVuQyV/TbjWtiswPQ== + dependencies: + "@pandacss/types" "0.40.0" + +"@pandacss/preset-panda@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/preset-panda/-/preset-panda-0.40.0.tgz#662efddb35a86ae4f87f2f6128ff9dee39f54ac2" + integrity sha512-/K/i2HQR+T1cbJxRRmTK7wQrOjtBD9MJata8CsqBWDp8CfhZQt7rl3zfyWxbOtMa+IAh4bKu5CIOxY76yFzXvg== + dependencies: + "@pandacss/types" "0.40.0" + +"@pandacss/shared@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/shared/-/shared-0.40.0.tgz#8ea9a6455efcfa1f3b466b3dcfafac805c455138" + integrity sha512-cf+2AR01tNOBNLcMdAMOS4+O+rQX9Pc+GFspJexciKiOk94fUC7eTj0gJFuIbbAsAxdD3J2OGh6w9j4Vk/5xxA== + +"@pandacss/token-dictionary@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/token-dictionary/-/token-dictionary-0.40.0.tgz#e74ed136a741b92f85ac2ef21d7720ea11b7925e" + integrity sha512-VgUw6CJIThYvrmdKSsQmvz6G+4oMGPtU5ZibodlkVxZ29B8GDJ9eVIAyUCWWe/dCuto9p3faB7PVayXK6ZrAtw== + dependencies: + "@pandacss/logger" "^0.40.0" + "@pandacss/shared" "0.40.0" + "@pandacss/types" "0.40.0" + ts-pattern "5.0.8" + +"@pandacss/types@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@pandacss/types/-/types-0.40.0.tgz#7d0b6145dab16e7407a5ab6211142057bd2c07ab" + integrity sha512-oAzs5YvN7kuO+/4cQqpYBspmtDRmTNdNqwKgQQb5l232bGhjbrJzo1U4uE8OgP1Agl8in+nzwC5kf3wPaPOMWw== + "@phosphor-icons/core@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@phosphor-icons/core/-/core-2.0.2.tgz#108c0e5d798bcb76951ae8d0a61987cd549ac949" @@ -4272,6 +4607,16 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@ts-morph/common@~0.22.0": + version "0.22.0" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.22.0.tgz#8951d451622a26472fbc3a227d6c3a90e687a683" + integrity sha512-HqNBuV/oIlMKdkLshXd1zKBqNQCsuPEsgQOkfFQ/eUKjRlwndXW1AjN9LVkBEIukm00gGXSRmfkl0Wv5VXLnlw== + dependencies: + fast-glob "^3.3.2" + minimatch "^9.0.3" + mkdirp "^3.0.1" + path-browserify "^1.0.1" + "@types/acorn@^4.0.0": version "4.0.6" resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22" @@ -4652,6 +4997,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.37.tgz#abb38afa9d6e8a2f627a8cb52290b3c80fbe61ed" integrity sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA== +"@types/node@^17.0.36": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + "@types/node@^18.0.0": version "18.16.3" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.3.tgz#6bda7819aae6ea0b386ebc5b24bdf602f1b42b01" @@ -5072,6 +5422,53 @@ loupe "^2.3.6" pretty-format "^29.5.0" +"@vue/compiler-core@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.19.tgz#3161b1ede69da00f3ce8155dfab907a3eaa0515e" + integrity sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w== + dependencies: + "@babel/parser" "^7.23.9" + "@vue/shared" "3.4.19" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.0.2" + +"@vue/compiler-dom@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz#2457e57e978f431e3b5fd11fc50a3e92d5816f9a" + integrity sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA== + dependencies: + "@vue/compiler-core" "3.4.19" + "@vue/shared" "3.4.19" + +"@vue/compiler-sfc@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz#33b238ded6d63e51f6a7048b742626f6007df129" + integrity sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg== + dependencies: + "@babel/parser" "^7.23.9" + "@vue/compiler-core" "3.4.19" + "@vue/compiler-dom" "3.4.19" + "@vue/compiler-ssr" "3.4.19" + "@vue/shared" "3.4.19" + estree-walker "^2.0.2" + magic-string "^0.30.6" + postcss "^8.4.33" + source-map-js "^1.0.2" + +"@vue/compiler-ssr@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz#1f8ee06005ebbaa354f8783fad84e9f7ea4a69c2" + integrity sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw== + dependencies: + "@vue/compiler-dom" "3.4.19" + "@vue/shared" "3.4.19" + +"@vue/shared@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.19.tgz#28105147811bcf1e6612bf1c9ab0c6d91ada019c" + integrity sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw== + "@yarnpkg/esbuild-plugin-pnp@^3.0.0-rc.10": version "3.0.0-rc.15" resolved "https://registry.yarnpkg.com/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz#4e40e7d2eb28825c9a35ab9d04c363931d7c0e67" @@ -5146,7 +5543,7 @@ acorn@^8.0.0, acorn@^8.8.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== -acorn@^8.1.0, acorn@^8.8.1: +acorn@^8.1.0, acorn@^8.11.3, acorn@^8.8.1: version "8.11.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== @@ -5741,6 +6138,16 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" +browserslist@4.23.0, browserslist@^4.0.0, browserslist@^4.22.3, browserslist@^4.23.0: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + dependencies: + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + browserslist@^4.21.3, browserslist@^4.21.5: version "4.21.5" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" @@ -5771,16 +6178,6 @@ browserslist@^4.22.2: node-releases "^2.0.14" update-browserslist-db "^1.0.13" -browserslist@^4.22.3: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== - dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - bser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" @@ -5830,6 +6227,14 @@ builtins@^5.0.0: dependencies: semver "^7.0.0" +bundle-n-require@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bundle-n-require/-/bundle-n-require-1.1.1.tgz#857e6308ac92f29a9fe8e292ea7719247491e3e2" + integrity sha512-EB2wFjXF106LQLe/CYnKCMCdLeTW47AtcEtUfiqAOgr2a08k0+YgRklur2aLfEYHlhz6baMskZ8L2U92Hh0vyA== + dependencies: + esbuild "^0.20.0" + node-eval "^2.0.0" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -5840,6 +6245,11 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +cac@6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + cacheable-lookup@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" @@ -5905,6 +6315,21 @@ camelcase@^7.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0: + version "1.0.30001625" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001625.tgz#ead1b155ea691d6a87938754d3cb119c24465b03" + integrity sha512-4KE9N2gcRH+HQhpeiRZXd+1niLB/XNLAhSy4z7fI8EzcbcPoAqjNInxVHTiTwWfTIV4w096XG8OtCOCQQKPv3w== + caniuse-lite@^1.0.30001449: version "1.0.30001458" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001458.tgz#871e35866b4654a7d25eccca86864f411825540c" @@ -6015,6 +6440,21 @@ checksync@^4.0.0: resolved "https://registry.yarnpkg.com/checksync/-/checksync-4.0.0.tgz#fd74959cc91f665047ae94b541ab22007b0a9b53" integrity sha512-G+wpCe4LfFLUSLCD+cSwF/stWXP9tm4M2Iy+8CBKiBX0izZ53nHTzbQ02aKfVxg6Q87e1xd/Q7AJbPXqiQxacw== +chokidar@3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chokidar@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" @@ -6155,6 +6595,11 @@ co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" +code-block-writer@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-12.0.0.tgz#4dd58946eb4234105aff7f0035977b2afdc2a770" + integrity sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w== + collect-v8-coverage@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz#150ee634ac3650b71d9c985eb7f608942334feb1" @@ -6254,6 +6699,11 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" +confbox@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.7.tgz#ccfc0a2bcae36a84838e83a3b7f770fb17d6c579" + integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== + config-chain@^1.1.11: version "1.1.13" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" @@ -6366,6 +6816,13 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crosspath@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crosspath/-/crosspath-2.0.0.tgz#5714f30c6541cc776103754954602ce0d25f126c" + integrity sha512-ju88BYCQ2uvjO2bR+SsgLSTwTSctU+6Vp2ePbKPgSCZyy4MWZxYsT738DlKVRE5utUjobjPRm1MkTYKJxCmpTA== + dependencies: + "@types/node" "^17.0.36" + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" @@ -6390,6 +6847,16 @@ css.escape@^1.5.1: resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-utils@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-5.0.0.tgz#b53a0343dd5d21012911882db6ae7d2eae0e3687" + integrity sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ== + cssom@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" @@ -6672,6 +7139,11 @@ detect-indent@^6.0.0, detect-indent@^6.1.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -6874,7 +7346,7 @@ enquirer@^2.3.0: dependencies: ansi-colors "^4.1.1" -entities@^4.4.0: +entities@^4.4.0, entities@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== @@ -7064,6 +7536,40 @@ esbuild@^0.18.10: "@esbuild/win32-ia32" "0.18.17" "@esbuild/win32-x64" "0.18.17" +esbuild@^0.20.0: + version "0.20.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" + integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== + optionalDependencies: + "@esbuild/aix-ppc64" "0.20.2" + "@esbuild/android-arm" "0.20.2" + "@esbuild/android-arm64" "0.20.2" + "@esbuild/android-x64" "0.20.2" + "@esbuild/darwin-arm64" "0.20.2" + "@esbuild/darwin-x64" "0.20.2" + "@esbuild/freebsd-arm64" "0.20.2" + "@esbuild/freebsd-x64" "0.20.2" + "@esbuild/linux-arm" "0.20.2" + "@esbuild/linux-arm64" "0.20.2" + "@esbuild/linux-ia32" "0.20.2" + "@esbuild/linux-loong64" "0.20.2" + "@esbuild/linux-mips64el" "0.20.2" + "@esbuild/linux-ppc64" "0.20.2" + "@esbuild/linux-riscv64" "0.20.2" + "@esbuild/linux-s390x" "0.20.2" + "@esbuild/linux-x64" "0.20.2" + "@esbuild/netbsd-x64" "0.20.2" + "@esbuild/openbsd-x64" "0.20.2" + "@esbuild/sunos-x64" "0.20.2" + "@esbuild/win32-arm64" "0.20.2" + "@esbuild/win32-ia32" "0.20.2" + "@esbuild/win32-x64" "0.20.2" + +escalade@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -7588,6 +8094,17 @@ fast-glob@3, fast-glob@^3.2.11, fast-glob@^3.2.12: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@3.3.2, fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" @@ -7644,6 +8161,11 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-size@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-size/-/file-size-1.0.0.tgz#3338267d5d206bbf60f4df60c19d7ed3813a4657" + integrity sha512-tLIdonWTpABkU6Axg2yGChYdrOsy4V8xcm0IcyAP8fSsu6jiXLm5pgs083e4sq5fzNRZuAYolUbZyYmPvCKfwQ== + file-system-cache@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-2.3.0.tgz#201feaf4c8cd97b9d0d608e96861bb6005f46fe6" @@ -7659,6 +8181,11 @@ filelist@^1.0.4: dependencies: minimatch "^5.0.1" +filesize@10.1.2: + version "10.1.2" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-10.1.2.tgz#33bb71c5c134102499f1bc36e6f2863137f6cb0c" + integrity sha512-Dx770ai81ohflojxhU+oG+Z2QGvKdYxgEr9OSA8UVrqhwNHjfH9A8f5NKfg83fEH8ZFA5N5llJo5T3PIoZ4CRA== + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -7826,6 +8353,15 @@ fs-extra@11.1.1, fs-extra@^11.1.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -7998,6 +8534,13 @@ github-slugger@^2.0.0: resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a" integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw== +glob-parent@6.0.2, glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -8005,13 +8548,6 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - glob-promise@^4.2.0: version "4.2.2" resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-4.2.2.tgz#15f44bcba0e14219cd93af36da6bb905ff007877" @@ -8427,6 +8963,11 @@ hoist-non-react-statics@^3.1.0: dependencies: react-is "^16.7.0" +hookable@5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d" + integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ== + hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -8821,7 +9362,7 @@ is-generator-function@^1.0.7: dependencies: has-tostringtag "^1.0.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: +is-glob@4.0.3, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -9045,6 +9586,11 @@ is-weakset@^2.0.1: call-bind "^1.0.2" get-intrinsic "^1.1.1" +is-what@^4.1.8: + version "4.1.16" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.16.tgz#1ad860a19da8b4895ad5495da3182ce2acdd7a6f" + integrity sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A== + is-windows@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -9144,6 +9690,11 @@ jake@^10.8.5: filelist "^1.0.4" minimatch "^3.1.2" +javascript-stringify@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" + integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== + jest-changed-files@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" @@ -9761,6 +10312,11 @@ kind-of@^6.0.2, kind-of@^6.0.3: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +kleur@4.1.5, kleur@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -9771,11 +10327,6 @@ kleur@^4.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.4.tgz#8c202987d7e577766d039a8cd461934c01cda04d" integrity sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA== -kleur@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - language-subtag-registry@~0.3.2: version "0.3.21" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" @@ -9824,6 +10375,68 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lightningcss-darwin-arm64@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.23.0.tgz#11780f37158a458cead5e89202f74cd99b926e36" + integrity sha512-kl4Pk3Q2lnE6AJ7Qaij47KNEfY2/UXRZBT/zqGA24B8qwkgllr/j7rclKOf1axcslNXvvUdztjo4Xqh39Yq1aA== + +lightningcss-darwin-x64@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.23.0.tgz#8394edaa04f0984b971eab42b6f68edb1258b3ed" + integrity sha512-KeRFCNoYfDdcolcFXvokVw+PXCapd2yHS1Diko1z1BhRz/nQuD5XyZmxjWdhmhN/zj5sH8YvWsp0/lPLVzqKpg== + +lightningcss-freebsd-x64@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.23.0.tgz#d3f6faddc424f17ed046e8be9ca97868a5f804ed" + integrity sha512-xhnhf0bWPuZxcqknvMDRFFo2TInrmQRWZGB0f6YoAsZX8Y+epfjHeeOIGCfAmgF0DgZxHwYc8mIR5tQU9/+ROA== + +lightningcss-linux-arm-gnueabihf@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.23.0.tgz#040e9718c9a9dc088322da33983a894564ffcb10" + integrity sha512-fBamf/bULvmWft9uuX+bZske236pUZEoUlaHNBjnueaCTJ/xd8eXgb0cEc7S5o0Nn6kxlauMBnqJpF70Bgq3zg== + +lightningcss-linux-arm64-gnu@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.23.0.tgz#05cfcfa2cf47a042ca11cfce520ae9f91e4efcdb" + integrity sha512-RS7sY77yVLOmZD6xW2uEHByYHhQi5JYWmgVumYY85BfNoVI3DupXSlzbw+b45A9NnVKq45+oXkiN6ouMMtTwfg== + +lightningcss-linux-arm64-musl@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.23.0.tgz#3212a10dff37c70808113fbcf7cbd1b63c6cbc6f" + integrity sha512-cU00LGb6GUXCwof6ACgSMKo3q7XYbsyTj0WsKHLi1nw7pV0NCq8nFTn6ZRBYLoKiV8t+jWl0Hv8KkgymmK5L5g== + +lightningcss-linux-x64-gnu@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.23.0.tgz#3b27da32889285b1c5de3f26094ee234054634fc" + integrity sha512-q4jdx5+5NfB0/qMbXbOmuC6oo7caPnFghJbIAV90cXZqgV8Am3miZhC4p+sQVdacqxfd+3nrle4C8icR3p1AYw== + +lightningcss-linux-x64-musl@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.23.0.tgz#ad65b5a944f10d966cc10070bf20f81ddadd4240" + integrity sha512-G9Ri3qpmF4qef2CV/80dADHKXRAQeQXpQTLx7AiQrBYQHqBjB75oxqj06FCIe5g4hNCqLPnM9fsO4CyiT1sFSQ== + +lightningcss-win32-x64-msvc@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.23.0.tgz#62f3f619a7bb44f8713973103fbe1bcbd9d455f9" + integrity sha512-1rcBDJLU+obPPJM6qR5fgBUiCdZwZLafZM5f9kwjFLkb/UBNIzmae39uCSmh71nzPCTXZqHbvwu23OWnWEz+eg== + +lightningcss@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.23.0.tgz#58c94a533d02d8416d4f2ec9ab87641f61943c78" + integrity sha512-SEArWKMHhqn/0QzOtclIwH5pXIYQOUEkF8DgICd/105O+GCgd7jxjNod/QPnBCSWvpRHQBGVz5fQ9uScby03zA== + dependencies: + detect-libc "^1.0.3" + optionalDependencies: + lightningcss-darwin-arm64 "1.23.0" + lightningcss-darwin-x64 "1.23.0" + lightningcss-freebsd-x64 "1.23.0" + lightningcss-linux-arm-gnueabihf "1.23.0" + lightningcss-linux-arm64-gnu "1.23.0" + lightningcss-linux-arm64-musl "1.23.0" + lightningcss-linux-x64-gnu "1.23.0" + lightningcss-linux-x64-musl "1.23.0" + lightningcss-win32-x64-msvc "1.23.0" + limit-spawn@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/limit-spawn/-/limit-spawn-0.0.3.tgz#cc09c24467a0f0a1ed10a5196dba597cad3f65dc" @@ -9934,7 +10547,12 @@ lodash.kebabcase@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= -lodash.merge@^4.6.2: +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@4.6.2, lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== @@ -9949,6 +10567,11 @@ lodash.unionwith@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.unionwith/-/lodash.unionwith-4.6.0.tgz#74d140b5ca8146e6c643c3724f5152538d9ac1f0" integrity sha1-dNFAtcqBRubGQ8NyT1FSU42awfA= +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -9967,6 +10590,11 @@ longest-streak@^3.0.0: resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.0.1.tgz#c97315b7afa0e7d9525db9a5a2953651432bdc5d" integrity sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg== +look-it-up@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/look-it-up/-/look-it-up-2.1.0.tgz#278a7ffc9da60a928452a0bab5452bb8855d7d13" + integrity sha512-nMoGWW2HurtuJf6XAL56FWTDCWLOTSsanrgwOyaR5Y4e3zfG5N/0cU5xWZSEU3tBxhQugRbV1xL9jb+ug7yZww== + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -10027,6 +10655,13 @@ lz-string@^1.5.0: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== +magic-string@0.30.10, magic-string@^0.30.6: + version "0.30.10" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + magic-string@^0.27.0: version "0.27.0" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" @@ -10497,6 +11132,13 @@ meow@^9.0.0: type-fest "^0.18.0" yargs-parser "^20.2.3" +merge-anything@5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/merge-anything/-/merge-anything-5.1.7.tgz#94f364d2b0cf21ac76067b5120e429353b3525d7" + integrity sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ== + dependencies: + is-what "^4.1.8" + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -10517,6 +11159,11 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== +microdiff@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/microdiff/-/microdiff-1.3.2.tgz#b4fec53aca97371d5409a354913a65be2daec11d" + integrity sha512-pKy60S2febliZIbwdfEQKTtL5bLNxOyiRRmD400gueYl9XcHyNGxzHSlJWn9IMHwYXT0yohPYL08+bGozVk8cQ== + micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz#edff4c72e5993d93724a3c206970f5a15b0585ad" @@ -11262,6 +11909,13 @@ minimatch@^9.0.1: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.3: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0, minimist-options@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -11321,6 +11975,21 @@ mkdirp@^1.0.3: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mkdirp@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + +mlly@^1.2.0, mlly@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.0.tgz#587383ae40dda23cadb11c3c3cc972b277724271" + integrity sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ== + dependencies: + acorn "^8.11.3" + pathe "^1.1.2" + pkg-types "^1.1.0" + ufo "^1.5.3" + moment@2.29.4: version "2.29.4" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" @@ -11351,6 +12020,11 @@ nanoid@^3.3.6: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -11422,6 +12096,13 @@ node-dir@^0.1.17: dependencies: minimatch "^3.0.2" +node-eval@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/node-eval/-/node-eval-2.0.0.tgz#ae1d1299deb4c0e41352f9528c1af6401661d37f" + integrity sha512-Ap+L9HznXAVeJj3TJ1op6M6bg5xtTq8L5CU/PJxtkhea/DrIxdTknGKIECKd/v/Lgql95iuMAYvIzBNd0pmcMg== + dependencies: + path-is-absolute "1.0.1" + node-fetch-native@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.2.0.tgz#13ec6df98f33168958dbfb6945f10aedf42e7ea8" @@ -11579,6 +12260,11 @@ object-keys@~0.4.0: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= +object-path@^0.11.8: + version "0.11.8" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.8.tgz#ed002c02bbdd0070b78a27455e8ae01fc14d4742" + integrity sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA== + object.assign@^4.1.0, object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" @@ -11719,6 +12405,11 @@ os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" +"outdent@ ^0.8.0", outdent@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0" + integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A== + outdent@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff" @@ -11911,6 +12602,11 @@ parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -11926,7 +12622,7 @@ path-exists@^5.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== -path-is-absolute@^1.0.0: +path-is-absolute@1.0.1, path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= @@ -11988,6 +12684,11 @@ pathe@^1.1.0: resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== +pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + pathval@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" @@ -12009,6 +12710,11 @@ peek-stream@^1.1.0: duplexify "^3.5.0" through2 "^2.0.3" +perfect-debounce@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a" + integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -12064,6 +12770,24 @@ pkg-dir@^5.0.0: dependencies: find-up "^5.0.0" +pkg-types@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + +pkg-types@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.1.tgz#07b626880749beb607b0c817af63aac1845a73f2" + integrity sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ== + dependencies: + confbox "^0.1.7" + mlly "^1.7.0" + pathe "^1.1.2" + plur@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/plur/-/plur-4.0.0.tgz#729aedb08f452645fe8c58ef115bf16b0a73ef84" @@ -12071,7 +12795,7 @@ plur@^4.0.0: dependencies: irregular-plurals "^3.2.0" -pluralize@^8.0.0: +pluralize@8.0.0, pluralize@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== @@ -12088,6 +12812,77 @@ popper.js@^1.14.4: resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== +postcss-discard-duplicates@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.0.tgz#47ae1154cc89ad0a50099fbac1f74c942214c961" + integrity sha512-bAnSuBop5LpAIUmmOSsuvtKAAKREB6BBIYStWUTGq8oG5q9fClDMMuY8i4UPI/cEcDx2TN+7PMnXYIId20UVDw== + +postcss-discard-empty@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz#218829d1ef0a5d5142dd62f0aa60e00e599d2033" + integrity sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA== + +postcss-merge-rules@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-7.0.0.tgz#069a427807fdb1e2dcca3bf218d0a9f70103526a" + integrity sha512-Zty3VlOsD6VSjBMu6PiHCVpLegtBT/qtZRVBcSeyEZ6q1iU5qTYT0WtEoLRV+YubZZguS5/ycfP+NRiKfjv6aw== + dependencies: + browserslist "^4.23.0" + caniuse-api "^3.0.0" + cssnano-utils "^5.0.0" + postcss-selector-parser "^6.0.16" + +postcss-minify-selectors@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-7.0.0.tgz#5dedb26806f58d683a3bb362e095ad5aa24f1bf6" + integrity sha512-f00CExZhD6lNw2vTZbcnmfxVgaVKzUw6IRsIFX3JTT8GdsoABc1WnhhGwL1i8YPJ3sSWw39fv7XPtvLb+3Uitw== + dependencies: + postcss-selector-parser "^6.0.16" + +postcss-nested@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" + integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== + dependencies: + postcss-selector-parser "^6.0.11" + +postcss-normalize-whitespace@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz#46b025f0bea72139ddee63015619b0c21cebd845" + integrity sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@6.0.16: + version "6.0.16" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" + integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.16: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53" + integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +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== + +postcss@8.4.38, postcss@^8.4.33, postcss@^8.4.38: + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + postcss@^8.4.26: version "8.4.27" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057" @@ -12097,6 +12892,16 @@ postcss@^8.4.26: picocolors "^1.0.0" source-map-js "^1.0.2" +preferred-pm@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.1.2.tgz#aedb70550734a574dffcbf2ce82642bd1753bdd6" + integrity sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q== + dependencies: + find-up "^5.0.0" + find-yarn-workspace-root2 "1.2.16" + path-exists "^4.0.0" + which-pm "2.0.0" + preferred-pm@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.0.3.tgz#1b6338000371e3edbce52ef2e4f65eb2e73586d6" @@ -12123,6 +12928,11 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" +prettier@3.2.5, prettier@^3.1.1: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + prettier@^2.7.1: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" @@ -12133,11 +12943,6 @@ prettier@^2.8.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== -prettier@^3.1.1: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== - pretty-format@^27.0.2: version "27.4.6" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.6.tgz#1b784d2f53c68db31797b2348fa39b49e31846b7" @@ -13354,6 +14159,11 @@ source-map-js@^1.0.2: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" @@ -13923,6 +14733,33 @@ ts-dedent@^2.0.0, ts-dedent@^2.2.0: resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== +ts-evaluator@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-evaluator/-/ts-evaluator-1.2.0.tgz#046ea597417046c7fe31d100502a927c5a55c200" + integrity sha512-ncSGek1p92bj2ifB7s9UBgryHCkU9vwC5d+Lplt12gT9DH+e41X8dMoHRQjIMeAvyG7j9dEnuHmwgOtuRIQL+Q== + dependencies: + ansi-colors "^4.1.3" + crosspath "^2.0.0" + object-path "^0.11.8" + +ts-morph@21.0.1: + version "21.0.1" + resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-21.0.1.tgz#712302a0f6e9dbf1aa8d9cf33a4386c4b18c2006" + integrity sha512-dbDtVdEAncKctzrVZ+Nr7kHpHkv+0JDJb2MjjpBaj8bFeCkePU9rHfMklmhuLFnpeq/EJZk2IhStY6NzqgjOkg== + dependencies: + "@ts-morph/common" "~0.22.0" + code-block-writer "^12.0.0" + +ts-pattern@5.0.8: + version "5.0.8" + resolved "https://registry.yarnpkg.com/ts-pattern/-/ts-pattern-5.0.8.tgz#47fa76776350bfbffaa6252a69ce5990ae05db95" + integrity sha512-aafbuAQOTEeWmA7wtcL94w6I89EgLD7F+IlWkr596wYxeb0oveWDO5dQpv85YP0CGbxXT/qXBIeV6IYLcoZ2uA== + +tsconfck@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.0.2.tgz#d8e279f7a049d55f207f528d13fa493e1d8e7ceb" + integrity sha512-6lWtFjwuhS3XI4HsX4Zg0izOI3FU/AI9EGVlPEUMDIhvLPMD4wkiof0WCoDgW7qY+Dy198g4d9miAqUHWHFH6Q== + tsconfig-paths@^3.14.1: version "3.14.1" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" @@ -14094,10 +14931,20 @@ typescript-coverage-report@^0.7.0: semantic-ui-react "^0.88.2" type-coverage-core "^2.23.0" -typescript@^4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" + integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== + +typescript@5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + +ufo@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" + integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== uglify-js@^3.1.4: version "3.14.2" From c396e5fe8bfcc49cf6a23df316b76fff8271b97b Mon Sep 17 00:00:00 2001 From: Juan Andrade Date: Fri, 31 May 2024 14:16:52 -0400 Subject: [PATCH 03/17] Fix TS --- __docs__/wonder-blocks-core/view.stories.tsx | 3 ++- packages/wonder-blocks-core/src/components/view.tsx | 9 +++------ packages/wonder-blocks-core/src/util/types.ts | 7 ++++--- tsconfig.json | 1 - 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/__docs__/wonder-blocks-core/view.stories.tsx b/__docs__/wonder-blocks-core/view.stories.tsx index 878c92e076..8057f3cc89 100644 --- a/__docs__/wonder-blocks-core/view.stories.tsx +++ b/__docs__/wonder-blocks-core/view.stories.tsx @@ -2,11 +2,12 @@ import * as React from "react"; // import {StyleSheet} from "aphrodite"; import type {Meta, StoryObj} from "@storybook/react"; -import {css, cx} from "@/styled-system/css"; +import {css} from "@/styled-system/css"; // ISSUE(juan): Panda CSS does not support external files. // This is due to the fact that static analysis is not possible with external // references. // https://panda-css.com/docs/guides/dynamic-styling#what-you-cant-do +// eslint-disable-next-line @typescript-eslint/no-unused-vars import {color, spacing} from "@khanacademy/wonder-blocks-tokens"; import { HeadingMedium, diff --git a/packages/wonder-blocks-core/src/components/view.tsx b/packages/wonder-blocks-core/src/components/view.tsx index c6dad78e74..6c179dbda5 100644 --- a/packages/wonder-blocks-core/src/components/view.tsx +++ b/packages/wonder-blocks-core/src/components/view.tsx @@ -1,8 +1,7 @@ import {StyleSheet} from "aphrodite"; import * as React from "react"; import {css, cx} from "@/styled-system/css"; -import type {SystemStyleObject} from "@/styled-system/types"; -// import {css, cx} from "../../../../styled-system/css"; +// import type {SystemStyleObject} from "@/styled-system/types"; import type {StyleType, TextViewSharedProps} from "../util/types"; @@ -10,9 +9,7 @@ import {processStyleList} from "../util/util"; // import addStyle from "../util/add-style"; -function isAphroditeStyle( - style: SystemStyleObject | StyleType, -): style is StyleType { +function isAphroditeStyle(style: StyleType): style is StyleType { return ( (typeof style === "object" && Object.prototype.hasOwnProperty.call(style, "_definition")) || @@ -45,7 +42,7 @@ const defaultStyle = { }; const styles = StyleSheet.create({ - default: defaultStyle, + default: defaultStyle as React.CSSProperties, }); type ValidViewTags = "div" | "article" | "aside" | "nav" | "section"; diff --git a/packages/wonder-blocks-core/src/util/types.ts b/packages/wonder-blocks-core/src/util/types.ts index 37122782d3..1e5fe081af 100644 --- a/packages/wonder-blocks-core/src/util/types.ts +++ b/packages/wonder-blocks-core/src/util/types.ts @@ -1,7 +1,7 @@ import * as React from "react"; import type {CSSProperties} from "aphrodite"; -import {SystemStyleObject} from "../../../../styled-system/types/index.d"; +import {SystemStyleObject} from "@/styled-system/types"; import type {AriaAttributes, AriaRole} from "./aria-types"; @@ -9,8 +9,9 @@ type NestedArray = ReadonlyArray>; type Falsy = false | 0 | null | undefined; export type StyleType = | CSSProperties + | SystemStyleObject | Falsy - | NestedArray; + | NestedArray; export type AriaProps = Readonly & Readonly<{ @@ -76,7 +77,7 @@ export type TextViewSharedProps = { /** * Optional custom styles. */ - style?: StyleType | SystemStyleObject; + style?: StyleType; /** * Test ID used for e2e testing. */ diff --git a/tsconfig.json b/tsconfig.json index 9d1a2af420..b6127360ca 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,6 @@ // This file is used by the `typecheck` command in package.json /* Visit https://aka.ms/tsconfig to read more about this file */ { - "include": ["styled-system"], "exclude": ["**/dist", "coverage", "coverage-ts"], "extends": "./tsconfig-common.json", "compilerOptions": { From 8aad664af9b8f8790ca6998e9e9d852ff47ea31b Mon Sep 17 00:00:00 2001 From: Juan Andrade Date: Fri, 31 May 2024 14:37:20 -0400 Subject: [PATCH 04/17] Try to generate panda output in CI --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ad9fd74901..2c3689b121 100644 --- a/package.json +++ b/package.json @@ -10,9 +10,9 @@ "scripts": { "prepare": "panda codegen", "alex": "alex packages/", - "build": "rollup -c ./build-settings/rollup.config.js", + "build": "yarn prepare && rollup -c ./build-settings/rollup.config.js", "build:types": "yarn tsc --build tsconfig-build.json && node -r @swc-node/register build-settings/remove-test-types-from-dist.ts", - "build:storybook": "storybook build --stats-json", + "build:storybook": "yarn prepare && storybook build --stats-json", "clean": "rm -rf packages/wonder-blocks-*/dist && rm -rf packages/wonder-blocks-*/node_modules && rm -f packages/*/*.tsbuildinfo && rm -f utils/tsconfig.tsbuildinfo", "coverage": "yarn run test:coverage && open coverage/lcov-report/index.html", "coveragefor": "bash -c 'yarn --silent jest --coverage --collectCoverageFrom=**/$0 $(node ./utils/test-file-for.js \"$0\")'", From 3dd4944e453e93b80bf07f03553dfdc952bd6c94 Mon Sep 17 00:00:00 2001 From: Juan Andrade Date: Mon, 3 Jun 2024 13:14:54 -0400 Subject: [PATCH 05/17] Migrate TextField to Panda CSS --- .changeset/rare-actors-boil.md | 5 ++ .../wonder-blocks-form/text-field.stories.tsx | 33 ++++----- .../src/components/text-field.tsx | 72 ++++++++++--------- panda.config.ts | 4 ++ 4 files changed, 64 insertions(+), 50 deletions(-) create mode 100644 .changeset/rare-actors-boil.md diff --git a/.changeset/rare-actors-boil.md b/.changeset/rare-actors-boil.md new file mode 100644 index 0000000000..1bb73356a7 --- /dev/null +++ b/.changeset/rare-actors-boil.md @@ -0,0 +1,5 @@ +--- +"@khanacademy/wonder-blocks-form": major +--- + +Migrate TextField to PandaCSS diff --git a/__docs__/wonder-blocks-form/text-field.stories.tsx b/__docs__/wonder-blocks-form/text-field.stories.tsx index 4dc634c611..9e1d50012b 100644 --- a/__docs__/wonder-blocks-form/text-field.stories.tsx +++ b/__docs__/wonder-blocks-form/text-field.stories.tsx @@ -1,10 +1,10 @@ import * as React from "react"; -import {StyleSheet} from "aphrodite"; +// import {StyleSheet} from "aphrodite"; import type {Meta, StoryObj} from "@storybook/react"; import {View, Text as _Text} from "@khanacademy/wonder-blocks-core"; import {Strut} from "@khanacademy/wonder-blocks-layout"; -import {color, spacing} from "@khanacademy/wonder-blocks-tokens"; +import {spacing} from "@khanacademy/wonder-blocks-tokens"; import Button from "@khanacademy/wonder-blocks-button"; import {LabelLarge, Body} from "@khanacademy/wonder-blocks-typography"; @@ -13,6 +13,7 @@ import packageConfig from "../../packages/wonder-blocks-form/package.json"; import ComponentInfo from "../../.storybook/components/component-info"; import TextFieldArgTypes from "./text-field.argtypes"; +import {SystemStyleObject} from "@/styled-system/types"; export default { title: "Packages / Form / TextField", @@ -785,7 +786,7 @@ export const WithAutofocus: StoryComponentType = () => { autoFocus={true} onChange={handleChange} onKeyDown={handleKeyDown} - style={{flexGrow: 1, marginLeft: spacing.small_12}} + style={{flexGrow: 1, marginLeft: "small_12"}} /> ); @@ -869,32 +870,32 @@ AutoComplete.parameters = { }, }; -const styles = StyleSheet.create({ +const styles: Record = { errorMessage: { - color: color.red, - paddingLeft: spacing.xxxSmall_4, + color: "red", + paddingLeft: "xxxSmall_4", }, errorMessageLight: { - color: color.white, - paddingLeft: spacing.xxxSmall_4, + color: "white", + paddingLeft: "xxxSmall_4", }, darkBackground: { - backgroundColor: color.darkBlue, - padding: spacing.medium_16, + backgroundColor: "darkBlue", + padding: "medium_16", }, customField: { - backgroundColor: color.darkBlue, - color: color.white, + backgroundColor: "darkBlue", + color: "white", border: "none", maxWidth: 250, - "::placeholder": { - color: color.white64, + "&::placeholder": { + color: "white64", }, }, button: { maxWidth: 150, }, fieldWithButton: { - marginBottom: spacing.medium_16, + marginBottom: "medium_16", }, -}); +}; diff --git a/packages/wonder-blocks-form/src/components/text-field.tsx b/packages/wonder-blocks-form/src/components/text-field.tsx index 500f3b91fd..f4ea23dacc 100644 --- a/packages/wonder-blocks-form/src/components/text-field.tsx +++ b/packages/wonder-blocks-form/src/components/text-field.tsx @@ -1,11 +1,13 @@ import * as React from "react"; -import {StyleSheet} from "aphrodite"; +// import {StyleSheet} from "aphrodite"; -import {mix, color, spacing} from "@khanacademy/wonder-blocks-tokens"; -import {addStyle} from "@khanacademy/wonder-blocks-core"; -import {styles as typographyStyles} from "@khanacademy/wonder-blocks-typography"; +// import {mix, color, spacing} from "@khanacademy/wonder-blocks-tokens"; +// import {addStyle} from "@khanacademy/wonder-blocks-core"; +// import {styles as typographyStyles} from "@khanacademy/wonder-blocks-typography"; import type {StyleType, AriaProps} from "@khanacademy/wonder-blocks-core"; +import {SystemStyleObject} from "@/styled-system/types"; +import {css} from "@/styled-system/css"; import {OmitConstrained} from "../util/types"; export type TextFieldType = "text" | "password" | "email" | "number" | "tel"; @@ -16,7 +18,7 @@ type WithForwardRef = { const defaultErrorMessage = "This field is required."; -const StyledInput = addStyle("input"); +const StyledInput = "input"; type CommonProps = AriaProps & { /** @@ -271,9 +273,11 @@ class TextField extends React.Component { return ( { // Cast `this.state.error` into boolean since it's being // used as a conditional !!this.state.error && styles.error, - style && style, - ]} + style ? (style as SystemStyleObject) : undefined, + )} id={id} type={type} placeholder={placeholder} @@ -311,56 +315,56 @@ class TextField extends React.Component { } } -const styles = StyleSheet.create({ +const styles: Record = { input: { width: "100%", height: 40, borderRadius: 4, boxSizing: "border-box", - paddingLeft: spacing.medium_16, + paddingLeft: "medium_16", margin: 0, outline: "none", boxShadow: "none", }, default: { - background: color.white, - border: `1px solid ${color.offBlack16}`, - color: color.offBlack, - "::placeholder": { - color: color.offBlack64, + background: "white", + border: `1px solid {colors.offBlack16}`, + color: "offBlack", + "&::placeholder": { + color: "offBlack64", }, }, error: { - background: `${mix(color.fadedRed8, color.white)}`, - border: `1px solid ${color.red}`, - color: color.offBlack, - "::placeholder": { - color: color.offBlack64, + background: "fadedRed8", + border: `1px solid {colors.red}`, + color: "black", + "&::placeholder": { + color: "offBlack64", }, }, disabled: { - background: color.offWhite, - border: `1px solid ${color.offBlack16}`, - color: color.offBlack64, - "::placeholder": { - color: color.offBlack32, + background: "offWhite", + border: `1px solid {colors.offBlack16}`, + color: "offBlack64", + "&::placeholder": { + color: "offBlack32", }, }, focused: { - background: color.white, - border: `1px solid ${color.blue}`, - color: color.offBlack, - "::placeholder": { - color: color.offBlack64, + background: "white", + border: `1px solid {colors.blue}`, + color: "offBlack", + "&::placeholder": { + color: "offBlack64", }, }, defaultLight: { - boxShadow: `0px 0px 0px 1px ${color.blue}, 0px 0px 0px 2px ${color.white}`, + boxShadow: `0px 0px 0px 1px {colors.blue}, 0px 0px 0px 2px {colors.white}`, }, errorLight: { - boxShadow: `0px 0px 0px 1px ${color.red}, 0px 0px 0px 2px ${color.white}`, + boxShadow: `0px 0px 0px 1px {colors.red}, 0px 0px 0px 2px {colors.white}`, }, -}); +}; type ExportProps = OmitConstrained< JSX.LibraryManagedAttributes< diff --git a/panda.config.ts b/panda.config.ts index 84957c8d7d..d73097f81d 100644 --- a/panda.config.ts +++ b/panda.config.ts @@ -61,4 +61,8 @@ export default defineConfig({ }, importMap: "@/styled-system", + strictTokens: false, + // optimizations + minify: true, + hash: true, }); From ff5d842e94ece7d1420bc27d41eca6499bba3340 Mon Sep 17 00:00:00 2001 From: Juan Andrade Date: Mon, 3 Jun 2024 14:51:48 -0400 Subject: [PATCH 06/17] Migrate Typography to Panda CSS --- .changeset/rare-actors-boil.md | 3 +- .../typography.stories.tsx | 8 +- .../src/components/text.tsx | 69 ++++++++++++++--- .../src/components/text-field.tsx | 6 +- .../src/util/styles.ts | 74 ++++++++++--------- panda.config.ts | 2 +- 6 files changed, 105 insertions(+), 57 deletions(-) diff --git a/.changeset/rare-actors-boil.md b/.changeset/rare-actors-boil.md index 1bb73356a7..17ffec150d 100644 --- a/.changeset/rare-actors-boil.md +++ b/.changeset/rare-actors-boil.md @@ -1,5 +1,6 @@ --- "@khanacademy/wonder-blocks-form": major +"@khanacademy/wonder-blocks-typography": major --- -Migrate TextField to PandaCSS +Migrate TextField and Typography to PandaCSS diff --git a/__docs__/wonder-blocks-typography/typography.stories.tsx b/__docs__/wonder-blocks-typography/typography.stories.tsx index b1c3c4cb96..6eabb96dff 100644 --- a/__docs__/wonder-blocks-typography/typography.stories.tsx +++ b/__docs__/wonder-blocks-typography/typography.stories.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import {css, StyleSheet} from "aphrodite"; +// import {css, StyleSheet} from "aphrodite"; import type {Meta, StoryObj} from "@storybook/react"; import {View} from "@khanacademy/wonder-blocks-core"; @@ -31,6 +31,8 @@ import TypographyArgTypes from "./typography.argtypes"; // NOTE: Only for testing purposes. // eslint-disable-next-line import/no-unassigned-import import "./styles.css"; +import {SystemStyleObject} from "@/styled-system/types"; +import {css} from "@/styled-system/css"; const typographyDescription = `Typography. \`wonder-blocks-typography\` provides a set of standardized components for displaying text in a consistent @@ -117,14 +119,14 @@ TypographyElements.parameters = { */ export const WithStyle: StoryObj = { render: () => { - const styles = StyleSheet.create({ + const styles: Record = { blueText: { color: color.blue, }, highlighted: { background: color.offBlack16, }, - }); + }; return ( 0 && + style.some( + (s) => + s && + typeof s === "object" && + Object.prototype.hasOwnProperty.call(s, "_definition"), + )) + ); +} + +const rawStyles: Record<string, SystemStyleObject> = { + text: { + fontSmoothing: "antialiased", + }, + header: { + marginTop: 0, + marginBottom: 0, + }, +}; + const styles = StyleSheet.create({ text: { // Disable subpixel antialiasing on Mac desktop for consistency of @@ -45,23 +72,41 @@ const Text = React.forwardRef(function Text( ref, ) { const isHeader = isHeaderRegex.test(Tag); - const styleAttributes = processStyleList([ - styles.text, - isHeader && styles.header, - style, - ]); - // Make sure we include the className from the parent component, if any. - const classNames = otherProps.className - ? [otherProps.className, styleAttributes.className].join(" ") - : styleAttributes.className; + if (isAphroditeStyle(style)) { + const styleAttributes = processStyleList([ + styles.text, + isHeader && styles.header, + style, + ]); + + // Make sure we include the className from the parent component, if any. + const classNames = otherProps.className + ? [otherProps.className, styleAttributes.className].join(" ") + : styleAttributes.className; + + return ( + // @ts-expect-error [FEI-5019] - TS2322 - Type '{ children: ReactNode; style: any; className: string; "data-testid": string | undefined; tabIndex?: number | undefined; id?: string | undefined; "data-modal-launcher-portal"?: boolean | undefined; ... 69 more ...; onBlur?: ((e: FocusEvent<...>) => unknown) | undefined; }' is not assignable to type 'IntrinsicAttributes'. + <Tag + {...otherProps} + style={styleAttributes.style} + className={classNames} + data-testid={testId} + ref={ref} + > + {children} + </Tag> + ); + } return ( // @ts-expect-error [FEI-5019] - TS2322 - Type '{ children: ReactNode; style: any; className: string; "data-testid": string | undefined; tabIndex?: number | undefined; id?: string | undefined; "data-modal-launcher-portal"?: boolean | undefined; ... 69 more ...; onBlur?: ((e: FocusEvent<...>) => unknown) | undefined; }' is not assignable to type 'IntrinsicAttributes'. <Tag {...otherProps} - style={styleAttributes.style} - className={classNames} + className={cx( + css(rawStyles.text, isHeader && rawStyles.header, style), + otherProps.className, + )} data-testid={testId} ref={ref} > diff --git a/packages/wonder-blocks-form/src/components/text-field.tsx b/packages/wonder-blocks-form/src/components/text-field.tsx index f4ea23dacc..fc45a8a01d 100644 --- a/packages/wonder-blocks-form/src/components/text-field.tsx +++ b/packages/wonder-blocks-form/src/components/text-field.tsx @@ -3,7 +3,7 @@ import * as React from "react"; // import {mix, color, spacing} from "@khanacademy/wonder-blocks-tokens"; // import {addStyle} from "@khanacademy/wonder-blocks-core"; -// import {styles as typographyStyles} from "@khanacademy/wonder-blocks-typography"; +import {styles as typographyStyles} from "@khanacademy/wonder-blocks-typography"; import type {StyleType, AriaProps} from "@khanacademy/wonder-blocks-core"; import {SystemStyleObject} from "@/styled-system/types"; @@ -275,9 +275,7 @@ class TextField extends React.Component<PropsWithForwardRef, State> { <StyledInput className={css( styles.input, - // TODO(juan): Convert typography styles to - // SystemStyleObject - // typographyStyles.LabelMedium, + typographyStyles.LabelMedium, styles.default, // Prioritizes disabled, then focused, then error (if any) disabled diff --git a/packages/wonder-blocks-typography/src/util/styles.ts b/packages/wonder-blocks-typography/src/util/styles.ts index 4612fc2ee2..204ef4049c 100644 --- a/packages/wonder-blocks-typography/src/util/styles.ts +++ b/packages/wonder-blocks-typography/src/util/styles.ts @@ -1,5 +1,7 @@ -import {StyleSheet} from "aphrodite"; -import type {StyleDeclaration} from "aphrodite"; +import {css} from "@/styled-system/css"; +import {SystemStyleObject} from "@/styled-system/types"; +// import {StyleSheet} from "aphrodite"; +// import type {StyleDeclaration} from "aphrodite"; const Regular = 400; const Bold = 700; @@ -17,8 +19,8 @@ const SansFamily = 'Lato, "Noto Sans", sans-serif'; const SerifFamily = '"Noto Serif", serif'; const InconsolataFamily = "Inconsolata, monospace"; -const styles: StyleDeclaration = StyleSheet.create({ - Title: { +const styles: Record<string, SystemStyleObject> = { + Title: css.raw({ ...common, fontFamily: SansFamily, fontWeight: Black, @@ -30,15 +32,15 @@ const styles: StyleDeclaration = StyleSheet.create({ fontSize: 28, lineHeight: "32px", }, - }, - Tagline: { + }), + Tagline: css.raw({ ...common, fontFamily: SansFamily, fontWeight: Regular, fontSize: 20, lineHeight: "24px", - }, - HeadingLarge: { + }), + HeadingLarge: css.raw({ ...common, fontFamily: SansFamily, fontWeight: Bold, @@ -50,8 +52,8 @@ const styles: StyleDeclaration = StyleSheet.create({ fontSize: 24, lineHeight: "28px", }, - }, - HeadingMedium: { + }), + HeadingMedium: css.raw({ ...common, fontFamily: SansFamily, fontWeight: Bold, @@ -63,15 +65,15 @@ const styles: StyleDeclaration = StyleSheet.create({ fontSize: 22, lineHeight: "26px", }, - }, - HeadingSmall: { + }), + HeadingSmall: css.raw({ ...common, fontFamily: SansFamily, fontWeight: Bold, fontSize: 20, lineHeight: "24px", - }, - HeadingXSmall: { + }), + HeadingXSmall: css.raw({ ...common, fontFamily: SansFamily, fontWeight: Bold, @@ -79,77 +81,77 @@ const styles: StyleDeclaration = StyleSheet.create({ lineHeight: "16px", letterSpacing: 0.6, textTransform: "uppercase", - }, - BodySerifBlock: { + }), + BodySerifBlock: css.raw({ ...common, fontFamily: SerifFamily, fontWeight: Regular, fontSize: 22, lineHeight: "28px", - }, - BodySerif: { + }), + BodySerif: css.raw({ ...common, fontFamily: SerifFamily, fontWeight: Regular, fontSize: 18, lineHeight: "22px", - }, - BodyMonospace: { + }), + BodyMonospace: css.raw({ ...common, fontFamily: InconsolataFamily, fontWeight: Regular, fontSize: 17, lineHeight: "22px", - }, - Body: { + }), + Body: css.raw({ ...common, fontFamily: SansFamily, fontWeight: Regular, fontSize: 16, lineHeight: "22px", - }, - LabelLarge: { + }), + LabelLarge: css.raw({ ...common, fontFamily: SansFamily, fontWeight: Bold, fontSize: 16, lineHeight: "20px", - }, - LabelMedium: { + }), + LabelMedium: css.raw({ ...common, fontFamily: SansFamily, fontWeight: Regular, fontSize: 16, lineHeight: "20px", - }, - LabelSmall: { + }), + LabelSmall: css.raw({ ...common, fontFamily: SansFamily, fontWeight: Regular, fontSize: 14, lineHeight: "18px", - }, - LabelXSmall: { + }), + LabelXSmall: css.raw({ ...common, fontFamily: SansFamily, fontWeight: Regular, fontSize: 12, lineHeight: "16px", - }, - Caption: { + }), + Caption: css.raw({ ...common, fontFamily: SansFamily, fontWeight: Regular, fontSize: 14, lineHeight: "20px", - }, - Footnote: { + }), + Footnote: css.raw({ ...common, fontFamily: SansFamily, fontWeight: Regular, fontSize: 12, lineHeight: "18px", - }, -}); + }), +}; export {styles as default}; diff --git a/panda.config.ts b/panda.config.ts index d73097f81d..af6ef422b1 100644 --- a/panda.config.ts +++ b/panda.config.ts @@ -64,5 +64,5 @@ export default defineConfig({ strictTokens: false, // optimizations minify: true, - hash: true, + // hash: true, }); From 999f3d81946b7c0e30853931dc7e89cbf30cf83d Mon Sep 17 00:00:00 2001 From: Juan Andrade <juan@khanacademy.org> Date: Wed, 5 Jun 2024 13:37:02 -0400 Subject: [PATCH 07/17] Add panda support to Button (including theming) --- .changeset/spotty-rivers-admire.md | 5 + .../wonder-blocks-button/button.stories.tsx | 86 ++--- .../src/components/button-core.tsx | 328 +++++++++--------- .../src/themes/default.ts | 160 +++++---- .../src/themes/khanmigo.ts | 89 ++--- .../wonder-blocks-button/src/themes/theme.ts | 129 +++++++ .../src/themes/themed-button.tsx | 24 +- .../src/components/text.tsx | 19 +- panda.config.ts | 12 + 9 files changed, 495 insertions(+), 357 deletions(-) create mode 100644 .changeset/spotty-rivers-admire.md create mode 100644 packages/wonder-blocks-button/src/themes/theme.ts diff --git a/.changeset/spotty-rivers-admire.md b/.changeset/spotty-rivers-admire.md new file mode 100644 index 0000000000..668a0cf9c3 --- /dev/null +++ b/.changeset/spotty-rivers-admire.md @@ -0,0 +1,5 @@ +--- +"@khanacademy/wonder-blocks-button": major +--- + +Add panda support to Button (including theming) diff --git a/__docs__/wonder-blocks-button/button.stories.tsx b/__docs__/wonder-blocks-button/button.stories.tsx index 227f9a435b..b8c9db0253 100644 --- a/__docs__/wonder-blocks-button/button.stories.tsx +++ b/__docs__/wonder-blocks-button/button.stories.tsx @@ -1,11 +1,11 @@ import * as React from "react"; -import {StyleSheet} from "aphrodite"; +// import {StyleSheet} from "aphrodite"; import type {Meta, StoryObj} from "@storybook/react"; import {expect, fireEvent, userEvent, within} from "@storybook/test"; import {MemoryRouter, Route, Switch} from "react-router-dom"; -import type {StyleDeclaration} from "aphrodite"; +// import type {StyleDeclaration} from "aphrodite"; import pencilSimple from "@phosphor-icons/core/regular/pencil-simple.svg"; import pencilSimpleBold from "@phosphor-icons/core/bold/pencil-simple-bold.svg"; @@ -26,6 +26,8 @@ import ComponentInfo from "../../.storybook/components/component-info"; import ButtonArgTypes from "./button.argtypes"; import {ThemeSwitcherContext} from "@khanacademy/wonder-blocks-theming"; +import {SystemStyleObject} from "@/styled-system/types"; +import {css} from "@/styled-system/css"; /** * Reusable button component. @@ -132,35 +134,35 @@ export const Tertiary: StoryComponentType = { }, }; -export const styles: StyleDeclaration = StyleSheet.create({ - row: { +export const styles: Record<string, SystemStyleObject> = { + row: css.raw({ flexDirection: "row", alignItems: "center", - marginBottom: spacing.xSmall_8, - }, - button: { - marginRight: spacing.xSmall_8, - }, - truncatedButton: { + marginBottom: "xSmall_8", + }), + button: css.raw({ + marginRight: "xSmall_8", + }), + truncatedButton: css.raw({ maxWidth: 200, - marginBottom: spacing.medium_16, - }, - fillSpace: { + marginBottom: "medium_16", + }), + fillSpace: css.raw({ minWidth: 140, - }, - example: { - background: color.offWhite, - padding: spacing.medium_16, - }, - label: { - marginTop: spacing.large_24, - marginBottom: spacing.xSmall_8, - }, -}); + }), + example: css.raw({ + background: "offWhite", + padding: "medium_16", + }), + label: css.raw({ + marginTop: "large_24", + marginBottom: "xSmall_8", + }), +}; export const Variants: StoryComponentType = () => ( - <View style={{padding: spacing.medium_16, gap: spacing.medium_16}}> - <View style={{flexDirection: "row", gap: spacing.medium_16}}> + <View style={{padding: "medium_16", gap: "medium_16"}}> + <View style={{flexDirection: "row", gap: "medium_16"}}> <Button onClick={() => {}}>Hello, world!</Button> <Button onClick={() => {}} kind="secondary"> Hello, world! @@ -169,7 +171,7 @@ export const Variants: StoryComponentType = () => ( Hello, world! </Button> </View> - <View style={{flexDirection: "row", gap: spacing.medium_16}}> + <View style={{flexDirection: "row", gap: "medium_16"}}> <Button onClick={() => {}} disabled={true}> Hello, world! </Button> @@ -180,7 +182,7 @@ export const Variants: StoryComponentType = () => ( Hello, world! </Button> </View> - <View style={{flexDirection: "row", gap: spacing.medium_16}}> + <View style={{flexDirection: "row", gap: "medium_16"}}> <Button onClick={() => {}} color="destructive"> Hello, world! </Button> @@ -247,26 +249,28 @@ WithColor.parameters = { }; export const Dark: StoryComponentType = () => ( - <View style={{backgroundColor: color.darkBlue, padding: spacing.medium_16}}> - <View style={{flexDirection: "row"}}> + <View + style={{ + backgroundColor: "darkBlue", + padding: "medium_16", + gap: "medium_16", + }} + > + <View style={{flexDirection: "row", gap: "medium_16"}}> <Button onClick={() => {}} light={true}> Hello, world! </Button> - <Strut size={16} /> <Button onClick={() => {}} light={true} kind="secondary"> Hello, world! </Button> - <Strut size={16} /> <Button onClick={() => {}} light={true} kind="tertiary"> Hello, world! </Button> </View> - <Strut size={16} /> - <View style={{flexDirection: "row"}}> + <View style={{flexDirection: "row", gap: "medium_16"}}> <Button onClick={() => {}} light={true} disabled={true}> Hello, world! </Button> - <Strut size={16} /> <Button onClick={() => {}} light={true} @@ -275,7 +279,6 @@ export const Dark: StoryComponentType = () => ( > Hello, world! </Button> - <Strut size={16} /> <Button onClick={() => {}} light={true} @@ -285,12 +288,10 @@ export const Dark: StoryComponentType = () => ( Hello, world! </Button> </View> - <Strut size={16} /> - <View style={{flexDirection: "row"}}> + <View style={{flexDirection: "row", gap: "medium_16"}}> <Button onClick={() => {}} light={true} color="destructive"> Hello, world! </Button> - <Strut size={16} /> <Button onClick={() => {}} light={true} @@ -299,7 +300,6 @@ export const Dark: StoryComponentType = () => ( > Hello, world! </Button> - <Strut size={16} /> <Button onClick={() => {}} light={true} @@ -622,15 +622,15 @@ export const CustomStyles = { }, }, render: (args: any) => ( - <View style={{gap: spacing.medium_16}}> + <View style={{gap: "medium_16"}}> <HeadingSmall>Wonder Blocks theme (default)</HeadingSmall> - <View style={{flexDirection: "row", gap: spacing.medium_16}}> + <View style={{flexDirection: "row", gap: "medium_16"}}> <Button {...args} kind="primary" /> <Button {...args} kind="secondary" /> <Button {...args} kind="tertiary" /> </View> <HeadingSmall>Khanmigo theme</HeadingSmall> - <View style={{flexDirection: "row", gap: spacing.medium_16}}> + <View style={{flexDirection: "row", gap: "medium_16"}}> <ThemeSwitcherContext.Provider value="khanmigo"> <Button {...args} kind="primary" /> <Button {...args} kind="secondary" /> @@ -758,7 +758,7 @@ export const KhanmigoTheme: StoryComponentType = { return ( <ThemeSwitcherContext.Provider value="khanmigo"> - <View style={{gap: spacing.medium_16}}> + <View style={{gap: "medium_16"}}> {stories.map((Story, i) => ( <Story key={i} /> ))} diff --git a/packages/wonder-blocks-button/src/components/button-core.tsx b/packages/wonder-blocks-button/src/components/button-core.tsx index c02543fc9d..e0d34d1717 100644 --- a/packages/wonder-blocks-button/src/components/button-core.tsx +++ b/packages/wonder-blocks-button/src/components/button-core.tsx @@ -1,31 +1,33 @@ import * as React from "react"; -import {CSSProperties, StyleSheet} from "aphrodite"; +// import {CSSProperties, StyleSheet} from "aphrodite"; import {Link} from "react-router-dom"; import {__RouterContext} from "react-router"; import {LabelLarge, LabelSmall} from "@khanacademy/wonder-blocks-typography"; -import {addStyle, View} from "@khanacademy/wonder-blocks-core"; +import {View} from "@khanacademy/wonder-blocks-core"; import {CircularSpinner} from "@khanacademy/wonder-blocks-progress-spinner"; import {isClientSideUrl} from "@khanacademy/wonder-blocks-clickable"; import { - ThemedStylesFn, + // ThemedStylesFn, useScopedTheme, - useStyles, + // useStyles, } from "@khanacademy/wonder-blocks-theming"; import type { ChildrenProps, ClickableState, } from "@khanacademy/wonder-blocks-clickable"; +import {SystemStyleObject} from "@/styled-system/types"; +import {css} from "@/styled-system/css"; import type {SharedProps} from "./button"; import {ButtonThemeContext, ButtonThemeContract} from "../themes/themed-button"; import {ButtonIcon} from "./button-icon"; type Props = SharedProps & ChildrenProps & ClickableState; -const StyledAnchor = addStyle("a"); -const StyledButton = addStyle("button"); -const StyledLink = addStyle(Link); +const StyledAnchor = "a"; //addStyle("a"); +const StyledButton = "button"; //addStyle("button"); +const StyledLink = Link; //addStyle(Link); const ButtonCore: React.ForwardRefExoticComponent< Props & @@ -35,7 +37,8 @@ const ButtonCore: React.ForwardRefExoticComponent< Props >(function ButtonCore(props: Props, ref) { const {theme, themeName} = useScopedTheme(ButtonThemeContext); - const sharedStyles = useStyles(themedSharedStyles, theme); + // const sharedStyles = useStyles(themedSharedStyles, theme); + const sharedStyles = themedSharedStyles; const renderInner = (router: any): React.ReactNode => { const { @@ -73,7 +76,7 @@ const ButtonCore: React.ForwardRefExoticComponent< const disabled = spinner || disabledProp; - const defaultStyle = [ + const defaultStyle = css( sharedStyles.shared, disabled && sharedStyles.disabled, startIcon && sharedStyles.withStartIcon, @@ -94,13 +97,14 @@ const ButtonCore: React.ForwardRefExoticComponent< ], size === "small" && sharedStyles.small, size === "large" && sharedStyles.large, - ]; + style ? (style as SystemStyleObject) : undefined, + ); const commonProps = { "data-testid": testId, id: id, role: "button", - style: [defaultStyle, style], + className: defaultStyle, ...restProps, } as const; @@ -199,7 +203,8 @@ const ButtonCore: React.ForwardRefExoticComponent< <StyledLink {...commonProps} to={href} - ref={ref as React.Ref<typeof Link>} + // TODO(juan): fix this + // ref={ref as React.Ref<typeof Link>} > {contents} </StyledLink> @@ -219,6 +224,7 @@ const ButtonCore: React.ForwardRefExoticComponent< {...commonProps} aria-disabled={disabled} ref={ref as React.Ref<HTMLButtonElement>} + data-panda-theme={theme.theme} > {contents} </StyledButton> @@ -235,99 +241,100 @@ const ButtonCore: React.ForwardRefExoticComponent< export default ButtonCore; -const themedSharedStyles: ThemedStylesFn<ButtonThemeContract> = (theme) => ({ - shared: { +const themedSharedStyles: Record<string, SystemStyleObject> = { + shared: css.raw({ position: "relative", display: "inline-flex", alignItems: "center", justifyContent: "center", - height: theme.size.height.medium, + height: "height.medium", paddingTop: 0, paddingBottom: 0, - paddingLeft: theme.padding.large, - paddingRight: theme.padding.large, + paddingLeft: "padding.large", + paddingRight: "padding.large", border: "none", - borderRadius: theme.border.radius.default, + borderRadius: "default", cursor: "pointer", outline: "none", + outlineOffset: 0, textDecoration: "none", boxSizing: "border-box", // This removes the 300ms click delay on mobile browsers by indicating that // "double-tap to zoom" shouldn't be used on this element. touchAction: "manipulation", userSelect: "none", - ":focus": { + "&:focus": { // Mobile: Removes a blue highlight style shown when the user clicks a button WebkitTapHighlightColor: "rgba(0,0,0,0)", }, - }, - disabled: { + }), + disabled: css.raw({ cursor: "auto", - }, - small: { - borderRadius: theme.border.radius.small, - height: theme.size.height.small, - }, - large: { - borderRadius: theme.border.radius.large, - height: theme.size.height.large, - }, - text: { + }), + small: css.raw({ + borderRadius: "small", + height: "height.small", + }), + large: css.raw({ + borderRadius: "large", + height: "height.large", + }), + text: css.raw({ alignItems: "center", - fontWeight: theme.font.weight.default, + fontWeight: "default", whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis", display: "inline-block", // allows the button text to truncate pointerEvents: "none", // fix Safari bug where the browser was eating mouse events - }, - largeText: { - fontSize: theme.font.size.large, - lineHeight: `${theme.font.lineHeight.large}px`, - }, - textWithFocus: { + }), + largeText: css.raw({ + fontSize: "large", + lineHeight: "large", + }), + textWithFocus: css.raw({ position: "relative", // allows the tertiary button border to use the label width - }, - hiddenText: { + }), + hiddenText: css.raw({ visibility: "hidden", - }, - spinner: { + }), + spinner: css.raw({ position: "absolute", - }, - startIcon: { - marginRight: theme.padding.small, - marginLeft: theme.margin.icon.offset, - }, - tertiaryStartIcon: { + }), + startIcon: css.raw({ + marginRight: "padding.small", + marginLeft: "margin.icon.offset", + }), + tertiaryStartIcon: css.raw({ // Undo the negative padding from startIcon since tertiary // buttons don't have extra padding. marginLeft: 0, - }, - endIcon: { - marginLeft: theme.padding.small, - }, - iconWrapper: { - borderRadius: theme.border.radius.icon, - padding: theme.padding.xsmall, + }), + endIcon: css.raw({ + marginLeft: "padding.small", + }), + iconWrapper: css.raw({ + borderRadius: "icon", + padding: "padding.xsmall", // View has a default minWidth of 0, which causes the label text // to encroach on the icon when it needs to truncate. We can fix // this by setting the minWidth to auto. minWidth: "auto", - }, - iconWrapperSecondaryHovered: { - backgroundColor: theme.color.bg.icon.secondaryHover, - color: theme.color.text.icon.secondaryHover, - }, - endIconWrapper: { - marginLeft: theme.padding.small, - marginRight: theme.margin.icon.offset, - }, - endIconWrapperTertiary: { + }), + iconWrapperSecondaryHovered: css.raw({ + backgroundColor: "bg.icon.secondaryHover", + color: "text.icon.secondaryHover", + }), + endIconWrapper: css.raw({ + marginLeft: "padding.small", + marginRight: "margin.icon.offset", + }), + endIconWrapperTertiary: css.raw({ marginRight: 0, - }, -}); + }), +}; -const styles: Record<string, any> = {}; +const styles: {[key: string]: Record<string, SystemStyleObject>} = {}; // export for testing only export const _generateStyles = ( @@ -340,8 +347,8 @@ export const _generateStyles = ( ) => { const color: string = buttonColor === "destructive" - ? theme.color.bg.critical.default - : theme.color.bg.action.default; + ? "bg.critical.default" + : "bg.action.default"; const buttonType = `${color}-${kind}-${light}-${size}-${themeName}`; @@ -351,168 +358,145 @@ export const _generateStyles = ( const fadedColor = buttonColor === "destructive" - ? theme.color.bg.critical.inverse - : theme.color.bg.action.inverse; + ? "bg.critical.inverse" + : "bg.action.inverse"; const activeColor = buttonColor === "destructive" - ? theme.color.bg.critical.active - : theme.color.bg.action.active; - const padding = - size === "large" ? theme.padding.xLarge : theme.padding.large; + ? "bg.critical.active" + : "bg.action.active"; + const padding = size === "large" ? "padding.xLarge" : "padding.large"; - let newStyles: Record<string, CSSProperties> = {}; + let newStyles: Record<string, SystemStyleObject> = {}; if (kind === "primary") { - const boxShadowInnerColor: string = light - ? theme.color.bg.primary.inverse - : theme.color.bg.primary.default; - newStyles = { - default: { - background: light ? theme.color.bg.primary.default : color, - color: light ? color : theme.color.text.inverse, + default: css.raw({ + background: light ? "bg.primary.default" : color, + color: light ? color : "text.inverse", paddingLeft: padding, paddingRight: padding, - }, - focus: { - // This assumes a background of white for the regular button and - // a background of darkBlue for the light version. The inner - // box shadow/ring is also small enough for a slight variation - // in the background color not to matter too much. - boxShadow: `0 0 0 1px ${boxShadowInnerColor}, 0 0 0 3px ${ - light ? theme.color.bg.primary.default : color - }`, - }, - active: { - boxShadow: `0 0 0 1px ${boxShadowInnerColor}, 0 0 0 3px ${ - light ? fadedColor : activeColor - }`, + outlineStyle: "solid", + outlineWidth: "focused", + outlineOffset: 1, + }), + focus: css.raw({ + outlineColor: light ? "bg.primary.default" : color, + }), + active: css.raw({ + outlineColor: light ? fadedColor : activeColor, background: light ? fadedColor : activeColor, color: light ? activeColor : fadedColor, - }, - disabled: { - background: light - ? fadedColor - : theme.color.bg.primary.disabled, - color: light ? color : theme.color.text.primary.disabled, + }), + disabled: css.raw({ + background: light ? fadedColor : "bg.primary.disabled", + color: light ? color : "text.primary.disabled", cursor: "default", - ":focus": { - boxShadow: `0 0 0 1px ${ - light - ? theme.color.bg.primary.disabled - : theme.color.bg.primary.default - }, 0 0 0 3px ${ - light ? fadedColor : theme.color.bg.primary.disabled - }`, + "&:focus": { + outlineColor: light ? fadedColor : "bg.primary.disabled", }, - }, + }), }; } else if (kind === "secondary") { const secondaryBorderColor = buttonColor === "destructive" - ? theme.color.border.secondary.critical - : theme.color.border.secondary.action; + ? "border.secondary.critical" + : "border.secondary.action"; const secondaryActiveColor = buttonColor === "destructive" - ? theme.color.bg.secondary.active.critical - : theme.color.bg.secondary.active.action; + ? "bg.secondary.active.critical" + : "bg.secondary.active.action"; newStyles = { - default: { + default: css.raw({ background: light - ? theme.color.bg.secondary.inverse - : theme.color.bg.secondary.default, - color: light ? theme.color.text.inverse : color, + ? "bg.secondary.inverse" + : "bg.secondary.default", + color: light ? "text.inverse" : color, borderColor: light - ? theme.color.border.secondary.inverse + ? "border.secondary.inverse" : secondaryBorderColor, borderStyle: "solid", - borderWidth: theme.border.width.secondary, + borderWidth: "secondary", paddingLeft: padding, paddingRight: padding, - }, - focus: { + }), + focus: css.raw({ background: light - ? theme.color.bg.secondary.inverse - : theme.color.bg.secondary.focus, + ? "bg.secondary.inverse" + : "bg.secondary.focus", borderColor: "transparent", - outlineColor: light - ? theme.color.border.primary.inverse - : color, + outlineColor: light ? "border.primary.inverse" : color, outlineStyle: "solid", - outlineWidth: theme.border.width.focused, - }, + outlineWidth: "focused", + }), - active: { + active: css.raw({ background: light ? activeColor : secondaryActiveColor, color: light ? fadedColor : activeColor, borderColor: "transparent", outlineColor: light ? fadedColor : activeColor, outlineStyle: "solid", - outlineWidth: theme.border.width.focused, - }, - disabled: { - color: light - ? theme.color.text.secondary.inverse - : theme.color.text.disabled, - outlineColor: light ? fadedColor : theme.color.border.disabled, + outlineWidth: "focused", + }), + disabled: css.raw({ + color: light ? "text.secondary.inverse" : "text.disabled", + outlineColor: light ? fadedColor : "disabled", + outlineWidth: 0, cursor: "default", - ":focus": { + "&:focus": { outlineColor: light - ? theme.color.border.secondary.inverse - : theme.color.border.disabled, - outlineWidth: theme.border.width.disabled, + ? "border.secondary.inverse" + : "border.disabled", + outlineWidth: "disabled", }, - }, + }), }; } else if (kind === "tertiary") { newStyles = { - default: { + default: css.raw({ background: "none", - color: light ? theme.color.text.inverse : color, + color: light ? "text.inverse" : color, paddingLeft: 0, paddingRight: 0, - }, - hover: { - ":after": { + }), + hover: css.raw({ + "&:after": { content: "''", position: "absolute", - height: theme.size.height.tertiaryHover, + height: "height.tertiaryHover", width: "100%", right: 0, bottom: 0, - background: light ? theme.color.bg.tertiary.hover : color, - borderRadius: theme.border.radius.tertiary, + background: light ? "bg.tertiary.hover" : color, + borderRadius: "tertiary", }, - }, - focus: { + }), + focus: css.raw({ outlineStyle: "solid", - outlineColor: light - ? theme.color.border.tertiary.inverse - : color, - outlineWidth: theme.border.width.focused, - borderRadius: theme.border.radius.default, - }, - active: { + outlineColor: light ? "border.tertiary.inverse" : color, + outlineWidth: "focused", + borderRadius: "default", + }), + active: css.raw({ color: light ? fadedColor : activeColor, - ":after": { + "&:after": { height: 1, background: light ? fadedColor : activeColor, }, - }, - disabled: { - color: light ? fadedColor : theme.color.text.disabled, + }), + disabled: css.raw({ + color: light ? fadedColor : "text.disabled", cursor: "default", - }, - disabledFocus: { + }), + disabledFocus: css.raw({ outlineColor: light - ? theme.color.border.tertiary.inverse - : theme.color.border.disabled, - }, + ? "border.tertiary.inverse" + : "border.disabled", + }), }; } else { throw new Error("Button kind not recognized"); } - styles[buttonType] = StyleSheet.create(newStyles); + styles[buttonType] = newStyles; return styles[buttonType]; }; diff --git a/packages/wonder-blocks-button/src/themes/default.ts b/packages/wonder-blocks-button/src/themes/default.ts index 63ef85d466..8d8db64636 100644 --- a/packages/wonder-blocks-button/src/themes/default.ts +++ b/packages/wonder-blocks-button/src/themes/default.ts @@ -1,53 +1,51 @@ import * as tokens from "@khanacademy/wonder-blocks-tokens"; +import {defineTheme} from "./theme"; const theme = { - color: { + colors: { bg: { /** * Color */ // color="default" action: { - default: tokens.color.blue, - active: tokens.color.activeBlue, - inverse: tokens.color.fadedBlue, + default: {value: tokens.color.blue}, + active: {value: tokens.color.activeBlue}, + inverse: {value: tokens.color.fadedBlue}, }, // color="destructive" critical: { - default: tokens.color.red, - active: tokens.color.activeRed, - inverse: tokens.color.fadedRed, + default: {value: tokens.color.red}, + active: {value: tokens.color.activeRed}, + inverse: {value: tokens.color.fadedRed}, }, /** * Kind */ primary: { - default: tokens.color.white, - disabled: tokens.color.offBlack32, - // used in boxShadow - inverse: tokens.color.darkBlue, + default: {value: tokens.color.white}, + disabled: {value: tokens.color.offBlack32}, + inverse: {value: tokens.color.darkBlue}, }, - secondary: { - default: "none", - inverse: "none", - focus: tokens.color.white, + default: {value: "none"}, + inverse: {value: "none"}, + focus: {value: tokens.color.white}, active: { - action: tokens.color.fadedBlue, - critical: tokens.color.fadedRed, + action: {value: tokens.color.fadedBlue}, + critical: {value: tokens.color.fadedRed}, }, }, - tertiary: { - hover: tokens.color.white, + hover: {value: tokens.color.white}, }, /** * Icons */ icon: { - secondaryHover: "transparent", + secondaryHover: {value: "transparent"}, }, }, text: { @@ -55,25 +53,25 @@ const theme = { * Default */ // kind="secondary, tertiary", disabled=true, light=false - disabled: tokens.color.offBlack32, + disabled: {value: tokens.color.offBlack32}, // kind="primary", light=false | kind="secondary, tertiary", light=true - inverse: tokens.color.white, + inverse: {value: tokens.color.white}, /** * Kind */ primary: { - disabled: tokens.color.white64, + disabled: {value: tokens.color.white64}, }, secondary: { - inverse: tokens.color.white50, + inverse: {value: tokens.color.white50}, }, /** * Icons */ icon: { - secondaryHover: tokens.color.blue, + secondaryHover: {value: tokens.color.blue}, }, }, border: { @@ -81,81 +79,81 @@ const theme = { * Default */ // kind="secondary", light=false | kind="tertiary", light=false - disabled: tokens.color.offBlack32, + disabled: {value: tokens.color.offBlack32}, /** * Kind */ primary: { - inverse: tokens.color.white, + inverse: {value: tokens.color.white}, }, secondary: { - action: tokens.color.offBlack50, - critical: tokens.color.offBlack50, - inverse: tokens.color.white50, + action: {value: tokens.color.offBlack50}, + critical: {value: tokens.color.offBlack50}, + inverse: {value: tokens.color.white50}, }, tertiary: { - inverse: tokens.color.white, + inverse: {value: tokens.color.white}, }, }, }, - border: { - width: { - // secondary (resting) - secondary: tokens.border.width.hairline, - // secondary (resting, focus, active), tertiary (focus) - focused: tokens.border.width.thin, - // secondary (disabled) - disabled: tokens.border.width.thin, - }, - radius: { - // default - default: tokens.border.radius.medium_4, - // tertiary - tertiary: tokens.border.radius.xSmall_2, - // small button - small: tokens.border.radius.medium_4, - // large button - large: tokens.border.radius.large_6, + borderWidths: { + // secondary (resting) + secondary: {value: tokens.border.width.hairline + "px"}, + // secondary (resting, focus, active), tertiary (focus) + focused: {value: tokens.border.width.thin + "px"}, + // secondary (disabled) + disabled: {value: tokens.border.width.thin + "px"}, + }, + radii: { + // default + default: {value: tokens.border.radius.medium_4 + "px"}, + // tertiary + tertiary: {value: tokens.border.radius.xSmall_2 + "px"}, + // small button + small: {value: tokens.border.radius.medium_4 + "px"}, + // large button + large: {value: tokens.border.radius.large_6 + "px"}, - /** - * Icons - */ - icon: tokens.border.radius.full, - }, + /** + * Icons + */ + icon: {value: tokens.border.radius.full}, }, - size: { + sizes: { height: { - tertiaryHover: tokens.spacing.xxxxSmall_2, - small: tokens.spacing.xLarge_32, - // NOTE: These height tokens are specific to this component. - medium: 40, - large: 56, + tertiaryHover: {value: tokens.spacing.xxxxSmall_2 + "px"}, + small: {value: tokens.spacing.xLarge_32 + "px"}, + // NOTE: These tokens are specific to this component. + medium: {value: "40px"}, + large: {value: "56px"}, }, }, - margin: { - icon: { - offset: -tokens.spacing.xxxxSmall_2, + spacing: { + margin: { + icon: { + offset: {value: `-${tokens.spacing.xxxxSmall_2}px`}, + }, + }, + padding: { + xsmall: {value: tokens.spacing.xxxxSmall_2 + "px"}, + small: {value: tokens.spacing.xxSmall_6 + "px"}, + medium: {value: tokens.spacing.small_12 + "px"}, + large: {value: tokens.spacing.medium_16 + "px"}, + xLarge: {value: tokens.spacing.xLarge_32 + "px"}, }, }, - padding: { - xsmall: tokens.spacing.xxxxSmall_2, - small: tokens.spacing.xxSmall_6, - medium: tokens.spacing.small_12, - large: tokens.spacing.medium_16, - xLarge: tokens.spacing.xLarge_32, + fontSizes: { + // NOTE: This token is specific to this button size. + large: {value: "18px"}, }, - font: { - size: { - // NOTE: This token is specific to this button size. - large: 18, - }, - lineHeight: { - large: tokens.font.lineHeight.medium, - }, - weight: { - default: tokens.font.weight.bold, - }, + lineHeights: { + large: {value: tokens.font.lineHeight.medium + "px"}, + }, + fontWeights: { + default: {value: tokens.font.weight.regular.toString()}, }, }; -export default theme; +export default defineTheme({ + semanticTokens: theme, +}); diff --git a/packages/wonder-blocks-button/src/themes/khanmigo.ts b/packages/wonder-blocks-button/src/themes/khanmigo.ts index 12b031ad5e..1b10dd71e3 100644 --- a/packages/wonder-blocks-button/src/themes/khanmigo.ts +++ b/packages/wonder-blocks-button/src/themes/khanmigo.ts @@ -1,58 +1,61 @@ import {mergeTheme} from "@khanacademy/wonder-blocks-theming"; import * as tokens from "@khanacademy/wonder-blocks-tokens"; import defaultTheme from "./default"; +import {defineTheme} from "./theme"; /** * The overrides for the Khanmigo theme. */ -const theme = mergeTheme(defaultTheme, { - color: { - bg: { - secondary: { - default: tokens.color.offWhite, - active: { - action: tokens.color.fadedBlue8, - critical: tokens.color.fadedRed8, +const theme = defineTheme( + mergeTheme(defaultTheme, { + semanticTokens: { + colors: { + bg: { + secondary: { + default: {value: tokens.color.offWhite}, + active: { + action: {value: tokens.color.fadedBlue8}, + critical: {value: tokens.color.fadedRed8}, + }, + focus: {value: tokens.color.offWhite}, + }, + icon: { + secondaryHover: {value: tokens.color.fadedBlue16}, + }, + }, + border: { + secondary: { + action: {value: tokens.color.fadedBlue}, + critical: {value: tokens.color.fadedRed}, + }, + }, + text: { + icon: { + secondaryHover: {value: tokens.color.blue}, + }, }, - focus: tokens.color.offWhite, }, - icon: { - secondaryHover: tokens.color.fadedBlue16, + radii: { + default: {value: tokens.border.radius.xLarge_12 + "px"}, + small: {value: tokens.border.radius.large_6 + "px"}, + large: {value: tokens.border.radius.xLarge_12 + "px"}, }, - }, - border: { - secondary: { - action: tokens.color.fadedBlue, - critical: tokens.color.fadedRed, + borderWidths: { + disabled: {value: tokens.border.width.hairline + "px"}, + focused: {value: tokens.border.width.hairline + "px"}, }, - }, - text: { - icon: { - secondaryHover: tokens.color.blue, + spacing: { + margin: { + icon: { + offset: {value: -tokens.spacing.xSmall_8 + "px"}, + }, + }, + }, + fontWeights: { + default: {value: tokens.font.weight.regular}, }, }, - }, - border: { - radius: { - default: tokens.border.radius.xLarge_12, - small: tokens.border.radius.large_6, - large: tokens.border.radius.xLarge_12, - }, - width: { - focused: tokens.border.width.hairline, - }, - }, - margin: { - icon: { - // Bring the icons closer to the edges of the button. - offset: -tokens.spacing.xSmall_8, - }, - }, - font: { - weight: { - default: tokens.font.weight.regular, - }, - }, -}); + }), +); export default theme; diff --git a/packages/wonder-blocks-button/src/themes/theme.ts b/packages/wonder-blocks-button/src/themes/theme.ts new file mode 100644 index 0000000000..13089431c1 --- /dev/null +++ b/packages/wonder-blocks-button/src/themes/theme.ts @@ -0,0 +1,129 @@ +import {defineThemeContract} from "@pandacss/dev"; + +export const defineTheme = defineThemeContract({ + // Follows the same "Token types" structure defined in Panda + // @see https://panda-css.com/docs/theming/tokens#token-types + semanticTokens: { + colors: { + // @see https://panda-css.com/docs/theming/tokens#token-nesting + bg: { + // color="default" + action: { + default: {value: ""}, + active: {value: ""}, + inverse: {value: ""}, + }, + // color="destructive" + critical: { + default: {value: ""}, + active: {value: ""}, + inverse: {value: ""}, + }, + // kind="primary" + primary: { + default: {value: ""}, + disabled: {value: ""}, + inverse: {value: ""}, + }, + // kind="secondary" + secondary: { + default: {value: ""}, + inverse: {value: ""}, + focus: {value: ""}, + active: { + action: {value: ""}, + critical: {value: ""}, + }, + }, + // kind="tertiary" + tertiary: { + hover: {value: ""}, + }, + // icon + icon: { + secondaryHover: {value: ""}, + }, + }, + text: { + // kind="secondary, tertiary", disabled=true, light=false + disabled: {value: ""}, + // kind="primary", light=false | kind="secondary, tertiary", light=true + inverse: {value: ""}, + // kind + primary: { + disabled: {value: ""}, + }, + secondary: { + inverse: {value: ""}, + }, + // icons + icon: { + secondaryHover: {value: ""}, + }, + }, + border: { + // kind="secondary", light=false | kind="tertiary", light=false + disabled: {value: ""}, + // kind + primary: { + inverse: {value: ""}, + }, + secondary: { + action: {value: ""}, + critical: {value: ""}, + inverse: {value: ""}, + }, + tertiary: { + inverse: {value: ""}, + }, + }, + }, + + borderWidths: { + secondary: {value: ""}, + focused: {value: ""}, + disabled: {value: ""}, + }, + radii: { + default: {value: ""}, + tertiary: {value: ""}, + small: {value: ""}, + large: {value: ""}, + icon: {value: ""}, + }, + + sizes: { + height: { + tertiaryHover: {value: ""}, + small: {value: ""}, + medium: {value: ""}, + large: {value: ""}, + }, + }, + spacing: { + margin: { + icon: { + offset: {value: ""}, + }, + }, + + padding: { + xsmall: {value: ""}, + small: {value: ""}, + medium: {value: ""}, + large: {value: ""}, + xLarge: {value: ""}, + }, + }, + + fontSizes: { + large: {value: ""}, + }, + lineHeights: { + large: {value: ""}, + }, + fontWeights: { + default: {value: ""}, + }, + }, +}); diff --git a/packages/wonder-blocks-button/src/themes/themed-button.tsx b/packages/wonder-blocks-button/src/themes/themed-button.tsx index 0402516b8d..c214fe0764 100644 --- a/packages/wonder-blocks-button/src/themes/themed-button.tsx +++ b/packages/wonder-blocks-button/src/themes/themed-button.tsx @@ -1,42 +1,32 @@ import * as React from "react"; import { createThemeContext, - Themes, ThemeSwitcherContext, } from "@khanacademy/wonder-blocks-theming"; -import defaultTheme from "./default"; -import khanmigoTheme from "./khanmigo"; - type Props = { children: React.ReactNode; }; -export type ButtonThemeContract = typeof defaultTheme; - -/** - * The themes available to the Button component. - */ -const themes: Themes<ButtonThemeContract> = { - default: defaultTheme, - khanmigo: khanmigoTheme, -}; - /** * The context that provides the theme to the Button component. * This is generally consumed via the `useScopedTheme` hook. */ -export const ButtonThemeContext = createThemeContext(defaultTheme); +export const ButtonThemeContext = createThemeContext({theme: "buttonDefault"}); + +export type ButtonThemeContract = {theme: string}; /** * ThemedButton is a component that provides a theme to the <Button/> component. */ export default function ThemedButton(props: Props) { const currentTheme = React.useContext(ThemeSwitcherContext); + const theme = + // NOTE: This maps to the themes defined in panda.config.ts + currentTheme === "default" ? "buttonDefault" : "buttonKhanmigo"; - const theme = themes[currentTheme] || defaultTheme; return ( - <ButtonThemeContext.Provider value={theme}> + <ButtonThemeContext.Provider value={{theme}}> {props.children} </ButtonThemeContext.Provider> ); diff --git a/packages/wonder-blocks-core/src/components/text.tsx b/packages/wonder-blocks-core/src/components/text.tsx index 440d04ec8f..54ea1318fa 100644 --- a/packages/wonder-blocks-core/src/components/text.tsx +++ b/packages/wonder-blocks-core/src/components/text.tsx @@ -99,12 +99,29 @@ const Text = React.forwardRef(function Text( ); } + const pandaStyle = style as StyleType; + + const flattenStyles = Array.isArray(pandaStyle) + ? pandaStyle.flatMap((s: StyleType) => { + if (Array.isArray(s)) { + return s.flat(); + } + + return s; + }) + : pandaStyle; + + // NOTE(juan): To make panda's css function happy! + const extraStyles = Array.isArray(flattenStyles) + ? [...flattenStyles] + : style; + return ( // @ts-expect-error [FEI-5019] - TS2322 - Type '{ children: ReactNode; style: any; className: string; "data-testid": string | undefined; tabIndex?: number | undefined; id?: string | undefined; "data-modal-launcher-portal"?: boolean | undefined; ... 69 more ...; onBlur?: ((e: FocusEvent<...>) => unknown) | undefined; }' is not assignable to type 'IntrinsicAttributes'. <Tag {...otherProps} className={cx( - css(rawStyles.text, isHeader && rawStyles.header, style), + css(rawStyles.text, isHeader && rawStyles.header, extraStyles), otherProps.className, )} data-testid={testId} diff --git a/panda.config.ts b/panda.config.ts index af6ef422b1..38cd7a6805 100644 --- a/panda.config.ts +++ b/panda.config.ts @@ -1,5 +1,7 @@ import {defineConfig, defineTokens} from "@pandacss/dev"; import {color, spacing} from "@khanacademy/wonder-blocks-tokens"; +import buttonDefaultTheme from "./packages/wonder-blocks-button/src/themes/default"; +import buttonKhanmigoTheme from "./packages/wonder-blocks-button/src/themes/khanmigo"; const wbTokenToPandaToken = (token: Record<string, string | number>) => Object.entries(token) @@ -46,6 +48,15 @@ export default defineConfig({ theme: { tokens: tokens, }, + themes: { + /** + * The themes available to the Button component. + */ + // NOTE: This generates css variables at build time for each theme, so + // we don't have to dynamically load the theme at runtime. + buttonDefault: buttonDefaultTheme, + buttonKhanmigo: buttonKhanmigoTheme, + }, // The output directory for your css system outdir: "styled-system", @@ -58,6 +69,7 @@ export default defineConfig({ }, }, ], + themes: ["buttonDefault", "buttonKhanmigo"], }, importMap: "@/styled-system", From 1f82251b5475045cb05f9dd0d6fa941341d45a6c Mon Sep 17 00:00:00 2001 From: Juan Andrade <juan@khanacademy.org> Date: Wed, 5 Jun 2024 14:32:43 -0400 Subject: [PATCH 08/17] Migrate Strut to PandaCSS --- .changeset/plenty-dolls-refuse.md | 5 ++ .../wonder-blocks-layout/strut.stories.tsx | 27 +++++----- .../src/themes/themed-button.tsx | 4 +- .../src/components/strut.tsx | 50 +++++++++++++++---- 4 files changed, 61 insertions(+), 25 deletions(-) create mode 100644 .changeset/plenty-dolls-refuse.md diff --git a/.changeset/plenty-dolls-refuse.md b/.changeset/plenty-dolls-refuse.md new file mode 100644 index 0000000000..91362652ac --- /dev/null +++ b/.changeset/plenty-dolls-refuse.md @@ -0,0 +1,5 @@ +--- +"@khanacademy/wonder-blocks-layout": major +--- + +Migrate Strut to PandaCss diff --git a/__docs__/wonder-blocks-layout/strut.stories.tsx b/__docs__/wonder-blocks-layout/strut.stories.tsx index f1bf3401e7..b214904ddf 100644 --- a/__docs__/wonder-blocks-layout/strut.stories.tsx +++ b/__docs__/wonder-blocks-layout/strut.stories.tsx @@ -10,6 +10,7 @@ import {Strut} from "@khanacademy/wonder-blocks-layout"; import packageConfig from "../../packages/wonder-blocks-layout/package.json"; import ComponentInfo from "../../.storybook/components/component-info"; +import {css} from "@/styled-system/css"; export default { title: "Packages / Layout / Strut", @@ -113,21 +114,21 @@ WithStyle.parameters = { }, }; -const styles = StyleSheet.create({ - row: { +const styles = { + row: css.raw({ flexDirection: "row", - }, - column: { + }), + column: css.raw({ flexDirection: "column", - }, - strut: { + }), + strut: css.raw({ alignSelf: "center", - backgroundColor: color.darkBlue, - }, - thin: { + backgroundColor: "darkBlue", + }), + thin: css.raw({ height: "4px", - }, - thick: { + }), + thick: css.raw({ height: "8px", - }, -}); + }), +}; diff --git a/packages/wonder-blocks-button/src/themes/themed-button.tsx b/packages/wonder-blocks-button/src/themes/themed-button.tsx index c214fe0764..50ac324a5a 100644 --- a/packages/wonder-blocks-button/src/themes/themed-button.tsx +++ b/packages/wonder-blocks-button/src/themes/themed-button.tsx @@ -23,7 +23,9 @@ export default function ThemedButton(props: Props) { const currentTheme = React.useContext(ThemeSwitcherContext); const theme = // NOTE: This maps to the themes defined in panda.config.ts - currentTheme === "default" ? "buttonDefault" : "buttonKhanmigo"; + typeof currentTheme === "undefined" || currentTheme === "default" + ? "buttonDefault" + : "buttonKhanmigo"; return ( <ButtonThemeContext.Provider value={{theme}}> diff --git a/packages/wonder-blocks-layout/src/components/strut.tsx b/packages/wonder-blocks-layout/src/components/strut.tsx index 2d6b58aa70..b505d0bfe1 100644 --- a/packages/wonder-blocks-layout/src/components/strut.tsx +++ b/packages/wonder-blocks-layout/src/components/strut.tsx @@ -2,6 +2,8 @@ import * as React from "react"; import {View} from "@khanacademy/wonder-blocks-core"; import type {StyleType} from "@khanacademy/wonder-blocks-core"; +import {css, cx} from "@/styled-system/css"; +import {SystemStyleObject} from "@/styled-system/types"; type Props = { size: number; @@ -16,17 +18,43 @@ type Props = { export default class Strut extends React.Component<Props> { render(): React.ReactNode { const {size, style} = this.props; - return <View aria-hidden="true" style={[strutStyle(size), style]} />; + + const rawStyle = Array.isArray(style) + ? css(...style) + : typeof style === "object" + ? css(style as SystemStyleObject) + : undefined; + + return ( + <div + aria-hidden="true" + className={cx(viewStyle, strutStyle, rawStyle)} + // https://panda-css.com/docs/guides/dynamic-styling#using-token + style={{"--strut-size": size + "px"} as React.CSSProperties} + /> + ); } } -const strutStyle = (size: number) => { - return { - width: size, - MsFlexBasis: size, - MsFlexPreferredSize: size, - WebkitFlexBasis: size, - flexBasis: size, - flexShrink: 0, - }; -}; +// Borrowed from View +const viewStyle = css({ + alignItems: "stretch", + borderWidth: 0, + borderStyle: "solid", + boxSizing: "border-box", + display: "flex", + flexDirection: "column", + margin: 0, + padding: 0, + position: "relative", + zIndex: 0, + // fix flexbox bugs + minHeight: 0, + minWidth: 0, +}); + +const strutStyle = css({ + width: "var(--strut-size)", + flexBasis: "var(--strut-size)", + flexShrink: 0, +}); From f92b0d08432c38ad1d075aa77e5e5650c991b970 Mon Sep 17 00:00:00 2001 From: Juan Andrade <juan@khanacademy.org> Date: Thu, 6 Jun 2024 17:14:08 -0400 Subject: [PATCH 09/17] Migrate PhosphorIcon to Panda --- .changeset/polite-melons-peel.md | 5 ++ .../src/components/phosphor-icon.tsx | 74 ++++++++----------- 2 files changed, 35 insertions(+), 44 deletions(-) create mode 100644 .changeset/polite-melons-peel.md diff --git a/.changeset/polite-melons-peel.md b/.changeset/polite-melons-peel.md new file mode 100644 index 0000000000..dddaab2944 --- /dev/null +++ b/.changeset/polite-melons-peel.md @@ -0,0 +1,5 @@ +--- +"@khanacademy/wonder-blocks-icon": major +--- + +Migrate PhosphorIcon to Panda CSS diff --git a/packages/wonder-blocks-icon/src/components/phosphor-icon.tsx b/packages/wonder-blocks-icon/src/components/phosphor-icon.tsx index 890a2de51b..6917305f39 100644 --- a/packages/wonder-blocks-icon/src/components/phosphor-icon.tsx +++ b/packages/wonder-blocks-icon/src/components/phosphor-icon.tsx @@ -1,14 +1,15 @@ import * as React from "react"; -import {StyleSheet} from "aphrodite"; -import {addStyle, AriaProps, StyleType} from "@khanacademy/wonder-blocks-core"; +import {AriaProps, StyleType} from "@khanacademy/wonder-blocks-core"; +import {css, cx} from "@/styled-system/css"; +import {SystemStyleObject} from "@/styled-system/types"; import {viewportPixelsForSize} from "../util/icon-util"; import {IconSize, PhosphorIconAsset} from "../types"; // We use a span instead of an img because we want to use the mask-image CSS // property. -const StyledIcon = addStyle("span"); +const StyledIcon = "span"; //addStyle("span"); type Props = Pick<AriaProps, "aria-hidden" | "aria-label" | "role"> & { /** @@ -93,56 +94,32 @@ export const PhosphorIcon = React.forwardRef(function PhosphorIcon( } = props; const pixelSize = viewportPixelsForSize(size); - const classNames = `${className ?? ""}`; - const iconStyles = _generateStyles(color, pixelSize); + + const rawStyle = Array.isArray(style) + ? css(...style) + : typeof style === "object" + ? css(style as SystemStyleObject) + : undefined; return ( <StyledIcon {...sharedProps} - className={classNames} - style={[ - styles.svg, - iconStyles.icon, + className={cx(styles.svg, styles.icon, rawStyle, className)} + style={ { - // We still pass inline styles to the icon itself, so we - // prevent the icon from being overridden by the inline - // styles. - maskImage: `url(${icon})`, - }, - style, - ]} + "--icon-color": color, + "--icon-size": `${pixelSize}px`, + "--icon-path": `url(${icon})`, + } as React.CSSProperties + } data-testid={testId} ref={ref} /> ); }); -const dynamicStyles: Record<string, any> = {}; - -/** - * Generates the visual styles for the icon. - */ -const _generateStyles = (color: string, size: number) => { - const iconStyle = `${color}-${size}`; - // The styles are cached to avoid creating a new object on every render. - if (styles[iconStyle]) { - return styles[iconStyle]; - } - - const newStyles: Record<string, any> = { - icon: { - backgroundColor: color, - width: size, - height: size, - }, - }; - - dynamicStyles[iconStyle] = StyleSheet.create(newStyles); - return dynamicStyles[iconStyle]; -}; - -const styles = StyleSheet.create({ - svg: { +const styles = { + svg: css({ display: "inline-block", verticalAlign: "text-bottom", flexShrink: 0, @@ -150,7 +127,16 @@ const styles = StyleSheet.create({ maskSize: "100%", maskRepeat: "no-repeat", maskPosition: "center", - }, -}); + }), + icon: css({ + backgroundColor: "var(--icon-color)", + width: "var(--icon-size)", + height: "var(--icon-size)", + // We still pass inline styles to the icon itself, so we + // prevent the icon from being overridden by the inline + // styles. + maskImage: "var(--icon-path)", + }), +}; PhosphorIcon.displayName = "PhosphorIcon"; From e0fd43701dbc1ad6b45026399f7e74bc09772c1c Mon Sep 17 00:00:00 2001 From: Juan Andrade <juan@khanacademy.org> Date: Thu, 6 Jun 2024 18:11:14 -0400 Subject: [PATCH 10/17] Migrate ProgressSpinner to Panda --- .changeset/sharp-nails-peel.md | 5 +++ .../circular-spinner.stories.tsx | 40 +++++++++---------- .../src/components/view.tsx | 3 +- .../src/components/strut.tsx | 2 +- .../src/components/circular-spinner.tsx | 39 +++++++----------- panda.config.ts | 18 ++++++++- 6 files changed, 59 insertions(+), 48 deletions(-) create mode 100644 .changeset/sharp-nails-peel.md diff --git a/.changeset/sharp-nails-peel.md b/.changeset/sharp-nails-peel.md new file mode 100644 index 0000000000..ca088a7ade --- /dev/null +++ b/.changeset/sharp-nails-peel.md @@ -0,0 +1,5 @@ +--- +"@khanacademy/wonder-blocks-progress-spinner": major +--- + +Migrate ProgressSpinner to Panda" diff --git a/__docs__/wonder-blocks-progress-spinner/circular-spinner.stories.tsx b/__docs__/wonder-blocks-progress-spinner/circular-spinner.stories.tsx index 0c66c80e6f..23fac6a1a9 100644 --- a/__docs__/wonder-blocks-progress-spinner/circular-spinner.stories.tsx +++ b/__docs__/wonder-blocks-progress-spinner/circular-spinner.stories.tsx @@ -1,9 +1,9 @@ import * as React from "react"; -import {StyleSheet, css} from "aphrodite"; import type {Meta, StoryObj} from "@storybook/react"; +import {css} from "@/styled-system/css"; import {View} from "@khanacademy/wonder-blocks-core"; -import {color, spacing} from "@khanacademy/wonder-blocks-tokens"; +import {color} from "@khanacademy/wonder-blocks-tokens"; import {Body, LabelLarge} from "@khanacademy/wonder-blocks-typography"; import {CircularSpinner} from "@khanacademy/wonder-blocks-progress-spinner"; @@ -146,11 +146,11 @@ Inline.parameters = { }; export const WithStyle: StoryComponentType = () => { - const spinnerStyle = { - border: `solid 5px ${color.teal}`, + const spinnerStyle = css.raw({ + border: "teal solid 5px", borderRadius: "50%", - backgroundColor: color.offWhite, - } as const; + backgroundColor: "offWhite", + }); return <CircularSpinner style={spinnerStyle} />; }; @@ -167,23 +167,23 @@ WithStyle.parameters = { }, }; -const styles = StyleSheet.create({ - darkBackground: { - background: color.darkBlue, - padding: spacing.xLarge_32, +const styles = { + darkBackground: css.raw({ + background: "darkBlue", + padding: "xLarge_32", width: "100%", alignItems: "center", justifyContent: "center", - }, - distanced: { - margin: spacing.large_24, - }, - example: { + }), + distanced: css.raw({ + margin: "large_24", + }), + example: css.raw({ alignItems: "center", justifyContent: "center", - }, - row: { + }), + row: css.raw({ flexDirection: "row", - marginBottom: spacing.xLarge_32, - }, -}); + marginBottom: "xLarge_32", + }), +}; diff --git a/packages/wonder-blocks-core/src/components/view.tsx b/packages/wonder-blocks-core/src/components/view.tsx index 6c179dbda5..109329ae2e 100644 --- a/packages/wonder-blocks-core/src/components/view.tsx +++ b/packages/wonder-blocks-core/src/components/view.tsx @@ -27,8 +27,7 @@ function isAphroditeStyle(style: StyleType): style is StyleType { // https://github.com/facebook/css-layout#default-values const defaultStyle = { alignItems: "stretch", - borderWidth: 0, - borderStyle: "solid", + border: "transparent solid 0px", boxSizing: "border-box", display: "flex", flexDirection: "column", diff --git a/packages/wonder-blocks-layout/src/components/strut.tsx b/packages/wonder-blocks-layout/src/components/strut.tsx index b505d0bfe1..602d546541 100644 --- a/packages/wonder-blocks-layout/src/components/strut.tsx +++ b/packages/wonder-blocks-layout/src/components/strut.tsx @@ -1,6 +1,6 @@ import * as React from "react"; -import {View} from "@khanacademy/wonder-blocks-core"; +// import {View} from "@khanacademy/wonder-blocks-core"; import type {StyleType} from "@khanacademy/wonder-blocks-core"; import {css, cx} from "@/styled-system/css"; import {SystemStyleObject} from "@/styled-system/types"; diff --git a/packages/wonder-blocks-progress-spinner/src/components/circular-spinner.tsx b/packages/wonder-blocks-progress-spinner/src/components/circular-spinner.tsx index 8f285ef436..f0db418d78 100644 --- a/packages/wonder-blocks-progress-spinner/src/components/circular-spinner.tsx +++ b/packages/wonder-blocks-progress-spinner/src/components/circular-spinner.tsx @@ -1,9 +1,11 @@ import * as React from "react"; -import {StyleSheet} from "aphrodite"; -import {View, addStyle} from "@khanacademy/wonder-blocks-core"; +// import {StyleSheet} from "aphrodite"; +import {View} from "@khanacademy/wonder-blocks-core"; import {color} from "@khanacademy/wonder-blocks-tokens"; import type {AriaProps, StyleType} from "@khanacademy/wonder-blocks-core"; +import {css} from "@/styled-system/css"; +import {SystemStyleObject} from "@/styled-system/types"; const heights = { xsmall: 16, @@ -24,7 +26,7 @@ const colors = { dark: color.offBlack16, } as const; -const StyledPath = addStyle("path"); +const StyledPath = "path"; // addStyle("path"); type Props = AriaProps & { /** @@ -83,7 +85,8 @@ export default class CircularSpinner extends React.Component<Props> { data-testid={testId} > <StyledPath - style={[styles.loadingSpinner, {fill: color}]} + fill={color} + className={styles.loadingSpinner} fillRule="nonzero" d={path} /> @@ -94,28 +97,16 @@ export default class CircularSpinner extends React.Component<Props> { } } -const rotateKeyFrames = { - "0%": { - transform: "rotate(0deg)", - }, - "50%": { - transform: "rotate(180deg)", - }, - "100%": { - transform: "rotate(360deg)", - }, -} as const; - -const styles = StyleSheet.create({ - spinnerContainer: { +const styles = { + spinnerContainer: css.raw({ justifyContent: "center", - }, - loadingSpinner: { + }), + loadingSpinner: css({ transformOrigin: "50% 50%", - // @ts-expect-error [FEI-5019]: `animationName` expects a string not an object. - animationName: rotateKeyFrames, + // See keyframes in panda.config.ts + animationName: "spin", animationDuration: "1.1s", animationIterationCount: "infinite", animationTimingFunction: "linear", - }, -}); + }), +}; diff --git a/panda.config.ts b/panda.config.ts index 38cd7a6805..533482ea3b 100644 --- a/panda.config.ts +++ b/panda.config.ts @@ -1,4 +1,4 @@ -import {defineConfig, defineTokens} from "@pandacss/dev"; +import {defineConfig, defineKeyframes, defineTokens} from "@pandacss/dev"; import {color, spacing} from "@khanacademy/wonder-blocks-tokens"; import buttonDefaultTheme from "./packages/wonder-blocks-button/src/themes/default"; import buttonKhanmigoTheme from "./packages/wonder-blocks-button/src/themes/khanmigo"; @@ -27,6 +27,21 @@ const tokens = defineTokens({ spacing: wbTokenToPandaToken(spacing), }); +// Supported keyframes +const keyframes = defineKeyframes({ + spin: { + "0%": { + transform: "rotate(0deg)", + }, + "50%": { + transform: "rotate(180deg)", + }, + "100%": { + transform: "rotate(360deg)", + }, + }, +}); + export default defineConfig({ // Whether to use css reset preflight: false, @@ -47,6 +62,7 @@ export default defineConfig({ // Useful for theme customization theme: { tokens: tokens, + keyframes, }, themes: { /** From 41d77bfcf5866a7ef50d0d671e8b0adf8219f4c3 Mon Sep 17 00:00:00 2001 From: Juan Andrade <juan@khanacademy.org> Date: Mon, 10 Jun 2024 14:18:25 -0400 Subject: [PATCH 11/17] Fix TS/lint errors --- package.json | 8 +- .../src/components/accordion-section.tsx | 4 +- panda.config.ts | 1 + tsconfig-common.json | 2 +- yarn.lock | 232 +++++++++--------- 5 files changed, 124 insertions(+), 123 deletions(-) diff --git a/package.json b/package.json index 2c3689b121..f40acfc2f0 100644 --- a/package.json +++ b/package.json @@ -16,13 +16,13 @@ "clean": "rm -rf packages/wonder-blocks-*/dist && rm -rf packages/wonder-blocks-*/node_modules && rm -f packages/*/*.tsbuildinfo && rm -f utils/tsconfig.tsbuildinfo", "coverage": "yarn run test:coverage && open coverage/lcov-report/index.html", "coveragefor": "bash -c 'yarn --silent jest --coverage --collectCoverageFrom=**/$0 $(node ./utils/test-file-for.js \"$0\")'", - "coverage:ci": "yarn run jest --coverage", + "coverage:ci": "yarn prepare && yarn run jest --coverage", "coverage:types": "typescript-coverage-report", "format": "prettier --write packages/**/*.ts packages/**/*.tsx", "jest": "jest --config config/jest/test.config.js", "lint:pkg-json": "yarn npmPkgJsonLint ./packages", "lint:watch": "esw --watch --config ./eslint/eslintrc packages", - "lint": "yarn lint:ci .", + "lint": "yarn prepare && yarn lint:ci .", "lint:ci": "eslint --ext .ts --ext .js --ext .tsx --ext .jsx", "publish:ci": "yarn run lint:pkg-json && node utils/publish/pre-publish-check-ci.js && git diff --stat --exit-code HEAD && yarn build && yarn build:types && changeset publish", "start": "yarn start:storybook", @@ -51,7 +51,7 @@ "@khanacademy/eslint-config": "^2.0.0", "@khanacademy/eslint-plugin": "^2.0.0", "@khanacademy/wonder-stuff-testing": "^3.0.1", - "@pandacss/dev": "^0.40.0", + "@pandacss/dev": "^0.40.1", "@rollup/plugin-node-resolve": "^15.0.2", "@storybook/addon-a11y": "^8.0.0", "@storybook/addon-designs": "^7.0.5", @@ -114,7 +114,7 @@ "rollup-plugin-babel": "^4.0.0-beta.2", "storybook": "^8.0.0", "storybook-addon-pseudo-states": "^2.1.2", - "typescript": "5.1.6", + "typescript": "5.4.5", "typescript-coverage-report": "^0.7.0", "vite": "^4.4.8", "vite-plugin-turbosnap": "^1.0.2" diff --git a/packages/wonder-blocks-accordion/src/components/accordion-section.tsx b/packages/wonder-blocks-accordion/src/components/accordion-section.tsx index 1f214acc5b..704a0320d3 100644 --- a/packages/wonder-blocks-accordion/src/components/accordion-section.tsx +++ b/packages/wonder-blocks-accordion/src/components/accordion-section.tsx @@ -1,6 +1,6 @@ import * as React from "react"; import {StyleSheet} from "aphrodite"; -import type {StyleDeclaration} from "aphrodite"; +// import type {StyleDeclaration} from "aphrodite"; import {useUniqueIdWithMock, View} from "@khanacademy/wonder-blocks-core"; import * as tokens from "@khanacademy/wonder-blocks-tokens"; @@ -416,7 +416,7 @@ const _generateStyles = ( }; } - const newStyles: StyleDeclaration = { + const newStyles: any = { wrapper: { ...wrapperStyle, ...firstSectionStyle, diff --git a/panda.config.ts b/panda.config.ts index 533482ea3b..e054446bec 100644 --- a/panda.config.ts +++ b/panda.config.ts @@ -52,6 +52,7 @@ export default defineConfig({ "./__docs__/**/*.{ts,tsx,mdx}", "./.storybook/**/*.{ts,tsx}", ], + jsxFramework: "react", // Files to exclude exclude: [], diff --git a/tsconfig-common.json b/tsconfig-common.json index 6a9a9ef1db..3b2785b646 100644 --- a/tsconfig-common.json +++ b/tsconfig-common.json @@ -24,6 +24,6 @@ // "noImplicitAny": true, /* Completeness */ "skipDefaultLibCheck": true, // it's safe to assume that built-in .d.ts files are correct - "skipLibCheck": false + "skipLibCheck": true // Have to skip node_modules or we'll get errors from third party libs } } diff --git a/yarn.lock b/yarn.lock index e2b9b13e0a..7366a956fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3477,33 +3477,33 @@ resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== -"@pandacss/config@0.40.0", "@pandacss/config@^0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/config/-/config-0.40.0.tgz#ae698a4f67f37464a2ce8188d6f722ddeff873a7" - integrity sha512-MGVQciHCPDdDi04WKqj6cBqdvv++L9L9U04n5F9jEFi5Mv6LwTroDVdkHvTGClC4h5A4RgI+2d910eYVGQ5iRw== - dependencies: - "@pandacss/logger" "0.40.0" - "@pandacss/preset-base" "0.40.0" - "@pandacss/preset-panda" "0.40.0" - "@pandacss/shared" "0.40.0" - "@pandacss/types" "0.40.0" +"@pandacss/config@0.40.1", "@pandacss/config@^0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/config/-/config-0.40.1.tgz#2cab81675587530cc87ff9708878be0499183420" + integrity sha512-Pzm0GpsrV8OoXgrBJ+V7aaKG39ytbLex1XsRKY6JThkAAz0rE2P8k4nbSQU8WXuG7mbOijBKYybi/cxRAIUL1w== + dependencies: + "@pandacss/logger" "0.40.1" + "@pandacss/preset-base" "0.40.1" + "@pandacss/preset-panda" "0.40.1" + "@pandacss/shared" "0.40.1" + "@pandacss/types" "0.40.1" bundle-n-require "1.1.1" escalade "3.1.2" merge-anything "5.1.7" microdiff "1.3.2" typescript "5.3.3" -"@pandacss/core@0.40.0", "@pandacss/core@^0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/core/-/core-0.40.0.tgz#5ed7902cef6cee830639bf0f643e9fe26358a0cf" - integrity sha512-f3qx5rH265vvlgmU291yzWBk/WfsPzVpVNVRgfPpOFCjjxh/iWS2ZUZ8/BQ39CNM0ySIVz32je4FWXvf8V5zgA== +"@pandacss/core@0.40.1", "@pandacss/core@^0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/core/-/core-0.40.1.tgz#f3283038c128a6dc8dc93756882eed2dd7526e5b" + integrity sha512-12Eu6ReCYZYu6Y/cX5YvGUS8eJkCVJYR8njWAqJmSg+rg/vqmkAM+KL8qdYw95WiTzih1dPaSq+MqkiX3N9hUg== dependencies: "@csstools/postcss-cascade-layers" "4.0.6" - "@pandacss/is-valid-prop" "^0.40.0" - "@pandacss/logger" "0.40.0" - "@pandacss/shared" "0.40.0" - "@pandacss/token-dictionary" "0.40.0" - "@pandacss/types" "0.40.0" + "@pandacss/is-valid-prop" "^0.40.1" + "@pandacss/logger" "0.40.1" + "@pandacss/shared" "0.40.1" + "@pandacss/token-dictionary" "0.40.1" + "@pandacss/types" "0.40.1" browserslist "4.23.0" hookable "5.5.3" lightningcss "1.23.0" @@ -3519,75 +3519,75 @@ postcss-selector-parser "6.0.16" ts-pattern "5.0.8" -"@pandacss/dev@^0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/dev/-/dev-0.40.0.tgz#0fca202f8b392f0a9c53ed81ccf77b3a1e8fd071" - integrity sha512-ut59w/rxU4dk7m5hUYni22XdhISk8QpMOfdsB11kNGA4SxrL+AVeRe4nUQeS1TpbZXcds6fBai3nf3ouKLtOlQ== +"@pandacss/dev@^0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/dev/-/dev-0.40.1.tgz#aa21bb77bf8f39eaf2e66ac63e65272b0db5068e" + integrity sha512-61vy1KjwfVdWTaQtwY4ghmvwPhcRRVnfwpAG5S/kogw0p1rIp7a8vDHi31CjbPxO4qccjhNNzVVGDzaqnzHf+w== dependencies: "@clack/prompts" "0.7.0" - "@pandacss/config" "0.40.0" - "@pandacss/logger" "0.40.0" - "@pandacss/node" "0.40.0" - "@pandacss/postcss" "0.40.0" - "@pandacss/preset-panda" "0.40.0" - "@pandacss/shared" "0.40.0" - "@pandacss/token-dictionary" "0.40.0" - "@pandacss/types" "0.40.0" + "@pandacss/config" "0.40.1" + "@pandacss/logger" "0.40.1" + "@pandacss/node" "0.40.1" + "@pandacss/postcss" "0.40.1" + "@pandacss/preset-panda" "0.40.1" + "@pandacss/shared" "0.40.1" + "@pandacss/token-dictionary" "0.40.1" + "@pandacss/types" "0.40.1" cac "6.7.14" -"@pandacss/extractor@0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/extractor/-/extractor-0.40.0.tgz#b784ad51b21ea7c3475282e01698206ca4e9ef1a" - integrity sha512-VhlF2YPjqnLd5+tKpJHXrRwq0W1GhLQx6z2jn+2z9kQMyMrXysEWncNK4je8dZvDLVzvP3pBRXlBYT6LK5cxSg== +"@pandacss/extractor@0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/extractor/-/extractor-0.40.1.tgz#166ddbb26eef1113b83dce30c9e1df022fa260eb" + integrity sha512-eHTAiNBLPxOYsf4pqbwhxjqejzaYx6EGFvdxznKohO++ihPgoph4/zl6WZx+/Ncb/IcHKMXpIBghQmmE68LIyA== dependencies: - "@pandacss/shared" "0.40.0" + "@pandacss/shared" "0.40.1" ts-evaluator "1.2.0" ts-morph "21.0.1" -"@pandacss/generator@0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/generator/-/generator-0.40.0.tgz#422a3eb2c4cf2b5168122770d98e6789c9b82311" - integrity sha512-0jLIqgs/PviVTJmkZKpfYtGpViEnehRxGSmqv5NQjztqiLWL+6VoEj5pcRDiEyFJUDVBq5XeuUFK3OGt1DJyEg== - dependencies: - "@pandacss/core" "0.40.0" - "@pandacss/is-valid-prop" "^0.40.0" - "@pandacss/logger" "0.40.0" - "@pandacss/shared" "0.40.0" - "@pandacss/token-dictionary" "0.40.0" - "@pandacss/types" "0.40.0" +"@pandacss/generator@0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/generator/-/generator-0.40.1.tgz#5ec6dfe50a5905c579f84008071305dc6f5e51d2" + integrity sha512-kidMyFPVuJYue4uah9uL4iNdhCPikTPCsc8j9IwrcrKPT6uhLqdeBQEF3Kxs0Pik8v+cMaDV0BSSceCujxHzhA== + dependencies: + "@pandacss/core" "0.40.1" + "@pandacss/is-valid-prop" "^0.40.1" + "@pandacss/logger" "0.40.1" + "@pandacss/shared" "0.40.1" + "@pandacss/token-dictionary" "0.40.1" + "@pandacss/types" "0.40.1" javascript-stringify "2.1.0" outdent " ^0.8.0" pluralize "8.0.0" postcss "8.4.38" ts-pattern "5.0.8" -"@pandacss/is-valid-prop@^0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/is-valid-prop/-/is-valid-prop-0.40.0.tgz#3d6e054ff0ebef78a694a8da2518f67f88f79929" - integrity sha512-SJk4hY84Kjr1jWd+A6tCdNAzGOi1dMpLahjK7urNdTkVb0lvFb/0SURFM5zj9+N90zXaqPNtWgOoUvN5o0E+kQ== +"@pandacss/is-valid-prop@^0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/is-valid-prop/-/is-valid-prop-0.40.1.tgz#6aeeb4b0466762a2a4e32025cdbbaa4f14acef15" + integrity sha512-YcWecr6zecEiCqRi/zoCONcokG64T2LiEOCEYZMhqX9ma/KsKNd4oZO6r001/1ZUSBSVD6ZIb95h/N4gctfayg== -"@pandacss/logger@0.40.0", "@pandacss/logger@^0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/logger/-/logger-0.40.0.tgz#52d5097a9d80a6a1a6667ee09c2605b4f01e8fa2" - integrity sha512-PsGHBigBWlwagh0mzBZ5GP8RgR1mwnxhEjQ7qFKlgsbch49EJgJQO8mwFod37sB9Bx2oF3KVMqWxqbPjRX4Jgg== +"@pandacss/logger@0.40.1", "@pandacss/logger@^0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/logger/-/logger-0.40.1.tgz#4a6010a4f8ef7a903681655167b53b8f87a04966" + integrity sha512-UnxDZGWj4e2Cl9XJWBp5WTJiWmfXIbyYLXt0tOlVIGTiBfZtsqVnT/uD3g71QSJgyUCyYqCx/zHJTIsKIm2/HQ== dependencies: - "@pandacss/types" "0.40.0" + "@pandacss/types" "0.40.1" kleur "4.1.5" -"@pandacss/node@0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/node/-/node-0.40.0.tgz#51289642ece73b91f79ad7ef5e6ae262870fc0d5" - integrity sha512-EGDCcQgzQKQVtphyNdvrvhZ3DK3QyjN1jfmd528blaSuJKiPWV0t3yyfC5U+6jHC9UESZoinDknd6vywJ+snUg== - dependencies: - "@pandacss/config" "0.40.0" - "@pandacss/core" "0.40.0" - "@pandacss/extractor" "0.40.0" - "@pandacss/generator" "0.40.0" - "@pandacss/logger" "0.40.0" - "@pandacss/parser" "0.40.0" - "@pandacss/shared" "0.40.0" - "@pandacss/token-dictionary" "0.40.0" - "@pandacss/types" "0.40.0" +"@pandacss/node@0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/node/-/node-0.40.1.tgz#98c1266796ad9fc80991151acb71c5c21d1b0547" + integrity sha512-r00E85hAFmU49H0JgEwRqf2R5P6CIAydLcTTGrqYEvC8NrP2Y2vsnNENYwDT6PChAzjIZxtZK5myYki3qkfWTA== + dependencies: + "@pandacss/config" "0.40.1" + "@pandacss/core" "0.40.1" + "@pandacss/extractor" "0.40.1" + "@pandacss/generator" "0.40.1" + "@pandacss/logger" "0.40.1" + "@pandacss/parser" "0.40.1" + "@pandacss/shared" "0.40.1" + "@pandacss/token-dictionary" "0.40.1" + "@pandacss/types" "0.40.1" browserslist "4.23.0" chokidar "3.6.0" fast-glob "3.3.2" @@ -3609,63 +3609,63 @@ ts-pattern "5.0.8" tsconfck "3.0.2" -"@pandacss/parser@0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/parser/-/parser-0.40.0.tgz#01304dde85b29672ef23455508a15d116764d03f" - integrity sha512-KtdeHWT0nY2xPI94je7TPLnT7/RwNT7cRBxs2akxEZMXR0WXQGiu4x7GASATdPNKyO0qUcXKZ44950k4NWAu+g== - dependencies: - "@pandacss/config" "^0.40.0" - "@pandacss/core" "^0.40.0" - "@pandacss/extractor" "0.40.0" - "@pandacss/logger" "0.40.0" - "@pandacss/shared" "0.40.0" - "@pandacss/types" "0.40.0" +"@pandacss/parser@0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/parser/-/parser-0.40.1.tgz#0551d0d56d4a36549eda7dee23f3300504abb21a" + integrity sha512-tcBw29Qzxe7BSyf3G76d4ux8rCnqzg4kIApOZQFPrPLGzkc6/TO59HQr3gz8YQbD0HhO2QzjnUkVwCuOpCJoOQ== + dependencies: + "@pandacss/config" "^0.40.1" + "@pandacss/core" "^0.40.1" + "@pandacss/extractor" "0.40.1" + "@pandacss/logger" "0.40.1" + "@pandacss/shared" "0.40.1" + "@pandacss/types" "0.40.1" "@vue/compiler-sfc" "3.4.19" magic-string "0.30.10" ts-morph "21.0.1" ts-pattern "5.0.8" -"@pandacss/postcss@0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/postcss/-/postcss-0.40.0.tgz#d39abbd55eccafced28addd5c33788d760626a40" - integrity sha512-wb7AyCqOmCHsWjCfiI5LhEkXq3dA3V7F43MKobhwR65TA43zDJHY9Tc3KCzRlvOwP7pQ76XbBZQczCyMQBAHxQ== +"@pandacss/postcss@0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/postcss/-/postcss-0.40.1.tgz#90fcccd5116e43d0be7c2742e9391d54113d3fc0" + integrity sha512-PunPSjbDYRw9ljLf4iGKpndAxUkDhptaVATVhHALA1zC31qjF86/ZQRTvMpbBKkIi18x0WKW4lQVA7NFb7+iYg== dependencies: - "@pandacss/node" "0.40.0" + "@pandacss/node" "0.40.1" postcss "8.4.38" -"@pandacss/preset-base@0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/preset-base/-/preset-base-0.40.0.tgz#04e8d76f85817e49a49ae3679226917816a4ea25" - integrity sha512-2iVg3W+CqezHjuj9EGST2/RB/yjuy4M1U8zrcS6pVK9dCsImD47/PZHijcQwjT4RjTOU+oVuQyV/TbjWtiswPQ== +"@pandacss/preset-base@0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/preset-base/-/preset-base-0.40.1.tgz#07ec3040721fc951e3d1f46a9915a72cde16d2f8" + integrity sha512-uPevTES6MonoCSLa5BLHcIkj0hJE6Nynlnaqyen4BPESJFh+ylzVjQa8K3RpOAtD6phVgWsjf21cjmKfnxo+0Q== dependencies: - "@pandacss/types" "0.40.0" + "@pandacss/types" "0.40.1" -"@pandacss/preset-panda@0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/preset-panda/-/preset-panda-0.40.0.tgz#662efddb35a86ae4f87f2f6128ff9dee39f54ac2" - integrity sha512-/K/i2HQR+T1cbJxRRmTK7wQrOjtBD9MJata8CsqBWDp8CfhZQt7rl3zfyWxbOtMa+IAh4bKu5CIOxY76yFzXvg== +"@pandacss/preset-panda@0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/preset-panda/-/preset-panda-0.40.1.tgz#e2d8fc13917bc221432e7d475fb82c15d58a4208" + integrity sha512-rNw+mfU3rhQzOgUkKTZqQ6y0qRMua5Z8AVuWUrSPYCERsxmbdAVrdoOfkCjiZ+Kf+nWGumlDca9IWxI5vYlSMw== dependencies: - "@pandacss/types" "0.40.0" + "@pandacss/types" "0.40.1" -"@pandacss/shared@0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/shared/-/shared-0.40.0.tgz#8ea9a6455efcfa1f3b466b3dcfafac805c455138" - integrity sha512-cf+2AR01tNOBNLcMdAMOS4+O+rQX9Pc+GFspJexciKiOk94fUC7eTj0gJFuIbbAsAxdD3J2OGh6w9j4Vk/5xxA== +"@pandacss/shared@0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/shared/-/shared-0.40.1.tgz#63f519f9e50f362b8d67128fb445a9264fe723fe" + integrity sha512-FBI2AaaYQZoA7TU/qa9z4FVGU3eQDC/cXobTOzmvewpVb+kFSjPo9hralYAViq+5EFRAJOFM7NMqQH0Enitjnw== -"@pandacss/token-dictionary@0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/token-dictionary/-/token-dictionary-0.40.0.tgz#e74ed136a741b92f85ac2ef21d7720ea11b7925e" - integrity sha512-VgUw6CJIThYvrmdKSsQmvz6G+4oMGPtU5ZibodlkVxZ29B8GDJ9eVIAyUCWWe/dCuto9p3faB7PVayXK6ZrAtw== +"@pandacss/token-dictionary@0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/token-dictionary/-/token-dictionary-0.40.1.tgz#a6b931878ed84859657b42445806f84f4e97648f" + integrity sha512-vpeGGJMd1dasGD2siEqSxtg9wAYNHVnafJSL+QCtarRSwVf9/ETw48md6CvGX7Iq6mfUpNJaa1JkBmhnQUVuNg== dependencies: - "@pandacss/logger" "^0.40.0" - "@pandacss/shared" "0.40.0" - "@pandacss/types" "0.40.0" + "@pandacss/logger" "^0.40.1" + "@pandacss/shared" "0.40.1" + "@pandacss/types" "0.40.1" ts-pattern "5.0.8" -"@pandacss/types@0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@pandacss/types/-/types-0.40.0.tgz#7d0b6145dab16e7407a5ab6211142057bd2c07ab" - integrity sha512-oAzs5YvN7kuO+/4cQqpYBspmtDRmTNdNqwKgQQb5l232bGhjbrJzo1U4uE8OgP1Agl8in+nzwC5kf3wPaPOMWw== +"@pandacss/types@0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@pandacss/types/-/types-0.40.1.tgz#5e3c1462bed8955830a30a0ff431a7e4f31e6f93" + integrity sha512-znHd2Qc9zv/3e86CkM04Dv5b3dTymucfAvbvkUrvz4AT1KME7BQ1YEQRpaXgdE4UI5waV+Rv0Tx7Dmtt//4yWQ== "@phosphor-icons/core@^2.0.2": version "2.0.2" @@ -14931,16 +14931,16 @@ typescript-coverage-report@^0.7.0: semantic-ui-react "^0.88.2" type-coverage-core "^2.23.0" -typescript@5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" - integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== - typescript@5.3.3: version "5.3.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== +typescript@5.4.5: + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + ufo@^1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" From 46a99237458dc237cab58321347756311ac47345 Mon Sep 17 00:00:00 2001 From: Juan Andrade <juan@khanacademy.org> Date: Mon, 10 Jun 2024 14:34:12 -0400 Subject: [PATCH 12/17] Fix CI --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index f40acfc2f0..a27bb1f3be 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ }, "scripts": { "prepare": "panda codegen", + "postinstall": "yarn prepare", "alex": "alex packages/", "build": "yarn prepare && rollup -c ./build-settings/rollup.config.js", "build:types": "yarn tsc --build tsconfig-build.json && node -r @swc-node/register build-settings/remove-test-types-from-dist.ts", @@ -16,13 +17,13 @@ "clean": "rm -rf packages/wonder-blocks-*/dist && rm -rf packages/wonder-blocks-*/node_modules && rm -f packages/*/*.tsbuildinfo && rm -f utils/tsconfig.tsbuildinfo", "coverage": "yarn run test:coverage && open coverage/lcov-report/index.html", "coveragefor": "bash -c 'yarn --silent jest --coverage --collectCoverageFrom=**/$0 $(node ./utils/test-file-for.js \"$0\")'", - "coverage:ci": "yarn prepare && yarn run jest --coverage", + "coverage:ci": "yarn run jest --coverage", "coverage:types": "typescript-coverage-report", "format": "prettier --write packages/**/*.ts packages/**/*.tsx", "jest": "jest --config config/jest/test.config.js", "lint:pkg-json": "yarn npmPkgJsonLint ./packages", "lint:watch": "esw --watch --config ./eslint/eslintrc packages", - "lint": "yarn prepare && yarn lint:ci .", + "lint": "yarn lint:ci .", "lint:ci": "eslint --ext .ts --ext .js --ext .tsx --ext .jsx", "publish:ci": "yarn run lint:pkg-json && node utils/publish/pre-publish-check-ci.js && git diff --stat --exit-code HEAD && yarn build && yarn build:types && changeset publish", "start": "yarn start:storybook", From 1fa2771a0889ec21f620cd6fda5e40f0c19d8886 Mon Sep 17 00:00:00 2001 From: Juan Andrade <juan@khanacademy.org> Date: Tue, 11 Jun 2024 09:58:34 -0400 Subject: [PATCH 13/17] Fix panda config, export panda preset as part of theming --- .changeset/old-adults-admire.md | 5 ++ .../wonder-blocks-tooltip/tooltip.stories.tsx | 2 +- package.json | 2 +- .../src/components/circular-spinner.tsx | 1 - packages/wonder-blocks-theming/src/index.ts | 3 + .../src/presets/panda-preset.ts | 70 +++++++++++++++++ panda.config.ts | 78 ++----------------- yarn.lock | 2 +- 8 files changed, 87 insertions(+), 76 deletions(-) create mode 100644 .changeset/old-adults-admire.md create mode 100644 packages/wonder-blocks-theming/src/presets/panda-preset.ts diff --git a/.changeset/old-adults-admire.md b/.changeset/old-adults-admire.md new file mode 100644 index 0000000000..f4b9ce6888 --- /dev/null +++ b/.changeset/old-adults-admire.md @@ -0,0 +1,5 @@ +--- +"@khanacademy/wonder-blocks-theming": minor +--- + +Add Panda preset diff --git a/__docs__/wonder-blocks-tooltip/tooltip.stories.tsx b/__docs__/wonder-blocks-tooltip/tooltip.stories.tsx index 22cef6cb2c..9ac86ac07a 100644 --- a/__docs__/wonder-blocks-tooltip/tooltip.stories.tsx +++ b/__docs__/wonder-blocks-tooltip/tooltip.stories.tsx @@ -163,7 +163,7 @@ export const TooltipInModal: StoryComponentType = () => { const scrollyContent = ( <View style={styles.scrollbox}> <View style={styles.hostbox}> - <Tooltip content="I'm on the left!" placement="left"> + <Tooltip content="Im on the left" placement="left"> tooltip </Tooltip> </View> diff --git a/package.json b/package.json index a27bb1f3be..950f8042a9 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "@khanacademy/eslint-config": "^2.0.0", "@khanacademy/eslint-plugin": "^2.0.0", "@khanacademy/wonder-stuff-testing": "^3.0.1", - "@pandacss/dev": "^0.40.1", + "@pandacss/dev": "^0.40.0", "@rollup/plugin-node-resolve": "^15.0.2", "@storybook/addon-a11y": "^8.0.0", "@storybook/addon-designs": "^7.0.5", diff --git a/packages/wonder-blocks-progress-spinner/src/components/circular-spinner.tsx b/packages/wonder-blocks-progress-spinner/src/components/circular-spinner.tsx index f0db418d78..6bde3f91f5 100644 --- a/packages/wonder-blocks-progress-spinner/src/components/circular-spinner.tsx +++ b/packages/wonder-blocks-progress-spinner/src/components/circular-spinner.tsx @@ -5,7 +5,6 @@ import {color} from "@khanacademy/wonder-blocks-tokens"; import type {AriaProps, StyleType} from "@khanacademy/wonder-blocks-core"; import {css} from "@/styled-system/css"; -import {SystemStyleObject} from "@/styled-system/types"; const heights = { xsmall: 16, diff --git a/packages/wonder-blocks-theming/src/index.ts b/packages/wonder-blocks-theming/src/index.ts index 1eb67be2ff..6578199232 100644 --- a/packages/wonder-blocks-theming/src/index.ts +++ b/packages/wonder-blocks-theming/src/index.ts @@ -9,3 +9,6 @@ export { export {type ThemedStylesFn, type SupportedThemes, type Themes} from "./types"; export {default as useStyles} from "./hooks/use-styles"; export {ThemeSwitcherContext} from "./utils/theme-switcher-context"; + +// Panda +export {default as pandaPreset} from "./presets/panda-preset"; diff --git a/packages/wonder-blocks-theming/src/presets/panda-preset.ts b/packages/wonder-blocks-theming/src/presets/panda-preset.ts new file mode 100644 index 0000000000..66abdd2412 --- /dev/null +++ b/packages/wonder-blocks-theming/src/presets/panda-preset.ts @@ -0,0 +1,70 @@ +import {definePreset, defineKeyframes, defineTokens} from "@pandacss/dev"; +import {color, spacing} from "@khanacademy/wonder-blocks-tokens"; +import buttonDefaultTheme from "../../../wonder-blocks-button/src/themes/default"; +import buttonKhanmigoTheme from "../../../wonder-blocks-button/src/themes/khanmigo"; + +const wbTokenToPandaToken = (token: Record<string, string | number>) => + Object.entries(token) + .map(([key, value]) => { + if (typeof value === "number") { + value = `${value}px`; + } + return { + [key]: { + value, + }, + }; + }) + .reduce((acc, curr) => ({...acc, ...curr}), {}) as { + [x: string]: { + value: string; + }; + }; + +// Map WB tokens to Panda CSS tokens +const tokens = defineTokens({ + colors: wbTokenToPandaToken(color), + spacing: wbTokenToPandaToken(spacing), +}); + +// Supported keyframes +const keyframes = defineKeyframes({ + spin: { + "0%": { + transform: "rotate(0deg)", + }, + "50%": { + transform: "rotate(180deg)", + }, + "100%": { + transform: "rotate(360deg)", + }, + }, +}); + +export default definePreset({ + // Useful for theme customization + theme: { + tokens: tokens, + keyframes, + }, + themes: { + /** + * The themes available to the Button component. + */ + // NOTE: This generates css variables at build time for each theme, so + // we don't have to dynamically load the theme at runtime. + buttonDefault: buttonDefaultTheme, + buttonKhanmigo: buttonKhanmigoTheme, + }, + staticCss: { + css: [ + { + properties: { + background: ["*"], + }, + }, + ], + themes: ["buttonDefault", "buttonKhanmigo"], + }, +}); diff --git a/panda.config.ts b/panda.config.ts index e054446bec..4f19825621 100644 --- a/panda.config.ts +++ b/panda.config.ts @@ -1,46 +1,5 @@ -import {defineConfig, defineKeyframes, defineTokens} from "@pandacss/dev"; -import {color, spacing} from "@khanacademy/wonder-blocks-tokens"; -import buttonDefaultTheme from "./packages/wonder-blocks-button/src/themes/default"; -import buttonKhanmigoTheme from "./packages/wonder-blocks-button/src/themes/khanmigo"; - -const wbTokenToPandaToken = (token: Record<string, string | number>) => - Object.entries(token) - .map(([key, value]) => { - if (typeof value === "number") { - value = `${value}px`; - } - return { - [key]: { - value, - }, - }; - }) - .reduce((acc, curr) => ({...acc, ...curr}), {}) as { - [x: string]: { - value: string; - }; - }; - -// Map WB tokens to Panda CSS tokens -const tokens = defineTokens({ - colors: wbTokenToPandaToken(color), - spacing: wbTokenToPandaToken(spacing), -}); - -// Supported keyframes -const keyframes = defineKeyframes({ - spin: { - "0%": { - transform: "rotate(0deg)", - }, - "50%": { - transform: "rotate(180deg)", - }, - "100%": { - transform: "rotate(360deg)", - }, - }, -}); +import {defineConfig} from "@pandacss/dev"; +import {pandaPreset} from "@khanacademy/wonder-blocks-theming"; export default defineConfig({ // Whether to use css reset @@ -52,43 +11,18 @@ export default defineConfig({ "./__docs__/**/*.{ts,tsx,mdx}", "./.storybook/**/*.{ts,tsx}", ], - jsxFramework: "react", + // ISSUE(juan): Enabling this causes the keyframes tokens to stop working. + // jsxFramework: "react", // Files to exclude exclude: [], // Disable default tokens - presets: [], - - // Useful for theme customization - theme: { - tokens: tokens, - keyframes, - }, - themes: { - /** - * The themes available to the Button component. - */ - // NOTE: This generates css variables at build time for each theme, so - // we don't have to dynamically load the theme at runtime. - buttonDefault: buttonDefaultTheme, - buttonKhanmigo: buttonKhanmigoTheme, - }, + // Use WB presets instead + presets: [pandaPreset], // The output directory for your css system outdir: "styled-system", - - staticCss: { - css: [ - { - properties: { - background: ["*"], - }, - }, - ], - themes: ["buttonDefault", "buttonKhanmigo"], - }, - importMap: "@/styled-system", strictTokens: false, // optimizations diff --git a/yarn.lock b/yarn.lock index 7366a956fd..987528adbf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3519,7 +3519,7 @@ postcss-selector-parser "6.0.16" ts-pattern "5.0.8" -"@pandacss/dev@^0.40.1": +"@pandacss/dev@^0.40.0": version "0.40.1" resolved "https://registry.yarnpkg.com/@pandacss/dev/-/dev-0.40.1.tgz#aa21bb77bf8f39eaf2e66ac63e65272b0db5068e" integrity sha512-61vy1KjwfVdWTaQtwY4ghmvwPhcRRVnfwpAG5S/kogw0p1rIp7a8vDHi31CjbPxO4qccjhNNzVVGDzaqnzHf+w== From f7178eca46f9256fc856fd80b4bb5b603ea63680 Mon Sep 17 00:00:00 2001 From: Juan Andrade <juan@khanacademy.org> Date: Tue, 11 Jun 2024 10:08:20 -0400 Subject: [PATCH 14/17] Fix build --- package.json | 6 +++--- packages/wonder-blocks-theming/tsconfig-build.json | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 950f8042a9..0a48d6362d 100644 --- a/package.json +++ b/package.json @@ -17,13 +17,13 @@ "clean": "rm -rf packages/wonder-blocks-*/dist && rm -rf packages/wonder-blocks-*/node_modules && rm -f packages/*/*.tsbuildinfo && rm -f utils/tsconfig.tsbuildinfo", "coverage": "yarn run test:coverage && open coverage/lcov-report/index.html", "coveragefor": "bash -c 'yarn --silent jest --coverage --collectCoverageFrom=**/$0 $(node ./utils/test-file-for.js \"$0\")'", - "coverage:ci": "yarn run jest --coverage", + "coverage:ci": "yarn prepare && yarn run jest --coverage", "coverage:types": "typescript-coverage-report", "format": "prettier --write packages/**/*.ts packages/**/*.tsx", "jest": "jest --config config/jest/test.config.js", "lint:pkg-json": "yarn npmPkgJsonLint ./packages", "lint:watch": "esw --watch --config ./eslint/eslintrc packages", - "lint": "yarn lint:ci .", + "lint": "yarn prepare && yarn lint:ci .", "lint:ci": "eslint --ext .ts --ext .js --ext .tsx --ext .jsx", "publish:ci": "yarn run lint:pkg-json && node utils/publish/pre-publish-check-ci.js && git diff --stat --exit-code HEAD && yarn build && yarn build:types && changeset publish", "start": "yarn start:storybook", @@ -31,7 +31,7 @@ "test:common": "yarn run build && yarn run lint && yarn run alex && yarn run typecheck", "test:coverage": "yarn run test:common && yarn run jest --coverage", "test": "yarn run test:common && yarn run jest", - "typecheck": "tsc", + "typecheck": "yarn prepare && tsc", "typewatch": "tsc --noEmit --watch --incremental", "add:devdepbysha": "bash -c 'yarn add -W --dev \"git+https://git@github.com/Khan/$0.git#$1\"'" }, diff --git a/packages/wonder-blocks-theming/tsconfig-build.json b/packages/wonder-blocks-theming/tsconfig-build.json index 75d9677a17..a567fe3d56 100644 --- a/packages/wonder-blocks-theming/tsconfig-build.json +++ b/packages/wonder-blocks-theming/tsconfig-build.json @@ -6,6 +6,7 @@ "rootDir": "src", }, "references": [ + {"path": "../wonder-blocks-core/tsconfig-build.json"}, {"path": "../wonder-blocks-core/tsconfig-build.json"}, {"path": "../wonder-blocks-tokens/tsconfig-build.json"}, ] From 58d370fa63c31608753a701888f9f1171fdbde7e Mon Sep 17 00:00:00 2001 From: Juan Andrade <juan@khanacademy.org> Date: Tue, 11 Jun 2024 10:14:47 -0400 Subject: [PATCH 15/17] Fix build(v2) --- packages/wonder-blocks-theming/tsconfig-build.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wonder-blocks-theming/tsconfig-build.json b/packages/wonder-blocks-theming/tsconfig-build.json index a567fe3d56..ddc0b4074f 100644 --- a/packages/wonder-blocks-theming/tsconfig-build.json +++ b/packages/wonder-blocks-theming/tsconfig-build.json @@ -6,7 +6,7 @@ "rootDir": "src", }, "references": [ - {"path": "../wonder-blocks-core/tsconfig-build.json"}, + {"path": "../wonder-blocks-button/tsconfig-build.json"}, {"path": "../wonder-blocks-core/tsconfig-build.json"}, {"path": "../wonder-blocks-tokens/tsconfig-build.json"}, ] From 741f4020d00a34a8faca08d96fcc7fbe196d9ad9 Mon Sep 17 00:00:00 2001 From: Juan Andrade <juan@khanacademy.org> Date: Tue, 11 Jun 2024 11:04:23 -0400 Subject: [PATCH 16/17] Add temp fix for button theming --- .../themes => wonder-blocks-theming/src/presets}/default.ts | 0 .../themes => wonder-blocks-theming/src/presets}/khanmigo.ts | 0 packages/wonder-blocks-theming/src/presets/panda-preset.ts | 4 ++-- .../src/themes => wonder-blocks-theming/src/presets}/theme.ts | 0 packages/wonder-blocks-theming/tsconfig-build.json | 3 +-- 5 files changed, 3 insertions(+), 4 deletions(-) rename packages/{wonder-blocks-button/src/themes => wonder-blocks-theming/src/presets}/default.ts (100%) rename packages/{wonder-blocks-button/src/themes => wonder-blocks-theming/src/presets}/khanmigo.ts (100%) rename packages/{wonder-blocks-button/src/themes => wonder-blocks-theming/src/presets}/theme.ts (100%) diff --git a/packages/wonder-blocks-button/src/themes/default.ts b/packages/wonder-blocks-theming/src/presets/default.ts similarity index 100% rename from packages/wonder-blocks-button/src/themes/default.ts rename to packages/wonder-blocks-theming/src/presets/default.ts diff --git a/packages/wonder-blocks-button/src/themes/khanmigo.ts b/packages/wonder-blocks-theming/src/presets/khanmigo.ts similarity index 100% rename from packages/wonder-blocks-button/src/themes/khanmigo.ts rename to packages/wonder-blocks-theming/src/presets/khanmigo.ts diff --git a/packages/wonder-blocks-theming/src/presets/panda-preset.ts b/packages/wonder-blocks-theming/src/presets/panda-preset.ts index 66abdd2412..1f4c9b0c1e 100644 --- a/packages/wonder-blocks-theming/src/presets/panda-preset.ts +++ b/packages/wonder-blocks-theming/src/presets/panda-preset.ts @@ -1,7 +1,7 @@ import {definePreset, defineKeyframes, defineTokens} from "@pandacss/dev"; import {color, spacing} from "@khanacademy/wonder-blocks-tokens"; -import buttonDefaultTheme from "../../../wonder-blocks-button/src/themes/default"; -import buttonKhanmigoTheme from "../../../wonder-blocks-button/src/themes/khanmigo"; +import buttonDefaultTheme from "./default"; +import buttonKhanmigoTheme from "./khanmigo"; const wbTokenToPandaToken = (token: Record<string, string | number>) => Object.entries(token) diff --git a/packages/wonder-blocks-button/src/themes/theme.ts b/packages/wonder-blocks-theming/src/presets/theme.ts similarity index 100% rename from packages/wonder-blocks-button/src/themes/theme.ts rename to packages/wonder-blocks-theming/src/presets/theme.ts diff --git a/packages/wonder-blocks-theming/tsconfig-build.json b/packages/wonder-blocks-theming/tsconfig-build.json index ddc0b4074f..3b3552eee9 100644 --- a/packages/wonder-blocks-theming/tsconfig-build.json +++ b/packages/wonder-blocks-theming/tsconfig-build.json @@ -6,8 +6,7 @@ "rootDir": "src", }, "references": [ - {"path": "../wonder-blocks-button/tsconfig-build.json"}, {"path": "../wonder-blocks-core/tsconfig-build.json"}, {"path": "../wonder-blocks-tokens/tsconfig-build.json"}, - ] + ], } From 9106b526a93bc2fcb98b8c66096f14bad1739c89 Mon Sep 17 00:00:00 2001 From: Juan Andrade <juan@khanacademy.org> Date: Tue, 11 Jun 2024 21:18:29 -0400 Subject: [PATCH 17/17] Fix button data-theme attr --- packages/wonder-blocks-button/src/components/button-core.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wonder-blocks-button/src/components/button-core.tsx b/packages/wonder-blocks-button/src/components/button-core.tsx index e0d34d1717..de224e6b12 100644 --- a/packages/wonder-blocks-button/src/components/button-core.tsx +++ b/packages/wonder-blocks-button/src/components/button-core.tsx @@ -105,6 +105,7 @@ const ButtonCore: React.ForwardRefExoticComponent< id: id, role: "button", className: defaultStyle, + "data-panda-theme": theme.theme, ...restProps, } as const; @@ -224,7 +225,6 @@ const ButtonCore: React.ForwardRefExoticComponent< {...commonProps} aria-disabled={disabled} ref={ref as React.Ref<HTMLButtonElement>} - data-panda-theme={theme.theme} > {contents} </StyledButton>