diff --git a/.eslintignore b/.eslintignore index 7b8a9039..dff42c6c 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,4 +2,6 @@ apps node_modules dist -**/*spec.tsx \ No newline at end of file +**/*spec.tsx + +deprecated \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index 8aeb83dc..6db75136 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,6 +1,13 @@ module.exports = { extends: ['shellscape/typescript', 'plugin:import/typescript'], overrides: [ + { + files: ['*.d.ts'], + rules: { + 'no-underscore-dangle': 'off', + 'spaced-comment': 'off' + } + }, { files: ['*.ts', '*.tsx'], rules: { @@ -19,7 +26,7 @@ module.exports = { } ], parserOptions: { - project: ['./shared/tsconfig.eslint.json', './packages/*/tsconfig.json'], + project: ['./shared/tsconfig.eslint.json', './packages/**/tsconfig.json'], tsconfigRootDir: __dirname }, rules: { diff --git a/.vscode/settings.json b/.vscode/settings.json index 8b54f915..451c7c1f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,5 @@ { - "prettier.singleQuote": true + "prettier.singleQuote": true, + "typescript.tsdk": "node_modules/typescript/lib", + "css.customData": [".vscode/tailwind.json"] } diff --git a/.vscode/tailwind.json b/.vscode/tailwind.json new file mode 100644 index 00000000..64077edd --- /dev/null +++ b/.vscode/tailwind.json @@ -0,0 +1,9 @@ +{ + "version": 1.1, + "atDirectives": [ + { + "name": "@tailwind", + "description": "Use the @tailwind directive to insert Tailwind's `base`, `components`, `utilities`, and `screens` styles into your CSS." + } + ] +} diff --git a/apps/client/.eslintrc.json b/apps/client/.eslintrc.json deleted file mode 100644 index 943f99f7..00000000 --- a/apps/client/.eslintrc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": ["next", "prettier"], - "plugins": ["simple-import-sort", "unused-imports"], - "rules": { - "react/no-unescaped-entities": 0, - "react-hooks/rules-of-hooks": 0, - "no-unused-vars": "off", - "simple-import-sort/imports": [ - "error", - { - // The default grouping, but with no blank lines. - "groups": [["^\\u0000", "^@?\\w", "^", "^\\."]] - } - ], - "simple-import-sort/exports": "error" - } -} \ No newline at end of file diff --git a/apps/client/.prettierignore b/apps/client/.prettierignore deleted file mode 100644 index 621285d9..00000000 --- a/apps/client/.prettierignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -.next -node_modules \ No newline at end of file diff --git a/apps/client/.prettierrc.js b/apps/client/.prettierrc.js deleted file mode 100644 index 14134b0c..00000000 --- a/apps/client/.prettierrc.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - quoteProps: 'consistent', - singleQuote: true, - trailingComma: 'all', - printWidth: 80, - useTabs: false, - bracketSpacing: true, -}; diff --git a/apps/client/.vscode/settings.json b/apps/client/.vscode/settings.json deleted file mode 100644 index d0679104..00000000 --- a/apps/client/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "typescript.tsdk": "node_modules/typescript/lib", - "typescript.enablePromptUseWorkspaceTsdk": true -} \ No newline at end of file diff --git a/apps/client/emails/airbnb-review.tsx b/apps/client/emails/airbnb-review.tsx deleted file mode 100644 index aabc1be1..00000000 --- a/apps/client/emails/airbnb-review.tsx +++ /dev/null @@ -1,201 +0,0 @@ -import { - Body, - Button, - Container, - Head, - Hr, - Html, - Img, - Link, - Preview, - Row, - Section, - Text, -} from '@react-email/components'; -import * as React from 'react'; - -interface AirbnbReviewEmailProps { - authorName?: string; - authorImage?: string; - reviewText?: string; -} - -const baseUrl = process.env.VERCEL_URL - ? `https://${process.env.VERCEL_URL}` - : ''; - -export const AirbnbReviewEmail = ({ - authorName, - authorImage, - reviewText, -}: AirbnbReviewEmailProps) => { - const previewText = `Read ${authorName}'s review`; - - return ( - -
-.jsx
or .tsx
file under the "emails"
- folder.
- {loginCode}
-
+ Edit src/App.tsx
and save to test HMR
+
Click on the Vite and React logos to learn more
+ > + ); +} + +export default App; diff --git a/apps/client/src/components/code-container.tsx b/packages/cli/app/src/components/code-container.tsx similarity index 66% rename from apps/client/src/components/code-container.tsx rename to packages/cli/app/src/components/code-container.tsx index 995c4af6..186c7956 100644 --- a/apps/client/src/components/code-container.tsx +++ b/packages/cli/app/src/components/code-container.tsx @@ -1,35 +1,32 @@ import { LayoutGroup, motion } from 'framer-motion'; -import { Language } from 'prism-react-renderer'; import * as React from 'react'; -import { copyTextToClipboard } from '../utils'; -import languageMap from '../utils/language-map'; + +import { PreviewLanguage, copyTextToClipboard, languageMap } from '../helpers'; + import { Code } from './code'; -import { IconButton } from './icon-button'; -import { IconCheck } from './icon-check'; -import { IconClipboard } from './icon-clipboard'; -import { IconDownload } from './icon-download'; +import { IconButton, IconCheck, IconClipboard, IconDownload } from './icons'; import { Tooltip } from './tooltip'; +interface MarkupProps { + content: string; + language: PreviewLanguage; +} + interface CodeContainerProps { - markups: MarkupProps[]; activeLang: string; + markups: MarkupProps[]; setActiveLang: (lang: string) => void; } -interface MarkupProps { - language: Language; - content: string; -} - export const CodeContainer: React.FC-+- {markups.map(({ language, content }) => { - return ( -{markups.map(({ language }) => { const isCurrentLang = activeLang === language; return ( setActiveLang(language)} key={language} @@ -93,13 +88,13 @@ export const CodeContainer: React.FC ); })} @@ -118,16 +113,11 @@ export const CodeContainer: React.FC> = ({ {isCurrentLang && ( )} - {languageMap[language]} + {languageMap[language]} > = ({ Download -- ); - })} + {markups.map(({ language, content }) => ( +{content}
-++ ))} ); }; diff --git a/packages/cli/app/src/components/code.tsx b/packages/cli/app/src/components/code.tsx new file mode 100644 index 00000000..84c88e62 --- /dev/null +++ b/packages/cli/app/src/components/code.tsx @@ -0,0 +1,97 @@ +import classnames from 'classnames'; +import { Highlight, Language } from 'prism-react-renderer'; +import * as React from 'react'; + +import { PreviewLanguage } from '../helpers'; + +interface CodeProps { + children: any; + className?: string; + language?: PreviewLanguage; +} + +// const theme = { +// plain: { +// color: '#EDEDEF', +// fontFamily: 'MonoLisa, Menlo, monospace', +// fontSize: 13 +// }, +// styles: [ +// { +// style: { +// color: '#706F78' +// }, +// types: ['comment'] +// }, +// { +// style: { +// color: '#7E7D86' +// }, +// types: ['atrule', 'keyword', 'attr-name', 'selector'] +// }, +// { +// style: { +// color: '#706F78' +// }, +// types: ['punctuation', 'operator'] +// }, +// { +// style: { +// color: '#EDEDEF' +// }, +// types: ['class-name', 'function', 'tag', 'key-white'] +// } +// ] +// }; + +export const Code: React.FC{content}
+> = ({ children, language = 'html' }) => { + // const [isCopied, setIsCopied] = React.useState(false); + const value = children.trim(); + + // const file = new File([value], `email.${language}`); + // const url = URL.createObjectURL(file); + + return ( + + {({ tokens, getLineProps, getTokenProps }) => ( + <> + + + ); +}; diff --git a/apps/client/src/components/heading.tsx b/packages/cli/app/src/components/heading.tsx similarity index 63% rename from apps/client/src/components/heading.tsx rename to packages/cli/app/src/components/heading.tsx index 113611ba..ee9cfb45 100644 --- a/apps/client/src/components/heading.tsx +++ b/packages/cli/app/src/components/heading.tsx @@ -1,61 +1,20 @@ import * as SlotPrimitive from '@radix-ui/react-slot'; import classnames from 'classnames'; import * as React from 'react'; -import { As, unreachable } from '../utils'; +import { As, unreachable } from '../helpers'; -export type HeadingSize = - | '1' - | '2' - | '3' - | '4' - | '5' - | '6' - | '7' - | '8' - | '9' - | '10'; +export type HeadingSize = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10'; export type HeadingColor = 'white' | 'gray'; export type HeadingWeight = 'medium' | 'bold'; interface HeadingOwnProps { - size?: HeadingSize; color?: HeadingColor; + size?: HeadingSize; weight?: HeadingWeight; } type HeadingProps = As<'h1', 'h2', 'h3', 'h4', 'h5', 'h6'> & HeadingOwnProps; -export const Heading = React.forwardRef< - HTMLHeadingElement, - Readonly+ {tokens.map((line, i) => { + const { key: lineKey, ...lineProps } = getLineProps({ key: i, line }); + return ( ++ + > + )} ++ {line.map((token, key) => { + const { key: tokenKey, ...tokenProps } = getTokenProps({ key, token }); + const isException = token.content === 'from' && line[key + 1]?.content === ':'; + const newTypes = isException ? [...token.types, 'key-white'] : token.types; + token.types = newTypes; + + return ( ++ ); + })} ++ + + ); + })} +->( - ( - { - as: Tag = 'h1', - size = '3', - className, - color = 'white', - children, - weight = 'bold', - ...props - }, - forwardedRef, - ) => ( - - - ), -); - const getSizesClassNames = (size: HeadingSize | undefined) => { switch (size) { case '1': @@ -80,25 +39,13 @@ const getSizesClassNames = (size: HeadingSize | undefined) => { case '10': return [ 'text-[38px] leading-[46px]', - 'md:text-[70px] md:leading-[85px] tracking-[-1.024px;]', + 'md:text-[70px] md:leading-[85px] tracking-[-1.024px;]' ]; default: return unreachable(size); } }; -const getColorClassNames = (color: HeadingColor | undefined) => { - switch (color) { - case 'gray': - return 'text-slate-11'; - case 'white': - case undefined: - return 'text-slate-12'; - default: - return unreachable(color); - } -}; - const getWeightClassNames = (weight: HeadingWeight | undefined) => { switch (weight) { case 'medium': @@ -111,4 +58,19 @@ const getWeightClassNames = (weight: HeadingWeight | undefined) => { } }; +export const Heading = React.forwardRef{children} ->( + ( + { as: Tag = 'h1', size = '3', className, children, weight = 'bold', ...props }, + forwardedRef + ) => ( + + + ) +); + Heading.displayName = 'Heading'; diff --git a/packages/cli/app/src/components/icons.tsx b/packages/cli/app/src/components/icons.tsx new file mode 100644 index 00000000..572e5bb5 --- /dev/null +++ b/packages/cli/app/src/components/icons.tsx @@ -0,0 +1,113 @@ +import classnames from 'classnames'; +import * as React from 'react'; + +export type IconElement = React.ElementRef<'svg'>; +export type RootProps = React.ComponentPropsWithoutRef<'svg'>; + +export interface IconProps extends RootProps { + size?: number; +} + +export const IconBase = React.forwardRef{children} +>( + ({ size = 20, ...props }, forwardedRef) => ( + + ) +); + +IconBase.displayName = 'IconBase'; + +export interface IconButtonProps extends React.ComponentPropsWithoutRef<'button'> {} + +export const IconButton = React.forwardRef >( + ({ children, className, ...props }, forwardedRef) => ( + + ) +); + +IconButton.displayName = 'IconButton'; + +export const IconCheck = React.forwardRef >( + ({ ...props }, forwardedRef) => ( + + + ) +); + +IconCheck.displayName = 'IconCheck'; + +export const IconClipboard = React.forwardRef+ >( + ({ ...props }, forwardedRef) => ( + + + ) +); + +IconClipboard.displayName = 'IconClipboard'; + +export const IconDownload = React.forwardRef+ + + + >( + ({ ...props }, forwardedRef) => ( + + + ) +); + +IconDownload.displayName = 'IconDownload'; diff --git a/apps/client/src/components/index.ts b/packages/cli/app/src/components/index.ts similarity index 87% rename from apps/client/src/components/index.ts rename to packages/cli/app/src/components/index.ts index e3637a1e..2ca7258b 100644 --- a/apps/client/src/components/index.ts +++ b/packages/cli/app/src/components/index.ts @@ -1,6 +1,7 @@ export * from './button'; export * from './code'; export * from './heading'; +export * from './icons'; export * from './logo'; export * from './sidebar'; export * from './text'; diff --git a/packages/cli/app/src/components/logo.tsx b/packages/cli/app/src/components/logo.tsx new file mode 100644 index 00000000..9ed4820d --- /dev/null +++ b/packages/cli/app/src/components/logo.tsx @@ -0,0 +1,38 @@ +import * as React from 'react'; + +type LogoElement = React.ElementRef<'svg'>; +type RootProps = React.ComponentPropsWithoutRef<'svg'>; + +export const Logo = React.forwardRef+ >((_, __) => ( + +)); + +Logo.displayName = 'Logo'; diff --git a/packages/cli/app/src/components/shell.tsx b/packages/cli/app/src/components/shell.tsx new file mode 100644 index 00000000..cce34390 --- /dev/null +++ b/packages/cli/app/src/components/shell.tsx @@ -0,0 +1,54 @@ +import classNames from 'classnames'; +import * as React from 'react'; +import { Sidebar } from './sidebar'; +import { Topbar } from './topbar'; + +type ShellElement = React.ElementRef<'div'>; +type RootProps = React.ComponentPropsWithoutRef<'div'>; + +interface ShellProps extends RootProps { + activeView?: string; + html?: string; + setActiveView?: (view: string) => void; + templateNames: string[]; +} + +export const Shell = React.forwardRef >( + ({ title, templateNames, children, html, activeView, setActiveView }, forwardedRef) => { + const [showNav] = React.useState(false); + return ( + ++ ); + } +); + +Shell.displayName = 'Shell'; diff --git a/packages/cli/app/src/components/sidebar.tsx b/packages/cli/app/src/components/sidebar.tsx new file mode 100644 index 00000000..46925264 --- /dev/null +++ b/packages/cli/app/src/components/sidebar.tsx @@ -0,0 +1,145 @@ +import * as Collapsible from '@radix-ui/react-collapsible'; +import classnames from 'classnames'; +import { LayoutGroup, motion } from 'framer-motion'; +import * as React from 'react'; +import { Heading } from './heading'; +import { Logo } from './logo'; + +type SidebarElement = React.ElementRef<'aside'>; +type RootProps = React.ComponentPropsWithoutRef<'aside'>; + +interface SidebarProps extends RootProps { + templateNames: string[]; + title?: string; +} + +export const Sidebar = React.forwardRef+++ + {title && ( + ++ )} + ++{children}+>( + ({ className, templateNames, title, ...props }, forwardedRef) => ( + + ) +); + +Sidebar.displayName = 'Sidebar'; diff --git a/apps/client/src/components/text.tsx b/packages/cli/app/src/components/text.tsx similarity index 76% rename from apps/client/src/components/text.tsx rename to packages/cli/app/src/components/text.tsx index 65970ac0..6a0ecc95 100644 --- a/apps/client/src/components/text.tsx +++ b/packages/cli/app/src/components/text.tsx @@ -1,7 +1,7 @@ import * as SlotPrimitive from '@radix-ui/react-slot'; import classnames from 'classnames'; import * as React from 'react'; -import { As, unreachable } from '../utils'; +import { As, unreachable } from '../helpers'; export type TextSize = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'; export type TextColor = 'gray' | 'white'; @@ -9,44 +9,14 @@ export type TextTransform = 'uppercase' | 'lowercase' | 'capitalize'; export type TextWeight = 'normal' | 'medium'; interface TextOwnProps { - size?: TextSize; color?: TextColor; + size?: TextSize; transform?: TextTransform; weight?: TextWeight; } type TextProps = As<'span', 'div', 'p'> & TextOwnProps; -export const Text = React.forwardRef >( - ( - { - as: Tag = 'span', - size = '2', - color = 'gray', - transform, - weight = 'normal', - className, - children, - ...props - }, - forwardedRef, - ) => ( - - - ), -); - const getSizesClassNames = (size: TextSize | undefined) => { switch (size) { case '1': @@ -73,18 +43,6 @@ const getSizesClassNames = (size: TextSize | undefined) => { } }; -const getColorClassNames = (color: TextColor | undefined) => { - switch (color) { - case 'white': - return 'text-slate-12'; - case undefined: - case 'gray': - return 'text-slate-11'; - default: - return unreachable(color); - } -}; - const getWeightClassNames = (weight: TextWeight | undefined) => { switch (weight) { case undefined: @@ -97,4 +55,24 @@ const getWeightClassNames = (weight: TextWeight | undefined) => { } }; +export const Text = React.forwardRef{children} ->( + ( + { as: Tag = 'span', size = '2', transform, weight = 'normal', className, children, ...props }, + forwardedRef + ) => ( + + + ) +); + Text.displayName = 'Text'; diff --git a/packages/cli/app/src/components/tooltip-content.tsx b/packages/cli/app/src/components/tooltip-content.tsx new file mode 100644 index 00000000..e775a4f8 --- /dev/null +++ b/packages/cli/app/src/components/tooltip-content.tsx @@ -0,0 +1,27 @@ +import * as TooltipPrimitive from '@radix-ui/react-tooltip'; +import classnames from 'classnames'; +import * as React from 'react'; + +type ContentElement = React.ElementRef{children} +; +type ContentProps = React.ComponentPropsWithoutRef ; + +export interface TooltipProps extends ContentProps {} + +export const TooltipContent = React.forwardRef >( + ({ sideOffset = 6, children, ...props }, forwardedRef) => ( + + + ) +); + +TooltipContent.displayName = 'TooltipContent'; diff --git a/apps/client/src/components/tooltip.tsx b/packages/cli/app/src/components/tooltip.tsx similarity index 68% rename from apps/client/src/components/tooltip.tsx rename to packages/cli/app/src/components/tooltip.tsx index 8681fda2..6bff5068 100644 --- a/apps/client/src/components/tooltip.tsx +++ b/packages/cli/app/src/components/tooltip.tsx @@ -6,14 +6,13 @@ type RootProps = React.ComponentPropsWithoutRef+ {children} + +; export interface TooltipProps extends RootProps {} -export const TooltipRoot: React.FC > = ({ - children, - ...props -}) => {children} ; +export const TooltipRoot: React.FC> = ({ children, ...props }) => ( + {children} +); export const Tooltip = Object.assign(TooltipRoot, { Arrow: TooltipPrimitive.TooltipArrow, - Provider: TooltipPrimitive.TooltipProvider, Content: TooltipContent, - Trigger: TooltipPrimitive.TooltipTrigger, + Provider: TooltipPrimitive.TooltipProvider, + Trigger: TooltipPrimitive.TooltipTrigger }); diff --git a/apps/client/src/components/topbar.tsx b/packages/cli/app/src/components/topbar.tsx similarity index 67% rename from apps/client/src/components/topbar.tsx rename to packages/cli/app/src/components/topbar.tsx index 32a8e269..fea718a6 100644 --- a/apps/client/src/components/topbar.tsx +++ b/packages/cli/app/src/components/topbar.tsx @@ -3,38 +3,32 @@ import classnames from 'classnames'; import { LayoutGroup, motion } from 'framer-motion'; import * as React from 'react'; import { Heading } from './heading'; -import { Send } from './send'; type TopbarElement = React.ElementRef<'header'>; type RootProps = React.ComponentPropsWithoutRef<'header'>; interface TopbarProps extends RootProps { - title: string; activeView?: string; markup?: string; setActiveView?: (view: string) => void; + title: string; } export const Topbar = React.forwardRef>( - ( - { className, title, markup, activeView, setActiveView, ...props }, - forwardedRef, - ) => { + ({ className, title, markup, activeView, setActiveView, ...props }, forwardedRef) => { const columnWidth = 'w-[200px]'; return ( - ); - }, + } ); Topbar.displayName = 'Topbar'; diff --git a/packages/cli/app/src/css/cta.css b/packages/cli/app/src/css/cta.css new file mode 100644 index 00000000..bd7ab0ac --- /dev/null +++ b/packages/cli/app/src/css/cta.css @@ -0,0 +1,9 @@ + +cta button +padding: 0.5em 1em; +font-weight: 500; +text-decoration: none; +border-radius: 5px; +color: #343233; +background-color: #ffd152; + diff --git a/packages/cli/app/src/css/globals.css b/packages/cli/app/src/css/globals.css new file mode 100644 index 00000000..362722c9 --- /dev/null +++ b/packages/cli/app/src/css/globals.css @@ -0,0 +1,12 @@ +@import url(https://fonts.bunny.net/css?family=andika:400,400i,700,700i|inter:400,600|montserrat:100,200,300,400,500,600); +@import './monokai4.css'; + +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + html, body, nav, button, div { + font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + } +} diff --git a/packages/cli/app/src/css/monokai1.css b/packages/cli/app/src/css/monokai1.css new file mode 100644 index 00000000..6133d166 --- /dev/null +++ b/packages/cli/app/src/css/monokai1.css @@ -0,0 +1,118 @@ +/** + * Monokai theme for Prism.JS + * + * @author Martijn Swaagman + * @license MIT 2015 + */ + code[class*="language-"], + pre[class*="language-"] { + color: #f8f8f2; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } + + pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border-radius: 0.3em; + } + + :not(pre) > code[class*="language-"], + pre[class*="language-"] { + background: #272822; + } + + :not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + } + + .token.comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: #778090; + } + + .token.punctuation { + color: #F8F8F2; + } + + .namespace { + opacity: .7; + } + + .token.property, + .token.tag, + .token.constant, + .token.symbol, + .token.deleted { + color: #F92672; + } + + .token.boolean, + .token.number { + color: #AE81FF; + } + + .token.selector, + .token.attr-name, + .token.string, + .token.char, + .token.builtin, + .token.inserted { + color: #A6E22E; + } + + .token.operator, + .token.entity, + .token.url, + .language-css .token.string, + .style .token.string, + .token.variable { + color: #F8F8F2; + } + + .token.atrule, + .token.attr-value, + .token.function { + color: #E6DB74; + } + + .token.keyword { + color: #F92672; + } + + .token.regex, + .token.important { + color: #FD971F; + } + + .token.important, + .token.bold { + font-weight: bold; + } + .token.italic { + font-style: italic; + } + + .token.entity { + cursor: help; + } \ No newline at end of file diff --git a/packages/cli/app/src/css/monokai2.css b/packages/cli/app/src/css/monokai2.css new file mode 100644 index 00000000..29324299 --- /dev/null +++ b/packages/cli/app/src/css/monokai2.css @@ -0,0 +1,141 @@ +/** + * one-monokai theme for `prism.js` + * + * @author XZYQvQ (@konnyakuxzy) + * + * Based on Vscode One Monokai theme (https://github.com/azemoh/vscode-one-monokai) + */ +/********************************************************* +* General +*/ +pre[class*="language-"], +code[class*="language-"] { + color: #bbbbbb; + font-size: 13px; + text-shadow: none; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + line-height: 1.5; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} +pre[class*="language-"]::selection, +code[class*="language-"]::selection, +pre[class*="language-"]::mozselection, +code[class*="language-"]::mozselection { + text-shadow: none; + background: #bbbbbb; +} +@media print { + pre[class*="language-"], + code[class*="language-"] { + text-shadow: none; + } +} +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + background: #282c34; +} +:not(pre) > code[class*="language-"] { + padding: .1em .3em; + border-radius: .3em; + color: #DB4C69; + background: #f9f2f4; +} +/********************************************************* +* Tokens +*/ +.namespace { + opacity: .7; +} +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #676f7d; +} +.token.punctuation { + color: #bbbbbb; +} +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #c678dd; +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #e5c07b; +} +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #e06c75; + background: #282c34; +} +.token.atrule, +.token.attr-value, +.token.keyword { + color: #56b6c2; +} +.token.function { + color: #98c379; +} +.token.regex, +.token.important, +.token.variable { + color: #61afef; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} +/********************************************************* +* Line highlighting +*/ +pre[data-line] { + position: relative; +} +pre[class*="language-"] > code[class*="language-"] { + position: relative; + z-index: 1; +} +.line-highlight { + position: absolute; + left: 0; + right: 0; + padding: inherit 0; + margin-top: 1em; + background: #383e4a; + box-shadow: inset 5px 0 0 #93979e; + z-index: 0; + pointer-events: none; + line-height: inherit; + white-space: pre; +} \ No newline at end of file diff --git a/packages/cli/app/src/css/monokai3.css b/packages/cli/app/src/css/monokai3.css new file mode 100644 index 00000000..1706ee8c --- /dev/null +++ b/packages/cli/app/src/css/monokai3.css @@ -0,0 +1,248 @@ +/** + * prism.js Monokai theme for CSS & Sass/Scss + * + * @todo test for JavaScript & HTML + * + * @author @MoOx + */ +/* line 35, syntax-highlighting.scss */ +code[class*="language-"], +pre[class*="language-"] { + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + white-space: pre; + white-space: pre-wrap; + word-break: break-all; + word-wrap: break-word; + font-family: Menlo, Monaco, "Courier New", monospace; + font-size: 12px; + line-height: 18px; + color: #76d9e6; + text-shadow: none; +} + +/* line 61, syntax-highlighting.scss */ +pre[class*="language-"], +:not(pre) > code[class*="language-"] { + background: #2a2a2a; +} + +/* line 66, syntax-highlighting.scss */ +pre[class*="language-"] { + padding: 15px; + border-radius: 4px; + border: 1px solid #e1e1e8; +} + +/* line 85, syntax-highlighting.scss */ +:not(pre) > code[class*="language-"] { + padding: .15em .2em .05em; + border-radius: .3em; + border: 0.13em solid #7a6652; + box-shadow: 1px 1px .3em -.1em black inset; +} + +/* line 92, syntax-highlighting.scss */ +.namespace { + opacity: .7; +} + +/* line 100, syntax-highlighting.scss */ +.token.comment, .token.prolog, .token.doctype, .token.cdata { + color: #6f705e; +} +/* line 107, syntax-highlighting.scss */ +.token.null, .token.operator, .token.boolean, .token.number { + color: #a77afe; +} +/* line 112, syntax-highlighting.scss */ +.token.attr-name, .token.string { + color: #e6d06c; +} +/* line 119, syntax-highlighting.scss */ +.token.entity, .token.url, .language-css .token.string, .style .token.string { + color: #e6d06c; +} +/* line 123, syntax-highlighting.scss */ +.token.selector { + color: #a6e22d; +} +/* line 133, syntax-highlighting.scss */ +.token.atrule, .token.attr-value, .token.keyword, .token.control, .token.directive, .token.important, .token.unit { + color: #ef3b7d; +} +/* line 138, syntax-highlighting.scss */ +.token.regex, .token.statement { + color: #76d9e6; +} +/* line 143, syntax-highlighting.scss */ +.token.placeholder, .token.variable { + color: white; +} +/* line 148, syntax-highlighting.scss */ +.token.important, .token.statement { + font-weight: bold; +} +/* line 152, syntax-highlighting.scss */ +.token.punctuation { + color: #bebec5; +} +/* line 156, syntax-highlighting.scss */ +.token.entity { + cursor: help; +} +/* line 161, syntax-highlighting.scss */ +.token.debug { + color: red; +} + +/* line 164, syntax-highlighting.scss */ +pre[data-line] { + position: relative; + padding: 1em 0 1em 3em; +} + +/* line 169, syntax-highlighting.scss */ +.line-highlight { + position: absolute; + left: 0; + right: 0; + padding: inherit 0; + margin-top: 1em; + background: rgba(255, 255, 255, 0.08); + pointer-events: none; + line-height: inherit; + white-space: pre; +} + +/* line 185, syntax-highlighting.scss */ +.line-highlight:before, +.line-highlight[data-end]:after { + content: attr(data-start); + position: absolute; + top: .4em; + left: .6em; + min-width: 1em; + padding: 0.2em .5em; + background-color: rgba(255, 255, 255, 0.4); + color: black; + font: bold 65%/1 sans-serif; + height: 1em; + line-height: 1em; + text-align: center; + border-radius: 999px; + text-shadow: none; + box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7); +} + +/* line 207, syntax-highlighting.scss */ +.line-highlight[data-end]:after { + content: attr(data-end); + top: auto; + bottom: .4em; +} + +/****************************************************************** +CODE - SWITCH COLORS A BIT DEPENDING ON LANGUAGE +******************************************************************/ +/* line 216, syntax-highlighting.scss */ +code.language-markup { + color: #f9f9f9; +} +/* line 220, syntax-highlighting.scss */ +code.language-markup .token.tag { + color: #ef3b7d; +} +/* line 221, syntax-highlighting.scss */ +code.language-markup .token.attr-name { + color: #a6e22d; +} +/* line 222, syntax-highlighting.scss */ +code.language-markup .token.attr-value { + color: #e6d06c; +} +/* line 225, syntax-highlighting.scss */ +code.language-markup .token.style, code.language-markup .token.script { + color: #76d9e6; +} +/* line 230, syntax-highlighting.scss */ +code.language-markup .token.script .token.keyword { + color: #76d9e6; +} + +/****************************************************************** +CODE - PRISM THEME OVERRIDES +******************************************************************/ +/* line 241, syntax-highlighting.scss */ +code[class*="language-"], +pre[class*="language-"] { + white-space: pre !important; + word-wrap: normal !important; + overflow: auto; + max-height: 610px; +} + +/* line 251, syntax-highlighting.scss */ +pre { + position: relative; +} +/* line 254, syntax-highlighting.scss */ +pre:before { + position: absolute; + top: 0; + left: 0; + width: 100%; + padding: .5em 0; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #333333), color-stop(100%, #000000)); + background: -webkit-linear-gradient(#333333, #000000); + background: -moz-linear-gradient(#333333, #000000); + background: -o-linear-gradient(#333333, #000000); + background: linear-gradient(#333333, #000000); + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + -ms-border-radius: 4px 4px 0 0; + -o-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + font: bold 15px/1 sans-serif; + color: white; + text-indent: 1em; +} +/* line 269, syntax-highlighting.scss */ +pre code { + overflow: auto; + white-space: pre; + display: block; +} + +/* line 277, syntax-highlighting.scss */ +pre.language-markup:before { + content: 'HTML'; +} + +/* line 278, syntax-highlighting.scss */ +pre.language-css:before { + content: 'CSS'; +} + +/* line 279, syntax-highlighting.scss */ +pre.language-javascript:before { + content: 'JavaScript'; +} + +/* line 280, syntax-highlighting.scss */ +pre.language-php:before { + content: 'PHP'; +} + +/* line 281, syntax-highlighting.scss */ +pre.language-scss:before { + content: 'SCSS (Sass / Compass)'; +} \ No newline at end of file diff --git a/packages/cli/app/src/css/monokai4.css b/packages/cli/app/src/css/monokai4.css new file mode 100644 index 00000000..e0c28cde --- /dev/null +++ b/packages/cli/app/src/css/monokai4.css @@ -0,0 +1,137 @@ +/** + * prism.js Monokai theme + * @author Sam Clarke + */ + code[class*="language-"], + pre[class*="language-"] { + color: #f8f8f2; + background: none; + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.4; + + -moz-tab-size: 8; + -o-tab-size: 8; + tab-size: 8; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } + + /* Code blocks */ + pre[class*="language-"] { + padding: .8em; + overflow: auto; + background: #272822; + } + + /* Inline code */ + :not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; + background: #272822; + } + + .token.comment, + .token.blockquote, + .token.shebang.important, + .token.shebang { + color: #75715e; + } + + .token.operator, + .token.important, + .token.keyword, + .token.rule, + .token.tag, + .token.deleted, + .token.selector, + .token.prolog, + .token.title .token.punctuation { + color: #f92672; + } + + .token.property, + .token.entity, + .token.atrule, + .token.command, + .token.code { + color: #66d9ef; + } + + .token.regex, + .token.atrule .token.property { + color: #fd971f; + } + + .token.pseudo-element, + .token.id, + .token.class, + .token.class-name, + .token.pseudo-class, + .token.function, + .token.namespace, + .token.inserted, + .token.symbol, + .token.url-reference .token.variable, + .token.attr-name { + color: #a6e22e; + } + + .token.string, + .token.url, + .token.list, + .token.cdata, + .token.attr-value, + .token.attr-value a.token.url-link { + color: #e6db74; + } + + .token.constant, + .token.hexcode, + .token.builtin, + .token.number, + .token.boolean { + color: #ae81ff; + } + + .token.doctype, + .token.punctuation, + .token.variable, + .token.macro.property { + color: #f8f8f2; + } + + .token.entity { + cursor: help; + } + + .token.title, + .token.title .token.punctuation { + font-weight: bold; + } + + .token.bold { + font-weight: bold; + } + + .token.italic { + font-style: italic; + } + + /* YAML */ + .language-yaml .token.atrule { + color: #f92672; + } + + /* Bash */ + .language-bash .token.function { + color: #f92672; + } \ No newline at end of file diff --git a/packages/cli/app/src/error.tsx b/packages/cli/app/src/error.tsx new file mode 100644 index 00000000..a0a5f07b --- /dev/null +++ b/packages/cli/app/src/error.tsx @@ -0,0 +1,18 @@ +import { useRouteError } from 'react-router-dom'; + +const { error } = console; + +export const Error = () => { + const err: any = useRouteError(); + error(err); + + return ( +-- - {markup && ( -+ +@@ -43,7 +37,7 @@ export const Topbar = React.forwardRef{title} >( {setActiveView && ( >( )}{activeView === 'desktop' && ( )} - Desktop + + Desktop + {activeView === 'source' && ( )} - Source + + Source + -- )}- ++ ); +}; diff --git a/apps/client/src/utils/as.ts b/packages/cli/app/src/helpers.ts similarity index 52% rename from apps/client/src/utils/as.ts rename to packages/cli/app/src/helpers.ts index 0452a378..ab2fab0b 100644 --- a/apps/client/src/utils/as.ts +++ b/packages/cli/app/src/helpers.ts @@ -4,7 +4,7 @@ export type As< T2 extends React.ElementType = T1, T3 extends React.ElementType = T1, T4 extends React.ElementType = T1, - T5 extends React.ElementType = T1, + T5 extends React.ElementType = T1 > = | (React.ComponentPropsWithRefOops!
+Sorry, an unexpected error has occurred.
++ {err.statusText || err.message} +
+& { as?: DefaultTag; @@ -24,3 +24,26 @@ export type As< | (React.ComponentPropsWithRef & { as: T5; }); + +export type PreviewLanguage = 'html' | 'jsx' | 'plainText'; + +export const copyTextToClipboard = async (text: string) => { + try { + await navigator.clipboard.writeText(text); + } catch { + throw new Error('Not able to copy'); + } +}; + +export const languageMap = { + html: ' ', + jsx: '', + plainText: 'Plain Text' +}; + +export const unreachable = ( + condition: never, + message = `Entered unreachable code. Received '${condition}'.` +): never => { + throw new TypeError(message); +}; diff --git a/packages/cli/app/src/home.tsx b/packages/cli/app/src/home.tsx new file mode 100644 index 00000000..72a33013 --- /dev/null +++ b/packages/cli/app/src/home.tsx @@ -0,0 +1,38 @@ +'use client'; + +import * as SlotPrimitive from '@radix-ui/react-slot'; +import React from 'react'; +import { Heading, Text } from './components'; +import { Shell } from './components/shell'; + +export const Home = ({ templateNames }: { templateNames: string[] }) => { + React.useEffect(() => { + document.title = 'JSX email'; + }, []); + + return ( + + + ); +}; diff --git a/packages/cli/app/src/layout.tsx b/packages/cli/app/src/layout.tsx new file mode 100644 index 00000000..257e2b5c --- /dev/null +++ b/packages/cli/app/src/layout.tsx @@ -0,0 +1,8 @@ +/* eslint-disable import/first */ +import './css/globals.css'; + +export const Layout = ({ children }: { children: React.ReactNode }) => ( ++++ JSX Email Preview + ++ Start creating an email template by running{' '} + + +email create <template-name>
+
+
+ Runemail help create
for a list of options +
+
+ Happy coding! ++ ++ Read our Documentation + +++); diff --git a/packages/cli/app/src/main.tsx b/packages/cli/app/src/main.tsx new file mode 100644 index 00000000..fdc73330 --- /dev/null +++ b/packages/cli/app/src/main.tsx @@ -0,0 +1,87 @@ +import { render } from '@jsx-email/render'; +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import { createBrowserRouter, RouteObject, RouterProvider } from 'react-router-dom'; +import { create, type Struct } from 'superstruct'; +import titleize from 'titleize'; + +import { Error } from './error.tsx'; +import { Home } from './home.tsx'; +import { Layout } from './layout.tsx'; +import { Preview } from './preview.tsx'; + +interface TemplateExports { + Name?: string; + PreviewProps?: () => any; + Struct?: Struct; + Template: React.ExoticComponent; +} + +interface TemplateData extends TemplateExports { + jsx: string; +} + +const parseName = (path: string) => { + const chunks = path.replace('\\', '/').split('/'); + const segment = chunks.at(-1); + const basename = segment!.split(/\.[^.]+$/)[0]; + + return titleize(basename); +}; + +const templatePaths = JSON.parse(import.meta.env.VITE_EMAIL_COMPONENTS) as string[]; +const templates = await Promise.all( + templatePaths.map{children}+>(async (path) => { + const fileName = path.split(/[/\\]/).at(-1); + const template = (await import(/* @vite-ignore */ path)) as TemplateExports; + const response = await fetch(`/${fileName}`); + const source = await response.text(); + const result: TemplateData = { + jsx: source, + Name: template.Name || parseName(path), + PreviewProps: template.PreviewProps, + Struct: template.Struct, + Template: template.Template || (template as any).default + }; + + return result; + }) +); + +const templateNames = templates.map((template) => template.Name!); + +const templateRoutes: RouteObject[] = templates.map((template) => { + const { Name, PreviewProps, Struct, Template } = template; + let props: any; + + if (Struct) props = create({}, Struct); + else if (PreviewProps) props = PreviewProps(); + + const html = render(, { pretty: true }); + const plainText = render(, { plainText: true }); + const element = ( + ++ + ); + return { element, path: `/${template.Name}` }; +}); + +const router = createBrowserRouter([ + { + element: ( ++ + + ), + errorElement:+ , + path: '/' + }, + ...templateRoutes +]); + +ReactDOM.createRoot(document.getElementById('root')!).render( + + +); diff --git a/packages/cli/app/src/preview.tsx b/packages/cli/app/src/preview.tsx new file mode 100644 index 00000000..ac66681d --- /dev/null +++ b/packages/cli/app/src/preview.tsx @@ -0,0 +1,72 @@ +'use client'; + +import React from 'react'; +import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'; +import { CodeContainer } from './components/code-container'; +import { Shell } from './components/shell'; +import { Tooltip } from './components/tooltip'; + +interface PreviewProps { + html: string; + jsx: string; + plainText: string; + templateNames: string[]; + title: string; +} + +export const Preview = ({ html, jsx, plainText, templateNames, title }: PreviewProps) => { + const { pathname } = useLocation(); + const navigate = useNavigate(); + const [searchParams] = useSearchParams(); + + const [activeView, setActiveView] = React.useState('desktop'); + const [activeLang, setActiveLang] = React.useState('jsx'); + + React.useEffect(() => { + document.title = `JSX email • ${title}`; + + const view = searchParams.get('view'); + const lang = searchParams.get('lang'); + + if (view === 'source' || view === 'desktop') setActiveView(view); + if (lang === 'jsx' || lang === 'markup' || lang === 'markdown') setActiveLang(lang); + }, [searchParams]); + + const handleViewChange = (view: string) => { + setActiveView(view); + navigate(`${pathname}?view=${view}`); + }; + + const handleLangChange = (lang: string) => { + setActiveLang(lang); + navigate(`${pathname}?view=source&lang=${lang}`); + }; + + return ( ++ + {activeView === 'desktop' ? ( + + ) : ( + + ); +}; diff --git a/apps/client/tailwind.config.js b/packages/cli/app/tailwind.config.js similarity index 72% rename from apps/client/tailwind.config.js rename to packages/cli/app/tailwind.config.js index 7891dfa0..5940c251 100644 --- a/apps/client/tailwind.config.js +++ b/packages/cli/app/tailwind.config.js @@ -1,22 +1,21 @@ const colors = require('@radix-ui/colors'); -const { fontFamily } = require('tailwindcss/defaultTheme'); const plugin = require('tailwindcss/plugin'); -const iOsHeight = plugin(function ({ addUtilities }) { +const iOsHeight = plugin(({ addUtilities }) => { const supportsTouchRule = '@supports (-webkit-touch-callout: none)'; const webkitFillAvailable = '-webkit-fill-available'; const utilities = { - '.min-h-screen-ios': { - [supportsTouchRule]: { - minHeight: webkitFillAvailable, - }, - }, '.h-screen-ios': { [supportsTouchRule]: { - height: webkitFillAvailable, - }, + height: webkitFillAvailable + } }, + '.min-h-screen-ios': { + [supportsTouchRule]: { + minHeight: webkitFillAvailable + } + } }; addUtilities(utilities, ['responsive']); @@ -28,10 +27,26 @@ module.exports = { // app content `src/**/*.{js,ts,jsx,tsx}`, // include packages if not transpiling - '../../packages/**/*.{js,ts,jsx,tsx}', - '../../apps/**/*.{js,ts,jsx,tsx}', + '../../../packages/**/*.{js,ts,jsx,tsx}' ], + plugins: [iOsHeight], theme: { + colors: { + 'button-bg': '#3d3a3a', + 'code-bg': '#353436', + 'cta-bg': '#ffd152', + 'cta-bg-hover': '#ffc31f', + 'cta-text': '#343233', + 'dark-bg': '#343233', + 'dark-bg-border': '#1a191a', + 'dark-bg-text': '#efdab9', + 'darker-bg': '#2c2a2b', + 'light-bg': '#efeae1', + 'light-bg-text': '#574c4f', + link: '#ffd152', + 'link-hover': '#ebac00', + 'tab-bg': '#47504E' + }, extend: { backgroundImage: { gradient: @@ -39,7 +54,7 @@ module.exports = { gradientHover: 'linear-gradient(145.37deg, rgba(255, 255, 255, 0.1) -8.75%, rgba(255, 255, 255, 0.057) 83.95%)', shine: - 'linear-gradient(45deg, rgba(255,255,255,0) 45%,rgba(255,255,255,1) 50%,rgba(255,255,255,0) 55%,rgba(255,255,255,0) 100%)', + 'linear-gradient(45deg, rgba(255,255,255,0) 45%,rgba(255,255,255,1) 50%,rgba(255,255,255,0) 55%,rgba(255,255,255,0) 100%)' }, colors: { cyan: { @@ -54,7 +69,7 @@ module.exports = { 9: colors.cyanDarkA.cyanA9, 10: colors.cyanDarkA.cyanA10, 11: colors.cyanDarkA.cyanA11, - 12: colors.cyanDarkA.cyanA12, + 12: colors.cyanDarkA.cyanA12 }, slate: { 1: colors.slateDarkA.slateA1, @@ -68,23 +83,19 @@ module.exports = { 9: colors.slateDarkA.slateA9, 10: colors.slateDarkA.slateA10, 11: colors.slateDarkA.slateA11, - 12: colors.slateDarkA.slateA12, - }, - }, - fontFamily: { - sans: ['var(--font-inter)', ...fontFamily.sans], + 12: colors.slateDarkA.slateA12 + } }, keyframes: { - shine: { - '0%': { backgroundPosition: '-100%' }, - '100%': { backgroundPosition: '100%' }, - }, dash: { '0%': { strokeDashoffset: 1000 }, - '100%': { strokeDashoffset: 0 }, + '100%': { strokeDashoffset: 0 } }, - }, - }, - }, - plugins: [iOsHeight], + shine: { + '0%': { backgroundPosition: '-100%' }, + '100%': { backgroundPosition: '100%' } + } + } + } + } }; diff --git a/packages/cli/app/tsconfig.json b/packages/cli/app/tsconfig.json new file mode 100644 index 00000000..c7dc4073 --- /dev/null +++ b/packages/cli/app/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": [".", "./**/*.tsx"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/packages/cli/app/tsconfig.node.json b/packages/cli/app/tsconfig.node.json new file mode 100644 index 00000000..42872c59 --- /dev/null +++ b/packages/cli/app/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/packages/cli/app/vite-env.d.ts b/packages/cli/app/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/packages/cli/app/vite-env.d.ts @@ -0,0 +1 @@ +///++ )} ++ ++ diff --git a/packages/cli/app/vite.config.ts b/packages/cli/app/vite.config.ts new file mode 100644 index 00000000..0df1bf4f --- /dev/null +++ b/packages/cli/app/vite.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +process.chdir(__dirname); + +export default defineConfig({ + plugins: [react()], + root: __dirname +}); diff --git a/packages/cli/moon.yml b/packages/cli/moon.yml new file mode 100644 index 00000000..2cfdb172 --- /dev/null +++ b/packages/cli/moon.yml @@ -0,0 +1,41 @@ +# https://moonrepo.dev/docs/config/tasks +$schema: 'https://moonrepo.dev/schemas/tasks.json' + +workspace: + inheritedTasks: + exclude: ['build', 'compile'] + +tasks: + build: + command: echo "Build compelete" + deps: + - ~:compile + options: + cache: false + outputStyle: 'stream' + runDepsInParallel: false + + compile: + command: echo "Compile compelete" + inputs: + - src + deps: + - ~:tsc + - ~:copy + options: + runDepsInParallel: false + + copy: + command: cp -r src/assets dist/src && cp -r app dist + options: + cache: false + + start.preview: + command: ts-node --swc --project ../../tsconfig.json scripts/test.ts + options: + cache: false + + tsc: + command: tsc --project tsconfig.json + inputs: + - src diff --git a/packages/cli/package.json b/packages/cli/package.json new file mode 100644 index 00000000..8404fe6c --- /dev/null +++ b/packages/cli/package.json @@ -0,0 +1,68 @@ +{ + "name": "@jsx-email/cli", + "version": "0.0.0", + "publishConfig": { + "access": "public" + }, + "description": "A CLI for working with Email Templates made with react-email", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/shellscape/jsx-email.git", + "directory": "packages/cli" + }, + "bin": { + "email": "./dist/src/index.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "files": [ + "dist/**" + ], + "dependencies": { + "@dot/log": "^0.1.3", + "@fontsource/inter": "^5.0.8", + "@jsx-email/render": "workspace:*", + "@radix-ui/colors": "1.0.1", + "@radix-ui/react-collapsible": "1.0.3", + "@radix-ui/react-popover": "1.0.6", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-toggle-group": "1.0.4", + "@radix-ui/react-tooltip": "1.0.6", + "@react-email/render": "0.0.7", + "@vitejs/plugin-react": "^4.0.4", + "autoprefixer": "^10.4.15", + "chalk": "4.1.2", + "cheerio": "1.0.0-rc.12", + "classnames": "2.3.2", + "debug": "^4.3.4", + "esbuild": "^0.19.2", + "esbuild-plugin-copy": "^2.1.1", + "framer-motion": "8.5.5", + "globby": "11.0.4", + "html-minifier-terser": "^7.2.0", + "import-local": "^3.1.0", + "js-beautify": "^1.14.9", + "mustache": "^4.2.0", + "postcss": "^8.4.29", + "prism-react-renderer": "2.0.6", + "react": "^18.2.0", + "react-dom": "18.2.0", + "react-router-dom": "^6.15.0", + "superstruct": "^1.0.3", + "tailwindcss": "3.3.3", + "titleize": "^4.0.0", + "vite": "^4.4.9" + }, + "devDependencies": { + "@types/classnames": "2.3.1", + "@types/debug": "^4.1.8", + "@types/html-minifier-terser": "^7.0.0", + "@types/import-local": "^3.1.0", + "@types/js-beautify": "^1.14.0", + "@types/mustache": "^4.2.2", + "@types/react": "18.0.20", + "@types/react-dom": "18.0.6" + } +} \ No newline at end of file diff --git a/packages/cli/readme.md b/packages/cli/readme.md new file mode 100644 index 00000000..399eddb2 --- /dev/null +++ b/packages/cli/readme.md @@ -0,0 +1,58 @@ +![React Email Column cover](https://react.email/static/covers/column.png) + + @react-email/column+Display a column that separates content areas vertically in your email.+
+ + +## Install + +Install component from your command line. + +#### With yarn + +```sh +yarn add @react-email/column -E +``` + +#### With npm + +```sh +npm install @react-email/column -E +``` + +## Getting started + +Add the component to your email template. Include styles where needed. + +```jsx +import { Row } from '@react-email/row'; +import { Column } from '@react-email/column'; +const Email = () => { + return( ++
+ ); +}; +``` + +## Support + +This component was tested using the most popular email clients. + +|A + B + C + |
|
|
|
|
| +| -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | +| Gmail ✔ | Apple Mail ✔ | Outlook ✔ | Yahoo! Mail ✔ | HEY ✔ | Superhuman ✔ | + +## License + +MIT License diff --git a/packages/cli/scripts/test.ts b/packages/cli/scripts/test.ts new file mode 100644 index 00000000..fb38b905 --- /dev/null +++ b/packages/cli/scripts/test.ts @@ -0,0 +1,5 @@ +import { start } from '../src/commands/preview'; + +(async () => { + start(__dirname, {}); +})(); diff --git a/packages/cli/src/assets/email.mustache b/packages/cli/src/assets/email.mustache new file mode 100644 index 00000000..e5512cca --- /dev/null +++ b/packages/cli/src/assets/email.mustache @@ -0,0 +1,97 @@ +import { + Body, + Button, + Container, + Head, + Hr, + Html, + Link, + Preview, + Section, + Text +} from '@jsx-email/components'; +// Note: Superstruct is a fantastic validation package. It's smaller and faster than alternatives +// and uses a delightful API without chaining. docs.superstructjs.org +// +// To install `superstruct` run `pnpm add superstruct`. +import { defaulted, number, object, string{{ typeInfer }} } from 'superstruct'; +import * as React from 'react'; + +export const TemplateName = '{{name}}'; + +export const TemplateStruct = object({ + count: defaulted(number(), 42), + email: defaulted(string(), 'batman@example.com'), + name: defaulted(string(), 'Bruce Wayne') +}); +{{ typeProps }} + +const main = { + backgroundColor: '#f6f9fc', + fontFamily: + '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,sans-serif' +}; + +const container = { + backgroundColor: '#ffffff', + margin: '0 auto', + marginBottom: '64px', + padding: '20px 0 48px' +}; + +const box = { + padding: '0 48px' +}; + +const hr = { + borderColor: '#e6ebf1', + margin: '20px 0' +}; + +const paragraph = { + color: '#777', + fontSize: '16px', + lineHeight: '24px', + textAlign: 'left' as const +}; + +const anchor = { + color: '#777' +}; + +const button = { + backgroundColor: '#777', + borderRadius: '5px', + color: '#fff', + display: 'block', + fontSize: '16px', + fontWeight: 'bold', + textAlign: 'center' as const, + textDecoration: 'none', + width: '100%' +}; + +export const Template = ({ email, name, count }{{ propsType }}) => ( + +
This is our email preview text for {name} <{email}> + ++ + + +); diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts new file mode 100644 index 00000000..26ae809b --- /dev/null +++ b/packages/cli/src/commands/build.ts @@ -0,0 +1,145 @@ +import { existsSync } from 'node:fs'; +import { mkdir, realpath, writeFile } from 'node:fs/promises'; +import os from 'node:os'; +import { basename, extname, join, resolve } from 'path'; + +import { render } from '@jsx-email/render'; +import chalk from 'chalk'; +import { load } from 'cheerio'; +import esbuild from 'esbuild'; +import globby from 'globby'; +import { minify as terser } from 'html-minifier-terser'; +import beautify from 'js-beautify'; +import { assert, boolean, object, optional, string, Infer } from 'superstruct'; + +import { CommandFn, TemplateFn } from './types'; + +const { error, log } = console; + +const BuildOptionsStruct = object({ + minify: optional(boolean()), + out: optional(string()), + plain: optional(boolean()), + props: optional(string()), + strip: optional(boolean()) +}); + +type BuildOptions = Infer+ +This is our email body text + +
++ This is text content with a{' '} + + link + + . The count is {count}. + +; + +export const help = chalk` +{blue email build} + +Builds a template and saves the result + +{underline Usage} + $ email build [...options] + +{underline Options} + --minify Minify the rendered template before saving + --no-strip Prevents stripping data-id attributes from output + --out File path to save the rendered template + --plain Emit template as plain text + --props A JSON string containing props to be passed to the email template + This is usually only useful when building a single template, unless all of your + templates share the same props. + +{underline Examples} + $ email build ./src/templates/Invite.tsx + $ email build ./src/templates/Invite.tsx --props='\{"batman": "Bruce Wayne"\}' +`; + +const pretty = (html: string) => { + const defaults = { + indent_char: ' ', + indent_inner_html: true, + indent_size: 2, + sep: '\n', + unformatted: ['code', 'pre', 'em', 'strong', 'span'] + }; + + return beautify.html(html, defaults); +}; + +const stripHtml = (html: string) => { + const $ = load(html); + + $('*').removeAttr('data-id'); + + return $.html()!; +}; + +const build = async (path: string, argv: BuildOptions) => { + const { minify, out, plain, props = {}, strip = true } = argv; + const template = await import(path); + const componentExport: TemplateFn = template.Template || template.default; + const extension = plain ? '.txt' : '.html'; + + if (!componentExport) { + error(`${path} does not contain a named \`Template\` or default export of a JSX Element`); + process.exit(1); + } + + const component = componentExport(props); + const writePath = join(out!, basename(path).replace(extname(path), extension)); + + if (plain) { + const plainText = render(component, { plainText: plain }); + await writeFile(writePath, plainText, 'utf8'); + return; + } + + let html = render(component); + if (strip) html = stripHtml(html); + if (minify) html = await terser(html); + else html = pretty(html); + + await mkdir(out!, { recursive: true }); + await writeFile(writePath, html, 'utf8'); +}; + +const compile = async (files: string[], outDir: string) => { + await esbuild.build({ + bundle: true, + entryPoints: files, + logLevel: 'error', + outdir: outDir, + platform: 'node', + write: true + }); + + return globby([join(outDir, '*.js')]); +}; + +export const command: CommandFn = async (argv: BuildOptions, input) => { + if (input.length < 1) return false; + + const [target] = input; + const tmpdir = await realpath(os.tmpdir()); + const esbuildOutPath = join(tmpdir, 'jsx-email', Date.now().toString()); + + if (!(await existsSync(target))) { + error(`The provided build target '${target}' does not exist`); + process.exit(1); + } + + assert(argv, BuildOptionsStruct); + + // Note: niave check that will probably get us into some edge cases + const isFile = target.endsWith('.tsx') || target.endsWith('.jsx'); + const { out = '.rendered' } = argv; + const glob = isFile ? target : join(target, '*.{jsx,tsx}'); + const targetFiles = await globby([glob]); + const outputPath = resolve(out); + + log('Found', targetFiles.length, 'files:'); + log(' ', targetFiles.join('\n ')); + log('\nStarting build...'); + + const compiledFiles = await compile(targetFiles, esbuildOutPath); + + await Promise.all(compiledFiles.map((filePath) => build(filePath, { ...argv, out: outputPath }))); + + log('\nBuild complete. Files written to:', outputPath); + + return true; +}; diff --git a/packages/cli/src/commands/create.ts b/packages/cli/src/commands/create.ts new file mode 100644 index 00000000..dbda1377 --- /dev/null +++ b/packages/cli/src/commands/create.ts @@ -0,0 +1,62 @@ +import { mkdir, readFile, writeFile } from 'node:fs/promises'; +import { join, resolve } from 'path'; + +import chalk from 'chalk'; +import mustache from 'mustache'; +import { assert, boolean, object, optional, string, Infer } from 'superstruct'; + +import { CommandFn } from './types'; + +const { log } = console; + +const CreateOptionsStruct = object({ + jsx: optional(boolean()), + out: optional(string()) +}); + +type CreateOptions = Infer ; + +export const help = chalk` +{blue email create} + +Creates a new jsx-email template + +{underline Usage} + $ email create [...options] + +{underline Options} + --jsx Use a JSX template instead of TSX. TSX is the default + --out The directory to create the new template in. Defaults to the current directory. + +{underline Examples} + $ email create invite + $ email create invite --out=src/assets +`; + +export const command: CommandFn = async (argv: CreateOptions, input) => { + if (input.length < 1) return false; + + assert(argv, CreateOptionsStruct); + + const [name] = input; + const { jsx, out } = argv; + const template = await readFile(join(__dirname, '../assets/email.tsx.mustache'), 'utf8'); + const data = { + name, + propsType: jsx ? '' : ': TemplateProps', + typeInfer: jsx ? '' : ', type Infer', + typeProps: jsx ? '' : '\nexport type TemplateProps = Infer ;' + }; + const newContent = mustache.render(template, data); + const outPath = resolve(join(out || process.cwd(), '/templates')); + const outFile = `${name}.tsx`; + + log('Creating a new template at', outPath); + + await mkdir(outPath, { recursive: true }); + await writeFile(join(outPath, outFile), newContent); + + log(`Template ${outFile} created`); + + return true; +}; diff --git a/packages/cli/src/commands/help.ts b/packages/cli/src/commands/help.ts new file mode 100644 index 00000000..99ff9b93 --- /dev/null +++ b/packages/cli/src/commands/help.ts @@ -0,0 +1,51 @@ +import chalk from 'chalk'; + +import pkg from '../../package.json'; + +import { CommandFn } from './types'; +import { help as build } from './build'; +import { help as create } from './create'; +import { help as preview } from './preview'; + +const { log } = console; + +export const helpMessage = chalk` +{blue ${pkg.name}} v${pkg.version} + +${pkg.description} + +{underline Usage} + $ email [...options] + +{underline Commands} + build {dim } + help [{dim }] + preview {dim } + +{underline Options} + --help Displays this message + --version Displays webpack-nano and webpack versions + +{underline Examples} + $ email + $ email --help + $ email build ./src/templates/Invite.tsx + $ email create invite + $ email preview ./src/templates +`; + +const commands: Record = { build, create, preview }; + +export const command: CommandFn = async (_, inputs) => { + if ((inputs || []).length < 1) { + log(helpMessage); + return true; + } + + const [command] = inputs; + const commandHelp = commands[command] || helpMessage; + + log(commandHelp); + + return true; +}; diff --git a/packages/cli/src/commands/preview.ts b/packages/cli/src/commands/preview.ts new file mode 100644 index 00000000..e245722b --- /dev/null +++ b/packages/cli/src/commands/preview.ts @@ -0,0 +1,64 @@ +import { join, resolve } from 'path'; + +import chalk from 'chalk'; +import globby from 'globby'; +import { assert, boolean, number, object, optional, Infer } from 'superstruct'; +import { createServer } from 'vite'; + +import { CommandFn } from './types'; + +const PreviewOptionsStruct = object({ + open: optional(boolean()), + port: optional(number()) +}); + +type PreviewOptions = Infer ; + +export const help = chalk` +{blue email preview} + +Starts the preview server for a directory of email templates + +{underline Usage} + $ email preview [...options] + +{underline Options} + --no-open Do not open a browser tab when the preview server starts + --port The local port number the preview server should run on. Default: 55420 + +{underline Examples} + $ email preview ./src/templates --port 55420 +`; + +export const command: CommandFn = async (argv: PreviewOptions, input) => { + if (input.length < 1) return false; + + assert(argv, PreviewOptionsStruct); + + const [target] = input; + const targetPath = resolve(target); + + await start(targetPath, argv); + return true; +}; + +export const start = async (targetPath: string, argv: PreviewOptions) => { + const { open = true, port = 55420 } = argv; + const config = await import('../../app/vite.config'); + const componentPaths = await globby(join(targetPath, '/*.{jsx,tsx}')); + + process.env.VITE_EMAIL_COMPONENTS = JSON.stringify(componentPaths); + + const server = await createServer({ + configFile: false, + ...config.default, + publicDir: targetPath, + server: { port } + }); + + await server.listen(); + + // TODO: bind CLI shortcuts. this hasn't landed in Vite yet, will be released with 5.0 + if (open) server.openBrowser(); + server.printUrls(); +}; diff --git a/packages/cli/src/commands/types.ts b/packages/cli/src/commands/types.ts new file mode 100644 index 00000000..d1d0d043 --- /dev/null +++ b/packages/cli/src/commands/types.ts @@ -0,0 +1,5 @@ +export type Flags = Record ; + +export type CommandFn = (flags: Flags, inputs: string[]) => Promise ; + +export type TemplateFn = (props: {}) => JSX.Element; diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts new file mode 100644 index 00000000..b112e484 --- /dev/null +++ b/packages/cli/src/index.ts @@ -0,0 +1,44 @@ +import { parseArgs } from 'node:util'; + +import debugConfig from 'debug'; +import importLocal from 'import-local'; + +import pkg from '../package.json'; + +import { command as build } from './commands/build'; +import { command as create } from './commands/create'; +import { command as help } from './commands/help'; +import { command as preview } from './commands/preview'; +import { CommandFn } from './commands/types'; + +const commands: Record = { build, create, help, preview }; +const debug = debugConfig('@jsx-email/cli'); +const { log } = console; + +const run = async () => { + const argv = parseArgs({ allowPositionals: true, args: process.argv.slice(2), strict: false }); + const [commandName] = argv.positionals; + let command = commands[commandName]; + + debug(`Command Name: \`${commandName}\``); + + if (argv.values.version) { + log(`${pkg.name} v${pkg.version}\n`); + return; + } + + if (!command) command = help; + + const result = await command(argv.values, argv.positionals?.slice(1) || []); + + if (!result) { + debug(`Command \`${commandName}\` returned \`false\``); + help({}, []); + } +}; + +if (importLocal(__filename)) { + debug('Using local install of webpack-command'); +} else { + run(); +} diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json new file mode 100644 index 00000000..5548eaa6 --- /dev/null +++ b/packages/cli/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "outDir": "dist" + }, + "exclude": ["dist", "node_modules", "app/**/*"], + "extends": "../../shared/tsconfig.base.json", + "include": ["src"] +} diff --git a/packages/demo/package.json b/packages/demo/package.json new file mode 100644 index 00000000..7ea5ba27 --- /dev/null +++ b/packages/demo/package.json @@ -0,0 +1,14 @@ +{ + "name": "@jsx-email/demo", + "version": "0.0.0", + "private": true, + "description": "A demo package to run the preview server against. This is not published", + "license": "MIT", + "peerDependencies": { + "react": "^18.2.0" + }, + "dependencies": { + "@jsx-email/cli": "workspace:*", + "@jsx-email/components": "workspace:*" + } +} \ No newline at end of file diff --git a/packages/demo/readme.md b/packages/demo/readme.md new file mode 100644 index 00000000..05476d5a --- /dev/null +++ b/packages/demo/readme.md @@ -0,0 +1,64 @@ +![React Email HTML cover](https://react.email/static/covers/html.png) + + -@react-email/body+A React body component to wrap emails.+
+ + +## Install + +Install component from your command line. + +#### With yarn + +```sh +yarn add @react-email/body -E +``` + +#### With npm + +```sh +npm install @react-email/body -E +``` + +## Getting started + +Add the component to your email template. Include styles where needed. + +```jsx +import { Html } from "@jsx-email/html"; +import { Body } from "@jsx-email/body"; +import { Section } from "@jsx-email/section"; +import { Column } from "@jsx-email/section"; + +const Email = () => { + return ( + + ++ + + + ); +}; +``` + +## Support + +This component was tested using the most popular email clients. + +|{/* First column */} +{/* Second column */} +|
|
|
|
|
| +| -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | +| Gmail ✔ | Apple Mail ✔ | Outlook ✔ | Yahoo! Mail ✔ | HEY ✔ | Superhuman ✔ | + +## License + +MIT License diff --git a/deprecated/create-email/template/emails/stripe-welcome.tsx b/packages/demo/src/stripe-welcome.tsx similarity index 57% rename from deprecated/create-email/template/emails/stripe-welcome.tsx rename to packages/demo/src/stripe-welcome.tsx index 58ddb147..bcac3fe7 100644 --- a/deprecated/create-email/template/emails/stripe-welcome.tsx +++ b/packages/demo/src/stripe-welcome.tsx @@ -9,42 +9,78 @@ import { Link, Preview, Section, - Text, -} from '@react-email/components'; -import * as React from 'react'; + Text +} from '@jsx-email/components'; -const baseUrl = process.env.VERCEL_URL - ? `https://${process.env.VERCEL_URL}` - : ''; +const main = { + backgroundColor: '#f6f9fc', + fontFamily: `-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Ubuntu,sans-serif` +}; + +const container = { + backgroundColor: '#ffffff', + margin: '0 auto', + marginBottom: '64px', + padding: '20px 0 48px' +}; + +const box = { + padding: '0 48px' +}; + +const hr = { + borderColor: '#e6ebf1', + margin: '20px 0' +}; + +const paragraph = { + color: '#525f7f', + + fontSize: '16px', + lineHeight: '24px', + textAlign: 'left' as const +}; + +const anchor = { + color: '#556cd6' +}; + +const button = { + backgroundColor: '#656ee8', + borderRadius: '5px', + color: '#fff', + display: 'block', + fontSize: '16px', + fontWeight: 'bold', + textAlign: 'center' as const, + textDecoration: 'none', + width: '100%' +}; -export const StripeWelcomeEmail = () => ( +const footer = { + color: '#8898aa', + fontSize: '12px', + lineHeight: '16px' +}; + +export const Template = () => (
You're now ready to make live transactions with Stripe! +HooooYou're now ready to make live transactions with Stripe! ); - -export default StripeWelcomeEmail; - -const main = { - backgroundColor: '#f6f9fc', - fontFamily: - '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,sans-serif', -}; - -const container = { - backgroundColor: '#ffffff', - margin: '0 auto', - padding: '20px 0 48px', - marginBottom: '64px', -}; - -const box = { - padding: '0 48px', -}; - -const hr = { - borderColor: '#e6ebf1', - margin: '20px 0', -}; - -const paragraph = { - color: '#525f7f', - - fontSize: '16px', - lineHeight: '24px', - textAlign: 'left' as const, -}; - -const anchor = { - color: '#556cd6', -}; - -const button = { - backgroundColor: '#656ee8', - borderRadius: '5px', - color: '#fff', - fontSize: '16px', - fontWeight: 'bold', - textDecoration: 'none', - textAlign: 'center' as const, - display: 'block', - width: '100%', -}; - -const footer = { - color: '#8898aa', - fontSize: '12px', - lineHeight: '16px', -}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 56e288ea..f10a3436 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,12 @@ importers: '@react-email/render': specifier: 0.0.6 version: 0.0.6 + '@swc/core': + specifier: ^1.3.82 + version: 1.3.82(@swc/helpers@0.5.1) + '@swc/helpers': + specifier: ^0.5.1 + version: 0.5.1 '@types/jest': specifier: 29.5.3 version: 29.5.3 @@ -46,7 +52,7 @@ importers: version: 8.0.3 jest: specifier: 28.1.3 - version: 28.1.3 + version: 28.1.3(@types/node@18.11.9)(ts-node@10.9.1) lint-staged: specifier: 13.2.2 version: 13.2.2 @@ -56,9 +62,12 @@ importers: ts-jest: specifier: 28.0.8 version: 28.0.8(@babel/core@7.21.8)(babel-jest@28.1.3)(esbuild@0.18.20)(jest@28.1.3)(typescript@5.1.6) + ts-node: + specifier: 10.9.1 + version: 10.9.1(@swc/core@1.3.82)(@types/node@18.11.9)(typescript@5.1.6) tsup: specifier: 7.1.0 - version: 7.1.0(typescript@5.1.6) + version: 7.1.0(@swc/core@1.3.82)(ts-node@10.9.1)(typescript@5.1.6) typescript: specifier: 5.1.6 version: 5.1.6 @@ -131,7 +140,7 @@ importers: version: 3.0.0 ts-node: specifier: 10.9.1 - version: 10.9.1(@types/node@18.11.9)(typescript@5.1.6) + version: 10.9.1(@swc/core@1.3.82)(@types/node@18.11.9)(typescript@5.1.6) typescript: specifier: 5.1.6 version: 5.1.6 @@ -148,6 +157,133 @@ importers: specifier: ^18.2.0 version: 18.2.0 + packages/cli: + dependencies: + '@dot/log': + specifier: ^0.1.3 + version: 0.1.3 + '@fontsource/inter': + specifier: ^5.0.8 + version: 5.0.8 + '@jsx-email/render': + specifier: workspace:* + version: link:../render + '@radix-ui/colors': + specifier: 1.0.1 + version: 1.0.1 + '@radix-ui/react-collapsible': + specifier: 1.0.3 + version: 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popover': + specifier: 1.0.6 + version: 1.0.6(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': + specifier: 1.0.2 + version: 1.0.2(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-toggle-group': + specifier: 1.0.4 + version: 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-tooltip': + specifier: 1.0.6 + version: 1.0.6(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@react-email/render': + specifier: 0.0.7 + version: 0.0.7 + '@vitejs/plugin-react': + specifier: ^4.0.4 + version: 4.0.4(vite@4.4.9) + autoprefixer: + specifier: ^10.4.15 + version: 10.4.15(postcss@8.4.29) + chalk: + specifier: 4.1.2 + version: 4.1.2 + cheerio: + specifier: 1.0.0-rc.12 + version: 1.0.0-rc.12 + classnames: + specifier: 2.3.2 + version: 2.3.2 + debug: + specifier: ^4.3.4 + version: 4.3.4 + esbuild: + specifier: ^0.19.2 + version: 0.19.2 + esbuild-plugin-copy: + specifier: ^2.1.1 + version: 2.1.1(esbuild@0.19.2) + framer-motion: + specifier: 8.5.5 + version: 8.5.5(react-dom@18.2.0)(react@18.2.0) + globby: + specifier: 11.0.4 + version: 11.0.4 + html-minifier-terser: + specifier: ^7.2.0 + version: 7.2.0 + import-local: + specifier: ^3.1.0 + version: 3.1.0 + js-beautify: + specifier: ^1.14.9 + version: 1.14.9 + mustache: + specifier: ^4.2.0 + version: 4.2.0 + postcss: + specifier: ^8.4.29 + version: 8.4.29 + prism-react-renderer: + specifier: 2.0.6 + version: 2.0.6(react@18.2.0) + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + react-router-dom: + specifier: ^6.15.0 + version: 6.15.0(react-dom@18.2.0)(react@18.2.0) + superstruct: + specifier: ^1.0.3 + version: 1.0.3 + tailwindcss: + specifier: 3.3.3 + version: 3.3.3(ts-node@10.9.1) + titleize: + specifier: ^4.0.0 + version: 4.0.0 + vite: + specifier: ^4.4.9 + version: 4.4.9(@types/node@18.11.9) + devDependencies: + '@types/classnames': + specifier: 2.3.1 + version: 2.3.1 + '@types/debug': + specifier: ^4.1.8 + version: 4.1.8 + '@types/html-minifier-terser': + specifier: ^7.0.0 + version: 7.0.0 + '@types/import-local': + specifier: ^3.1.0 + version: 3.1.0 + '@types/js-beautify': + specifier: ^1.14.0 + version: 1.14.0 + '@types/mustache': + specifier: ^4.2.2 + version: 4.2.2 + '@types/react': + specifier: 18.0.20 + version: 18.0.20 + '@types/react-dom': + specifier: 18.0.6 + version: 18.0.6 + packages/column: dependencies: react: @@ -220,6 +356,18 @@ importers: specifier: ^18.2.0 version: 18.2.0 + packages/demo: + dependencies: + '@jsx-email/cli': + specifier: workspace:* + version: link:../cli + '@jsx-email/components': + specifier: workspace:* + version: link:../components + react: + specifier: ^18.2.0 + version: 18.2.0 + packages/font: dependencies: react: @@ -327,7 +475,7 @@ importers: version: 18.2.0(react@18.2.0) tw-to-css: specifier: 0.0.11 - version: 0.0.11 + version: 0.0.11(ts-node@10.9.1) packages/text: dependencies: @@ -342,13 +490,17 @@ packages: engines: {node: '>=0.10.0'} dev: true + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: false + /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 - dev: true /@babel/code-frame@7.22.13: resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} @@ -360,7 +512,6 @@ packages: /@babel/compat-data@7.22.9: resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/core@7.21.8: resolution: {integrity: sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==} @@ -385,6 +536,29 @@ packages: - supports-color dev: true + /@babel/core@7.22.15: + resolution: {integrity: sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.22.15 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.22.15(@babel/core@7.22.15) + '@babel/helpers': 7.22.15 + '@babel/parser': 7.22.15 + '@babel/template': 7.22.15 + '@babel/traverse': 7.22.15 + '@babel/types': 7.22.15 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/generator@7.22.15: resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==} engines: {node: '>=6.9.0'} @@ -393,7 +567,6 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 - dev: true /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} @@ -411,12 +584,10 @@ packages: browserslist: 4.21.10 lru-cache: 5.1.1 semver: 6.3.1 - dev: true /@babel/helper-environment-visitor@7.22.5: resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-function-name@7.22.5: resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} @@ -424,21 +595,18 @@ packages: dependencies: '@babel/template': 7.22.15 '@babel/types': 7.22.15 - dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.15 - dev: true /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.15 - dev: true /@babel/helper-module-transforms@7.22.15(@babel/core@7.21.8): resolution: {integrity: sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ==} @@ -454,29 +622,39 @@ packages: '@babel/helper-validator-identifier': 7.22.15 dev: true + /@babel/helper-module-transforms@7.22.15(@babel/core@7.22.15): + resolution: {integrity: sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.15 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.15 + dev: false + /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.15 - dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.15 - dev: true /@babel/helper-string-parser@7.22.5: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-identifier@7.22.15: resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} @@ -485,7 +663,6 @@ packages: /@babel/helper-validator-option@7.22.15: resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} - dev: true /@babel/helpers@7.22.15: resolution: {integrity: sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==} @@ -496,7 +673,6 @@ packages: '@babel/types': 7.22.15 transitivePeerDependencies: - supports-color - dev: true /@babel/highlight@7.22.13: resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} @@ -512,7 +688,6 @@ packages: hasBin: true dependencies: '@babel/types': 7.22.15 - dev: true /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.8): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -663,6 +838,26 @@ packages: '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.21.8) dev: true + /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.15): + resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.15): + resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.21.8): resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==} engines: {node: '>=6.9.0'} @@ -717,7 +912,6 @@ packages: '@babel/code-frame': 7.22.13 '@babel/parser': 7.22.15 '@babel/types': 7.22.15 - dev: true /@babel/traverse@7.22.15: resolution: {integrity: sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ==} @@ -735,7 +929,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true /@babel/types@7.22.15: resolution: {integrity: sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA==} @@ -744,7 +937,6 @@ packages: '@babel/helper-string-parser': 7.22.5 '@babel/helper-validator-identifier': 7.22.15 to-fast-properties: 2.0.0 - dev: true /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -753,10 +945,7 @@ packages: /@commander-js/extra-typings@9.4.1(commander@9.4.1): resolution: {integrity: sha512-v0BqORYamk1koxDon6femDGLWSL7P78vYTyOU5nFaALnmNALL+ktgdHvWbxzzBBJIKS7kv3XvM/DqNwiLcgFTA==} peerDependencies: - commander: '*' - peerDependenciesMeta: - commander: - optional: true + commander: 9.4.x dependencies: commander: 9.4.1 dev: false @@ -766,7 +955,6 @@ packages: engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 - dev: true /@dot/log@0.1.3: resolution: {integrity: sha512-Gh6enQBMuD5zxI5Rz7lNY74PnlR6K0DvavOrrSuU4uhKsUf9BgJlHyFR5or5Uu3hK8xJyfmdf0cS7rDoFD3N/A==} @@ -775,7 +963,6 @@ packages: chalk: 4.1.2 loglevelnext: 5.0.6 p-defer: 3.0.0 - dev: true /@dot/versioner@0.1.5: resolution: {integrity: sha512-wAgzgmkhY2V2ckuxl+92K9IhkMqfkpsuhMMgiVsP3K2Fh8nBgSk/OBD1saOOJJIWmKAwV3ip2ljXMh2jOIFseA==} @@ -792,6 +979,20 @@ packages: yargs-parser: 21.1.1 dev: true + /@emotion/is-prop-valid@0.8.8: + resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} + requiresBuild: true + dependencies: + '@emotion/memoize': 0.7.4 + dev: false + optional: true + + /@emotion/memoize@0.7.4: + resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + requiresBuild: true + dev: false + optional: true + /@esbuild/android-arm64@0.16.4: resolution: {integrity: sha512-VPuTzXFm/m2fcGfN6CiwZTlLzxrKsWbPkG7ArRFpuxyaHUm/XFHQPD4xNwZT6uUmpIHhnSjcaCmcla8COzmZ5Q==} engines: {node: '>=12'} @@ -807,7 +1008,15 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: true + optional: true + + /@esbuild/android-arm64@0.19.2: + resolution: {integrity: sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false optional: true /@esbuild/android-arm@0.16.4: @@ -825,7 +1034,15 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: true + optional: true + + /@esbuild/android-arm@0.19.2: + resolution: {integrity: sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false optional: true /@esbuild/android-x64@0.16.4: @@ -843,7 +1060,15 @@ packages: cpu: [x64] os: [android] requiresBuild: true - dev: true + optional: true + + /@esbuild/android-x64@0.19.2: + resolution: {integrity: sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: false optional: true /@esbuild/darwin-arm64@0.16.4: @@ -861,7 +1086,15 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: true + optional: true + + /@esbuild/darwin-arm64@0.19.2: + resolution: {integrity: sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false optional: true /@esbuild/darwin-x64@0.16.4: @@ -879,7 +1112,15 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: true + optional: true + + /@esbuild/darwin-x64@0.19.2: + resolution: {integrity: sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false optional: true /@esbuild/freebsd-arm64@0.16.4: @@ -897,7 +1138,15 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true + optional: true + + /@esbuild/freebsd-arm64@0.19.2: + resolution: {integrity: sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: false optional: true /@esbuild/freebsd-x64@0.16.4: @@ -915,7 +1164,15 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: true + optional: true + + /@esbuild/freebsd-x64@0.19.2: + resolution: {integrity: sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false optional: true /@esbuild/linux-arm64@0.16.4: @@ -933,7 +1190,15 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true + optional: true + + /@esbuild/linux-arm64@0.19.2: + resolution: {integrity: sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false optional: true /@esbuild/linux-arm@0.16.4: @@ -951,7 +1216,15 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: true + optional: true + + /@esbuild/linux-arm@0.19.2: + resolution: {integrity: sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false optional: true /@esbuild/linux-ia32@0.16.4: @@ -969,7 +1242,15 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true - dev: true + optional: true + + /@esbuild/linux-ia32@0.19.2: + resolution: {integrity: sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: false optional: true /@esbuild/linux-loong64@0.16.4: @@ -987,7 +1268,15 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true - dev: true + optional: true + + /@esbuild/linux-loong64@0.19.2: + resolution: {integrity: sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: false optional: true /@esbuild/linux-mips64el@0.16.4: @@ -1005,7 +1294,15 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true - dev: true + optional: true + + /@esbuild/linux-mips64el@0.19.2: + resolution: {integrity: sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: false optional: true /@esbuild/linux-ppc64@0.16.4: @@ -1023,7 +1320,15 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: true + optional: true + + /@esbuild/linux-ppc64@0.19.2: + resolution: {integrity: sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false optional: true /@esbuild/linux-riscv64@0.16.4: @@ -1041,7 +1346,15 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: true + optional: true + + /@esbuild/linux-riscv64@0.19.2: + resolution: {integrity: sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false optional: true /@esbuild/linux-s390x@0.16.4: @@ -1059,7 +1372,15 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: true + optional: true + + /@esbuild/linux-s390x@0.19.2: + resolution: {integrity: sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false optional: true /@esbuild/linux-x64@0.16.4: @@ -1077,7 +1398,15 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true + optional: true + + /@esbuild/linux-x64@0.19.2: + resolution: {integrity: sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false optional: true /@esbuild/netbsd-x64@0.16.4: @@ -1095,7 +1424,15 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true - dev: true + optional: true + + /@esbuild/netbsd-x64@0.19.2: + resolution: {integrity: sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: false optional: true /@esbuild/openbsd-x64@0.16.4: @@ -1113,14 +1450,22 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true - dev: true optional: true - /@esbuild/sunos-x64@0.16.4: - resolution: {integrity: sha512-08SluG24GjPO3tXKk95/85n9kpyZtXCVwURR2i4myhrOfi3jspClV0xQQ0W0PYWHioJj+LejFMt41q+PG3mlAQ==} + /@esbuild/openbsd-x64@0.19.2: + resolution: {integrity: sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==} engines: {node: '>=12'} cpu: [x64] - os: [sunos] + os: [openbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/sunos-x64@0.16.4: + resolution: {integrity: sha512-08SluG24GjPO3tXKk95/85n9kpyZtXCVwURR2i4myhrOfi3jspClV0xQQ0W0PYWHioJj+LejFMt41q+PG3mlAQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] requiresBuild: true dev: false optional: true @@ -1131,7 +1476,15 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true - dev: true + optional: true + + /@esbuild/sunos-x64@0.19.2: + resolution: {integrity: sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: false optional: true /@esbuild/win32-arm64@0.16.4: @@ -1149,7 +1502,15 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: true + optional: true + + /@esbuild/win32-arm64@0.19.2: + resolution: {integrity: sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false optional: true /@esbuild/win32-ia32@0.16.4: @@ -1167,7 +1528,15 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: true + optional: true + + /@esbuild/win32-ia32@0.19.2: + resolution: {integrity: sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false optional: true /@esbuild/win32-x64@0.16.4: @@ -1185,7 +1554,15 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: true + optional: true + + /@esbuild/win32-x64@0.19.2: + resolution: {integrity: sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.27.0): @@ -1252,6 +1629,38 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@floating-ui/core@1.4.1: + resolution: {integrity: sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==} + dependencies: + '@floating-ui/utils': 0.1.1 + dev: false + + /@floating-ui/dom@1.5.1: + resolution: {integrity: sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==} + dependencies: + '@floating-ui/core': 1.4.1 + '@floating-ui/utils': 0.1.1 + dev: false + + /@floating-ui/react-dom@2.0.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 1.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@floating-ui/utils@0.1.1: + resolution: {integrity: sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==} + dev: false + + /@fontsource/inter@5.0.8: + resolution: {integrity: sha512-28knWH1BfOiRalfLs90U4sge5mpQ8ZH6FS0PTT+IZMKrZ7wNHDHRuKa1kQJg+uHcc6axBppnxll+HXM4c7zo/Q==} + dev: false + /@humanwhocodes/config-array@0.11.11: resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} engines: {node: '>=10.10.0'} @@ -1300,7 +1709,7 @@ packages: slash: 3.0.0 dev: true - /@jest/core@28.1.3: + /@jest/core@28.1.3(ts-node@10.9.1): resolution: {integrity: sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} peerDependencies: @@ -1321,7 +1730,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 28.1.3 - jest-config: 28.1.3(@types/node@18.11.9) + jest-config: 28.1.3(@types/node@18.11.9)(ts-node@10.9.1) jest-haste-map: 28.1.3 jest-message-util: 28.1.3 jest-regex-util: 28.0.2 @@ -1535,35 +1944,36 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.19 - dev: true /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true + + /@jridgewell/source-map@0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + dev: false /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true /@jridgewell/trace-mapping@0.3.19: resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /@manypkg/find-root@2.1.0: resolution: {integrity: sha512-NEYRVlZCJYhRTqQURhv+WBpDcvmsp/M423Wcdvggv8lYJYD4GtqnTMLrQaTjA10fYt/PIc3tSdwV+wxJnWqPfQ==} @@ -1589,7 +1999,7 @@ packages: engines: {node: '>=14.18.0'} dependencies: fs-extra: 8.1.0 - globby: 11.1.0 + globby: 11.0.4 jju: 1.4.0 read-yaml-file: 1.1.0 dev: false @@ -1666,6 +2076,53 @@ packages: dev: true optional: true + /@motionone/animation@10.15.1: + resolution: {integrity: sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ==} + dependencies: + '@motionone/easing': 10.15.1 + '@motionone/types': 10.15.1 + '@motionone/utils': 10.15.1 + tslib: 2.6.2 + dev: false + + /@motionone/dom@10.16.2: + resolution: {integrity: sha512-bnuHdNbge1FutZXv+k7xub9oPWcF0hsu8y1HTH/qg6av58YI0VufZ3ngfC7p2xhMJMnoh0LXFma2EGTgPeCkeg==} + dependencies: + '@motionone/animation': 10.15.1 + '@motionone/generators': 10.15.1 + '@motionone/types': 10.15.1 + '@motionone/utils': 10.15.1 + hey-listen: 1.0.8 + tslib: 2.6.2 + dev: false + + /@motionone/easing@10.15.1: + resolution: {integrity: sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw==} + dependencies: + '@motionone/utils': 10.15.1 + tslib: 2.6.2 + dev: false + + /@motionone/generators@10.15.1: + resolution: {integrity: sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ==} + dependencies: + '@motionone/types': 10.15.1 + '@motionone/utils': 10.15.1 + tslib: 2.6.2 + dev: false + + /@motionone/types@10.15.1: + resolution: {integrity: sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA==} + dev: false + + /@motionone/utils@10.15.1: + resolution: {integrity: sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw==} + dependencies: + '@motionone/types': 10.15.1 + hey-listen: 1.0.8 + tslib: 2.6.2 + dev: false + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1796,23 +2253,553 @@ packages: resolution: {integrity: sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==} dev: false - /@octokit/types@10.0.0: - resolution: {integrity: sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==} + /@octokit/types@10.0.0: + resolution: {integrity: sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==} + dependencies: + '@octokit/openapi-types': 18.0.0 + dev: false + + /@octokit/types@9.3.2: + resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==} + dependencies: + '@octokit/openapi-types': 18.0.0 + dev: false + + /@one-ini/wasm@0.1.1: + resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} + + /@radix-ui/colors@1.0.1: + resolution: {integrity: sha512-xySw8f0ZVsAEP+e7iLl3EvcBXX7gsIlC1Zso/sPBW9gIWerBTgz6axrjU+MZ39wD+WFi5h5zdWpsg3+hwt2Qsg==} + dev: false + + /@radix-ui/primitive@1.0.1: + resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + dependencies: + '@babel/runtime': 7.22.15 + dev: false + + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.20)(react@18.2.0) + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@types/react': 18.0.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-context@1.0.1(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@types/react': 18.0.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-direction@1.0.1(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@types/react': 18.0.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.0.20)(react@18.2.0) + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@types/react': 18.0.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-id@1.0.1(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@types/react': 18.0.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-popover@1.0.6(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-cZ4defGpkZ0qTRtlIBzJLSzL6ht7ofhhW4i1+pkemjV1IKXm0wgCRnee154qlV6r9Ttunmh2TNZhMfV2bavUyA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.20)(react@18.2.0) + dev: false + + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/rect': 1.0.1 + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-portal@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.20)(react@18.2.0) + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-slot@1.0.2(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@types/react': 18.0.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-tooltip@1.0.6(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-DmNFOiwEc2UDigsYj6clJENma58OelxD24O4IODoZ+3sQc3Zb+L8w1EP+y9laTuKCLAysPw4fD6/v0j4KNV8rg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@types/react': 18.0.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@types/react': 18.0.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.15 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@types/react': 18.0.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@octokit/openapi-types': 18.0.0 + '@babel/runtime': 7.22.15 + '@types/react': 18.0.20 + react: 18.2.0 dev: false - /@octokit/types@9.3.2: - resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==} + /@radix-ui/react-use-rect@1.0.1(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@octokit/openapi-types': 18.0.0 + '@babel/runtime': 7.22.15 + '@radix-ui/rect': 1.0.1 + '@types/react': 18.0.20 + react: 18.2.0 dev: false - /@one-ini/wasm@0.1.1: - resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} - - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.20)(react@18.2.0): - resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + /@radix-ui/react-use-size@1.0.1(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 @@ -1821,23 +2808,36 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.15 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.20)(react@18.2.0) '@types/react': 18.0.20 react: 18.2.0 dev: false - /@radix-ui/react-slot@1.0.2(@types/react@18.0.20)(react@18.2.0): - resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true dependencies: '@babel/runtime': 7.22.15 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.20)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/rect@1.0.1: + resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + dependencies: + '@babel/runtime': 7.22.15 dev: false /@react-email/render@0.0.6: @@ -1849,6 +2849,21 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + /@react-email/render@0.0.7: + resolution: {integrity: sha512-hMMhxk6TpOcDC5qnKzXPVJoVGEwfm+U5bGOPH+MyTTlx0F02RLQygcATBKsbP7aI/mvkmBAZoFbgPIHop7ovug==} + engines: {node: '>=16.0.0'} + dependencies: + html-to-text: 9.0.3 + pretty: 2.0.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@remix-run/router@1.8.0: + resolution: {integrity: sha512-mrfKqIHnSZRyIzBcanNJmVQELTnX+qagEDlcKO90RgRBVOZGSGvZKeDihTRfWcqoDn5N/NkUcwWTccnpN18Tfg==} + engines: {node: '>=14.0.0'} + dev: false + /@selderee/plugin-htmlparser2@0.10.0: resolution: {integrity: sha512-gW69MEamZ4wk1OsOq1nG1jcyhXIQcnrsX5JwixVw/9xaiav8TCyjESAruu1Rz9yyInhgBXxkNwMeygKnN2uxNA==} dependencies: @@ -1882,6 +2897,118 @@ packages: '@sinonjs/commons': 1.8.6 dev: true + /@swc/core-darwin-arm64@1.3.82: + resolution: {integrity: sha512-JfsyDW34gVKD3uE0OUpUqYvAD3yseEaicnFP6pB292THtLJb0IKBBnK50vV/RzEJtc1bR3g1kNfxo2PeurZTrA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + + /@swc/core-darwin-x64@1.3.82: + resolution: {integrity: sha512-ogQWgNMq7qTpITjcP3dnzkFNj7bh6SwMr859GvtOTrE75H7L7jDWxESfH4f8foB/LGxBKiDNmxKhitCuAsZK4A==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + + /@swc/core-linux-arm-gnueabihf@1.3.82: + resolution: {integrity: sha512-7TMXG1lXlNhD0kUiEqs+YlGV4irAdBa2quuy+XI3oJf2fBK6dQfEq4xBy65B3khrorzQS3O0oDGQ+cmdpHExHA==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + + /@swc/core-linux-arm64-gnu@1.3.82: + resolution: {integrity: sha512-26JkOujbzcItPAmIbD5vHJxQVy5ihcSu3YHTKwope1h28sApZdtE7S3e2G3gsZRTIdsCQkXUtAQeqHxGWWR3pw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@swc/core-linux-arm64-musl@1.3.82: + resolution: {integrity: sha512-8Izj9tuuMpoc3cqiPBRtwqpO1BZ/+sfZVsEhLxrbOFlcSb8LnKyMle1g3JMMUwI4EU75RGVIzZMn8A6GOKdJbA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@swc/core-linux-x64-gnu@1.3.82: + resolution: {integrity: sha512-0GSrIBScQwTaPv46T2qB7XnDYxndRCpwH4HMjh6FN+I+lfPUhTSJKW8AonqrqT1TbpFIgvzQs7EnTsD7AnSCow==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@swc/core-linux-x64-musl@1.3.82: + resolution: {integrity: sha512-KJUnaaepDKNzrEbwz4jv0iC3/t9x0NSoe06fnkAlhh2+NFKWKKJhVCOBTrpds8n7eylBDIXUlK34XQafjVMUdg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@swc/core-win32-arm64-msvc@1.3.82: + resolution: {integrity: sha512-TR3MHKhDYIyGyFcyl2d/p1ftceXcubAhX5wRSOdtOyr5+K/v3jbyCCqN7bbqO5o43wQVCwwR/drHleYyDZvg8Q==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + optional: true + + /@swc/core-win32-ia32-msvc@1.3.82: + resolution: {integrity: sha512-ZX4HzVVt6hs84YUg70UvyBJnBOIspmQQM0iXSzBvOikk3zRoN7BnDwQH4GScvevCEBuou60+i4I6d5kHLOfh8Q==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + optional: true + + /@swc/core-win32-x64-msvc@1.3.82: + resolution: {integrity: sha512-4mJMnex21kbQoaHeAmHnVwQN9/XAfPszJ6n9HI7SVH+aAHnbBIR0M59/b50/CJMjTj5niUGk7EwQ3nhVNOG32g==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /@swc/core@1.3.82(@swc/helpers@0.5.1): + resolution: {integrity: sha512-jpC1a18HMH67018Ij2jh+hT7JBFu7ZKcQVfrZ8K6JuEY+kjXmbea07P9MbQUZbAe0FB+xi3CqEVCP73MebodJQ==} + engines: {node: '>=10'} + requiresBuild: true + peerDependencies: + '@swc/helpers': ^0.5.0 + peerDependenciesMeta: + '@swc/helpers': + optional: true + dependencies: + '@swc/helpers': 0.5.1 + '@swc/types': 0.1.4 + optionalDependencies: + '@swc/core-darwin-arm64': 1.3.82 + '@swc/core-darwin-x64': 1.3.82 + '@swc/core-linux-arm-gnueabihf': 1.3.82 + '@swc/core-linux-arm64-gnu': 1.3.82 + '@swc/core-linux-arm64-musl': 1.3.82 + '@swc/core-linux-x64-gnu': 1.3.82 + '@swc/core-linux-x64-musl': 1.3.82 + '@swc/core-win32-arm64-msvc': 1.3.82 + '@swc/core-win32-ia32-msvc': 1.3.82 + '@swc/core-win32-x64-msvc': 1.3.82 + + /@swc/helpers@0.5.1: + resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} + dependencies: + tslib: 2.6.2 + + /@swc/types@0.1.4: + resolution: {integrity: sha512-z/G02d+59gyyUb7KYhKi9jOhicek6QD2oMaotUyG+lUkybpXoV49dY9bj7Ah5Q+y7knK2jU67UTX9FyfGzaxQg==} + /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -1889,19 +3016,15 @@ packages: /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true /@tsconfig/node16@1.0.4: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true /@types/babel__core@7.20.1: resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} @@ -1932,6 +3055,19 @@ packages: '@babel/types': 7.22.15 dev: true + /@types/classnames@2.3.1: + resolution: {integrity: sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A==} + deprecated: This is a stub types definition. classnames provides its own type definitions, so you do not need this installed. + dependencies: + classnames: 2.3.2 + dev: true + + /@types/debug@4.1.8: + resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} + dependencies: + '@types/ms': 0.7.31 + dev: true + /@types/dompurify@3.0.2: resolution: {integrity: sha512-YBL4ziFebbbfQfH5mlC+QTJsvh0oJUrWbmxKMyEdL7emlHJqGR2Qb34TEFKj+VCayBvjKy3xczMFNhugThUsfQ==} dependencies: @@ -1958,10 +3094,18 @@ packages: '@types/node': 18.11.9 dev: true + /@types/html-minifier-terser@7.0.0: + resolution: {integrity: sha512-hw3bhStrg5e3FQT8qZKCJTrzt/UbEaunU1xRWJ+aNOTmeBMvE3S4Ml2HiiNnZgL8izu0LFVkHUoPFXL1s5QNpQ==} + dev: true + /@types/html-to-text@9.0.1: resolution: {integrity: sha512-sHu702QGb0SP2F0Zt+CxdCmGZIZ0gEaaCjqOh/V4iba1wTxPVntEPOM/vHm5bel08TILhB3+OxUTkDJWnr/zHQ==} dev: true + /@types/import-local@3.1.0: + resolution: {integrity: sha512-D3hdmKcolSXqXAT5n9e1aM27UYmFN5RICHa/98THCEwpgcOSHVr29OMuRC/t5RIzrSKxmCJ4NPpqgOCXmBrMoQ==} + dev: true + /@types/istanbul-lib-coverage@2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} dev: true @@ -1985,6 +3129,10 @@ packages: pretty-format: 29.6.3 dev: true + /@types/js-beautify@1.14.0: + resolution: {integrity: sha512-OrJo4dEKd/8YKwGWuRP7qC/NoxNQCVsjAT7aHhgoIrNJaaDudLwX8husFrklktmXKIFbXevxzrLyEhB1842zjg==} + dev: true + /@types/json-schema@7.0.12: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true @@ -2007,13 +3155,20 @@ packages: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true + /@types/ms@0.7.31: + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: true + + /@types/mustache@4.2.2: + resolution: {integrity: sha512-MUSpfpW0yZbTgjekDbH0shMYBUD+X/uJJJMm9LXN1d5yjl5lCY1vN/eWKD6D1tOtjA6206K0zcIPnUaFMurdNA==} + dev: true + /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: false /@types/node@18.11.9: resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==} - dev: true /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -2030,6 +3185,10 @@ packages: resolution: {integrity: sha512-l18spTC0Q2OEUIHGPyw37XBOacFI4Kng1fgfFjgDTg2FR9wqJ/NY9zWyXv87NRUlFDU6JA+E/GVnNJiWgyon6A==} dev: true + /@types/prismjs@1.26.0: + resolution: {integrity: sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ==} + dev: false + /@types/prop-types@15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} @@ -2037,7 +3196,6 @@ packages: resolution: {integrity: sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==} dependencies: '@types/react': 18.0.20 - dev: true /@types/react@18.0.20: resolution: {integrity: sha512-MWul1teSPxujEHVwZl4a5HxQ9vVNsjTchVA+xRqv/VYGCuKGAU6UhfrTdF5aBefwD1BHUD8i/zq+O/vyCm/FrA==} @@ -2221,6 +3379,21 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@vitejs/plugin-react@4.0.4(vite@4.4.9): + resolution: {integrity: sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 + dependencies: + '@babel/core': 7.22.15 + '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.15) + '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.15) + react-refresh: 0.14.0 + vite: 4.4.9(@types/node@18.11.9) + transitivePeerDependencies: + - supports-color + dev: false + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -2260,7 +3433,6 @@ packages: /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} - dev: true /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} @@ -2272,7 +3444,6 @@ packages: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -2340,7 +3511,6 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -2351,7 +3521,6 @@ packages: /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -2366,6 +3535,13 @@ packages: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true + /aria-hidden@1.2.3: + resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} + engines: {node: '>=10'} + dependencies: + tslib: 2.6.2 + dev: false + /array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: @@ -2445,6 +3621,22 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false + /autoprefixer@10.4.15(postcss@8.4.29): + resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.10 + caniuse-lite: 1.0.30001525 + fraction.js: 4.3.6 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.29 + postcss-value-parser: 4.2.0 + dev: false + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -2561,6 +3753,10 @@ packages: resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==} dev: false + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: false + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -2587,7 +3783,6 @@ packages: electron-to-chromium: 1.4.508 node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) - dev: true /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} @@ -2604,7 +3799,6 @@ packages: /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true /buffer-indexof-polyfill@1.0.2: resolution: {integrity: sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==} @@ -2650,6 +3844,13 @@ packages: engines: {node: '>=6'} dev: true + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.2 + dev: false + /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} @@ -2676,7 +3877,6 @@ packages: /caniuse-lite@1.0.30001525: resolution: {integrity: sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==} - dev: true /chainsaw@0.1.0: resolution: {integrity: sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==} @@ -2709,6 +3909,30 @@ packages: engines: {node: '>=10'} dev: true + /cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + dev: false + + /cheerio@1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.1.0 + htmlparser2: 8.0.2 + parse5: 7.1.2 + parse5-htmlparser2-tree-adapter: 7.0.0 + dev: false + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -2732,6 +3956,16 @@ packages: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} dev: true + /classnames@2.3.2: + resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} + + /clean-css@5.3.2: + resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==} + engines: {node: '>= 10.0'} + dependencies: + source-map: 0.6.1 + dev: false + /clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -2778,6 +4012,11 @@ packages: engines: {node: '>=0.8'} dev: false + /clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + dev: false + /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -2819,10 +4058,13 @@ packages: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: false + /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - dev: true /commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} @@ -2866,7 +4108,6 @@ packages: /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -2874,7 +4115,6 @@ packages: /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -2884,6 +4124,21 @@ packages: shebang-command: 2.0.0 which: 2.0.2 + /css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + dev: false + + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: false + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -3002,6 +4257,10 @@ packages: engines: {node: '>=8'} dev: true + /detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + dev: false + /detect-package-manager@2.0.1: resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} engines: {node: '>=12'} @@ -3036,7 +4295,6 @@ packages: /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dev: true /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} @@ -3096,6 +4354,13 @@ packages: domelementtype: 2.3.0 domhandler: 5.0.3 + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + dev: false + /duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: @@ -3118,7 +4383,6 @@ packages: /electron-to-chromium@1.4.508: resolution: {integrity: sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==} - dev: true /emittery@0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} @@ -3211,6 +4475,18 @@ packages: is-symbol: 1.0.4 dev: true + /esbuild-plugin-copy@2.1.1(esbuild@0.19.2): + resolution: {integrity: sha512-Bk66jpevTcV8KMFzZI1P7MZKZ+uDcrZm2G2egZ2jNIvVnivDpodZI+/KnpL3Jnap0PBdIHU7HwFGB8r+vV5CVw==} + peerDependencies: + esbuild: '>= 0.14.0' + dependencies: + chalk: 4.1.2 + chokidar: 3.5.3 + esbuild: 0.19.2 + fs-extra: 10.1.0 + globby: 11.0.4 + dev: false + /esbuild@0.16.4: resolution: {integrity: sha512-qQrPMQpPTWf8jHugLWHoGqZjApyx3OEm76dlTXobHwh/EBbavbRdjXdYi/GWr43GyN0sfpap14GPkb05NH3ROA==} engines: {node: '>=12'} @@ -3269,12 +4545,40 @@ packages: '@esbuild/win32-arm64': 0.18.20 '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 - dev: true + + /esbuild@0.19.2: + resolution: {integrity: sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.19.2 + '@esbuild/android-arm64': 0.19.2 + '@esbuild/android-x64': 0.19.2 + '@esbuild/darwin-arm64': 0.19.2 + '@esbuild/darwin-x64': 0.19.2 + '@esbuild/freebsd-arm64': 0.19.2 + '@esbuild/freebsd-x64': 0.19.2 + '@esbuild/linux-arm': 0.19.2 + '@esbuild/linux-arm64': 0.19.2 + '@esbuild/linux-ia32': 0.19.2 + '@esbuild/linux-loong64': 0.19.2 + '@esbuild/linux-mips64el': 0.19.2 + '@esbuild/linux-ppc64': 0.19.2 + '@esbuild/linux-riscv64': 0.19.2 + '@esbuild/linux-s390x': 0.19.2 + '@esbuild/linux-x64': 0.19.2 + '@esbuild/netbsd-x64': 0.19.2 + '@esbuild/openbsd-x64': 0.19.2 + '@esbuild/sunos-x64': 0.19.2 + '@esbuild/win32-arm64': 0.19.2 + '@esbuild/win32-ia32': 0.19.2 + '@esbuild/win32-x64': 0.19.2 + dev: false /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - dev: true /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} @@ -3758,6 +5062,34 @@ packages: mime-types: 2.1.35 dev: false + /fraction.js@4.3.6: + resolution: {integrity: sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==} + dev: false + + /framer-motion@8.5.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-5IDx5bxkjWHWUF3CVJoSyUVOtrbAxtzYBBowRE2uYI/6VYhkEBD+rbTHEGuUmbGHRj6YqqSfoG7Aa1cLyWCrBA==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@motionone/dom': 10.16.2 + hey-listen: 1.0.8 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tslib: 2.6.2 + optionalDependencies: + '@emotion/is-prop-valid': 0.8.8 + dev: false + + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: false + /fs-extra@11.1.0: resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} engines: {node: '>=14.14'} @@ -3825,7 +5157,6 @@ packages: /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - dev: true /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} @@ -3841,6 +5172,11 @@ packages: has-symbols: 1.0.3 dev: true + /get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + dev: false + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -3879,7 +5215,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -3915,7 +5250,6 @@ packages: /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - dev: true /globals@13.21.0: resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} @@ -3931,6 +5265,18 @@ packages: define-properties: 1.2.0 dev: true + /globby@11.0.4: + resolution: {integrity: sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: false + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -3941,6 +5287,7 @@ packages: ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 + dev: true /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} @@ -4005,6 +5352,10 @@ packages: dependencies: function-bind: 1.1.1 + /hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + dev: false + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -4033,6 +5384,20 @@ packages: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true + /html-minifier-terser@7.2.0: + resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.2 + commander: 10.0.1 + entities: 4.5.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.19.4 + dev: false + /html-react-parser@4.0.0(react@18.2.0): resolution: {integrity: sha512-OzlOavs9lLyBxoRiXbXfODIX/nSShukMtdx3+WSMjon/FF1gJZRq0rBELoR5OswfbN56C0oKpAii7i3yzO/uVQ==} peerDependencies: @@ -4149,7 +5514,6 @@ packages: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - dev: true /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -4191,6 +5555,12 @@ packages: engines: {node: '>= 0.10'} dev: false + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + dev: false + /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: @@ -4482,7 +5852,7 @@ packages: - supports-color dev: true - /jest-cli@28.1.3: + /jest-cli@28.1.3(@types/node@18.11.9)(ts-node@10.9.1): resolution: {integrity: sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -4492,14 +5862,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 28.1.3 + '@jest/core': 28.1.3(ts-node@10.9.1) '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 28.1.3(@types/node@18.11.9) + jest-config: 28.1.3(@types/node@18.11.9)(ts-node@10.9.1) jest-util: 28.1.3 jest-validate: 28.1.3 prompts: 2.4.2 @@ -4510,7 +5880,7 @@ packages: - ts-node dev: true - /jest-config@28.1.3(@types/node@18.11.9): + /jest-config@28.1.3(@types/node@18.11.9)(ts-node@10.9.1): resolution: {integrity: sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} peerDependencies: @@ -4545,6 +5915,7 @@ packages: pretty-format: 28.1.3 slash: 3.0.0 strip-json-comments: 3.1.1 + ts-node: 10.9.1(@swc/core@1.3.82)(@types/node@18.11.9)(typescript@5.1.6) transitivePeerDependencies: - supports-color dev: true @@ -4885,7 +6256,7 @@ packages: supports-color: 8.1.1 dev: true - /jest@28.1.3: + /jest@28.1.3(@types/node@18.11.9)(ts-node@10.9.1): resolution: {integrity: sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -4895,16 +6266,21 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 28.1.3 + '@jest/core': 28.1.3(ts-node@10.9.1) '@jest/types': 28.1.3 import-local: 3.1.0 - jest-cli: 28.1.3 + jest-cli: 28.1.3(@types/node@18.11.9)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true + /jiti@1.20.0: + resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} + hasBin: true + dev: false + /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: false @@ -4987,7 +6363,6 @@ packages: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true - dev: true /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -5019,7 +6394,6 @@ packages: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - dev: true /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -5186,7 +6560,6 @@ packages: /loglevelnext@5.0.6: resolution: {integrity: sha512-GKtlPs++zQjG1DK88bpEDxP/6PlmKi5okl3T4MNq+S6bQYYWKbHKJ/kap2wwQi/24t4WfGwRnYab/8AGT4LGsg==} engines: {node: '>= 12.22.1'} - dev: true /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} @@ -5194,11 +6567,16 @@ packages: dependencies: js-tokens: 4.0.0 + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.6.2 + dev: false + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 - dev: true /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} @@ -5223,7 +6601,6 @@ packages: /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true /makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} @@ -5360,19 +6737,22 @@ packages: /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + /mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + dev: false + /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: true /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: false /natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} @@ -5382,6 +6762,13 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.6.2 + dev: false + /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -5400,7 +6787,6 @@ packages: /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - dev: true /nopt@6.0.0: resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} @@ -5431,6 +6817,11 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: false + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -5444,6 +6835,12 @@ packages: path-key: 4.0.0 dev: true + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: false + /nwsapi@2.2.7: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} dev: false @@ -5451,7 +6848,6 @@ packages: /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - dev: true /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} @@ -5552,7 +6948,6 @@ packages: /p-defer@3.0.0: resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==} engines: {node: '>=8'} - dev: true /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} @@ -5591,6 +6986,13 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + /param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + dev: false + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -5607,6 +7009,13 @@ packages: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + /parse5-htmlparser2-tree-adapter@7.0.0: + resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + dependencies: + domhandler: 5.0.3 + parse5: 7.1.2 + dev: false + /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: @@ -5626,6 +7035,13 @@ packages: peberminta: 0.9.0 dev: false + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + dev: false + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -5682,14 +7098,12 @@ packages: /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - dev: true /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 - dev: true /postcss-css-variables@0.18.0(postcss@8.4.21): resolution: {integrity: sha512-lYS802gHbzn1GI+lXvy9MYIYDuGnl1WB4FTKoqMQqJ3Mab09A7a/1wZvGTkCEZJTM8mSbIyb1mJYn8f0aPye0Q==} @@ -5714,6 +7128,18 @@ packages: resolve: 1.22.4 dev: false + /postcss-import@15.1.0(postcss@8.4.29): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.29 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.4 + dev: false + /postcss-js@4.0.1(postcss@8.4.21): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} @@ -5724,7 +7150,17 @@ packages: postcss: 8.4.21 dev: false - /postcss-load-config@3.1.4(postcss@8.4.21): + /postcss-js@4.0.1(postcss@8.4.29): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.29 + dev: false + + /postcss-load-config@3.1.4(postcss@8.4.21)(ts-node@10.9.1): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -5738,10 +7174,11 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.21 + ts-node: 10.9.1(@swc/core@1.3.82)(@types/node@18.11.9)(typescript@5.1.6) yaml: 1.10.2 dev: false - /postcss-load-config@4.0.1: + /postcss-load-config@4.0.1(postcss@8.4.29)(ts-node@10.9.1): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} peerDependencies: @@ -5754,8 +7191,9 @@ packages: optional: true dependencies: lilconfig: 2.1.0 + postcss: 8.4.29 + ts-node: 10.9.1(@swc/core@1.3.82)(@types/node@18.11.9)(typescript@5.1.6) yaml: 2.3.2 - dev: true /postcss-nested@6.0.0(postcss@8.4.21): resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} @@ -5767,6 +7205,16 @@ packages: postcss-selector-parser: 6.0.13 dev: false + /postcss-nested@6.0.1(postcss@8.4.29): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.29 + postcss-selector-parser: 6.0.13 + dev: false + /postcss-selector-parser@6.0.13: resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} engines: {node: '>=4'} @@ -5788,6 +7236,14 @@ packages: source-map-js: 1.0.2 dev: false + /postcss@8.4.29: + resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -5853,6 +7309,16 @@ packages: extend-shallow: 2.0.1 js-beautify: 1.14.9 + /prism-react-renderer@2.0.6(react@18.2.0): + resolution: {integrity: sha512-ERzmAI5UvrcTw5ivfEG20/dYClAsC84eSED5p9X3oKpm0xPV4A5clFK1mp7lPIdKmbLnQYsPTGiOI7WS6gWigw==} + peerDependencies: + react: '>=16.0.0' + dependencies: + '@types/prismjs': 1.26.0 + clsx: 1.2.1 + react: 18.2.0 + dev: false + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: false @@ -5935,6 +7401,86 @@ packages: resolution: {integrity: sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==} dev: false + /react-refresh@0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + dev: false + + /react-remove-scroll-bar@2.3.4(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.20 + react: 18.2.0 + react-style-singleton: 2.2.1(@types/react@18.0.20)(react@18.2.0) + tslib: 2.6.2 + dev: false + + /react-remove-scroll@2.5.5(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.20 + react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.0.20)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.0.20)(react@18.2.0) + tslib: 2.6.2 + use-callback-ref: 1.3.0(@types/react@18.0.20)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.0.20)(react@18.2.0) + dev: false + + /react-router-dom@6.15.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-aR42t0fs7brintwBGAv2+mGlCtgtFQeOzK0BM1/OiqEzRejOZtpMZepvgkscpMUnKb8YO84G7s3LsHnnDNonbQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + dependencies: + '@remix-run/router': 1.8.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-router: 6.15.0(react@18.2.0) + dev: false + + /react-router@6.15.0(react@18.2.0): + resolution: {integrity: sha512-NIytlzvzLwJkCQj2HLefmeakxxWHWAP+02EGqWEZy+DgfHHKQMUoBBjUQLOtFInBMhWtb3hiUy6MfFgwLjXhqg==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + dependencies: + '@remix-run/router': 1.8.0 + react: 18.2.0 + dev: false + + /react-style-singleton@2.2.1(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.20 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.2.0 + tslib: 2.6.2 + dev: false + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -6034,6 +7580,11 @@ packages: engines: {node: '>=8'} dev: true + /relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + dev: false + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -6048,7 +7599,6 @@ packages: engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 - dev: true /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} @@ -6058,7 +7608,6 @@ packages: /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - dev: true /resolve.exports@1.1.1: resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} @@ -6108,7 +7657,6 @@ packages: hasBin: true optionalDependencies: fsevents: 2.3.3 - dev: true /rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} @@ -6184,7 +7732,6 @@ packages: /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - dev: true /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} @@ -6272,7 +7819,6 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: false /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} @@ -6286,12 +7832,10 @@ packages: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - dev: true /source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} @@ -6468,7 +8012,11 @@ packages: mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 - dev: true + + /superstruct@1.0.3: + resolution: {integrity: sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==} + engines: {node: '>=14.0.0'} + dev: false /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -6505,7 +8053,7 @@ packages: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: false - /tailwindcss@3.2.7(postcss@8.4.21): + /tailwindcss@3.2.7(postcss@8.4.21)(ts-node@10.9.1): resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} engines: {node: '>=12.13.0'} hasBin: true @@ -6529,7 +8077,7 @@ packages: postcss: 8.4.21 postcss-import: 14.1.0(postcss@8.4.21) postcss-js: 4.0.1(postcss@8.4.21) - postcss-load-config: 3.1.4(postcss@8.4.21) + postcss-load-config: 3.1.4(postcss@8.4.21)(ts-node@10.9.1) postcss-nested: 6.0.0(postcss@8.4.21) postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 @@ -6539,6 +8087,37 @@ packages: - ts-node dev: false + /tailwindcss@3.3.3(ts-node@10.9.1): + resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.1 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.20.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.29 + postcss-import: 15.1.0(postcss@8.4.29) + postcss-js: 4.0.1(postcss@8.4.29) + postcss-load-config: 4.0.1(postcss@8.4.29)(ts-node@10.9.1) + postcss-nested: 6.0.1(postcss@8.4.29) + postcss-selector-parser: 6.0.13 + resolve: 1.22.4 + sucrase: 3.34.0 + transitivePeerDependencies: + - ts-node + dev: false + /terminal-link@2.1.1: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} @@ -6547,6 +8126,17 @@ packages: supports-hyperlinks: 2.3.0 dev: true + /terser@5.19.4: + resolution: {integrity: sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.5 + acorn: 8.10.0 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: false + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -6570,13 +8160,11 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 - dev: true /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 - dev: true /through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} @@ -6588,6 +8176,11 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true + /titleize@4.0.0: + resolution: {integrity: sha512-ZgUJ1K83rhdu7uh7EHAC2BgY5DzoX8V5rTvoWI4vFysggi6YjLe5gUXABPWAU7VkvGP7P/0YiWq+dcPeYDsf1g==} + engines: {node: '>=18'} + dev: false + /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true @@ -6595,7 +8188,6 @@ packages: /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - dev: true /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -6655,7 +8247,6 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true /ts-jest@28.0.8(@babel/core@7.21.8)(babel-jest@28.1.3)(esbuild@0.18.20)(jest@28.1.3)(typescript@5.1.6): resolution: {integrity: sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg==} @@ -6683,7 +8274,7 @@ packages: bs-logger: 0.2.6 esbuild: 0.18.20 fast-json-stable-stringify: 2.1.0 - jest: 28.1.3 + jest: 28.1.3(@types/node@18.11.9)(ts-node@10.9.1) jest-util: 28.1.3 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -6693,7 +8284,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-node@10.9.1(@types/node@18.11.9)(typescript@5.1.6): + /ts-node@10.9.1(@swc/core@1.3.82)(@types/node@18.11.9)(typescript@5.1.6): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -6708,6 +8299,7 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 + '@swc/core': 1.3.82(@swc/helpers@0.5.1) '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 @@ -6722,7 +8314,6 @@ packages: typescript: 5.1.6 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: true /tsconfig-paths@3.14.2: resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} @@ -6739,9 +8330,8 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true - /tsup@7.1.0(typescript@5.1.6): + /tsup@7.1.0(@swc/core@1.3.82)(ts-node@10.9.1)(typescript@5.1.6): resolution: {integrity: sha512-mazl/GRAk70j8S43/AbSYXGgvRP54oQeX8Un4iZxzATHt0roW0t6HYDVZIXMw0ZQIpvr1nFMniIVnN5186lW7w==} engines: {node: '>=16.14'} hasBin: true @@ -6757,6 +8347,7 @@ packages: typescript: optional: true dependencies: + '@swc/core': 1.3.82(@swc/helpers@0.5.1) bundle-require: 4.0.1(esbuild@0.18.20) cac: 6.7.14 chokidar: 3.5.3 @@ -6765,7 +8356,7 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.1 + postcss-load-config: 4.0.1(postcss@8.4.29)(ts-node@10.9.1) resolve-from: 5.0.0 rollup: 3.28.1 source-map: 0.8.0-beta.0 @@ -6787,13 +8378,13 @@ packages: typescript: 5.1.6 dev: true - /tw-to-css@0.0.11: + /tw-to-css@0.0.11(ts-node@10.9.1): resolution: {integrity: sha512-uIJuEBIwyHzZg9xyGyEgDWHIkbAwEC4bhEHQ4THPuN5SToR7Zlhes5ffMjqtrv+WdtTmudTHTdc9VwUldy0FxQ==} engines: {node: '>=16.0.0'} dependencies: postcss: 8.4.21 postcss-css-variables: 0.18.0(postcss@8.4.21) - tailwindcss: 3.2.7(postcss@8.4.21) + tailwindcss: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) transitivePeerDependencies: - ts-node dev: false @@ -6881,7 +8472,6 @@ packages: resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} engines: {node: '>=14.17'} hasBin: true - dev: true /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -6935,7 +8525,6 @@ packages: browserslist: 4.21.10 escalade: 3.1.1 picocolors: 1.0.0 - dev: true /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -6950,12 +8539,42 @@ packages: requires-port: 1.0.0 dev: false + /use-callback-ref@1.3.0(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.20 + react: 18.2.0 + tslib: 2.6.2 + dev: false + + /use-sidecar@1.1.2(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.20 + detect-node-es: 1.1.0 + react: 18.2.0 + tslib: 2.6.2 + dev: false + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true /v8-to-istanbul@9.1.0: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} @@ -6972,6 +8591,42 @@ packages: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 + /vite@4.4.9(@types/node@18.11.9): + resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 18.11.9 + esbuild: 0.18.20 + postcss: 8.4.29 + rollup: 3.28.1 + optionalDependencies: + fsevents: 2.3.3 + dev: false + /w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} @@ -7159,7 +8814,6 @@ packages: /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -7172,7 +8826,6 @@ packages: /yaml@2.3.2: resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} engines: {node: '>= 14'} - dev: true /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} @@ -7200,7 +8853,6 @@ packages: /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} - dev: true /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} diff --git a/shared/tsconfig.base.json b/shared/tsconfig.base.json index 91b3dcc8..d18d8668 100644 --- a/shared/tsconfig.base.json +++ b/shared/tsconfig.base.json @@ -8,17 +8,20 @@ "forceConsistentCasingInFileNames": true, "inlineSources": false, "isolatedModules": true, + "jsx": "react-jsx", + "lib": ["ES2023"], + "module": "commonjs", "moduleResolution": "node", - "noUnusedLocals": false, - "noUnusedParameters": false, + "noEmitOnError": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "preserveSymlinks": true, "preserveWatchOutput": true, "resolveJsonModule": true, "skipLibCheck": true, "strict": true, - "jsx": "react-jsx", - "lib": ["ES2015"], - "module": "ESNext", - "target": "es6" + "strictNullChecks": true, + "target": "es2020" }, - "exclude": ["dist", "node_modules", "**/*.spec.tsx"] + "exclude": ["dist", "node_modules", "**/*.spec.tsx", "packages/cli/src/preview"] } diff --git a/shared/tsconfig.eslint.json b/shared/tsconfig.eslint.json index 1e8184d8..014daad9 100644 --- a/shared/tsconfig.eslint.json +++ b/shared/tsconfig.eslint.json @@ -4,8 +4,8 @@ }, "extends": "./tsconfig.base.json", "include": [ - "../.eslintrc.js", - "../ava.config.js", + "../**/.eslintrc.js", + "../**/ava.config.js", "../deprecated/react-email", "../packages", "../shared" - +
![]()
- Thanks for submitting your account information. You're now ready to - make live transactions with Stripe! + HooooThanks for submitting your account information. You're now ready to make live + transactions with Stripe! - You can view your payments and a variety of other information about - your account right from your dashboard. + You can view your payments and a variety of other information about your account right + from your dashboard. -