feat: use preact types

This commit is contained in:
Sylver 2024-02-12 15:15:59 +08:00
parent 9550b1190a
commit f849e80984
38 changed files with 178 additions and 246 deletions

10
.vscode/settings.json vendored
View File

@ -1,10 +1,7 @@
{
"typescript.tsdk": "node_modules/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true,
"css.validate": false,
"less.validate": false,
"typescript.preferences.importModuleSpecifier": "relative",
"npm.scriptExplorerExclude": ["^((?!watch|generate:watch).)*$"],
"scss.validate": false,
"eslint.workingDirectories": [
{
"pattern": "./{packages,apps}/*"
@ -28,8 +25,5 @@
// const class = 'value'
// const selectedClass = 'value'
["const [a-zA-Z]+s = ['\"`]([^\"`'`]*)"]
],
"yaml.schemas": {
"https://json.schemastore.org/github-workflow.json": "file:///home/ryan/projects/micro/.github/workflows/build.yaml"
}
]
}

View File

@ -27,11 +27,9 @@
"@preact/preset-vite": "^2.8.1",
"@radix-ui/react-dropdown-menu": "^2.0.6",
"@tailwindcss/typography": "^0.5.10",
"@types/node": "^20.10.6",
"@types/react": "^18.2.47",
"@types/react-dom": "^18.2.18",
"@urql/devtools": "^2.0.3",
"@urql/exchange-graphcache": "^6.4.1",
"@urql/preact": "^4.0.4",
"autoprefixer": "^10.4.16",
"clsx": "^2.1.0",
"concurrently": "^8.2.2",
@ -42,7 +40,6 @@
"generate-avatar": "1.4.10",
"graphql": "^16.8.1",
"http-status-codes": "^2.3.0",
"mime": "^4.0.1",
"nanoid": "^5.0.4",
"path-to-regexp": "^6.2.1",
"postcss": "^8.4.33",
@ -56,12 +53,10 @@
"react-helmet-async": "^2.0.4",
"react-icons": "^5.0.1",
"react-markdown": "^9.0.1",
"readdirp": "^3.6.0",
"remark-gfm": "^4.0.0",
"tailwindcss": "^3.4.1",
"tsup": "^8.0.1",
"typescript": "^5.3.3",
"urql": "^4.0.6",
"vavite": "^4.0.1",
"vike": "^0.4.156",
"vite": "^5.0.11",

View File

