From 6420feee729aa641c0545fa39308772e4a4b1af8 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Tue, 18 Feb 2025 22:53:44 +0100 Subject: [PATCH] feat: quick add app modal (#2248) --- apps/nextjs/package.json | 1 + .../manage/apps/edit/[id]/_app-edit-form.tsx | 4 +- .../src/app/[locale]/manage/apps/new/page.tsx | 4 +- .../manage/medias/_actions/upload-media.tsx | 50 +------ .../[locale]/manage/search-engines/_form.tsx | 3 +- packages/api/src/router/app.ts | 7 +- packages/forms-collection/eslint.config.js | 4 + packages/forms-collection/index.ts | 1 + packages/forms-collection/package.json | 43 ++++++ .../src/icon-picker}/icon-picker.module.css | 0 .../src/icon-picker}/icon-picker.tsx | 9 +- packages/forms-collection/src/index.tsx | 6 + .../src/new-app}/_app-new-form.tsx | 13 +- .../forms-collection/src/new-app}/_form.tsx | 12 +- .../src/upload-media/upload-media.tsx | 50 +++++++ packages/forms-collection/tsconfig.json | 8 ++ packages/modals-collection/package.json | 1 + packages/modals-collection/src/apps/index.ts | 1 + .../quick-add-app/quick-add-app-modal.tsx | 56 ++++++++ packages/modals-collection/src/index.ts | 1 + packages/translation/src/lang/en.json | 9 +- packages/widgets/package.json | 1 + .../widgets/src/_inputs/widget-app-input.tsx | 85 +++++++----- pnpm-lock.yaml | 126 +++++++++++++----- 24 files changed, 359 insertions(+), 136 deletions(-) create mode 100644 packages/forms-collection/eslint.config.js create mode 100644 packages/forms-collection/index.ts create mode 100644 packages/forms-collection/package.json rename {apps/nextjs/src/components/icons/picker => packages/forms-collection/src/icon-picker}/icon-picker.module.css (100%) rename {apps/nextjs/src/components/icons/picker => packages/forms-collection/src/icon-picker}/icon-picker.tsx (94%) create mode 100644 packages/forms-collection/src/index.tsx rename {apps/nextjs/src/app/[locale]/manage/apps/new => packages/forms-collection/src/new-app}/_app-new-form.tsx (82%) rename {apps/nextjs/src/app/[locale]/manage/apps => packages/forms-collection/src/new-app}/_form.tsx (88%) create mode 100644 packages/forms-collection/src/upload-media/upload-media.tsx create mode 100644 packages/forms-collection/tsconfig.json create mode 100644 packages/modals-collection/src/apps/index.ts create mode 100644 packages/modals-collection/src/apps/quick-add-app/quick-add-app-modal.tsx diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index 76849ced7..a76e525da 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -30,6 +30,7 @@ "@homarr/definitions": "workspace:^0.1.0", "@homarr/docker": "workspace:^0.1.0", "@homarr/form": "workspace:^0.1.0", + "@homarr/forms-collection": "workspace:^0.1.0", "@homarr/gridstack": "^1.12.0", "@homarr/icons": "workspace:^0.1.0", "@homarr/integrations": "workspace:^0.1.0", diff --git a/apps/nextjs/src/app/[locale]/manage/apps/edit/[id]/_app-edit-form.tsx b/apps/nextjs/src/app/[locale]/manage/apps/edit/[id]/_app-edit-form.tsx index 2dba8111c..61e3693d3 100644 --- a/apps/nextjs/src/app/[locale]/manage/apps/edit/[id]/_app-edit-form.tsx +++ b/apps/nextjs/src/app/[locale]/manage/apps/edit/[id]/_app-edit-form.tsx @@ -7,12 +7,11 @@ import type { z } from "zod"; import type { RouterOutputs } from "@homarr/api"; import { clientApi } from "@homarr/api/client"; import { revalidatePathActionAsync } from "@homarr/common/client"; +import { AppForm } from "@homarr/forms-collection"; import { showErrorNotification, showSuccessNotification } from "@homarr/notifications"; import { useI18n, useScopedI18n } from "@homarr/translation/client"; import type { validation } from "@homarr/validation"; -import { AppForm } from "../../_form"; - interface AppEditFormProps { app: RouterOutputs["app"]["byId"]; } @@ -58,6 +57,7 @@ export const AppEditForm = ({ app }: AppEditFormProps) => { initialValues={app} handleSubmit={handleSubmit} isPending={isPending} + showBackToOverview /> ); }; diff --git a/apps/nextjs/src/app/[locale]/manage/apps/new/page.tsx b/apps/nextjs/src/app/[locale]/manage/apps/new/page.tsx index 6b0cd029d..ace72f5fa 100644 --- a/apps/nextjs/src/app/[locale]/manage/apps/new/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/apps/new/page.tsx @@ -2,10 +2,10 @@ import { notFound } from "next/navigation"; import { Container, Stack, Title } from "@mantine/core"; import { auth } from "@homarr/auth/next"; +import { AppNewForm } from "@homarr/forms-collection"; import { getI18n } from "@homarr/translation/server"; import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; -import { AppNewForm } from "./_app-new-form"; export default async function AppNewPage() { const session = await auth(); @@ -22,7 +22,7 @@ export default async function AppNewPage() { {t("app.page.create.title")} - + diff --git a/apps/nextjs/src/app/[locale]/manage/medias/_actions/upload-media.tsx b/apps/nextjs/src/app/[locale]/manage/medias/_actions/upload-media.tsx index f8164cdac..ced023c56 100644 --- a/apps/nextjs/src/app/[locale]/manage/medias/_actions/upload-media.tsx +++ b/apps/nextjs/src/app/[locale]/manage/medias/_actions/upload-media.tsx @@ -1,15 +1,11 @@ "use client"; -import type { JSX } from "react"; -import { Button, FileButton } from "@mantine/core"; +import { Button } from "@mantine/core"; import { IconUpload } from "@tabler/icons-react"; -import { clientApi } from "@homarr/api/client"; import { revalidatePathActionAsync } from "@homarr/common/client"; -import type { MaybePromise } from "@homarr/common/types"; -import { showErrorNotification, showSuccessNotification } from "@homarr/notifications"; +import { UploadMedia } from "@homarr/forms-collection"; import { useI18n } from "@homarr/translation/client"; -import { supportedMediaUploadFormats } from "@homarr/validation"; export const UploadMediaButton = () => { const t = useI18n(); @@ -27,45 +23,3 @@ export const UploadMediaButton = () => { ); }; - -interface UploadMediaProps { - children: (props: { onClick: () => void; loading: boolean }) => JSX.Element; - onSettled?: () => MaybePromise; - onSuccess?: (media: { id: string; url: string }) => MaybePromise; -} - -export const UploadMedia = ({ children, onSettled, onSuccess }: UploadMediaProps) => { - const t = useI18n(); - const { mutateAsync, isPending } = clientApi.media.uploadMedia.useMutation(); - - const handleFileUploadAsync = async (file: File | null) => { - if (!file) return; - const formData = new FormData(); - formData.append("file", file); - await mutateAsync(formData, { - async onSuccess(mediaId) { - showSuccessNotification({ - message: t("media.action.upload.notification.success.message"), - }); - await onSuccess?.({ - id: mediaId, - url: `/api/user-medias/${mediaId}`, - }); - }, - onError() { - showErrorNotification({ - message: t("media.action.upload.notification.error.message"), - }); - }, - async onSettled() { - await onSettled?.(); - }, - }); - }; - - return ( - - {({ onClick }) => children({ onClick, loading: isPending })} - - ); -}; diff --git a/apps/nextjs/src/app/[locale]/manage/search-engines/_form.tsx b/apps/nextjs/src/app/[locale]/manage/search-engines/_form.tsx index 3d679d9b6..c1bcaa225 100644 --- a/apps/nextjs/src/app/[locale]/manage/search-engines/_form.tsx +++ b/apps/nextjs/src/app/[locale]/manage/search-engines/_form.tsx @@ -9,12 +9,11 @@ import type { z } from "zod"; import { clientApi } from "@homarr/api/client"; import { searchEngineTypes } from "@homarr/definitions"; import { useZodForm } from "@homarr/form"; +import { IconPicker } from "@homarr/forms-collection"; import type { TranslationFunction } from "@homarr/translation"; import { useI18n } from "@homarr/translation/client"; import { validation } from "@homarr/validation"; -import { IconPicker } from "~/components/icons/picker/icon-picker"; - type FormType = z.infer; interface SearchEngineFormProps { diff --git a/packages/api/src/router/app.ts b/packages/api/src/router/app.ts index 84f712cd9..5101a7013 100644 --- a/packages/api/src/router/app.ts +++ b/packages/api/src/router/app.ts @@ -111,16 +111,19 @@ export const appRouter = createTRPCRouter({ create: permissionRequiredProcedure .requiresPermission("app-create") .input(validation.app.manage) - .output(z.void()) + .output(z.object({ appId: z.string() })) .meta({ openapi: { method: "POST", path: "/api/apps", tags: ["apps"], protect: true } }) .mutation(async ({ ctx, input }) => { + const id = createId(); await ctx.db.insert(apps).values({ - id: createId(), + id, name: input.name, description: input.description, iconUrl: input.iconUrl, href: input.href, }); + + return { appId: id }; }), createMany: permissionRequiredProcedure .requiresPermission("app-create") diff --git a/packages/forms-collection/eslint.config.js b/packages/forms-collection/eslint.config.js new file mode 100644 index 000000000..f7a5a7d36 --- /dev/null +++ b/packages/forms-collection/eslint.config.js @@ -0,0 +1,4 @@ +import baseConfig from "@homarr/eslint-config/base"; + +/** @type {import('typescript-eslint').Config} */ +export default [...baseConfig]; diff --git a/packages/forms-collection/index.ts b/packages/forms-collection/index.ts new file mode 100644 index 000000000..3bd16e178 --- /dev/null +++ b/packages/forms-collection/index.ts @@ -0,0 +1 @@ +export * from "./src"; diff --git a/packages/forms-collection/package.json b/packages/forms-collection/package.json new file mode 100644 index 000000000..3b116c952 --- /dev/null +++ b/packages/forms-collection/package.json @@ -0,0 +1,43 @@ +{ + "name": "@homarr/forms-collection", + "version": "0.1.0", + "private": true, + "license": "MIT", + "type": "module", + "exports": { + ".": "./index.ts" + }, + "typesVersions": { + "*": { + "*": [ + "src/*" + ] + } + }, + "scripts": { + "clean": "rm -rf .turbo node_modules", + "format": "prettier --check . --ignore-path ../../.gitignore", + "lint": "eslint", + "typecheck": "tsc --noEmit" + }, + "prettier": "@homarr/prettier-config", + "dependencies": { + "@homarr/api": "workspace:^0.1.0", + "@homarr/auth": "workspace:^0.1.0", + "@homarr/common": "workspace:^0.1.0", + "@homarr/form": "workspace:^0.1.0", + "@homarr/notifications": "workspace:^0.1.0", + "@homarr/translation": "workspace:^0.1.0", + "@homarr/validation": "workspace:^0.1.0", + "@mantine/core": "^7.17.0", + "react": "19.0.0", + "zod": "^3.24.2" + }, + "devDependencies": { + "@homarr/eslint-config": "workspace:^0.2.0", + "@homarr/prettier-config": "workspace:^0.1.0", + "@homarr/tsconfig": "workspace:^0.1.0", + "eslint": "^9.20.1", + "typescript": "^5.7.3" + } +} diff --git a/apps/nextjs/src/components/icons/picker/icon-picker.module.css b/packages/forms-collection/src/icon-picker/icon-picker.module.css similarity index 100% rename from apps/nextjs/src/components/icons/picker/icon-picker.module.css rename to packages/forms-collection/src/icon-picker/icon-picker.module.css diff --git a/apps/nextjs/src/components/icons/picker/icon-picker.tsx b/packages/forms-collection/src/icon-picker/icon-picker.tsx similarity index 94% rename from apps/nextjs/src/components/icons/picker/icon-picker.tsx rename to packages/forms-collection/src/icon-picker/icon-picker.tsx index da12d46fb..d3abda661 100644 --- a/apps/nextjs/src/components/icons/picker/icon-picker.tsx +++ b/packages/forms-collection/src/icon-picker/icon-picker.tsx @@ -24,7 +24,7 @@ import { clientApi } from "@homarr/api/client"; import { useSession } from "@homarr/auth/client"; import { useScopedI18n } from "@homarr/translation/client"; -import { UploadMedia } from "~/app/[locale]/manage/medias/_actions/upload-media"; +import { UploadMedia } from "../upload-media/upload-media"; import classes from "./icon-picker.module.css"; interface IconPickerProps { @@ -124,12 +124,7 @@ export const IconPicker = ({ value: propsValue, onChange, error, onFocus, onBlur } - leftSection={ - previewUrl ? ( - // eslint-disable-next-line @next/next/no-img-element - - ) : null - } + leftSection={previewUrl ? : null} value={search} onChange={(event) => { combobox.openDropdown(); diff --git a/packages/forms-collection/src/index.tsx b/packages/forms-collection/src/index.tsx new file mode 100644 index 000000000..273e5547d --- /dev/null +++ b/packages/forms-collection/src/index.tsx @@ -0,0 +1,6 @@ +export * from "./new-app/_app-new-form"; +export * from "./new-app/_form"; + +export * from "./icon-picker/icon-picker"; + +export * from "./upload-media/upload-media"; diff --git a/apps/nextjs/src/app/[locale]/manage/apps/new/_app-new-form.tsx b/packages/forms-collection/src/new-app/_app-new-form.tsx similarity index 82% rename from apps/nextjs/src/app/[locale]/manage/apps/new/_app-new-form.tsx rename to packages/forms-collection/src/new-app/_app-new-form.tsx index cae2f388e..846b10d7d 100644 --- a/apps/nextjs/src/app/[locale]/manage/apps/new/_app-new-form.tsx +++ b/packages/forms-collection/src/new-app/_app-new-form.tsx @@ -10,9 +10,15 @@ import { showErrorNotification, showSuccessNotification } from "@homarr/notifica import { useI18n, useScopedI18n } from "@homarr/translation/client"; import type { validation } from "@homarr/validation"; -import { AppForm } from "../_form"; +import { AppForm } from "./_form"; -export const AppNewForm = () => { +export const AppNewForm = ({ + showCreateAnother, + showBackToOverview, +}: { + showCreateAnother: boolean; + showBackToOverview: boolean; +}) => { const tScoped = useScopedI18n("app.page.create.notification"); const t = useI18n(); const router = useRouter(); @@ -52,8 +58,9 @@ export const AppNewForm = () => { diff --git a/apps/nextjs/src/app/[locale]/manage/apps/_form.tsx b/packages/forms-collection/src/new-app/_form.tsx similarity index 88% rename from apps/nextjs/src/app/[locale]/manage/apps/_form.tsx rename to packages/forms-collection/src/new-app/_form.tsx index ab1121f02..3536d47c6 100644 --- a/apps/nextjs/src/app/[locale]/manage/apps/_form.tsx +++ b/packages/forms-collection/src/new-app/_form.tsx @@ -9,11 +9,12 @@ import { useZodForm } from "@homarr/form"; import { useI18n } from "@homarr/translation/client"; import { validation } from "@homarr/validation"; -import { IconPicker } from "~/components/icons/picker/icon-picker"; +import { IconPicker } from "../icon-picker/icon-picker"; type FormType = z.infer; interface AppFormProps { + showBackToOverview: boolean; buttonLabels: { submit: string; submitAndCreateAnother?: string; @@ -25,6 +26,7 @@ interface AppFormProps { export const AppForm = ({ buttonLabels, + showBackToOverview, handleSubmit: originalHandleSubmit, initialValues, isPending, @@ -61,9 +63,11 @@ export const AppForm = ({ - + {showBackToOverview && ( + + )} {buttonLabels.submitAndCreateAnother && ( + ); }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index adf798cbc..b236c96de 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -127,6 +127,9 @@ importers: '@homarr/form': specifier: workspace:^0.1.0 version: link:../../packages/form + '@homarr/forms-collection': + specifier: workspace:^0.1.0 + version: link:../../packages/forms-collection '@homarr/gridstack': specifier: ^1.12.0 version: 1.12.0 @@ -216,16 +219,16 @@ importers: version: 5.66.7(@tanstack/react-query@5.66.7(react@19.0.0))(next@15.1.7(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0))(react@19.0.0) '@trpc/client': specifier: next - version: 11.0.0-rc.781(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(typescript@5.7.3) + version: 11.0.0-rc.788(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(typescript@5.7.3) '@trpc/next': specifier: next - version: 11.0.0-rc.781(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.781(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(typescript@5.7.3))(@trpc/react-query@11.0.0-rc.781(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.781(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(next@15.1.7(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + version: 11.0.0-rc.788(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.788(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(typescript@5.7.3))(@trpc/react-query@11.0.0-rc.788(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.788(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(next@15.1.7(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) '@trpc/react-query': specifier: next - version: 11.0.0-rc.781(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.781(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + version: 11.0.0-rc.788(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.788(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) '@trpc/server': specifier: next - version: 11.0.0-rc.781(typescript@5.7.3) + version: 11.0.0-rc.788(typescript@5.7.3) '@xterm/addon-canvas': specifier: ^0.7.0 version: 0.7.0(@xterm/xterm@5.5.0) @@ -580,13 +583,13 @@ importers: version: link:../validation '@trpc/client': specifier: next - version: 11.0.0-rc.781(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(typescript@5.7.3) + version: 11.0.0-rc.788(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(typescript@5.7.3) '@trpc/react-query': specifier: next - version: 11.0.0-rc.781(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.781(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + version: 11.0.0-rc.788(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.788(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) '@trpc/server': specifier: next - version: 11.0.0-rc.781(typescript@5.7.3) + version: 11.0.0-rc.788(typescript@5.7.3) lodash.clonedeep: specifier: ^4.5.0 version: 4.5.0 @@ -607,7 +610,7 @@ importers: version: 2.2.2 trpc-to-openapi: specifier: ^2.1.3 - version: 2.1.3(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(zod-openapi@2.19.0(zod@3.24.2))(zod@3.24.2) + version: 2.1.3(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(zod-openapi@2.19.0(zod@3.24.2))(zod@3.24.2) zod: specifier: ^3.24.2 version: 3.24.2 @@ -1148,6 +1151,55 @@ importers: specifier: ^5.7.3 version: 5.7.3 + packages/forms-collection: + dependencies: + '@homarr/api': + specifier: workspace:^0.1.0 + version: link:../api + '@homarr/auth': + specifier: workspace:^0.1.0 + version: link:../auth + '@homarr/common': + specifier: workspace:^0.1.0 + version: link:../common + '@homarr/form': + specifier: workspace:^0.1.0 + version: link:../form + '@homarr/notifications': + specifier: workspace:^0.1.0 + version: link:../notifications + '@homarr/translation': + specifier: workspace:^0.1.0 + version: link:../translation + '@homarr/validation': + specifier: workspace:^0.1.0 + version: link:../validation + '@mantine/core': + specifier: ^7.17.0 + version: 7.17.0(@mantine/hooks@7.17.0(react@19.0.0))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: + specifier: 19.0.0 + version: 19.0.0 + zod: + specifier: ^3.24.2 + version: 3.24.2 + devDependencies: + '@homarr/eslint-config': + specifier: workspace:^0.2.0 + version: link:../../tooling/eslint + '@homarr/prettier-config': + specifier: workspace:^0.1.0 + version: link:../../tooling/prettier + '@homarr/tsconfig': + specifier: workspace:^0.1.0 + version: link:../../tooling/typescript + eslint: + specifier: ^9.20.1 + version: 9.20.1 + typescript: + specifier: ^5.7.3 + version: 5.7.3 + packages/icons: dependencies: '@homarr/common': @@ -1319,6 +1371,9 @@ importers: '@homarr/form': specifier: workspace:^0.1.0 version: link:../form + '@homarr/forms-collection': + specifier: workspace:^0.1.0 + version: link:../forms-collection '@homarr/modals': specifier: workspace:^0.1.0 version: link:../modals @@ -1947,6 +2002,9 @@ importers: '@homarr/modals': specifier: workspace:^0.1.0 version: link:../modals + '@homarr/modals-collection': + specifier: workspace:^0.1.0 + version: link:../modals-collection '@homarr/notifications': specifier: workspace:^0.1.0 version: link:../notifications @@ -4398,19 +4456,19 @@ packages: tree-sitter: optional: true - '@trpc/client@11.0.0-rc.781': - resolution: {integrity: sha512-zAXsTPzk4RnvxSg6oOs4NSjorHufxIZ9rU6jGCHW4JrrIQP34RwruufUViC+xwrNLz17wIjKNvraQDT+cjowmw==} + '@trpc/client@11.0.0-rc.788': + resolution: {integrity: sha512-88+jCRr7RtoAbJPOKQ2jxE+KSuPfenohPf7wddFBGWQGTYFUifPpJgk9ihWPGMxEboFBqtfgXqZMrvmgUiZicw==} peerDependencies: - '@trpc/server': 11.0.0-rc.781+df4d4ede3 + '@trpc/server': 11.0.0-rc.788+a8e9f72c0 typescript: '>=5.7.2' - '@trpc/next@11.0.0-rc.781': - resolution: {integrity: sha512-rDV5Ult/GA3g7rNR4JRes8zReTsL/96K3sQH+79uY3G3HASaKb1U3nFjiB0/toI/4EoHW0jFSx/WDsTrKIqrsw==} + '@trpc/next@11.0.0-rc.788': + resolution: {integrity: sha512-cNjsv87VeWhqg2qUM7EdGJxixcVRcPrurYcnZY7kJOGf+Iyv+ybxIZhNA7smLyvih0i1sqUt8bFyWw1veTEzWA==} peerDependencies: '@tanstack/react-query': ^5.59.15 - '@trpc/client': 11.0.0-rc.781+df4d4ede3 - '@trpc/react-query': 11.0.0-rc.781+df4d4ede3 - '@trpc/server': 11.0.0-rc.781+df4d4ede3 + '@trpc/client': 11.0.0-rc.788+a8e9f72c0 + '@trpc/react-query': 11.0.0-rc.788+a8e9f72c0 + '@trpc/server': 11.0.0-rc.788+a8e9f72c0 next: '*' react: '>=16.8.0' react-dom: '>=16.8.0' @@ -4421,18 +4479,18 @@ packages: '@trpc/react-query': optional: true - '@trpc/react-query@11.0.0-rc.781': - resolution: {integrity: sha512-BLd7JfFCJ1fNigpNek0fMARm4fbk7BbheMY8/jNggnE9CkcEqnsOzq+wP6ji8kX8c4NVbxdF5L4PQmEA+3uaNA==} + '@trpc/react-query@11.0.0-rc.788': + resolution: {integrity: sha512-0cU3O6hqPH9FwllH5K2b6yZcYdv5aAoZ3gh4j57sDqyI115XjS+a1fBd9SgZun61b9YCR4OsbaEiFJZKmsBMDQ==} peerDependencies: '@tanstack/react-query': ^5.62.8 - '@trpc/client': 11.0.0-rc.781+df4d4ede3 - '@trpc/server': 11.0.0-rc.781+df4d4ede3 + '@trpc/client': 11.0.0-rc.788+a8e9f72c0 + '@trpc/server': 11.0.0-rc.788+a8e9f72c0 react: '>=18.2.0' react-dom: '>=18.2.0' typescript: '>=5.7.2' - '@trpc/server@11.0.0-rc.781': - resolution: {integrity: sha512-KmZDE2Qa+zfKTIbvsNNZESUK0Zoeo0k8/ZPPMzTh0+Tm7L6yeFNk+i4npC1i8Nxr8pxaJUIG5Jab7Rv00hsoHQ==} + '@trpc/server@11.0.0-rc.788': + resolution: {integrity: sha512-ifsIgRSUXJFSqS7v+XUvt4pcIG2PDw1cKmvL40MhrgPRxG+VBlizxDLk3xXnXrkYVrw6jlDCik5oi+ZMXkHiDA==} peerDependencies: typescript: '>=5.7.2' @@ -12383,33 +12441,33 @@ snapshots: tree-sitter: 0.22.1 optional: true - '@trpc/client@11.0.0-rc.781(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(typescript@5.7.3)': + '@trpc/client@11.0.0-rc.788(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(typescript@5.7.3)': dependencies: - '@trpc/server': 11.0.0-rc.781(typescript@5.7.3) + '@trpc/server': 11.0.0-rc.788(typescript@5.7.3) typescript: 5.7.3 - '@trpc/next@11.0.0-rc.781(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.781(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(typescript@5.7.3))(@trpc/react-query@11.0.0-rc.781(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.781(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(next@15.1.7(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': + '@trpc/next@11.0.0-rc.788(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.788(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(typescript@5.7.3))(@trpc/react-query@11.0.0-rc.788(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.788(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(next@15.1.7(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': dependencies: - '@trpc/client': 11.0.0-rc.781(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(typescript@5.7.3) - '@trpc/server': 11.0.0-rc.781(typescript@5.7.3) + '@trpc/client': 11.0.0-rc.788(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(typescript@5.7.3) + '@trpc/server': 11.0.0-rc.788(typescript@5.7.3) next: 15.1.7(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) typescript: 5.7.3 optionalDependencies: '@tanstack/react-query': 5.66.7(react@19.0.0) - '@trpc/react-query': 11.0.0-rc.781(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.781(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) + '@trpc/react-query': 11.0.0-rc.788(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.788(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) - '@trpc/react-query@11.0.0-rc.781(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.781(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': + '@trpc/react-query@11.0.0-rc.788(@tanstack/react-query@5.66.7(react@19.0.0))(@trpc/client@11.0.0-rc.788(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': dependencies: '@tanstack/react-query': 5.66.7(react@19.0.0) - '@trpc/client': 11.0.0-rc.781(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(typescript@5.7.3) - '@trpc/server': 11.0.0-rc.781(typescript@5.7.3) + '@trpc/client': 11.0.0-rc.788(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(typescript@5.7.3) + '@trpc/server': 11.0.0-rc.788(typescript@5.7.3) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) typescript: 5.7.3 - '@trpc/server@11.0.0-rc.781(typescript@5.7.3)': + '@trpc/server@11.0.0-rc.788(typescript@5.7.3)': dependencies: typescript: 5.7.3 @@ -18054,9 +18112,9 @@ snapshots: triple-beam@1.4.1: {} - trpc-to-openapi@2.1.3(@trpc/server@11.0.0-rc.781(typescript@5.7.3))(zod-openapi@2.19.0(zod@3.24.2))(zod@3.24.2): + trpc-to-openapi@2.1.3(@trpc/server@11.0.0-rc.788(typescript@5.7.3))(zod-openapi@2.19.0(zod@3.24.2))(zod@3.24.2): dependencies: - '@trpc/server': 11.0.0-rc.781(typescript@5.7.3) + '@trpc/server': 11.0.0-rc.788(typescript@5.7.3) co-body: 6.2.0 h3: 1.13.0 openapi3-ts: 4.4.0