diff --git a/.gitignore b/.gitignore index e9cabfb15..40ee65be2 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,6 @@ build dist .turbo .env -apps/design-system/src/styles/tailwind.output.css \ No newline at end of file +apps/design-system/src/styles/tailwind.output.css +# Local Netlify folder for testing purposes +.netlify diff --git a/apps/studio-next/netlify.toml b/apps/studio-next/netlify.toml new file mode 100644 index 000000000..44143e1a6 --- /dev/null +++ b/apps/studio-next/netlify.toml @@ -0,0 +1,6 @@ +[devs] + functions = "apps/studio-next/src/netlify/functions" + targetPort = 3001 + +[build] + functions = "apps/studio-next/src/netlify/functions" \ No newline at end of file diff --git a/apps/studio-next/package.json b/apps/studio-next/package.json index c37d7bd0f..b3381f274 100644 --- a/apps/studio-next/package.json +++ b/apps/studio-next/package.json @@ -7,6 +7,7 @@ "build": "next build", "start": "next start", "lint": "next lint", + "lint:fix": "next lint --fix", "cy:e2e:chrome": "cypress run --e2e --browser chrome", "cy:e2e:chromium": "cypress run --e2e --browser chromium", "cy:e2e:edge": "cypress run --e2e --browser edge", @@ -22,29 +23,32 @@ "@asyncapi/protobuf-schema-parser": "^3.2.8", "@asyncapi/react-component": "^1.2.2", "@asyncapi/specs": "^6.5.4", + "@codemirror/view": "^6.26.3", "@ebay/nice-modal-react": "^1.2.10", "@headlessui/react": "^1.7.4", "@hookstate/core": "^4.0.0-rc21", "@monaco-editor/react": "^4.4.6", - "@tippyjs/react": "^4.2.6", - "js-base64": "^3.7.3", - "js-file-download": "^0.4.12", - "js-yaml": "^4.1.0", - "monaco-editor": "0.34.1", - "monaco-yaml": "4.0.2", - "react-hot-toast": "2.4.0", - "react-icons": "^4.6.0", - "reactflow": "^11.2.0", + "@netlify/blobs": "^8.0.1", + "@netlify/functions": "^2.8.1", "@stoplight/yaml": "^4.3.0", + "@tippyjs/react": "^4.2.6", "@types/node": "20.4.6", "@types/react": "18.2.18", "@types/react-dom": "18.2.7", "autoprefixer": "10.4.14", "eslint-config-next": "13.4.12", + "js-base64": "^3.7.3", + "js-file-download": "^0.4.12", + "js-yaml": "^4.1.0", + "monaco-editor": "0.34.1", + "monaco-yaml": "4.0.2", "next": "14.2.3", "postcss": "8.4.31", "react": "18.2.0", "react-dom": "18.2.0", + "react-hot-toast": "2.4.0", + "react-icons": "^4.6.0", + "reactflow": "^11.2.0", "tailwindcss": "3.3.3", "tippy.js": "^6.3.7", "typescript": "5.1.6", diff --git a/apps/studio-next/src/components/Editor/EditorDropdown.tsx b/apps/studio-next/src/components/Editor/EditorDropdown.tsx index 51b0a1a5d..cc3506984 100644 --- a/apps/studio-next/src/components/Editor/EditorDropdown.tsx +++ b/apps/studio-next/src/components/Editor/EditorDropdown.tsx @@ -8,6 +8,7 @@ import { ImportBase64Modal, GeneratorModal, ConvertModal, + ImportUUIDModal, } from '../Modals'; import { Dropdown } from '../common'; @@ -34,6 +35,17 @@ export const EditorDropdown: React.FunctionComponent<EditorDropdownProps> = () = </button> ); + const importShareIdButton = ( + <button + type="button" + className="px-4 py-1 w-full text-left text-sm rounded-md focus:outline-none transition ease-in-out duration-150" + title="Import from UUID" + onClick={() => show(ImportUUIDModal)} + > + Import from UUID + </button> + ); + const importFileButton = ( <label className="block px-4 py-1 w-full text-left text-sm rounded-md focus:outline-none transition ease-in-out duration-150 cursor-pointer" @@ -208,6 +220,31 @@ export const EditorDropdown: React.FunctionComponent<EditorDropdownProps> = () = </button> ); + const shareButtonBase64 = ( + <button + type="button" + className="px-4 py-1 w-full text-left text-sm rounded-md focus:outline-none transition ease-in-out duration-150 disabled:cursor-not-allowed" + title='Share as Base64' + onClick={() => { + toast.promise( + (async function () { + const base64 = await editorSvc.exportAsBase64(); + const url = `${window.location.origin}/?base64=${encodeURIComponent( + base64 + )}`; + await navigator.clipboard.writeText(url); + }()), + { + loading: 'Copying URL to clipboard...', + success: 'URL copied to clipboard!', + error: 'Failed to copy URL to clipboard.', + } + ); + }}> + Share as Base64 + </button> + ); + return ( <Dropdown opener={<FaEllipsisH />} @@ -224,12 +261,20 @@ export const EditorDropdown: React.FunctionComponent<EditorDropdownProps> = () = <li className="hover:bg-gray-900"> {importBase64Button} </li> + <li className="hover:bg-gray-900"> + {importShareIdButton} + </li> </div> <div className="border-b border-gray-700"> <li className="hover:bg-gray-900"> {generateButton} </li> </div> + <div className="border-b border-gray-700"> + <li className="hover:bg-gray-900"> + {shareButtonBase64} + </li> + </div> <div className="border-b border-gray-700"> <li className="hover:bg-gray-900"> {saveFileButton} diff --git a/apps/studio-next/src/components/Editor/EditorSidebar.tsx b/apps/studio-next/src/components/Editor/EditorSidebar.tsx index c8e304796..da61dbc81 100644 --- a/apps/studio-next/src/components/Editor/EditorSidebar.tsx +++ b/apps/studio-next/src/components/Editor/EditorSidebar.tsx @@ -17,6 +17,8 @@ export const EditorSidebar: React.FunctionComponent< documentFromText = 'From localStorage'; } else if (from === 'base64') { documentFromText = 'From Base64'; + } else if (from === 'share') { + documentFromText = 'From Shared'; } else { documentFromText = `From URL ${source}`; } diff --git a/apps/studio-next/src/components/Editor/ShareButton.tsx b/apps/studio-next/src/components/Editor/ShareButton.tsx index 27d59c2f4..0b3ab7000 100644 --- a/apps/studio-next/src/components/Editor/ShareButton.tsx +++ b/apps/studio-next/src/components/Editor/ShareButton.tsx @@ -12,16 +12,13 @@ export const ShareButton: React.FunctionComponent<ShareButtonProps> = () => { const handleShare = () => { toast.promise( (async function () { - const base64 = await editorSvc.exportAsBase64(); - const url = `${window.location.origin}/?base64=${encodeURIComponent( - base64 - )}`; + const url = await editorSvc.exportAsURL(); await navigator.clipboard.writeText(url); }()), { loading: 'Copying URL to clipboard...', success: 'URL copied to clipboard!', - error: 'Failed to copy URL to clipboard.', + error: 'Failed to share the AsyncAPI document.', } ); }; diff --git a/apps/studio-next/src/components/Modals/ImportUUIDModal.tsx b/apps/studio-next/src/components/Modals/ImportUUIDModal.tsx new file mode 100644 index 000000000..3713692cd --- /dev/null +++ b/apps/studio-next/src/components/Modals/ImportUUIDModal.tsx @@ -0,0 +1,57 @@ +import { useState } from 'react'; +import toast from 'react-hot-toast'; +import { create } from '@ebay/nice-modal-react'; + +import { ConfirmModal } from './index'; + +import { useServices } from '../../services'; + +export const ImportUUIDModal = create(() => { + const [shareID, setShareID] = useState(''); + const { editorSvc } = useServices(); + + const onSubmit = () => { + toast.promise(editorSvc.importFromShareID(shareID), { + loading: 'Importing...', + success: ( + <div> + <span className="block text-bold"> + Document succesfully imported! + </span> + </div> + ), + error: ( + <div> + <span className="block text-bold text-red-400"> + Failed to import document. + </span> + </div> + ), + }); + }; + + return ( + <ConfirmModal + title="Import AsyncAPI document from Shared UUID" + confirmText="Import" + confirmDisabled={!shareID} + onSubmit={onSubmit} + > + <div className="flex content-center justify-center"> + <label + htmlFor="url" + className="flex justify-right items-center content-center text-sm font-medium text-gray-700 hidden" + > + Shared UUID + </label> + <input + type="url" + name="url" + placeholder="Paste UUID here" + className="shadow-sm focus:ring-pink-500 focus:border-pink-500 block w-full sm:text-sm border-gray-300 rounded-md py-2 px-3 text-gray-700 border-pink-300 border-2" + onChange={e => setShareID(e.target.value)} + /> + </div> + </ConfirmModal> + ); +}); diff --git a/apps/studio-next/src/components/Modals/index.tsx b/apps/studio-next/src/components/Modals/index.tsx index b89162281..06cedfbcb 100644 --- a/apps/studio-next/src/components/Modals/index.tsx +++ b/apps/studio-next/src/components/Modals/index.tsx @@ -6,6 +6,7 @@ export * from './ConvertModal'; export * from './ConvertToLatestModal'; export * from './ImportBase64Modal'; export * from './ImportURLModal'; +export * from './ImportUUIDModal'; export * from './NewFileModal'; export * from './RedirectedModal'; export * from './ConfirmNewFileModal'; \ No newline at end of file diff --git a/apps/studio-next/src/netlify/functions/share-retreive.ts b/apps/studio-next/src/netlify/functions/share-retreive.ts new file mode 100644 index 000000000..5cc87135b --- /dev/null +++ b/apps/studio-next/src/netlify/functions/share-retreive.ts @@ -0,0 +1,27 @@ +import { getStore } from '@netlify/blobs'; +import type { Config, Context } from '@netlify/functions'; + +export default async (req: Request, context: Context) => { + const share = getStore('share'); + const { shareId } = context.params; + + if (!shareId) { + return new Response('Not found', { status: 404 }); + } + + const shareData = await share.get(shareId); + + if (!shareData) { + return new Response('Not found', { status: 404 }); + } + + return new Response(shareData, { + headers: { + 'content-type': 'application/json', + }, + }); +} + +export const config: Config = { + path: '/share/:shareId', +}; \ No newline at end of file diff --git a/apps/studio-next/src/netlify/functions/share-store.ts b/apps/studio-next/src/netlify/functions/share-store.ts new file mode 100644 index 000000000..9baf43280 --- /dev/null +++ b/apps/studio-next/src/netlify/functions/share-store.ts @@ -0,0 +1,26 @@ +import { getStore } from '@netlify/blobs'; +import type { Config, Context } from '@netlify/functions'; +import { randomUUID } from 'crypto'; + +export default async (req: Request, context: Context) => { + const share = getStore('share'); + const shareId = randomUUID(); + + const state = await req.json(); + + await share.set(shareId, JSON.stringify({ + URL: `${context.site.url }?share=${ shareId}`, + ...state, + created: Date.now(), + })) + + return new Response(shareId, { + headers: { + 'content-type': 'text/plain', + }, + }); +}; + +export const config: Config = { + path: '/share', +} \ No newline at end of file diff --git a/apps/studio-next/src/services/app.service.ts b/apps/studio-next/src/services/app.service.ts index d315c7450..a9abb7640 100644 --- a/apps/studio-next/src/services/app.service.ts +++ b/apps/studio-next/src/services/app.service.ts @@ -11,14 +11,14 @@ export class ApplicationService extends AbstractService { // subscribe to state to hide preloader this.hidePreloader(); - const { readOnly, url, base64 } = + const { readOnly, url, base64, share } = this.svcs.navigationSvc.getUrlParameters(); - // readOnly state should be only set to true when someone pass also url or base64 parameter - const isStrictReadonly = Boolean(readOnly && (url || base64)); + // readOnly state should be only set to true when someone pass also url or base64 or share parameter + const isStrictReadonly = Boolean(readOnly && (url || base64 || share)); let error: any; try { - await this.fetchResource(url, base64); + await this.fetchResource(url, base64, share); } catch (err) { error = err; console.error(err); @@ -37,9 +37,9 @@ export class ApplicationService extends AbstractService { } public async afterAppInit() { - const { readOnly, url, base64, redirectedFrom } = + const { readOnly, url, base64, share, redirectedFrom } = this.svcs.navigationSvc.getUrlParameters(); - const isStrictReadonly = Boolean(readOnly && (url || base64)); + const isStrictReadonly = Boolean(readOnly && (url || base64 || share)); // show RedirectedModal modal if the redirectedFrom is set (only when readOnly state is set to false) if (!isStrictReadonly && redirectedFrom) { @@ -47,8 +47,8 @@ export class ApplicationService extends AbstractService { } } - private async fetchResource(url: string | null, base64: string | null) { - if (!url && !base64) { + private async fetchResource(url: string | null, base64: string | null, share: string | null) { + if (!url && !base64 && !share) { return; } @@ -58,15 +58,27 @@ export class ApplicationService extends AbstractService { content = await fetch(url).then((res) => res.text()); } else if (base64) { content = this.svcs.formatSvc.decodeBase64(base64); + } else if (share) { + const response = await fetch(`/share/${share}`); + const data = await response.json(); + content = data.content; } const language = this.svcs.formatSvc.retrieveLangauge(content); const source = url || undefined; + let from = 'url'; + + if (base64) { + from = 'base64'; + } else if (share) { + from = 'share'; + } + updateFile('asyncapi', { content, language, source, - from: url ? 'url' : 'base64', + from: from as 'url' | 'base64' | 'share', }); await this.svcs.parserSvc.parse('asyncapi', content, { source }); } diff --git a/apps/studio-next/src/services/editor.service.tsx b/apps/studio-next/src/services/editor.service.tsx index fc3c01970..21b0c9309 100644 --- a/apps/studio-next/src/services/editor.service.tsx +++ b/apps/studio-next/src/services/editor.service.tsx @@ -166,6 +166,45 @@ export class EditorService extends AbstractService { } } + async importFromShareID(shareID: string) { + try { + const response = await fetch(`/share/${shareID}`); + if (!response.ok) { + throw new Error('Failed to fetch shared document'); + } + + const data = await response.json(); + this.updateState({ + content: data.content, + updateModel: true, + file: { + from: 'share', + source: undefined, + }, + }); + } catch (err) { + console.error(err); + throw err; + } + } + + async exportAsURL() { + try { + const file = filesState.getState().files['asyncapi']; + const shareID = await fetch('/share', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ content: file.content }), + }).then(res => res.text()); + return `${window.location.origin}/?share=${shareID}`; + } catch (err) { + console.error(err); + throw err; + } + } + async exportAsBase64() { try { const file = filesState.getState().files['asyncapi']; diff --git a/apps/studio-next/src/services/navigation.service.ts b/apps/studio-next/src/services/navigation.service.ts index b0180e935..11e2e23cf 100644 --- a/apps/studio-next/src/services/navigation.service.ts +++ b/apps/studio-next/src/services/navigation.service.ts @@ -17,6 +17,7 @@ export class NavigationService extends AbstractService { return { url: urlParams.get('url') || urlParams.get('load'), base64: urlParams.get('base64'), + share: urlParams.get('share'), readOnly: urlParams.get('readOnly') === 'true' || urlParams.get('readOnly') === '', liveServer: urlParams.get('liveServer'), redirectedFrom: urlParams.get('redirectedFrom'), diff --git a/apps/studio-next/src/state/files.state.ts b/apps/studio-next/src/state/files.state.ts index 42077f4e9..2ccd359e3 100644 --- a/apps/studio-next/src/state/files.state.ts +++ b/apps/studio-next/src/state/files.state.ts @@ -218,7 +218,7 @@ export type File = { uri: string; name: string; content: string; - from: 'storage' | 'url' | 'base64'; + from: 'storage' | 'url' | 'base64' | 'share'; source?: string; language: 'json' | 'yaml'; modified: boolean; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 22f177983..2c53e859a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,7 +105,7 @@ importers: version: 7.6.20(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/preset-create-react-app': specifier: ^7.6.18 - version: 7.6.20(@babel/core@7.25.2)(react-refresh@0.14.2)(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/babel__core@7.20.5)(esbuild@0.18.20)(eslint@8.57.1)(react@18.2.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6))(type-fest@2.19.0)(typescript@5.1.6)(webpack-hot-middleware@2.26.1))(type-fest@2.19.0)(typescript@5.1.6)(webpack-dev-server@4.15.2(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)) + version: 7.6.20(@babel/core@7.25.2)(react-refresh@0.14.2)(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/babel__core@7.20.5)(esbuild@0.18.20)(eslint@8.57.1)(react@18.2.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6))(type-fest@2.19.0)(typescript@5.1.6)(webpack-hot-middleware@2.26.1))(type-fest@2.19.0)(typescript@5.1.6)(webpack-dev-server@4.15.2(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)) '@storybook/react': specifier: ^7.6.18 version: 7.6.20(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.1.6) @@ -153,7 +153,7 @@ importers: version: link:../../packages/tailwind-config tailwindcss: specifier: ^3.4.3 - version: 3.4.12(ts-node@10.9.2(typescript@5.1.6)) + version: 3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)) ts-loader: specifier: ^9.4.3 version: 9.5.1(typescript@5.1.6)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)) @@ -416,6 +416,9 @@ importers: '@asyncapi/specs': specifier: ^6.5.4 version: 6.8.0 + '@codemirror/view': + specifier: ^6.26.3 + version: 6.33.0 '@ebay/nice-modal-react': specifier: ^1.2.10 version: 1.2.13(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -428,6 +431,12 @@ importers: '@monaco-editor/react': specifier: ^4.4.6 version: 4.6.0(monaco-editor@0.34.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@netlify/blobs': + specifier: ^8.0.1 + version: 8.0.1 + '@netlify/functions': + specifier: ^2.8.1 + version: 2.8.1 '@stoplight/yaml': specifier: ^4.3.0 version: 4.3.0 @@ -466,7 +475,7 @@ importers: version: 4.0.2(monaco-editor@0.34.1) next: specifier: 14.2.3 - version: 14.2.3(@babel/core@7.25.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 14.2.3(@babel/core@7.12.9)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) postcss: specifier: 8.4.31 version: 8.4.31 @@ -630,7 +639,7 @@ importers: devDependencies: tailwindcss: specifier: ^3.2.4 - version: 3.4.12(ts-node@10.9.2(typescript@5.1.6)) + version: 3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)) packages/tsconfig: {} @@ -699,7 +708,7 @@ importers: version: link:../tsconfig tsup: specifier: ^8.0.2 - version: 8.3.0(@swc/core@1.7.26)(jiti@1.21.6)(postcss@8.4.31)(typescript@4.9.5)(yaml@2.5.1) + version: 8.3.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(jiti@1.21.6)(postcss@8.4.31)(typescript@4.9.5)(yaml@2.5.1) typescript: specifier: ^4.9.4 version: 4.9.5 @@ -715,7 +724,7 @@ importers: devDependencies: tsup: specifier: ^8.0.2 - version: 8.3.0(@swc/core@1.7.26)(jiti@1.21.6)(postcss@8.4.47)(typescript@5.1.6)(yaml@2.5.1) + version: 8.3.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(jiti@1.21.6)(postcss@8.4.31)(typescript@4.9.5)(yaml@2.5.1) packages: @@ -1655,6 +1664,12 @@ packages: '@changesets/write@0.3.2': resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} + '@codemirror/state@6.4.1': + resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==} + + '@codemirror/view@6.33.0': + resolution: {integrity: sha512-AroaR3BvnjRW8fiZBalAaK+ZzB5usGgI014YKElYZvQdNH5ZIidHlO+cyf/2rWzyBFRkvG6VhiXeAEbC53P2YQ==} + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -2327,6 +2342,22 @@ packages: '@ndelangen/get-tarball@3.0.9': resolution: {integrity: sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==} + '@netlify/blobs@8.0.1': + resolution: {integrity: sha512-IrZHVqillU0x12eDbsap4Ba6poi+4IdVCYjZa+tA0eD95TaSbSqfw1zNkO27MiKw0pOjPB6+RXFK4pdfOs/qUQ==} + engines: {node: ^14.16.0 || >=16.0.0} + + '@netlify/functions@2.8.1': + resolution: {integrity: sha512-+6wtYdoz0yE06dSa9XkP47tw5zm6g13QMeCwM3MmHx1vn8hzwFa51JtmfraprdkL7amvb7gaNM+OOhQU1h6T8A==} + engines: {node: '>=14.0.0'} + + '@netlify/node-cookies@0.1.0': + resolution: {integrity: sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==} + engines: {node: ^14.16.0 || >=16.0.0} + + '@netlify/serverless-functions-api@1.19.1': + resolution: {integrity: sha512-2KYkyluThg1AKfd0JWI7FzpS4A/fzVVGYIf6AM4ydWyNj8eI/86GQVLeRgDoH7CNOxt243R5tutWlmHpVq0/Ew==} + engines: {node: '>=18.0.0'} + '@next/env@14.2.3': resolution: {integrity: sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==} @@ -9096,7 +9127,6 @@ packages: engines: {node: '>=0.6.0', teleport: '>=0.2.0'} deprecated: |- You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. - (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) qs@6.13.0: @@ -9951,6 +9981,9 @@ packages: peerDependencies: webpack: ^5.0.0 + style-mod@4.1.2: + resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} + styled-jsx@5.1.1: resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} @@ -10541,6 +10574,9 @@ packages: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} + urlpattern-polyfill@8.0.2: + resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} + use-callback-ref@1.3.2: resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} engines: {node: '>=10'} @@ -10648,6 +10684,9 @@ packages: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} deprecated: Use your platform's native performance.now() and performance.timeOrigin. + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + w3c-xmlserializer@2.0.0: resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} engines: {node: '>=10'} @@ -13270,6 +13309,14 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 + '@codemirror/state@6.4.1': {} + + '@codemirror/view@6.33.0': + dependencies: + '@codemirror/state': 6.4.1 + style-mod: 4.1.2 + w3c-keyname: 2.2.8 + '@colors/colors@1.5.0': optional: true @@ -13747,7 +13794,7 @@ snapshots: - ts-node - utf-8-validate - '@jest/core@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6))': + '@jest/core@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6))': dependencies: '@jest/console': 27.5.1 '@jest/reporters': 27.5.1 @@ -13761,7 +13808,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 27.5.1 - jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)) + jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)) jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-regex-util: 27.5.1 @@ -14032,6 +14079,19 @@ snapshots: pump: 3.0.2 tar-fs: 2.1.1 + '@netlify/blobs@8.0.1': {} + + '@netlify/functions@2.8.1': + dependencies: + '@netlify/serverless-functions-api': 1.19.1 + + '@netlify/node-cookies@0.1.0': {} + + '@netlify/serverless-functions-api@1.19.1': + dependencies: + '@netlify/node-cookies': 0.1.0 + urlpattern-polyfill: 8.0.2 + '@next/env@14.2.3': {} '@next/eslint-plugin-next@13.4.12': @@ -15613,7 +15673,7 @@ snapshots: '@storybook/postinstall@7.6.20': {} - '@storybook/preset-create-react-app@7.6.20(@babel/core@7.25.2)(react-refresh@0.14.2)(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/babel__core@7.20.5)(esbuild@0.18.20)(eslint@8.57.1)(react@18.2.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6))(type-fest@2.19.0)(typescript@5.1.6)(webpack-hot-middleware@2.26.1))(type-fest@2.19.0)(typescript@5.1.6)(webpack-dev-server@4.15.2(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20))': + '@storybook/preset-create-react-app@7.6.20(@babel/core@7.25.2)(react-refresh@0.14.2)(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/babel__core@7.20.5)(esbuild@0.18.20)(eslint@8.57.1)(react@18.2.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6))(type-fest@2.19.0)(typescript@5.1.6)(webpack-hot-middleware@2.26.1))(type-fest@2.19.0)(typescript@5.1.6)(webpack-dev-server@4.15.2(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20))': dependencies: '@babel/core': 7.25.2 '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)) @@ -15622,7 +15682,7 @@ snapshots: '@types/babel__core': 7.20.5 '@types/semver': 7.5.8 pnp-webpack-plugin: 1.7.0(typescript@5.1.6) - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/babel__core@7.20.5)(esbuild@0.18.20)(eslint@8.57.1)(react@18.2.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6))(type-fest@2.19.0)(typescript@5.1.6)(webpack-hot-middleware@2.26.1) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/babel__core@7.20.5)(esbuild@0.18.20)(eslint@8.57.1)(react@18.2.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6))(type-fest@2.19.0)(typescript@5.1.6)(webpack-hot-middleware@2.26.1) semver: 7.6.3 transitivePeerDependencies: - '@types/webpack' @@ -18675,7 +18735,7 @@ snapshots: - jest - supports-color - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)))(typescript@5.1.6): + eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)))(typescript@5.1.6): dependencies: '@babel/core': 7.25.2 '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.1) @@ -18687,7 +18747,7 @@ snapshots: eslint: 8.57.1 eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(eslint@8.57.1) eslint-plugin-import: 2.30.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.1.6))(eslint@8.57.1) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.1.6))(eslint@8.57.1)(typescript@5.1.6))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)))(typescript@5.1.6) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.1.6))(eslint@8.57.1)(typescript@5.1.6))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)))(typescript@5.1.6) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) eslint-plugin-react: 7.28.0(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) @@ -18868,13 +18928,13 @@ snapshots: - supports-color - typescript - eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.1.6))(eslint@8.57.1)(typescript@5.1.6))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)))(typescript@5.1.6): + eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.1.6))(eslint@8.57.1)(typescript@5.1.6))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)))(typescript@5.1.6): dependencies: '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.1)(typescript@5.1.6) eslint: 8.57.1 optionalDependencies: '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.1.6))(eslint@8.57.1)(typescript@5.1.6) - jest: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)) + jest: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)) transitivePeerDependencies: - supports-color - typescript @@ -20283,16 +20343,16 @@ snapshots: - ts-node - utf-8-validate - jest-cli@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)): + jest-cli@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)): dependencies: - '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)) + '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)) '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.2.0 - jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)) + jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)) jest-util: 27.5.1 jest-validate: 27.5.1 prompts: 2.4.2 @@ -20338,7 +20398,7 @@ snapshots: - supports-color - utf-8-validate - jest-config@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)): + jest-config@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)): dependencies: '@babel/core': 7.25.2 '@jest/test-sequencer': 27.5.1 @@ -20707,11 +20767,11 @@ snapshots: string-length: 5.0.1 strip-ansi: 7.1.0 - jest-watch-typeahead@1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6))): + jest-watch-typeahead@1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6))): dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 - jest: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)) + jest: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)) jest-regex-util: 28.0.2 jest-watcher: 28.1.3 slash: 4.0.0 @@ -20776,11 +20836,11 @@ snapshots: - ts-node - utf-8-validate - jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)): + jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)): dependencies: - '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)) + '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)) import-local: 3.2.0 - jest-cli: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)) + jest-cli: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)) transitivePeerDependencies: - bufferutil - canvas @@ -21676,7 +21736,7 @@ snapshots: neo-async@2.6.2: {} - next@14.2.3(@babel/core@7.25.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + next@14.2.3(@babel/core@7.12.9)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@next/env': 14.2.3 '@swc/helpers': 0.5.5 @@ -21686,7 +21746,7 @@ snapshots: postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.25.2)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.12.9)(react@18.2.0) optionalDependencies: '@next/swc-darwin-arm64': 14.2.3 '@next/swc-darwin-x64': 14.2.3 @@ -22256,7 +22316,7 @@ snapshots: postcss: 8.4.31 ts-node: 10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@18.19.50)(typescript@4.9.5) - postcss-load-config@4.0.2(postcss@8.4.31)(ts-node@10.9.2(typescript@5.1.6)): + postcss-load-config@4.0.2(postcss@8.4.31)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)): dependencies: lilconfig: 3.1.2 yaml: 2.5.1 @@ -22272,14 +22332,6 @@ snapshots: postcss: 8.4.31 yaml: 2.5.1 - postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.47)(yaml@2.5.1): - dependencies: - lilconfig: 3.1.2 - optionalDependencies: - jiti: 1.21.6 - postcss: 8.4.47 - yaml: 2.5.1 - postcss-loader@6.2.1(postcss@8.4.31)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)): dependencies: cosmiconfig: 7.1.0 @@ -23036,7 +23088,7 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/babel__core@7.20.5)(esbuild@0.18.20)(eslint@8.57.1)(react@18.2.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6))(type-fest@2.19.0)(typescript@5.1.6)(webpack-hot-middleware@2.26.1): + react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/babel__core@7.20.5)(esbuild@0.18.20)(eslint@8.57.1)(react@18.2.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6))(type-fest@2.19.0)(typescript@5.1.6)(webpack-hot-middleware@2.26.1): dependencies: '@babel/core': 7.25.2 '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)) @@ -23054,15 +23106,15 @@ snapshots: dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 8.57.1 - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)))(typescript@5.1.6) + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)))(typescript@5.1.6) eslint-webpack-plugin: 3.2.0(eslint@8.57.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)) file-loader: 6.2.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)) fs-extra: 10.1.0 html-webpack-plugin: 5.6.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)) identity-obj-proxy: 3.0.0 - jest: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)) + jest: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)) jest-resolve: 27.5.1 - jest-watch-typeahead: 1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6))) + jest-watch-typeahead: 1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6))) mini-css-extract-plugin: 2.9.1(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)) postcss: 8.4.31 postcss-flexbugs-fixes: 5.0.2(postcss@8.4.31) @@ -23080,7 +23132,7 @@ snapshots: semver: 7.6.3 source-map-loader: 3.0.2(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)) style-loader: 3.3.4(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)) - tailwindcss: 3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)) + tailwindcss: 3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)) terser-webpack-plugin: 5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)) webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20) webpack-dev-server: 4.15.2(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20)) @@ -23909,12 +23961,14 @@ snapshots: dependencies: webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.18.20) - styled-jsx@5.1.1(@babel/core@7.25.2)(react@18.2.0): + style-mod@4.1.2: {} + + styled-jsx@5.1.1(@babel/core@7.12.9)(react@18.2.0): dependencies: client-only: 0.0.1 react: 18.2.0 optionalDependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.12.9 stylehacks@5.1.1(postcss@8.4.31): dependencies: @@ -24016,7 +24070,7 @@ snapshots: postcss: 8.4.31 postcss-import: 15.1.0(postcss@8.4.31) postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.2(postcss@8.4.31)(ts-node@10.9.2(typescript@5.1.6)) + postcss-load-config: 4.0.2(postcss@8.4.31)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)) postcss-nested: 6.2.0(postcss@8.4.31) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -24051,7 +24105,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(typescript@5.1.6)): + tailwindcss@3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -24070,34 +24124,7 @@ snapshots: postcss: 8.4.31 postcss-import: 15.1.0(postcss@8.4.31) postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.2(postcss@8.4.31)(ts-node@10.9.2(typescript@5.1.6)) - postcss-nested: 6.2.0(postcss@8.4.31) - postcss-selector-parser: 6.1.2 - resolve: 1.22.8 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node - - tailwindcss@3.4.12(ts-node@10.9.2(typescript@5.1.6)): - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.6 - lilconfig: 2.1.0 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.0 - postcss: 8.4.31 - postcss-import: 15.1.0(postcss@8.4.31) - postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.2(postcss@8.4.31)(ts-node@10.9.2(typescript@5.1.6)) + postcss-load-config: 4.0.2(postcss@8.4.31)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.4.6)(typescript@5.1.6)) postcss-nested: 6.2.0(postcss@8.4.31) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -24383,7 +24410,7 @@ snapshots: tslib@2.7.0: {} - tsup@8.3.0(@swc/core@1.7.26)(jiti@1.21.6)(postcss@8.4.31)(typescript@4.9.5)(yaml@2.5.1): + tsup@8.3.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(jiti@1.21.6)(postcss@8.4.31)(typescript@4.9.5)(yaml@2.5.1): dependencies: bundle-require: 5.0.0(esbuild@0.23.1) cac: 6.7.14 @@ -24411,34 +24438,6 @@ snapshots: - tsx - yaml - tsup@8.3.0(@swc/core@1.7.26)(jiti@1.21.6)(postcss@8.4.47)(typescript@5.1.6)(yaml@2.5.1): - dependencies: - bundle-require: 5.0.0(esbuild@0.23.1) - cac: 6.7.14 - chokidar: 3.6.0 - consola: 3.2.3 - debug: 4.3.7(supports-color@8.1.1) - esbuild: 0.23.1 - execa: 5.1.1 - joycon: 3.1.1 - picocolors: 1.1.0 - postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.47)(yaml@2.5.1) - resolve-from: 5.0.0 - rollup: 4.21.3 - source-map: 0.8.0-beta.0 - sucrase: 3.35.0 - tinyglobby: 0.2.6 - tree-kill: 1.2.2 - optionalDependencies: - '@swc/core': 1.7.26(@swc/helpers@0.5.5) - postcss: 8.4.47 - typescript: 5.1.6 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - tsutils@3.21.0(typescript@4.9.5): dependencies: tslib: 1.14.1 @@ -24712,6 +24711,8 @@ snapshots: punycode: 1.4.1 qs: 6.13.0 + urlpattern-polyfill@8.0.2: {} + use-callback-ref@1.3.2(@types/react@18.2.18)(react@18.2.0): dependencies: react: 18.2.0 @@ -24826,6 +24827,8 @@ snapshots: dependencies: browser-process-hrtime: 1.0.0 + w3c-keyname@2.2.8: {} + w3c-xmlserializer@2.0.0: dependencies: xml-name-validator: 3.0.0