@ -9,6 +9,10 @@ interface AppProps {
children: React.ReactNode;
}
declare module 'react' {
export type SVGAttributes<T extends EventTarget> = import('preact').JSX.SVGAttributes<T>;
}
export const App: FC<AppProps> = ({ children }) => (
<Fragment>
<Title>Home</Title>

View File

@ -4,7 +4,12 @@ import type { FC, HTMLAttributes } from 'react';
import { forwardRef } from 'react';
import { Spinner } from './spinner';
export interface ButtonProps extends Omit<HTMLAttributes<HTMLButtonElement | HTMLAnchorElement>, 'prefix' | 'style'> {
type ButtonBaseProps = Omit<
HTMLAttributes<HTMLButtonElement | HTMLAnchorElement>,
'prefix' | 'style' | 'as' | 'loading'
>;
export interface ButtonProps extends ButtonBaseProps {
href?: string;
disabled?: boolean;
style?: ButtonStyle;

View File

@ -1,7 +1,7 @@
import clsx from 'clsx';
import type { FC, HTMLAttributes } from 'react';
import type { ComponentProps, FC } from 'react';
export const Card: FC<HTMLAttributes<HTMLDivElement>> = ({ className, children, ...rest }) => {
export const Card: FC<ComponentProps<'div'>> = ({ className, children, ...rest }) => {
const classes = clsx(className, 'p-4 bg-dark-200 rounded');
return (
<div className={classes} {...rest}>

View File

@ -13,7 +13,7 @@ import { Link } from '../link';
import { useToasts } from '../toast';
import { HeaderUser } from './header-user';
import { graphql } from '../../@generated';
import { useMutation } from 'urql';
import { useMutation } from '@urql/preact';
const ResendVerificationEmail = graphql(`
mutation ResendVerificationEmail($data: ResendVerificationEmailDto) {
@ -97,7 +97,7 @@ export const Header = memo(() => {
<div className="mt-3 flex gap-2 items-center">
<Input
value={email}
onChange={(event) => setEmail(event.target.value)}
onChange={(event) => setEmail(event.currentTarget.value)}
className="flex-grow"
placeholder="Email"
disabled={sendingVerification}

View File

@ -1,10 +1,14 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import type { InputHTMLAttributes } from 'react';
import type { ComponentProps } from 'react';
import React from 'react';
import type { InputChildProps } from './container';
import { InputContainer } from './container';
export interface CheckboxProps extends InputChildProps<InputHTMLAttributes<HTMLInputElement>> {}
type CheckboxBaseProps = InputChildProps<ComponentProps<'input'>>;
export interface CheckboxProps extends CheckboxBaseProps {
className?: string;
}
export const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(({ className, ...delegated }, ref) => {
return (

View File

@ -1,10 +1,10 @@
import type { InputHTMLAttributes } from 'react';
import React from 'react';
import React, { ComponentProps } from 'react';
import type { InputChildProps } from './container';
import { InputContainer } from './container';
export interface InputProps extends InputChildProps<InputHTMLAttributes<HTMLInputElement>> {
export interface InputProps extends InputChildProps<ComponentProps<'input'>> {
isError?: boolean;
className?: string;
}
export const Input = React.forwardRef<HTMLInputElement, InputProps>(({ className, isError, ...delegated }, ref) => {

View File

@ -19,12 +19,12 @@ export const OtpInput: FC<OtpInputProps> = ({ loading, invalid, onCode }) => {
isError={invalid}
placeholder="123456"
onChange={(event) => {
if (loading || !event.target.value) return;
if (loading || !event.currentTarget.value) return;
if (
(event.target.value.length === TOTP_CODE_LENGTH && NUMBER_REGEX.test(event.target.value)) ||
event.target.value.length === RECOVERY_CODE_LENGTH
(event.currentTarget.value.length === TOTP_CODE_LENGTH && NUMBER_REGEX.test(event.currentTarget.value)) ||
event.currentTarget.value.length === RECOVERY_CODE_LENGTH
) {
onCode(event.target.value);
onCode(event.currentTarget.value);
}
}}
onKeyDown={(event) => {

View File

@ -1,11 +1,13 @@
import clsx from 'clsx';
import type { SelectHTMLAttributes } from 'react';
import type { ComponentProps } from 'react';
import React from 'react';
import { FiChevronDown } from 'react-icons/fi';
import type { InputChildProps } from './container';
import { InputContainer } from './container';
import { FiChevronDown } from 'react-icons/fi';
export interface SelectProps extends InputChildProps<SelectHTMLAttributes<HTMLSelectElement>> {}
export interface SelectProps extends InputChildProps<ComponentProps<'select'>> {
className?: string;
}
export const Select = React.forwardRef<HTMLSelectElement, SelectProps>(({ className, children, ...delegated }, ref) => {
return (

View File

@ -1,10 +1,14 @@
import clsx from 'clsx';
import type { TextareaHTMLAttributes } from 'react';
import type { ComponentProps } from 'react';
import React from 'react';
import type { InputChildProps } from './container';
import { InputContainer } from './container';
export interface TextAreaProps extends InputChildProps<TextareaHTMLAttributes<HTMLTextAreaElement>> {}
type TextAreaBaseProps = InputChildProps<ComponentProps<'textarea'>>;
export interface TextAreaProps extends TextAreaBaseProps {
className?: string;
}
export const TextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(({ className, ...delegated }, ref) => {
return (

View File

@ -1,6 +1,6 @@
import { forwardRef, type HTMLAttributes } from 'react';
import { ComponentProps, forwardRef } from 'react';
export interface LinkProps extends HTMLAttributes<HTMLAnchorElement> {
export interface LinkProps extends ComponentProps<'a'> {
href: string;
}

View File

@ -48,7 +48,7 @@ export const SkeletonWrap = memo<{
show: boolean;
children: ReactNode;
}>(({ show, children }) => {
if (!show) return children;
if (!show) return <Fragment>{children}</Fragment>;
return (
<span className="relative">

View File

@ -1,7 +1,9 @@
import clsx from 'clsx';
import type { FC, HTMLAttributes } from 'react';
import type { ComponentProps, FC } from 'react';
export interface SpinnerProps extends HTMLAttributes<SVGElement> {
type SpinnerBaseProps = Omit<ComponentProps<'svg'>, 'size'>;
export interface SpinnerProps extends SpinnerBaseProps {
size?: 'small' | 'medium' | 'large';
}

View File

@ -1,12 +1,12 @@
import clsx from 'clsx';
import type { Language } from 'prism-react-renderer';
import { Highlight } from 'prism-react-renderer';
import type { HTMLProps } from 'react';
import type { ComponentProps } from 'react';
import { memo, useState } from 'react';
import { theme } from './prism-theme';
import { SyntaxHighlighterControls } from './syntax-highlighter-controls';
export interface SyntaxHighlighterProps extends HTMLProps<HTMLPreElement> {
export interface SyntaxHighlighterProps extends ComponentProps<'pre'> {
children: string;
language: Language;
className?: string;

View File

@ -1,6 +1,7 @@
import { nanoid } from 'nanoid';
import type { FC, ReactNode } from 'react';
import { useCallback, useState } from 'react';
import { useCallback, useState } from 'preact/hooks';
import { Fragment } from 'preact';
import { ToastContext } from './context';
import type { ToastProps } from './toast';
import { TRANSITION_DURATION, Toast } from './toast';
@ -47,7 +48,7 @@ export const ToastProvider: FC<{ children: ReactNode }> = (props) => {
return (
<ToastContext.Provider value={createToast}>
{props.children}
<Fragment>{props.children}</Fragment>
<div className="fixed flex justify-end bottom-5 right-5 left-5">
{toasts.map((toast) => (
<Toast key={toast.id} removing={toast.removing} {...toast} />

View File

@ -1,9 +1,9 @@
import clsx from 'clsx';
import type { HTMLAttributes } from 'react';
import type { ComponentProps } from 'react';
import { forwardRef } from 'react';
import { Avatar } from './avatar';
export interface UserPillProps extends HTMLAttributes<HTMLDivElement> {
export interface UserPillProps extends ComponentProps<'div'> {
userId: string;
username: string;
}

View File

@ -1,15 +1,15 @@
import { useQuery } from '@urql/preact';
import type { FC } from 'react';
import { Fragment } from 'react';
import { useQuery } from 'urql';
import { graphql } from '../../@generated';
import { Breadcrumbs } from '../../components/breadcrumbs';
import { Card } from '../../components/card';
import { Error } from '../../components/error';
import { SkeletonList } from '../../components/skeleton';
import { Toggle } from '../../components/toggle';
import { useQueryState } from '../../hooks/useQueryState';
import { FileCard, FileCardSkeleton } from './cards/file-card';
import { FileCard } from './cards/file-card';
import { PasteCard } from './cards/paste-card';
import { PageLoader } from '../../components/page-loader';
const GetFilesQuery = graphql(`
query GetFiles($after: String) {
@ -88,11 +88,7 @@ export const FileList: FC = () => {
</div>
</div>
<div className="pb-5">
{!source.data && (
<SkeletonList count={12} className="grid grid-cols-2 gap-4 md:grid-cols-4 lg:grid-cols-6">
<FileCardSkeleton />
</SkeletonList>
)}
{!source.data && <PageLoader />}
{filter === 'files' && (
<div className="grid grid-cols-2 gap-4 md:grid-cols-4 lg:grid-cols-6">
{files.data?.user.files.edges.map(({ node }) => <FileCard key={node.id} file={node} />)}

View File

@ -1,4 +1,4 @@
import { CombinedError, useQuery } from 'urql';
import { CombinedError, useQuery } from '@urql/preact';
import { graphql } from '../@generated';
const ConfigQuery = graphql(`

View File

@ -1,5 +1,5 @@
import { useEffect, useState } from 'react';
import { CombinedError, TypedDocumentNode, useMutation, useQuery } from 'urql';
import { CombinedError, TypedDocumentNode, useMutation, useQuery } from '@urql/preact';
import { graphql } from '../@generated';
import type { GetUserQuery, LoginMutationVariables, RegularUserFragment } from '../@generated/graphql';
import { navigate, reload } from '../helpers/routing';

View File

@ -1,4 +1,4 @@
import { useMutation, useQuery } from 'urql';
import { useMutation, useQuery } from '@urql/preact';
import clsx from 'clsx';
import { QRCodeSVG } from 'qrcode.react';
import { FC, Fragment, useCallback, useMemo } from 'react';

View File

@ -1,5 +1,5 @@
import { FC, Fragment } from 'react';
import { useMutation, useQuery } from 'urql';
import { useMutation, useQuery } from '@urql/preact';
import { graphql } from '../../../@generated';
import { Breadcrumbs } from '../../../components/breadcrumbs';
import { Button } from '../../../components/button';
@ -91,7 +91,7 @@ export const Page: FC = () => {
readOnly
value={user.data.user.token}
onFocus={(event) => {
event.target.select();
event.currentTarget.select();
}}
/>
)}

View File

@ -3,7 +3,7 @@ import copyToClipboard from 'copy-to-clipboard';
import type { FC, ReactNode } from 'react';
import { Fragment, useState } from 'react';
import { FiDownload, FiShare, FiTrash } from 'react-icons/fi';
import { useMutation, useQuery } from 'urql';
import { useMutation, useQuery } from '@urql/preact';
import { graphql } from '../../../@generated';
import { Container } from '../../../components/container';
import { Embed } from '../../../components/embed/embed';

View File

@ -1,13 +0,0 @@
import { PageContext, RouteSync } from 'vike/types';
import { resolveRoute } from 'vike/routing';
const PATTERN = /^\/(file|f|v|i)\//;
export const route: RouteSync = (pageContext: PageContext) => {
if (PATTERN.test(pageContext.urlPathname)) {
const replaced = pageContext.urlPathname.replace(PATTERN, '/file/');
return resolveRoute('/file/@fileId', replaced);
}
return false;
};

View File

@ -13,7 +13,7 @@ import { navigate, prefetch } from '../../../helpers/routing';
import { useAsync } from '../../../hooks/useAsync';
import { useConfig } from '../../../hooks/useConfig';
import { PageProps } from '../../../renderer/types';
import { useQuery, useMutation } from 'urql';
import { useQuery, useMutation } from '@urql/preact';
const GetInvite = graphql(`
query GetInvite($inviteId: ID!) {

View File

@ -14,7 +14,7 @@ import { Title } from '../../components/title';
import { encryptContent } from '../../helpers/encrypt.helper';
import { useConfig } from '../../hooks/useConfig';
import { useUser } from '../../hooks/useUser';
import { useMutation } from 'urql';
import { useMutation } from '@urql/preact';
const EXPIRY_OPTIONS = [
{ name: '15 minutes', value: 15 },
@ -164,7 +164,7 @@ export const Page: FC = () => {
id="content"
autoComplete="off"
autoCorrect="off"
spellCheck="false"
spellCheck={false}
placeholder="Markdown, code or plain text"
/>
<div className="flex gap-2 justify-end flex-wrap">

View File

@ -13,7 +13,7 @@ import { hashToObject } from '../../../helpers/hash-to-object';
import { navigate } from '../../../helpers/routing';
import { useUser } from '../../../hooks/useUser';
import { PageProps } from '../../../renderer/types';
import { useQuery } from 'urql';
import { useQuery } from '@urql/preact';
const PasteQuery = graphql(`
query GetPaste($pasteId: ID!) {

View File

@ -1,4 +1,4 @@
import { useMutation } from 'urql';
import { useMutation } from '@urql/preact';
import { Form, Formik } from 'formik';
import { FC, useState } from 'react';
import * as Yup from 'yup';
@ -82,7 +82,7 @@ export const Page: FC = () => {
readOnly
value={result}
onFocus={(event) => {
event.target.select();
event.currentTarget.select();
}}
/>
</div>

View File

@ -1,4 +1,4 @@
import type { ChangeEventHandler, DragEventHandler, FC } from 'react';
import type { ChangeEventHandler, FC, JSX } from 'react';
import { useEffect, useRef, useState } from 'react';
import { FiUpload } from 'react-icons/fi';
import { Button } from '../../components/button';
@ -35,7 +35,7 @@ export const Page: FC = () => {
const config = useConfig();
const onDragEvent =
(entering?: boolean): DragEventHandler =>
(entering?: boolean): JSX.DragEventHandler<HTMLDivElement> =>
(event) => {
event.preventDefault();
event.stopPropagation();
@ -43,12 +43,11 @@ export const Page: FC = () => {
else if (entering === false) setHover(false);
};
const onDrop: DragEventHandler = (event) => {
const onDrop: JSX.DragEventHandler<HTMLDivElement> = (event) => {
event.preventDefault();
event.stopPropagation();
setHover(false);
const transfer = event.dataTransfer;
const file = transfer.files.item(0);
const file = event.dataTransfer?.files.item(0);
if (file) {
setFile(file);
}
@ -71,7 +70,7 @@ export const Page: FC = () => {
const onFileChange: ChangeEventHandler<HTMLInputElement> = (event) => {
event.stopPropagation();
event.preventDefault();
const file = event.target.files?.[0];
const file = event.currentTarget.files?.[0];
if (file) {
setFile(file);
}
@ -140,7 +139,7 @@ export const Page: FC = () => {
prefix="Host"
className="shrink-0 w-40 mr-2"
value={selectedHost}
onChange={(event) => setSelectedHost(event.target.value)}
onChange={(event) => setSelectedHost(event.currentTarget.value)}
>
{config.data.hosts.map((host) => (
<option key={host.normalised} value={host.normalised} selected={host.normalised === selectedHost}>

View File

@ -1,6 +1,6 @@
import { createClient, fetchExchange, ssrExchange } from 'urql';
import { Provider as UrqlProvider } from 'urql';
import { hydrateRoot } from 'react-dom/client';
import { createClient, fetchExchange, ssrExchange } from '@urql/preact';
import { Provider as UrqlProvider } from '@urql/preact';
import { hydrate } from 'preact';
import { HelmetProvider } from 'react-helmet-async';
import { OnRenderClientAsync } from 'vike/types';
import { App } from '../app';
@ -27,8 +27,7 @@ export const onRenderClient: OnRenderClientAsync = async (pageContext) => {
ssr.restoreData(pageContext.state);
}
hydrateRoot(
document.getElementById('root')!,
hydrate(
<PageContextProvider pageContext={pageContext}>
<UrqlProvider value={client}>
<HelmetProvider>
@ -38,5 +37,6 @@ export const onRenderClient: OnRenderClientAsync = async (pageContext) => {
</HelmetProvider>
</UrqlProvider>
</PageContextProvider>,
document.getElementById('root')!,
);
};

View File

@ -1,14 +1,13 @@
import { createClient, fetchExchange, ssrExchange } from 'urql';
import { cacheExchange } from '@urql/exchange-graphcache';
import { Provider as UrqlProvider, createClient, fetchExchange, ssrExchange } from '@urql/preact';
import { HelmetProvider, HelmetServerState } from 'react-helmet-async';
import { Provider as UrqlProvider } from 'urql';
import { dangerouslySkipEscape, escapeInject } from 'vike/server';
import type { OnRenderHtmlAsync } from 'vike/types';
import { App } from '../app';
import { cacheOptions } from './cache';
import { renderToStringWithData } from './prepass';
import { PageProps } from './types';
import { PageContextProvider } from './usePageContext';
import { cacheExchange } from '@urql/exchange-graphcache';
import { cacheOptions } from './cache';
const GRAPHQL_URL = (import.meta.env.PUBLIC_ENV__FRONTEND_API_URL || import.meta.env.FRONTEND_API_URL) + '/graphql';

View File

@ -1,7 +1,10 @@
import { CacheExchangeOpts } from '@urql/exchange-graphcache';
import { relayPagination } from '@urql/exchange-graphcache/extras';
import schema from '../@generated/introspection.json';
export const cacheOptions: Partial<CacheExchangeOpts> = {
schema: schema,
resolvers: {
User: {
files: relayPagination(),
@ -16,6 +19,7 @@ export const cacheOptions: Partial<CacheExchangeOpts> = {
ResourceLocations: () => null,
FilePage: () => null,
PastePage: () => null,
OTPEnabledDto: () => null,
},
updates: {
Mutation: {

View File

@ -1,6 +1,6 @@
import { VNode } from 'preact';
import renderToString from 'preact-render-to-string';
import { Client } from 'urql';
import { Client } from '@urql/preact';
const MAX_DEPTH = 3;
const isPromiseLike = (value: unknown): value is Promise<unknown> => {
@ -10,9 +10,11 @@ const isPromiseLike = (value: unknown): value is Promise<unknown> => {
/**
* Enables urql suspense, then re-renders the tree until there are no suspense errors.
* This is a hack workaround because both `react-ssr-prepass` and `preact-ssr-prepass` are not working, both have preact/react compat errors.
*/
export const renderToStringWithData = async (client: Client, tree: VNode, depth = 0): Promise<string> => {
// todo: this should use preact-ssr-prepass, but that has issues with `useId()` and radix.
// i have absolutely no clue what that issue is, i can't find anything online and it's too vague
// to debug. whatever, apollo did it this way and it worked fine. so whatever. i didn't want performance anyway.
try {
client.suspense = true;
const result = renderToString(tree);

View File

@ -1,5 +1,5 @@
import { FC } from 'react';
import { SSRData } from 'urql';
import { SSRData } from '@urql/preact';
// https://vike.dev/pageContext#typescript
declare global {

View File

@ -1,20 +1,13 @@
import FastifyEarlyHints from '@fastify/early-hints';
import FastifyProxy from '@fastify/http-proxy';
import Fastify, { FastifyInstance } from 'fastify';
import { createReadStream } from 'fs';
import { IncomingMessage, ServerResponse } from 'http';
import mime from 'mime';
import { dirname, resolve } from 'path';
import { compile, match } from 'path-to-regexp';
import rrdir from 'readdirp';
import url from 'url';
import { renderPage } from 'vike/server';
import { PageContext } from 'vike/types';
import { REWRITES } from './rewrites';
import { fileURLToPath } from 'url';
import url from 'url';
const fileDir = dirname(fileURLToPath(import.meta.url));
const staticDir = process.env.STATIC_DIR?.replace('{{FILE_DIR}}', fileDir) || resolve('dist/client');
const rewrites = REWRITES.map(({ source, destination }) => ({
match: match(source),
toPath: compile(destination),
@ -65,7 +58,8 @@ async function startServer() {
for (const { match, toPath } of rewrites) {
const result = match(pathname);
if (result) {
return toPath(result.params);
const replaced = toPath(result.params);
return replaced;
}
}
@ -88,40 +82,14 @@ async function startServer() {
},
});
const files = new Set<string>();
const info = new Map<string, { type: string; size: number }>();
for await (const file of rrdir(staticDir, { type: 'files', alwaysStat: true })) {
const mimeType = mime.getType(file.fullPath) || 'application/octet-stream';
files.add(file.fullPath);
info.set(file.fullPath, {
type: mimeType,
size: file.stats!.size,
});
}
instance.get('*', async (request, reply) => {
// check if its for a file on disk, and send that instead
const pathname = new URL(request.url, 'http://localhost').pathname;
const file = resolve(staticDir, pathname.slice(1));
if (files.has(file)) {
const extraInfo = info.get(file);
if (extraInfo) {
reply.header('Content-Type', extraInfo.type);
reply.header('Content-Length', extraInfo.size);
}
const stream = createReadStream(file);
return reply.send(stream);
}
let cookies;
if (request.headers.cookie && typeof request.headers.cookie === 'string') {
cookies = request.headers.cookie;
}
const pageContextInit = {
urlOriginal: request.originalUrl,
urlOriginal: request.url,
cookies: cookies,
} satisfies Partial<PageContext>;

View File

@ -6,10 +6,16 @@
"moduleResolution": "Bundler",
"lib": ["DOM", "DOM.Iterable", "ESNext"],
"types": ["vite/client"],
"jsx": "react-jsx",
"skipLibCheck": true,
"esModuleInterop": true,
"composite": true,
"noUnusedLocals": true,
"jsx": "react-jsx",
"jsxImportSource": "preact",
"baseUrl": "./",
"paths": {
"react": ["./node_modules/preact/compat/"],
"react-dom": ["./node_modules/preact/compat/"],
},
},
}

View File

@ -14,12 +14,11 @@ export default defineConfig({
},
},
],
optimizeDeps: {
include: ['preact', 'preact/devtools', 'preact/debug', 'preact/jsx-dev-runtime', 'preact/hooks', 'urql'],
define: {
'process.env.NODE_ENV': '"production"',
},
define: { 'process.env.NODE_ENV': '"production"' },
ssr: {
noExternal: ['preact', 'urql', 'prism-react-renderer', 'qrcode.react', 'formik', 'react-helmet-async'],
noExternal: ['react-helmet-async', 'prism-react-renderer', 'qrcode.react', 'formik'],
},
plugins: [
preact(),

View File

@ -239,7 +239,7 @@ importers:
version: 9.3.0
'@graphql-codegen/cli':
specifier: ^5.0.0
version: 5.0.0(@parcel/watcher@2.4.0)(@types/node@20.11.7)(graphql@16.8.1)(typescript@5.3.3)
version: 5.0.0(@parcel/watcher@2.4.0)(graphql@16.8.1)(typescript@5.3.3)
'@graphql-codegen/client-preset':
specifier: ^4.1.0
version: 4.1.0(graphql@16.8.1)
@ -257,25 +257,19 @@ importers:
version: 2.8.1(@babel/core@7.23.9)(preact@10.19.3)(vite@5.0.12)
'@radix-ui/react-dropdown-menu':
specifier: ^2.0.6
version: 2.0.6(@types/react-dom@18.2.18)(@types/react@18.2.48)
version: 2.0.6(@types/react@18.2.48)
'@tailwindcss/typography':
specifier: ^0.5.10
version: 0.5.10(tailwindcss@3.4.1)
'@types/node':
specifier: ^20.10.6
version: 20.11.7
'@types/react':
specifier: ^18.2.47
version: 18.2.48
'@types/react-dom':
specifier: ^18.2.18
version: 18.2.18
'@urql/devtools':
specifier: ^2.0.3
version: 2.0.3(@urql/core@4.2.3)(graphql@16.8.1)
'@urql/exchange-graphcache':
specifier: ^6.4.1
version: 6.4.1(graphql@16.8.1)
'@urql/preact':
specifier: ^4.0.4
version: 4.0.4(graphql@16.8.1)(preact@10.19.3)
autoprefixer:
specifier: ^10.4.16
version: 10.4.17(postcss@8.4.33)
@ -306,9 +300,6 @@ importers:
http-status-codes:
specifier: ^2.3.0
version: 2.3.0
mime:
specifier: ^4.0.1
version: 4.0.1
nanoid:
specifier: ^5.0.4
version: 5.0.4
@ -348,9 +339,6 @@ importers:
react-markdown:
specifier: ^9.0.1
version: 9.0.1(@types/react@18.2.48)
readdirp:
specifier: ^3.6.0
version: 3.6.0
remark-gfm:
specifier: ^4.0.0
version: 4.0.0
@ -363,9 +351,6 @@ importers:
typescript:
specifier: ^5.3.3
version: 5.3.3
urql:
specifier: ^4.0.6
version: 4.0.6(graphql@16.8.1)
vavite:
specifier: ^4.0.1
version: 4.0.2(vite@5.0.12)
@ -1506,7 +1491,7 @@ packages:
tslib: 2.5.3
dev: true
/@graphql-codegen/cli@5.0.0(@parcel/watcher@2.4.0)(@types/node@20.11.7)(graphql@16.8.1)(typescript@5.3.3):
/@graphql-codegen/cli@5.0.0(@parcel/watcher@2.4.0)(graphql@16.8.1)(typescript@5.3.3):
resolution: {integrity: sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA==}
hasBin: true
peerDependencies:
@ -1524,12 +1509,12 @@ packages:
'@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.1)
'@graphql-tools/code-file-loader': 8.1.0(graphql@16.8.1)
'@graphql-tools/git-loader': 8.0.4(graphql@16.8.1)
'@graphql-tools/github-loader': 8.0.0(@types/node@20.11.7)(graphql@16.8.1)
'@graphql-tools/github-loader': 8.0.0(graphql@16.8.1)
'@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.8.1)
'@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1)
'@graphql-tools/load': 8.0.1(graphql@16.8.1)
'@graphql-tools/prisma-loader': 8.0.2(@types/node@20.11.7)(graphql@16.8.1)
'@graphql-tools/url-loader': 8.0.1(@types/node@20.11.7)(graphql@16.8.1)
'@graphql-tools/prisma-loader': 8.0.2(graphql@16.8.1)
'@graphql-tools/url-loader': 8.0.1(graphql@16.8.1)
'@graphql-tools/utils': 10.0.13(graphql@16.8.1)
'@parcel/watcher': 2.4.0
'@whatwg-node/fetch': 0.8.8
@ -1538,7 +1523,7 @@ packages:
debounce: 1.2.1
detect-indent: 6.1.0
graphql: 16.8.1
graphql-config: 5.0.3(@types/node@20.11.7)(graphql@16.8.1)(typescript@5.3.3)
graphql-config: 5.0.3(graphql@16.8.1)(typescript@5.3.3)
inquirer: 8.2.6
is-glob: 4.0.3
jiti: 1.21.0
@ -1790,7 +1775,7 @@ packages:
dependencies:
graphql: 16.8.1
lodash.sortby: 4.7.0
tslib: 2.5.3
tslib: 2.6.2
dev: true
/@graphql-tools/executor-graphql-ws@1.1.0(graphql@16.8.1):
@ -1811,7 +1796,7 @@ packages:
- utf-8-validate
dev: true
/@graphql-tools/executor-http@1.0.7(@types/node@20.11.7)(graphql@16.8.1):
/@graphql-tools/executor-http@1.0.7(graphql@16.8.1):
resolution: {integrity: sha512-/MoRYzQS50Tz5mxRfq3ZmeZ2SOins9wGZAGetsJ55F3PxL0PmHdSGlCq12KzffZDbwHV5YMlwigBsSGWq4y9Iw==}
engines: {node: '>=16.0.0'}
peerDependencies:
@ -1822,7 +1807,7 @@ packages:
'@whatwg-node/fetch': 0.9.16
extract-files: 11.0.0
graphql: 16.8.1
meros: 1.3.0(@types/node@20.11.7)
meros: 1.3.0
tslib: 2.6.2
value-or-promise: 1.0.12
transitivePeerDependencies:
@ -1877,14 +1862,14 @@ packages:
- supports-color
dev: true
/@graphql-tools/github-loader@8.0.0(@types/node@20.11.7)(graphql@16.8.1):
/@graphql-tools/github-loader@8.0.0(graphql@16.8.1):
resolution: {integrity: sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
'@ardatan/sync-fetch': 0.0.1
'@graphql-tools/executor-http': 1.0.7(@types/node@20.11.7)(graphql@16.8.1)
'@graphql-tools/executor-http': 1.0.7(graphql@16.8.1)
'@graphql-tools/graphql-tag-pluck': 8.2.0(graphql@16.8.1)
'@graphql-tools/utils': 10.0.13(graphql@16.8.1)
'@whatwg-node/fetch': 0.9.16
@ -1973,7 +1958,7 @@ packages:
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
'@graphql-tools/utils': 10.0.8(graphql@16.8.1)
'@graphql-tools/utils': 10.0.13(graphql@16.8.1)
graphql: 16.8.1
tslib: 2.6.2
dev: false
@ -1987,7 +1972,6 @@ packages:
'@graphql-tools/utils': 10.0.13(graphql@16.8.1)
graphql: 16.8.1
tslib: 2.6.2
dev: true
/@graphql-tools/optimize@2.0.0(graphql@16.8.1):
resolution: {integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==}
@ -1996,16 +1980,16 @@ packages:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
graphql: 16.8.1
tslib: 2.5.3
tslib: 2.6.2
dev: true
/@graphql-tools/prisma-loader@8.0.2(@types/node@20.11.7)(graphql@16.8.1):
/@graphql-tools/prisma-loader@8.0.2(graphql@16.8.1):
resolution: {integrity: sha512-8d28bIB0bZ9Bj0UOz9sHagVPW+6AHeqvGljjERtwCnWl8OCQw2c2pNboYXISLYUG5ub76r4lDciLLTU+Ks7Q0w==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
'@graphql-tools/url-loader': 8.0.1(@types/node@20.11.7)(graphql@16.8.1)
'@graphql-tools/url-loader': 8.0.1(graphql@16.8.1)
'@graphql-tools/utils': 10.0.13(graphql@16.8.1)
'@types/js-yaml': 4.0.9
'@types/json-stable-stringify': 1.0.36
@ -2041,7 +2025,7 @@ packages:
'@ardatan/relay-compiler': 12.0.0(graphql@16.8.1)
'@graphql-tools/utils': 10.0.13(graphql@16.8.1)
graphql: 16.8.1
tslib: 2.5.3
tslib: 2.6.2
transitivePeerDependencies:
- encoding
- supports-color
@ -2053,8 +2037,8 @@ packages:
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
'@graphql-tools/merge': 9.0.0(graphql@16.8.1)
'@graphql-tools/utils': 10.0.8(graphql@16.8.1)
'@graphql-tools/merge': 9.0.1(graphql@16.8.1)
'@graphql-tools/utils': 10.0.13(graphql@16.8.1)
graphql: 16.8.1
tslib: 2.6.2
value-or-promise: 1.0.12
@ -2073,7 +2057,7 @@ packages:
value-or-promise: 1.0.12
dev: true
/@graphql-tools/url-loader@8.0.1(@types/node@20.11.7)(graphql@16.8.1):
/@graphql-tools/url-loader@8.0.1(graphql@16.8.1):
resolution: {integrity: sha512-B2k8KQEkEQmfV1zhurT5GLoXo8jbXP+YQHUayhCSxKYlRV7j/1Fhp1b21PDM8LXIDGlDRXaZ0FbWKOs7eYXDuQ==}
engines: {node: '>=16.0.0'}
peerDependencies:
@ -2082,7 +2066,7 @@ packages:
'@ardatan/sync-fetch': 0.0.1
'@graphql-tools/delegate': 10.0.3(graphql@16.8.1)
'@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.8.1)
'@graphql-tools/executor-http': 1.0.7(@types/node@20.11.7)(graphql@16.8.1)
'@graphql-tools/executor-http': 1.0.7(graphql@16.8.1)
'@graphql-tools/executor-legacy-ws': 1.0.5(graphql@16.8.1)
'@graphql-tools/utils': 10.0.13(graphql@16.8.1)
'@graphql-tools/wrap': 10.0.1(graphql@16.8.1)
@ -2111,7 +2095,6 @@ packages:
dset: 3.1.3
graphql: 16.8.1
tslib: 2.6.2
dev: true
/@graphql-tools/utils@10.0.8(graphql@16.8.1):
resolution: {integrity: sha512-yjyA8ycSa1WRlJqyX/aLqXeE5DvF/H02+zXMUFnCzIDrj0UvLMUrxhmVFnMK0Q2n3bh4uuTeY3621m5za9ovXw==}
@ -3208,7 +3191,7 @@ packages:
'@babel/runtime': 7.23.9
dev: true
/@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48):
/@radix-ui/react-arrow@1.0.3(@types/react@18.2.48):
resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==}
peerDependencies:
'@types/react': '*'
@ -3220,12 +3203,11 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.9
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)
'@types/react': 18.2.48
'@types/react-dom': 18.2.18
dev: true
/@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48):
/@radix-ui/react-collection@1.0.3(@types/react@18.2.48):
resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==}
peerDependencies:
'@types/react': '*'
@ -3239,10 +3221,9 @@ packages:
'@babel/runtime': 7.23.9
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-context': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)
'@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)
'@types/react': 18.2.48
'@types/react-dom': 18.2.18
dev: true
/@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.48):
@ -3281,7 +3262,7 @@ packages:
'@types/react': 18.2.48
dev: true
/@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48):
/@radix-ui/react-dismissable-layer@1.0.5(@types/react@18.2.48):
resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==}
peerDependencies:
'@types/react': '*'
@ -3295,14 +3276,13 @@ packages:
'@babel/runtime': 7.23.9
'@radix-ui/primitive': 1.0.1
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)
'@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.48)
'@types/react': 18.2.48
'@types/react-dom': 18.2.18
dev: true
/@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.18)(@types/react@18.2.48):
/@radix-ui/react-dropdown-menu@2.0.6(@types/react@18.2.48):
resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==}
peerDependencies:
'@types/react': '*'
@ -3318,11 +3298,10 @@ packages:
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-context': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-id': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-menu': 2.0.6(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)
'@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)
'@types/react': 18.2.48
'@types/react-dom': 18.2.18
dev: true
/@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.48):
@ -3337,7 +3316,7 @@ packages:
'@types/react': 18.2.48
dev: true
/@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48):
/@radix-ui/react-focus-scope@1.0.4(@types/react@18.2.48):
resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==}
peerDependencies:
'@types/react': '*'
@ -3350,10 +3329,9 @@ packages:
dependencies:
'@babel/runtime': 7.23.9
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)
'@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)
'@types/react': 18.2.48
'@types/react-dom': 18.2.18
dev: true
/@radix-ui/react-id@1.0.1(@types/react@18.2.48):
@ -3369,7 +3347,7 @@ packages:
'@types/react': 18.2.48
dev: true
/@radix-ui/react-menu@2.0.6(@types/react-dom@18.2.18)(@types/react@18.2.48):
/@radix-ui/react-menu@2.0.6(@types/react@18.2.48):
resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==}
peerDependencies:
'@types/react': '*'
@ -3382,28 +3360,27 @@ packages:
dependencies:
'@babel/runtime': 7.23.9
'@radix-ui/primitive': 1.0.1
'@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-collection': 1.0.3(@types/react@18.2.48)
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-context': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.2.48)
'@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-focus-scope': 1.0.4(@types/react@18.2.48)
'@radix-ui/react-id': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-popper': 1.1.3(@types/react@18.2.48)
'@radix-ui/react-portal': 1.0.4(@types/react@18.2.48)
'@radix-ui/react-presence': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)
'@radix-ui/react-roving-focus': 1.0.4(@types/react@18.2.48)
'@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)
'@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)
'@types/react': 18.2.48
'@types/react-dom': 18.2.18
aria-hidden: 1.2.3
react-remove-scroll: 2.5.5(@types/react@18.2.48)
dev: true
/@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.18)(@types/react@18.2.48):
/@radix-ui/react-popper@1.1.3(@types/react@18.2.48):
resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==}
peerDependencies:
'@types/react': '*'
@ -3416,20 +3393,19 @@ packages:
dependencies:
'@babel/runtime': 7.23.9
'@floating-ui/react-dom': 2.0.7
'@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-arrow': 1.0.3(@types/react@18.2.48)
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-context': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)
'@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-use-size': 1.0.1(@types/react@18.2.48)
'@radix-ui/rect': 1.0.1
'@types/react': 18.2.48
'@types/react-dom': 18.2.18
dev: true
/@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48):
/@radix-ui/react-portal@1.0.4(@types/react@18.2.48):
resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==}
peerDependencies:
'@types/react': '*'
@ -3441,12 +3417,11 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.9
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)
'@types/react': 18.2.48
'@types/react-dom': 18.2.18
dev: true
/@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48):
/@radix-ui/react-presence@1.0.1(@types/react@18.2.48):
resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==}
peerDependencies:
'@types/react': '*'
@ -3461,10 +3436,9 @@ packages:
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)
'@types/react': 18.2.48
'@types/react-dom': 18.2.18
dev: true
/@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48):
/@radix-ui/react-primitive@1.0.3(@types/react@18.2.48):
resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==}
peerDependencies:
'@types/react': '*'
@ -3478,10 +3452,9 @@ packages:
'@babel/runtime': 7.23.9
'@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)
'@types/react': 18.2.48
'@types/react-dom': 18.2.18
dev: true
/@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48):
/@radix-ui/react-roving-focus@1.0.4(@types/react@18.2.48):
resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==}
peerDependencies:
'@types/react': '*'
@ -3494,16 +3467,15 @@ packages:
dependencies:
'@babel/runtime': 7.23.9
'@radix-ui/primitive': 1.0.1
'@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-collection': 1.0.3(@types/react@18.2.48)
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-context': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-id': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)
'@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)
'@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)
'@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)
'@types/react': 18.2.48
'@types/react-dom': 18.2.18
dev: true
/@radix-ui/react-slot@1.0.2(@types/react@18.2.48):
@ -4080,12 +4052,6 @@ packages:
resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
dev: true
/@types/react-dom@18.2.18:
resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==}
dependencies:
'@types/react': 18.2.48
dev: true
/@types/react@18.2.48:
resolution: {integrity: sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==}
dependencies:
@ -4307,6 +4273,18 @@ packages:
- graphql
dev: true
/@urql/preact@4.0.4(graphql@16.8.1)(preact@10.19.3):
resolution: {integrity: sha512-VqDJzL63qvcLnbUXILul+6LQOztCWO/jYV3UoLm57BoAIjBTCcNQaAFivLPEq/YgyysdIyDTj66trS/Z+R18Sw==}
peerDependencies:
preact: '>= 10.0.0'
dependencies:
'@urql/core': 4.2.3(graphql@16.8.1)
preact: 10.19.3
wonka: 6.3.4
transitivePeerDependencies:
- graphql
dev: true
/@vavite/connect@4.0.2(vite@5.0.12):
resolution: {integrity: sha512-wEEjsKXUvmOEzQ5jJm33AAKmX9tNwjuxmTA5CHwHzria4QcjRUxgONo0jjhvIY4S+e9/gkf6e24rREjAGfgcfA==}
peerDependencies:
@ -6667,7 +6645,7 @@ packages:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
dev: true
/graphql-config@5.0.3(@types/node@20.11.7)(graphql@16.8.1)(typescript@5.3.3):
/graphql-config@5.0.3(graphql@16.8.1)(typescript@5.3.3):
resolution: {integrity: sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==}
engines: {node: '>= 16.0.0'}
peerDependencies:
@ -6681,7 +6659,7 @@ packages:
'@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1)
'@graphql-tools/load': 8.0.1(graphql@16.8.1)
'@graphql-tools/merge': 9.0.1(graphql@16.8.1)
'@graphql-tools/url-loader': 8.0.1(@types/node@20.11.7)(graphql@16.8.1)
'@graphql-tools/url-loader': 8.0.1(graphql@16.8.1)
'@graphql-tools/utils': 10.0.13(graphql@16.8.1)
cosmiconfig: 8.3.6(typescript@5.3.3)
graphql: 16.8.1
@ -7999,7 +7977,7 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
/meros@1.3.0(@types/node@20.11.7):
/meros@1.3.0:
resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==}
engines: {node: '>=13'}
peerDependencies:
@ -8007,8 +7985,6 @@ packages:
peerDependenciesMeta:
'@types/node':
optional: true
dependencies:
'@types/node': 20.11.7
dev: true
/micromark-core-commonmark@2.0.0:
@ -8287,12 +8263,6 @@ packages:
hasBin: true
dev: false
/mime@4.0.1:
resolution: {integrity: sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA==}
engines: {node: '>=16'}
hasBin: true
dev: true
/mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
@ -10853,15 +10823,6 @@ packages:
resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==}
dev: true
/urql@4.0.6(graphql@16.8.1):
resolution: {integrity: sha512-meXJ2puOd64uCGKh7Fse2R7gPa8+ZpBOoA62jN7CPXXUt7SVZSdeXWSpB3HvlfzLUkEqsWbvshwrgeWRYNNGaQ==}
dependencies:
'@urql/core': 4.2.3(graphql@16.8.1)
wonka: 6.3.4
transitivePeerDependencies:
- graphql
dev: true
/use-callback-ref@1.3.1(@types/react@18.2.48):
resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==}
engines: {node: '>=10'}