From c07240a1f4de3fc5a302697eb3b7a61abe60ae00 Mon Sep 17 00:00:00 2001 From: Luka Pajukanta Date: Tue, 28 Jul 2026 20:37:14 +0300 Subject: [PATCH 01/12] feat(messages_v2): add Messages V2 for emailing program offerers/hosts Adds a new messages_v2 Django app and Program V2 admin UI for composing and sending Markdown messages to program offerers/hosts, selected via OR-of-AND involvement dimension filters. Messages have a draft -> active (sent) -> optionally expired lifecycle; edits to an already-sent message are not retroactive. New involvements matching an active message's filters are sent to automatically. Recipients can view messages they've received on their profile. Backend: - Message (UUID7 PK, created_at derived from it), MessageReplyTo, MessageBody (dedup store), MessageRecipient models - Security-critical rendering pipeline: placeholders are tokenized, substituted after Markdown rendering and nh3 sanitization, and HTML-escaped, so recipient-controlled values can never inject Markdown or HTML - Celery send task + auto-send hook on Involvement.refresh_dependents() - GraphQL queries/mutations under program_v2 CBAC, event log entries - Two integration tests covering compose->send (incl. injection payloads) and auto-send + non-retroactive edit Frontend: - New program-messages admin routes (list, new, edit) sharing a MessageComposeCard; recipient filters edited via a modal whose selection state survives the modal's mount/unmount cycle (RecipientFilterField) - New MarkdownText SchemaForm field type backed by @uiw/react-md-editor, toolbar restricted to formatting the backend actually allows - Reply-to address management on the program preferences page - Profile "received messages" view - Full en/fi/sv translations Co-Authored-By: Claude Sonnet 5 --- kompassi-v2-frontend/package-lock.json | 2437 +++++++++++++++-- kompassi-v2-frontend/package.json | 2 + kompassi-v2-frontend/src/__generated__/gql.ts | 102 +- .../src/__generated__/graphql.ts | 411 ++- .../program-messages/MessageComposeCard.tsx | 153 ++ .../RecipientFilterEditor.tsx | 139 + .../program-messages/RecipientFilterField.tsx | 88 + .../program-messages/[messageId]/actions.ts | 127 + .../program-messages/[messageId]/page.tsx | 198 ++ .../formatRecipientFilterSummary.tsx | 34 + .../program-messages/new/actions.ts | 54 + .../[eventSlug]/program-messages/new/page.tsx | 122 + .../[eventSlug]/program-messages/page.tsx | 154 ++ .../program-preferences/actions.ts | 88 + .../[eventSlug]/program-preferences/page.tsx | 105 +- .../summary/FieldSummaryComponent.tsx | 1 + .../app/[locale]/profile/messages/page.tsx | 109 + .../src/components/ModalButton.tsx | 15 +- .../src/components/forms/MarkdownEditor.tsx | 86 + .../src/components/forms/SchemaFormInput.tsx | 16 +- .../src/components/forms/models.ts | 8 + .../src/components/forms/newField.ts | 1 + .../src/components/forms/processFormData.ts | 1 + .../components/navigation/NavigationMenus.tsx | 1 + .../components/program/ProgramAdminTabs.tsx | 8 +- kompassi-v2-frontend/src/translations/en.tsx | 162 ++ kompassi-v2-frontend/src/translations/fi.tsx | 167 +- kompassi-v2-frontend/src/translations/sv.tsx | 162 ++ kompassi/core/graphql/profile_own.py | 14 + kompassi/graphql_api/schema.py | 19 + kompassi/involvement/models/involvement.py | 13 + kompassi/messages_v2/__init__.py | 0 kompassi/messages_v2/admin.py | 69 + kompassi/messages_v2/apps.py | 10 + kompassi/messages_v2/event_log_entry_types.py | 26 + kompassi/messages_v2/graphql/__init__.py | 0 kompassi/messages_v2/graphql/enums.py | 7 + kompassi/messages_v2/graphql/message.py | 50 + .../messages_v2/graphql/message_limited.py | 35 + .../messages_v2/graphql/message_reply_to.py | 17 + .../messages_v2/graphql/mutations/__init__.py | 0 .../graphql/mutations/create_message.py | 65 + .../mutations/create_message_reply_to.py | 39 + .../graphql/mutations/delete_message.py | 53 + .../mutations/delete_message_reply_to.py | 40 + .../graphql/mutations/expire_message.py | 48 + .../graphql/mutations/send_message.py | 58 + .../graphql/mutations/update_message.py | 66 + .../mutations/update_message_reply_to.py | 39 + .../messages_v2/migrations/0001_initial.py | 190 ++ kompassi/messages_v2/migrations/__init__.py | 0 kompassi/messages_v2/models/__init__.py | 15 + kompassi/messages_v2/models/enums.py | 23 + kompassi/messages_v2/models/message.py | 156 ++ kompassi/messages_v2/models/message_body.py | 33 + .../messages_v2/models/message_recipient.py | 71 + .../messages_v2/models/message_reply_to.py | 59 + .../messages_v2/models/recipient_filters.py | 25 + kompassi/messages_v2/rendering.py | 179 ++ kompassi/messages_v2/tasks.py | 140 + .../templates/messages_v2/email.html | 28 + kompassi/messages_v2/tests.py | 255 ++ kompassi/program_v2/graphql/meta.py | 66 + kompassi/settings.py | 1 + pyproject.toml | 1 + uv.lock | 36 + 66 files changed, 6705 insertions(+), 192 deletions(-) create mode 100644 kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/MessageComposeCard.tsx create mode 100644 kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/RecipientFilterEditor.tsx create mode 100644 kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/RecipientFilterField.tsx create mode 100644 kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/[messageId]/actions.ts create mode 100644 kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/[messageId]/page.tsx create mode 100644 kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/formatRecipientFilterSummary.tsx create mode 100644 kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/new/actions.ts create mode 100644 kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/new/page.tsx create mode 100644 kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/page.tsx create mode 100644 kompassi-v2-frontend/src/app/[locale]/profile/messages/page.tsx create mode 100644 kompassi-v2-frontend/src/components/forms/MarkdownEditor.tsx create mode 100644 kompassi/messages_v2/__init__.py create mode 100644 kompassi/messages_v2/admin.py create mode 100644 kompassi/messages_v2/apps.py create mode 100644 kompassi/messages_v2/event_log_entry_types.py create mode 100644 kompassi/messages_v2/graphql/__init__.py create mode 100644 kompassi/messages_v2/graphql/enums.py create mode 100644 kompassi/messages_v2/graphql/message.py create mode 100644 kompassi/messages_v2/graphql/message_limited.py create mode 100644 kompassi/messages_v2/graphql/message_reply_to.py create mode 100644 kompassi/messages_v2/graphql/mutations/__init__.py create mode 100644 kompassi/messages_v2/graphql/mutations/create_message.py create mode 100644 kompassi/messages_v2/graphql/mutations/create_message_reply_to.py create mode 100644 kompassi/messages_v2/graphql/mutations/delete_message.py create mode 100644 kompassi/messages_v2/graphql/mutations/delete_message_reply_to.py create mode 100644 kompassi/messages_v2/graphql/mutations/expire_message.py create mode 100644 kompassi/messages_v2/graphql/mutations/send_message.py create mode 100644 kompassi/messages_v2/graphql/mutations/update_message.py create mode 100644 kompassi/messages_v2/graphql/mutations/update_message_reply_to.py create mode 100644 kompassi/messages_v2/migrations/0001_initial.py create mode 100644 kompassi/messages_v2/migrations/__init__.py create mode 100644 kompassi/messages_v2/models/__init__.py create mode 100644 kompassi/messages_v2/models/enums.py create mode 100644 kompassi/messages_v2/models/message.py create mode 100644 kompassi/messages_v2/models/message_body.py create mode 100644 kompassi/messages_v2/models/message_recipient.py create mode 100644 kompassi/messages_v2/models/message_reply_to.py create mode 100644 kompassi/messages_v2/models/recipient_filters.py create mode 100644 kompassi/messages_v2/rendering.py create mode 100644 kompassi/messages_v2/tasks.py create mode 100644 kompassi/messages_v2/templates/messages_v2/email.html create mode 100644 kompassi/messages_v2/tests.py diff --git a/kompassi-v2-frontend/package-lock.json b/kompassi-v2-frontend/package-lock.json index 519ca1ecf..10f088d12 100644 --- a/kompassi-v2-frontend/package-lock.json +++ b/kompassi-v2-frontend/package-lock.json @@ -13,6 +13,8 @@ "@apollo/client-integration-nextjs": "^0.12.2", "@graphql-typed-document-node/core": "^3.2.0", "@js-temporal/polyfill": "^0.5.1", + "@uiw/react-markdown-preview": "^5.2.1", + "@uiw/react-md-editor": "^4.1.1", "bootstrap": "^5.3.5", "motion": "^12.0.0", "next": "^15.5.7", @@ -3463,13 +3465,39 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, "license": "MIT" }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/js-yaml": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", @@ -3491,6 +3519,21 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "22.19.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.7.tgz", @@ -3501,6 +3544,12 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/prismjs": { + "version": "1.26.6", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.6.tgz", + "integrity": "sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==", + "license": "MIT" + }, "node_modules/@types/prop-types": { "version": "15.7.15", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", @@ -3534,6 +3583,12 @@ "@types/react": "*" } }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, "node_modules/@types/warning": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", @@ -3851,6 +3906,68 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@uiw/copy-to-clipboard": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/@uiw/copy-to-clipboard/-/copy-to-clipboard-1.0.21.tgz", + "integrity": "sha512-apdzZJyJC/IEj21N22ry1H022pgpSA+FwNKxmvOGQ9rUMdyRbHf1nZq2UwqnfGOuTr7iOKLzNgWsCJtAwyAZpw==", + "license": "MIT", + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/@uiw/react-markdown-preview": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@uiw/react-markdown-preview/-/react-markdown-preview-5.2.1.tgz", + "integrity": "sha512-JjvcHveT6glhlJYJx1XGBZij6wkw+VwREV6Z6m/GpsjPPdLjF1x8nlPBSB/ATyUF4lD7C8ttMkCqVH9N9XMgEA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.17.2", + "@uiw/copy-to-clipboard": "~1.0.12", + "react-markdown": "~10.1.0", + "rehype-attr": "~4.0.0", + "rehype-autolink-headings": "~7.1.0", + "rehype-ignore": "^2.0.0", + "rehype-prism-plus": "~2.0.0", + "rehype-raw": "^7.0.0", + "rehype-rewrite": "~4.0.0", + "rehype-slug": "~6.0.0", + "remark-gfm": "~4.0.0", + "remark-github-blockquote-alert": "^1.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@uiw/react-md-editor": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@uiw/react-md-editor/-/react-md-editor-4.1.1.tgz", + "integrity": "sha512-yZqV5twN/sSfpce4cO/1bqy16o7v2oW324VNh2gcnsSpzOr2jEHpchM+ElD1y+ivUmFXcDZ5Ky5TOuPZg4qL6g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.14.6", + "@uiw/react-markdown-preview": "^5.2.0", + "rehype": "~13.0.0", + "rehype-prism-plus": "~2.0.0" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", + "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", + "license": "ISC" + }, "node_modules/@unrs/resolver-binding-android-arm-eabi": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", @@ -4601,6 +4718,16 @@ "node": ">= 0.4" } }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -4642,6 +4769,16 @@ "node": ">=6.0.0" } }, + "node_modules/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -4654,6 +4791,12 @@ "readable-stream": "^3.4.0" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, "node_modules/bootstrap": { "version": "5.3.8", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz", @@ -4869,6 +5012,16 @@ "upper-case-first": "^2.0.2" } }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -4926,6 +5079,46 @@ "upper-case-first": "^2.0.2" } }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chardet": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", @@ -5119,6 +5312,16 @@ "dev": true, "license": "MIT" }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", @@ -5270,6 +5473,22 @@ "node": ">= 8" } }, + "node_modules/css-selector-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.3.0.tgz", + "integrity": "sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -5381,7 +5600,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -5395,6 +5613,19 @@ } } }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -5489,6 +5720,19 @@ "node": ">=8" } }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -5502,6 +5746,19 @@ "node": ">=8" } }, + "node_modules/direction": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz", + "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==", + "license": "MIT", + "bin": { + "direction": "cli.js" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -5588,6 +5845,18 @@ "dev": true, "license": "MIT" }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -6251,6 +6520,16 @@ "node": ">=4.0" } }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -6261,6 +6540,12 @@ "node": ">=0.10.0" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -6670,6 +6955,12 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -6986,111 +7277,385 @@ "node": ">= 0.4" } }, - "node_modules/header-case": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", - "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", - "dev": true, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", "license": "MIT", "dependencies": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", "dependencies": { - "react-is": "^16.7.0" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, + "node_modules/hast-util-has-property": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz", + "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", "license": "MIT", "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" + "@types/hast": "^3.0.0" }, - "engines": { - "node": ">= 14" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, + "node_modules/hast-util-heading-rank": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz", + "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==", "license": "MIT", "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" + "@types/hast": "^3.0.0" }, - "engines": { - "node": ">= 14" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "@types/hast": "^3.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/icu-minify": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/icu-minify/-/icu-minify-4.13.0.tgz", - "integrity": "sha512-SIFMeUHZJjzS5RvIGvybKvWoHjDm9cGVEs2EpJ8PmywOdJLWyblPm7TdPLLoUtkJtwQD7iGhl2WMptZ+N0on+w==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/amannn" - } - ], + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", "license": "MIT", "dependencies": { - "@formatjs/icu-messageformat-parser": "^3.4.0" + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", "license": "MIT", - "engines": { - "node": ">= 4" + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-select": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.4.tgz", + "integrity": "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "bcp-47-match": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "css-selector-parser": "^3.0.0", + "devlop": "^1.0.0", + "direction": "^2.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "nth-check": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/header-case": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", + "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icu-minify": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/icu-minify/-/icu-minify-4.13.0.tgz", + "integrity": "sha512-SIFMeUHZJjzS5RvIGvybKvWoHjDm9cGVEs2EpJ8PmywOdJLWyblPm7TdPLLoUtkJtwQD7iGhl2WMptZ+N0on+w==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/amannn" + } + ], + "license": "MIT", + "dependencies": { + "@formatjs/icu-messageformat-parser": "^3.4.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" } }, "node_modules/immutable": { @@ -7167,6 +7732,12 @@ "dev": true, "license": "ISC" }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, "node_modules/inquirer": { "version": "8.2.7", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", @@ -7242,6 +7813,30 @@ "node": ">=0.10.0" } }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", @@ -7407,6 +8002,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -7473,6 +8078,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -7546,6 +8161,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -8072,143 +8699,1008 @@ "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lower-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-2.0.2.tgz", + "integrity": "sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/meros": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.1.tgz", + "integrity": "sha512-eV7dRObfTrckdmAz4/n7pT1njIsIJXRIZkgCiX43xEsPNy4gjXQzOYYxmGcolAMtF7HyfqRuDBh3Lgs4hmhVEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=13" + }, + "peerDependencies": { + "@types/node": ">=13" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "tslib": "^2.0.3" + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/lower-case-first": { + "node_modules/micromark-util-decode-numeric-character-reference": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-2.0.2.tgz", - "integrity": "sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==", - "dev": true, + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "tslib": "^2.0.3" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "yallist": "^3.0.2" + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "micromark-util-types": "^2.0.0" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">= 8" + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/meros": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.1.tgz", - "integrity": "sha512-eV7dRObfTrckdmAz4/n7pT1njIsIJXRIZkgCiX43xEsPNy4gjXQzOYYxmGcolAMtF7HyfqRuDBh3Lgs4hmhVEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=13" - }, - "peerDependencies": { - "@types/node": ">=13" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -8301,7 +9793,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/mute-stream": { @@ -8629,6 +10120,18 @@ "node": ">=0.10.0" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/nullthrows": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", @@ -8984,6 +10487,31 @@ "node": ">=6" } }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, "node_modules/parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", @@ -9018,6 +10546,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", + "license": "ISC" + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/pascal-case": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", @@ -9251,6 +10797,16 @@ "react": ">=0.14.0" } }, + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -9368,6 +10924,33 @@ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", "license": "MIT" }, + "node_modules/react-markdown": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz", + "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -9436,6 +11019,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/refractor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/refractor/-/refractor-5.0.0.tgz", + "integrity": "sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/prismjs": "^1.0.0", + "hastscript": "^9.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", @@ -9475,6 +11074,181 @@ } } }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-attr": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/rehype-attr/-/rehype-attr-4.0.2.tgz", + "integrity": "sha512-v4+gw7pvUVLbG/dUpLgBE6r3TWTBYJ7z+sfAH3zapmM5CKzk5+CopFQgr4gMR6OBSKl/qpI6HR7gv1Cbig0uow==", + "license": "MIT", + "dependencies": { + "unified": "~11.0.0", + "unist-util-visit": "~5.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/rehype-attr/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-autolink-headings": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz", + "integrity": "sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-heading-rank": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-ignore": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/rehype-ignore/-/rehype-ignore-2.0.3.tgz", + "integrity": "sha512-IzhP6/u/6sm49sdktuYSmeIuObWB+5yC/5eqVws8BhuGA9kY25/byz6uCy/Ravj6lXUShEd2ofHM5MyAIj86Sg==", + "license": "MIT", + "dependencies": { + "hast-util-select": "^6.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-prism-plus": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rehype-prism-plus/-/rehype-prism-plus-2.0.2.tgz", + "integrity": "sha512-jTHb8ZtQHd2VWAAKeCINgv/8zNEF0+LesmwJak69GemoPVN9/8fGEARTvqOpKqmN57HwaM9z8UKBVNVJe8zggw==", + "license": "MIT", + "dependencies": { + "hast-util-to-string": "^3.0.1", + "parse-numeric-range": "^1.3.0", + "refractor": "^5.0.0", + "rehype-parse": "^9.0.1", + "unist-util-filter": "^5.0.1", + "unist-util-visit": "^5.1.0" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-rewrite": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/rehype-rewrite/-/rehype-rewrite-4.0.4.tgz", + "integrity": "sha512-L/FO96EOzSA6bzOam4DVu61/PB3AGKcSPXpa53yMIozoxH4qg1+bVZDF8zh1EsuxtSauAhzt5cCnvoplAaSLrw==", + "license": "MIT", + "dependencies": { + "hast-util-select": "^6.0.0", + "unified": "^11.0.3", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/rehype-slug": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz", + "integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "github-slugger": "^2.0.0", + "hast-util-heading-rank": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/relay-runtime": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/relay-runtime/-/relay-runtime-12.0.0.tgz", @@ -9487,6 +11261,87 @@ "invariant": "^2.2.4" } }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-github-blockquote-alert": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/remark-github-blockquote-alert/-/remark-github-blockquote-alert-1.3.1.tgz", + "integrity": "sha512-OPNnimcKeozWN1w8KVQEuHOxgN3L4rah8geMOLhA5vN9wITqU4FWD+G26tkEsCGHiOVDbISx+Se5rGZ+D1p0Jg==", + "license": "MIT", + "dependencies": { + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remedial": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz", @@ -10077,6 +11932,16 @@ "node": ">=0.10.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/sponge-case": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sponge-case/-/sponge-case-1.0.1.tgz", @@ -10260,6 +12125,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -10296,6 +12175,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, "node_modules/styled-jsx": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", @@ -10500,6 +12397,26 @@ "tree-kill": "cli.js" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/ts-api-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", @@ -10778,6 +12695,104 @@ "dev": true, "license": "MIT" }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-filter": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/unist-util-filter/-/unist-util-filter-5.0.1.tgz", + "integrity": "sha512-pHx7D4Zt6+TsfwylH9+lYhBhzyhEnCXs/lbq/Hstxno5z4gVdyc2WEW0asfjGKPyG4pEKrnBv5hdkO6+aRnQJw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unixify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", @@ -10935,6 +12950,48 @@ "uuid": "dist/esm/bin/uuid" } }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/warning": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", @@ -10954,6 +13011,16 @@ "defaults": "^1.0.3" } }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", @@ -11240,6 +13307,16 @@ "dependencies": { "zen-observable": "0.8.15" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/kompassi-v2-frontend/package.json b/kompassi-v2-frontend/package.json index 651c9a474..7f59e27f7 100644 --- a/kompassi-v2-frontend/package.json +++ b/kompassi-v2-frontend/package.json @@ -19,6 +19,8 @@ "@apollo/client-integration-nextjs": "^0.12.2", "@graphql-typed-document-node/core": "^3.2.0", "@js-temporal/polyfill": "^0.5.1", + "@uiw/react-markdown-preview": "^5.2.1", + "@uiw/react-md-editor": "^4.1.1", "bootstrap": "^5.3.5", "motion": "^12.0.0", "next": "^15.5.7", diff --git a/kompassi-v2-frontend/src/__generated__/gql.ts b/kompassi-v2-frontend/src/__generated__/gql.ts index 788bbdf7c..6e2159b60 100644 --- a/kompassi-v2-frontend/src/__generated__/gql.ts +++ b/kompassi-v2-frontend/src/__generated__/gql.ts @@ -113,6 +113,16 @@ type Documents = { "\n query ProgramAdminHosts(\n $eventSlug: String!\n $filters: [DimensionFilterInput!]\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n timezone\n\n program {\n programHostsExcelExportLink\n\n dimensions(isListFilter: true, publicOnly: false) {\n ...DimensionFilter\n }\n programHosts(programFilters: $filters) {\n ...ProgramAdminHost\n }\n }\n }\n }\n": typeof types.ProgramAdminHostsDocument, "\n fragment ProgramAdminInvitation on FullInvitationType {\n id\n email\n createdAt\n cachedDimensions\n\n program {\n slug\n title\n }\n }\n": typeof types.ProgramAdminInvitationFragmentDoc, "\n query ProgramAdminInvitations($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n timezone\n\n program {\n invitations {\n ...ProgramAdminInvitation\n }\n }\n }\n }\n": typeof types.ProgramAdminInvitationsDocument, + "\n mutation UpdateMessage($input: UpdateMessageInput!) {\n updateMessage(input: $input) {\n message {\n id\n }\n }\n }\n": typeof types.UpdateMessageDocument, + "\n mutation SendMessage($input: SendMessageInput!) {\n sendMessage(input: $input) {\n message {\n id\n }\n }\n }\n": typeof types.SendMessageDocument, + "\n mutation ExpireMessage($input: ExpireMessageInput!) {\n expireMessage(input: $input) {\n message {\n id\n }\n }\n }\n": typeof types.ExpireMessageDocument, + "\n mutation DeleteMessage($input: DeleteMessageInput!) {\n deleteMessage(input: $input) {\n messageId\n }\n }\n": typeof types.DeleteMessageDocument, + "\n fragment MessageCompose on MessageType {\n id\n subject\n body\n dispatch\n state\n createdAt\n sentAt\n expiredAt\n recipientFilters\n recipientCount\n replyTo {\n id\n }\n }\n": typeof types.MessageComposeFragmentDoc, + "\n query ProgramMessageComposePage(\n $eventSlug: String!\n $messageId: String!\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n message(id: $messageId) {\n ...MessageCompose\n }\n replyToAddresses {\n id\n name\n email\n }\n recipientDimensions {\n ...DimensionValueSelect\n }\n }\n }\n }\n": typeof types.ProgramMessageComposePageDocument, + "\n mutation CreateMessage($input: CreateMessageInput!) {\n createMessage(input: $input) {\n message {\n id\n }\n }\n }\n": typeof types.CreateMessageDocument, + "\n query ProgramMessageNewPage($eventSlug: String!, $locale: String) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n replyToAddresses {\n id\n name\n email\n }\n recipientDimensions {\n ...DimensionValueSelect\n }\n }\n }\n }\n": typeof types.ProgramMessageNewPageDocument, + "\n fragment ProgramMessageListRow on MessageType {\n id\n subject\n state\n dispatch\n createdAt\n sentAt\n recipientCount\n }\n": typeof types.ProgramMessageListRowFragmentDoc, + "\n query ProgramMessagesPage($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n messages {\n ...ProgramMessageListRow\n }\n }\n }\n }\n": typeof types.ProgramMessagesPageDocument, "\n mutation AcceptProgramOffer($input: AcceptProgramOfferInput!) {\n acceptProgramOffer(input: $input) {\n program {\n slug\n }\n }\n }\n": typeof types.AcceptProgramOfferDocument, "\n mutation CancelProgramOffer($input: CancelProgramOfferInput!) {\n cancelProgramOffer(input: $input) {\n responseId\n }\n }\n": typeof types.CancelProgramOfferDocument, "\n mutation EditProgramOffer($input: CreateSurveyResponseInput!) {\n createSurveyResponse(input: $input) {\n response {\n id\n }\n }\n }\n": typeof types.EditProgramOfferDocument, @@ -125,7 +135,11 @@ type Documents = { "\n fragment ProgramOfferDimension on FullDimensionType {\n ...DimensionFilter\n ...ColoredDimensionTableCell\n ...DimensionValueSelect\n }\n": typeof types.ProgramOfferDimensionFragmentDoc, "\n query ProgramOffers(\n $eventSlug: String!\n $locale: String\n $filters: [DimensionFilterInput!]\n ) {\n event(slug: $eventSlug) {\n slug\n name\n program {\n programOffersExcelExportLink\n canDeleteProgramOffers\n\n listFilters: dimensions(isListFilter: true, publicOnly: false) {\n ...ProgramOfferDimension\n }\n\n keyDimensions: dimensions(keyDimensionsOnly: true, publicOnly: false) {\n ...ProgramOfferDimension\n }\n\n stateDimension {\n ...ProgramOfferDimension\n }\n\n countProgramOffers\n programOffers(filters: $filters) {\n ...ProgramOffer\n }\n }\n }\n }\n": typeof types.ProgramOffersDocument, "\n mutation UpdateProgramPreferences($input: UpdateProgramPreferencesInput!) {\n updateProgramPreferences(input: $input) {\n preferences {\n publicFrom\n isSchedulePublic\n }\n }\n }\n": typeof types.UpdateProgramPreferencesDocument, - "\n query ProgramPreferences($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n publicFrom\n isSchedulePublic\n }\n }\n }\n": typeof types.ProgramPreferencesDocument, + "\n mutation CreateMessageReplyTo($input: CreateMessageReplyToInput!) {\n createMessageReplyTo(input: $input) {\n replyTo {\n id\n }\n }\n }\n": typeof types.CreateMessageReplyToDocument, + "\n mutation UpdateMessageReplyTo($input: UpdateMessageReplyToInput!) {\n updateMessageReplyTo(input: $input) {\n replyTo {\n id\n }\n }\n }\n": typeof types.UpdateMessageReplyToDocument, + "\n mutation DeleteMessageReplyTo($input: DeleteMessageReplyToInput!) {\n deleteMessageReplyTo(input: $input) {\n replyToId\n }\n }\n": typeof types.DeleteMessageReplyToDocument, + "\n fragment MessageReplyToRow on MessageReplyToType {\n id\n name\n email\n }\n": typeof types.MessageReplyToRowFragmentDoc, + "\n query ProgramPreferences($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n publicFrom\n isSchedulePublic\n\n replyToAddresses {\n ...MessageReplyToRow\n }\n }\n }\n }\n": typeof types.ProgramPreferencesDocument, "\n query ProgramAdminReportsPage($eventSlug: String!, $locale: String) {\n event(slug: $eventSlug) {\n name\n slug\n timezone\n\n program {\n reports(lang: $locale) {\n ...Report\n }\n }\n }\n }\n": typeof types.ProgramAdminReportsPageDocument, "\n mutation MarkScheduleItemAsFavorite($input: FavoriteScheduleItemInput!) {\n markScheduleItemAsFavorite(input: $input) {\n success\n }\n }\n": typeof types.MarkScheduleItemAsFavoriteDocument, "\n mutation UnmarkScheduleItemAsFavorite($input: FavoriteScheduleItemInput!) {\n unmarkScheduleItemAsFavorite(input: $input) {\n success\n }\n }\n": typeof types.UnmarkScheduleItemAsFavoriteDocument, @@ -185,6 +199,8 @@ type Documents = { "\n mutation RevokeKeyPair($id: String!) {\n revokeKeyPair(id: $id) {\n id\n }\n }\n": typeof types.RevokeKeyPairDocument, "\n fragment ProfileEncryptionKeys on KeyPairType {\n id\n createdAt\n }\n": typeof types.ProfileEncryptionKeysFragmentDoc, "\n query ProfileEncryptionKeys {\n profile {\n keypairs {\n ...ProfileEncryptionKeys\n }\n }\n }\n": typeof types.ProfileEncryptionKeysDocument, + "\n fragment ProfileMessageRow on LimitedMessageType {\n id\n subject\n sentAt\n bodyHtml\n event {\n slug\n name\n }\n }\n": typeof types.ProfileMessageRowFragmentDoc, + "\n query ProfileMessages {\n profile {\n messages {\n ...ProfileMessageRow\n }\n }\n }\n": typeof types.ProfileMessagesDocument, "\n query ProfileOrderDetail($eventSlug: String!, $orderId: String!) {\n profile {\n tickets {\n order(eventSlug: $eventSlug, id: $orderId) {\n id\n formattedOrderNumber\n createdAt\n totalPrice\n status\n eticketsLink\n canPay\n canCancel\n canRequestCancellation\n ticketsContactEmail\n products {\n title\n quantity\n price\n vatPercentage\n }\n\n event {\n slug\n name\n organization {\n name\n businessId\n }\n }\n }\n }\n }\n }\n": typeof types.ProfileOrderDetailDocument, "\n mutation ConfirmEmail($input: ConfirmEmailInput!) {\n confirmEmail(input: $input) {\n user {\n email\n }\n }\n }\n": typeof types.ConfirmEmailDocument, "\n fragment ProfileOrder on ProfileOrderType {\n id\n formattedOrderNumber\n createdAt\n totalPrice\n status\n eticketsLink\n canPay\n canCancel\n\n event {\n slug\n name\n }\n }\n": typeof types.ProfileOrderFragmentDoc, @@ -317,6 +333,16 @@ const documents: Documents = { "\n query ProgramAdminHosts(\n $eventSlug: String!\n $filters: [DimensionFilterInput!]\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n timezone\n\n program {\n programHostsExcelExportLink\n\n dimensions(isListFilter: true, publicOnly: false) {\n ...DimensionFilter\n }\n programHosts(programFilters: $filters) {\n ...ProgramAdminHost\n }\n }\n }\n }\n": types.ProgramAdminHostsDocument, "\n fragment ProgramAdminInvitation on FullInvitationType {\n id\n email\n createdAt\n cachedDimensions\n\n program {\n slug\n title\n }\n }\n": types.ProgramAdminInvitationFragmentDoc, "\n query ProgramAdminInvitations($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n timezone\n\n program {\n invitations {\n ...ProgramAdminInvitation\n }\n }\n }\n }\n": types.ProgramAdminInvitationsDocument, + "\n mutation UpdateMessage($input: UpdateMessageInput!) {\n updateMessage(input: $input) {\n message {\n id\n }\n }\n }\n": types.UpdateMessageDocument, + "\n mutation SendMessage($input: SendMessageInput!) {\n sendMessage(input: $input) {\n message {\n id\n }\n }\n }\n": types.SendMessageDocument, + "\n mutation ExpireMessage($input: ExpireMessageInput!) {\n expireMessage(input: $input) {\n message {\n id\n }\n }\n }\n": types.ExpireMessageDocument, + "\n mutation DeleteMessage($input: DeleteMessageInput!) {\n deleteMessage(input: $input) {\n messageId\n }\n }\n": types.DeleteMessageDocument, + "\n fragment MessageCompose on MessageType {\n id\n subject\n body\n dispatch\n state\n createdAt\n sentAt\n expiredAt\n recipientFilters\n recipientCount\n replyTo {\n id\n }\n }\n": types.MessageComposeFragmentDoc, + "\n query ProgramMessageComposePage(\n $eventSlug: String!\n $messageId: String!\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n message(id: $messageId) {\n ...MessageCompose\n }\n replyToAddresses {\n id\n name\n email\n }\n recipientDimensions {\n ...DimensionValueSelect\n }\n }\n }\n }\n": types.ProgramMessageComposePageDocument, + "\n mutation CreateMessage($input: CreateMessageInput!) {\n createMessage(input: $input) {\n message {\n id\n }\n }\n }\n": types.CreateMessageDocument, + "\n query ProgramMessageNewPage($eventSlug: String!, $locale: String) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n replyToAddresses {\n id\n name\n email\n }\n recipientDimensions {\n ...DimensionValueSelect\n }\n }\n }\n }\n": types.ProgramMessageNewPageDocument, + "\n fragment ProgramMessageListRow on MessageType {\n id\n subject\n state\n dispatch\n createdAt\n sentAt\n recipientCount\n }\n": types.ProgramMessageListRowFragmentDoc, + "\n query ProgramMessagesPage($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n messages {\n ...ProgramMessageListRow\n }\n }\n }\n }\n": types.ProgramMessagesPageDocument, "\n mutation AcceptProgramOffer($input: AcceptProgramOfferInput!) {\n acceptProgramOffer(input: $input) {\n program {\n slug\n }\n }\n }\n": types.AcceptProgramOfferDocument, "\n mutation CancelProgramOffer($input: CancelProgramOfferInput!) {\n cancelProgramOffer(input: $input) {\n responseId\n }\n }\n": types.CancelProgramOfferDocument, "\n mutation EditProgramOffer($input: CreateSurveyResponseInput!) {\n createSurveyResponse(input: $input) {\n response {\n id\n }\n }\n }\n": types.EditProgramOfferDocument, @@ -329,7 +355,11 @@ const documents: Documents = { "\n fragment ProgramOfferDimension on FullDimensionType {\n ...DimensionFilter\n ...ColoredDimensionTableCell\n ...DimensionValueSelect\n }\n": types.ProgramOfferDimensionFragmentDoc, "\n query ProgramOffers(\n $eventSlug: String!\n $locale: String\n $filters: [DimensionFilterInput!]\n ) {\n event(slug: $eventSlug) {\n slug\n name\n program {\n programOffersExcelExportLink\n canDeleteProgramOffers\n\n listFilters: dimensions(isListFilter: true, publicOnly: false) {\n ...ProgramOfferDimension\n }\n\n keyDimensions: dimensions(keyDimensionsOnly: true, publicOnly: false) {\n ...ProgramOfferDimension\n }\n\n stateDimension {\n ...ProgramOfferDimension\n }\n\n countProgramOffers\n programOffers(filters: $filters) {\n ...ProgramOffer\n }\n }\n }\n }\n": types.ProgramOffersDocument, "\n mutation UpdateProgramPreferences($input: UpdateProgramPreferencesInput!) {\n updateProgramPreferences(input: $input) {\n preferences {\n publicFrom\n isSchedulePublic\n }\n }\n }\n": types.UpdateProgramPreferencesDocument, - "\n query ProgramPreferences($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n publicFrom\n isSchedulePublic\n }\n }\n }\n": types.ProgramPreferencesDocument, + "\n mutation CreateMessageReplyTo($input: CreateMessageReplyToInput!) {\n createMessageReplyTo(input: $input) {\n replyTo {\n id\n }\n }\n }\n": types.CreateMessageReplyToDocument, + "\n mutation UpdateMessageReplyTo($input: UpdateMessageReplyToInput!) {\n updateMessageReplyTo(input: $input) {\n replyTo {\n id\n }\n }\n }\n": types.UpdateMessageReplyToDocument, + "\n mutation DeleteMessageReplyTo($input: DeleteMessageReplyToInput!) {\n deleteMessageReplyTo(input: $input) {\n replyToId\n }\n }\n": types.DeleteMessageReplyToDocument, + "\n fragment MessageReplyToRow on MessageReplyToType {\n id\n name\n email\n }\n": types.MessageReplyToRowFragmentDoc, + "\n query ProgramPreferences($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n publicFrom\n isSchedulePublic\n\n replyToAddresses {\n ...MessageReplyToRow\n }\n }\n }\n }\n": types.ProgramPreferencesDocument, "\n query ProgramAdminReportsPage($eventSlug: String!, $locale: String) {\n event(slug: $eventSlug) {\n name\n slug\n timezone\n\n program {\n reports(lang: $locale) {\n ...Report\n }\n }\n }\n }\n": types.ProgramAdminReportsPageDocument, "\n mutation MarkScheduleItemAsFavorite($input: FavoriteScheduleItemInput!) {\n markScheduleItemAsFavorite(input: $input) {\n success\n }\n }\n": types.MarkScheduleItemAsFavoriteDocument, "\n mutation UnmarkScheduleItemAsFavorite($input: FavoriteScheduleItemInput!) {\n unmarkScheduleItemAsFavorite(input: $input) {\n success\n }\n }\n": types.UnmarkScheduleItemAsFavoriteDocument, @@ -389,6 +419,8 @@ const documents: Documents = { "\n mutation RevokeKeyPair($id: String!) {\n revokeKeyPair(id: $id) {\n id\n }\n }\n": types.RevokeKeyPairDocument, "\n fragment ProfileEncryptionKeys on KeyPairType {\n id\n createdAt\n }\n": types.ProfileEncryptionKeysFragmentDoc, "\n query ProfileEncryptionKeys {\n profile {\n keypairs {\n ...ProfileEncryptionKeys\n }\n }\n }\n": types.ProfileEncryptionKeysDocument, + "\n fragment ProfileMessageRow on LimitedMessageType {\n id\n subject\n sentAt\n bodyHtml\n event {\n slug\n name\n }\n }\n": types.ProfileMessageRowFragmentDoc, + "\n query ProfileMessages {\n profile {\n messages {\n ...ProfileMessageRow\n }\n }\n }\n": types.ProfileMessagesDocument, "\n query ProfileOrderDetail($eventSlug: String!, $orderId: String!) {\n profile {\n tickets {\n order(eventSlug: $eventSlug, id: $orderId) {\n id\n formattedOrderNumber\n createdAt\n totalPrice\n status\n eticketsLink\n canPay\n canCancel\n canRequestCancellation\n ticketsContactEmail\n products {\n title\n quantity\n price\n vatPercentage\n }\n\n event {\n slug\n name\n organization {\n name\n businessId\n }\n }\n }\n }\n }\n }\n": types.ProfileOrderDetailDocument, "\n mutation ConfirmEmail($input: ConfirmEmailInput!) {\n confirmEmail(input: $input) {\n user {\n email\n }\n }\n }\n": types.ConfirmEmailDocument, "\n fragment ProfileOrder on ProfileOrderType {\n id\n formattedOrderNumber\n createdAt\n totalPrice\n status\n eticketsLink\n canPay\n canCancel\n\n event {\n slug\n name\n }\n }\n": types.ProfileOrderFragmentDoc, @@ -832,6 +864,46 @@ export function graphql(source: "\n fragment ProgramAdminInvitation on FullInvi * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function graphql(source: "\n query ProgramAdminInvitations($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n timezone\n\n program {\n invitations {\n ...ProgramAdminInvitation\n }\n }\n }\n }\n"): (typeof documents)["\n query ProgramAdminInvitations($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n timezone\n\n program {\n invitations {\n ...ProgramAdminInvitation\n }\n }\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n mutation UpdateMessage($input: UpdateMessageInput!) {\n updateMessage(input: $input) {\n message {\n id\n }\n }\n }\n"): (typeof documents)["\n mutation UpdateMessage($input: UpdateMessageInput!) {\n updateMessage(input: $input) {\n message {\n id\n }\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n mutation SendMessage($input: SendMessageInput!) {\n sendMessage(input: $input) {\n message {\n id\n }\n }\n }\n"): (typeof documents)["\n mutation SendMessage($input: SendMessageInput!) {\n sendMessage(input: $input) {\n message {\n id\n }\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n mutation ExpireMessage($input: ExpireMessageInput!) {\n expireMessage(input: $input) {\n message {\n id\n }\n }\n }\n"): (typeof documents)["\n mutation ExpireMessage($input: ExpireMessageInput!) {\n expireMessage(input: $input) {\n message {\n id\n }\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n mutation DeleteMessage($input: DeleteMessageInput!) {\n deleteMessage(input: $input) {\n messageId\n }\n }\n"): (typeof documents)["\n mutation DeleteMessage($input: DeleteMessageInput!) {\n deleteMessage(input: $input) {\n messageId\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n fragment MessageCompose on MessageType {\n id\n subject\n body\n dispatch\n state\n createdAt\n sentAt\n expiredAt\n recipientFilters\n recipientCount\n replyTo {\n id\n }\n }\n"): (typeof documents)["\n fragment MessageCompose on MessageType {\n id\n subject\n body\n dispatch\n state\n createdAt\n sentAt\n expiredAt\n recipientFilters\n recipientCount\n replyTo {\n id\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n query ProgramMessageComposePage(\n $eventSlug: String!\n $messageId: String!\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n message(id: $messageId) {\n ...MessageCompose\n }\n replyToAddresses {\n id\n name\n email\n }\n recipientDimensions {\n ...DimensionValueSelect\n }\n }\n }\n }\n"): (typeof documents)["\n query ProgramMessageComposePage(\n $eventSlug: String!\n $messageId: String!\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n message(id: $messageId) {\n ...MessageCompose\n }\n replyToAddresses {\n id\n name\n email\n }\n recipientDimensions {\n ...DimensionValueSelect\n }\n }\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n mutation CreateMessage($input: CreateMessageInput!) {\n createMessage(input: $input) {\n message {\n id\n }\n }\n }\n"): (typeof documents)["\n mutation CreateMessage($input: CreateMessageInput!) {\n createMessage(input: $input) {\n message {\n id\n }\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n query ProgramMessageNewPage($eventSlug: String!, $locale: String) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n replyToAddresses {\n id\n name\n email\n }\n recipientDimensions {\n ...DimensionValueSelect\n }\n }\n }\n }\n"): (typeof documents)["\n query ProgramMessageNewPage($eventSlug: String!, $locale: String) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n replyToAddresses {\n id\n name\n email\n }\n recipientDimensions {\n ...DimensionValueSelect\n }\n }\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n fragment ProgramMessageListRow on MessageType {\n id\n subject\n state\n dispatch\n createdAt\n sentAt\n recipientCount\n }\n"): (typeof documents)["\n fragment ProgramMessageListRow on MessageType {\n id\n subject\n state\n dispatch\n createdAt\n sentAt\n recipientCount\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n query ProgramMessagesPage($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n messages {\n ...ProgramMessageListRow\n }\n }\n }\n }\n"): (typeof documents)["\n query ProgramMessagesPage($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n messages {\n ...ProgramMessageListRow\n }\n }\n }\n }\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -883,7 +955,23 @@ export function graphql(source: "\n mutation UpdateProgramPreferences($input: U /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query ProgramPreferences($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n publicFrom\n isSchedulePublic\n }\n }\n }\n"): (typeof documents)["\n query ProgramPreferences($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n publicFrom\n isSchedulePublic\n }\n }\n }\n"]; +export function graphql(source: "\n mutation CreateMessageReplyTo($input: CreateMessageReplyToInput!) {\n createMessageReplyTo(input: $input) {\n replyTo {\n id\n }\n }\n }\n"): (typeof documents)["\n mutation CreateMessageReplyTo($input: CreateMessageReplyToInput!) {\n createMessageReplyTo(input: $input) {\n replyTo {\n id\n }\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n mutation UpdateMessageReplyTo($input: UpdateMessageReplyToInput!) {\n updateMessageReplyTo(input: $input) {\n replyTo {\n id\n }\n }\n }\n"): (typeof documents)["\n mutation UpdateMessageReplyTo($input: UpdateMessageReplyToInput!) {\n updateMessageReplyTo(input: $input) {\n replyTo {\n id\n }\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n mutation DeleteMessageReplyTo($input: DeleteMessageReplyToInput!) {\n deleteMessageReplyTo(input: $input) {\n replyToId\n }\n }\n"): (typeof documents)["\n mutation DeleteMessageReplyTo($input: DeleteMessageReplyToInput!) {\n deleteMessageReplyTo(input: $input) {\n replyToId\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n fragment MessageReplyToRow on MessageReplyToType {\n id\n name\n email\n }\n"): (typeof documents)["\n fragment MessageReplyToRow on MessageReplyToType {\n id\n name\n email\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n query ProgramPreferences($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n publicFrom\n isSchedulePublic\n\n replyToAddresses {\n ...MessageReplyToRow\n }\n }\n }\n }\n"): (typeof documents)["\n query ProgramPreferences($eventSlug: String!) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n publicFrom\n isSchedulePublic\n\n replyToAddresses {\n ...MessageReplyToRow\n }\n }\n }\n }\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -1120,6 +1208,14 @@ export function graphql(source: "\n fragment ProfileEncryptionKeys on KeyPairTy * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function graphql(source: "\n query ProfileEncryptionKeys {\n profile {\n keypairs {\n ...ProfileEncryptionKeys\n }\n }\n }\n"): (typeof documents)["\n query ProfileEncryptionKeys {\n profile {\n keypairs {\n ...ProfileEncryptionKeys\n }\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n fragment ProfileMessageRow on LimitedMessageType {\n id\n subject\n sentAt\n bodyHtml\n event {\n slug\n name\n }\n }\n"): (typeof documents)["\n fragment ProfileMessageRow on LimitedMessageType {\n id\n subject\n sentAt\n bodyHtml\n event {\n slug\n name\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n query ProfileMessages {\n profile {\n messages {\n ...ProfileMessageRow\n }\n }\n }\n"): (typeof documents)["\n query ProfileMessages {\n profile {\n messages {\n ...ProfileMessageRow\n }\n }\n }\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/kompassi-v2-frontend/src/__generated__/graphql.ts b/kompassi-v2-frontend/src/__generated__/graphql.ts index 52cf8638f..394555df6 100644 --- a/kompassi-v2-frontend/src/__generated__/graphql.ts +++ b/kompassi-v2-frontend/src/__generated__/graphql.ts @@ -212,6 +212,36 @@ export type ConfirmOrderCancellationInput = { orderId: Scalars['String']['input']; }; +/** + * Creates a new Message with the given content. Called only when the compose view + * for a not-yet-existing message ("new") is first saved - until then, the draft only + * exists in the browser, never in the database. + */ +export type CreateMessage = { + __typename?: 'CreateMessage'; + message?: Maybe; +}; + +export type CreateMessageInput = { + body: Scalars['String']['input']; + dispatch: MessageDispatch; + eventSlug: Scalars['String']['input']; + recipientFilters: Scalars['GenericScalar']['input']; + replyToId?: InputMaybe; + subject: Scalars['String']['input']; +}; + +export type CreateMessageReplyTo = { + __typename?: 'CreateMessageReplyTo'; + replyTo?: Maybe; +}; + +export type CreateMessageReplyToInput = { + email: Scalars['String']['input']; + eventSlug: Scalars['String']['input']; + name: Scalars['String']['input']; +}; + export type CreateOrder = { __typename?: 'CreateOrder'; order?: Maybe; @@ -348,6 +378,34 @@ export type DeleteInvitationInput = { invitationId: Scalars['String']['input']; }; +/** + * Deletes a Message draft. Only drafts can be deleted - once sent, a Message is kept + * (possibly expired) so its MessageRecipients remain visible in recipients' profiles. + */ +export type DeleteMessage = { + __typename?: 'DeleteMessage'; + messageId?: Maybe; +}; + +export type DeleteMessageInput = { + eventSlug: Scalars['String']['input']; + messageId: Scalars['String']['input']; +}; + +/** + * Deletes a reply-to option. Messages that reference it fall back to the event's + * default plain contact email (Message.reply_to is SET_NULL on delete). + */ +export type DeleteMessageReplyTo = { + __typename?: 'DeleteMessageReplyTo'; + replyToId?: Maybe; +}; + +export type DeleteMessageReplyToInput = { + eventSlug: Scalars['String']['input']; + replyToId: Scalars['String']['input']; +}; + export type DeleteProduct = { __typename?: 'DeleteProduct'; id: Scalars['String']['output']; @@ -487,6 +545,20 @@ export enum EditMode { Owner = 'OWNER' } +/** + * Expires an active Message: it stops being sent to new/auto-matching recipients. + * People who already received it are unaffected. + */ +export type ExpireMessage = { + __typename?: 'ExpireMessage'; + message?: Maybe; +}; + +export type ExpireMessageInput = { + eventSlug: Scalars['String']['input']; + messageId: Scalars['String']['input']; +}; + export type FavoriteInput = { eventSlug: Scalars['String']['input']; programSlug: Scalars['String']['input']; @@ -1197,6 +1269,21 @@ export type LimitedInvolvementType = { updatedAt: Scalars['DateTime']['output']; }; +/** + * A message as seen by its recipient in their profile: the immutable rendered + * snapshot from MessageRecipient, not the (possibly since-edited) Message. Carries no + * sender identity. + */ +export type LimitedMessageType = { + __typename?: 'LimitedMessageType'; + bodyHtml: Scalars['String']['output']; + cachedDimensions: Scalars['GenericScalar']['output']; + event: LimitedEventType; + id: Scalars['ID']['output']; + sentAt: Scalars['DateTime']['output']; + subject: Scalars['String']['output']; +}; + export type LimitedOrderType = { __typename?: 'LimitedOrderType'; canPay: Scalars['Boolean']['output']; @@ -1609,6 +1696,62 @@ export type MarkScheduleItemAsFavorite = { success: Scalars['Boolean']['output']; }; +/** + * + * Records which product owns a Message. Only PROGRAM is used for now; + * the enum reserves room for forms/involvement/volunteers to reuse Messages V2 later. + * + */ +export enum MessageApp { + Program = 'PROGRAM' +} + +/** An enumeration. */ +export enum MessageDispatch { + PerInvolvement = 'PER_INVOLVEMENT', + PerPerson = 'PER_PERSON' +} + +export type MessageReplyToType = { + __typename?: 'MessageReplyToType'; + app: MessageApp; + email: Scalars['String']['output']; + id: Scalars['ID']['output']; + name: Scalars['String']['output']; +}; + +/** An enumeration. */ +export enum MessageState { + Active = 'ACTIVE', + Draft = 'DRAFT', + Expired = 'EXPIRED' +} + +/** + * Admin-facing representation of a Message, used by the Program V2 admin compose/list + * views. Never exposed to recipients - see LimitedMessageType for the profile view. + */ +export type MessageType = { + __typename?: 'MessageType'; + app: MessageApp; + body: Scalars['String']['output']; + createdAt: Scalars['DateTime']['output']; + dispatch: MessageDispatch; + expiredAt?: Maybe; + id: Scalars['UUID']['output']; + /** + * Number of distinct recipients (people for PER_PERSON, involvements for + * PER_INVOLVEMENT) currently matching this message's recipient filters. + */ + recipientCount: Scalars['Int']['output']; + recipientFilters: Scalars['GenericScalar']['output']; + replyTo?: Maybe; + sentAt?: Maybe; + state: MessageState; + subject: Scalars['String']['output']; + updatedAt: Scalars['DateTime']['output']; +}; + export type Mutation = { __typename?: 'Mutation'; acceptInvitation?: Maybe; @@ -1633,6 +1776,13 @@ export type Mutation = { * NOTE: Must not return any PII (the caller may be anonymous). */ confirmOrderCancellation?: Maybe; + /** + * Creates a new Message with the given content. Called only when the compose view + * for a not-yet-existing message ("new") is first saved - until then, the draft only + * exists in the browser, never in the database. + */ + createMessage?: Maybe; + createMessageReplyTo?: Maybe; createOrder?: Maybe; createProduct?: Maybe; createProgram?: Maybe; @@ -1645,6 +1795,16 @@ export type Mutation = { deleteDimension?: Maybe; deleteDimensionValue?: Maybe; deleteInvitation?: Maybe; + /** + * Deletes a Message draft. Only drafts can be deleted - once sent, a Message is kept + * (possibly expired) so its MessageRecipients remain visible in recipients' profiles. + */ + deleteMessage?: Maybe; + /** + * Deletes a reply-to option. Messages that reference it fall back to the event's + * default plain contact email (Message.reply_to is SET_NULL on delete). + */ + deleteMessageReplyTo?: Maybe; deleteProduct?: Maybe; deleteProgramHost?: Maybe; deleteProgramOffers?: Maybe; @@ -1653,6 +1813,11 @@ export type Mutation = { deleteSurvey?: Maybe; deleteSurveyLanguage?: Maybe; deleteSurveyResponses?: Maybe; + /** + * Expires an active Message: it stops being sent to new/auto-matching recipients. + * People who already received it are unaffected. + */ + expireMessage?: Maybe; generateKeyPair?: Maybe; initFileUpload?: Maybe; inviteProgramHost?: Maybe; @@ -1688,6 +1853,13 @@ export type Mutation = { /** Restore a program item that was previously cancelled. */ restoreProgram?: Maybe; revokeKeyPair?: Maybe; + /** + * Sends a Message: on a draft, transitions it to ACTIVE and dispatches sending to all + * currently matching recipients. On an already ACTIVE message, this re-sends to any + * currently matching recipients who have not yet received it (MessageRecipient's + * uniqueness constraints make this idempotent for everyone else). + */ + sendMessage?: Maybe; subscribeToSurveyResponses?: Maybe; /** Deprecated. Use UnmarkScheduleItemAsFavorite instead. */ unmarkProgramAsFavorite?: Maybe; @@ -1706,6 +1878,15 @@ export type Mutation = { */ updateInvolvementPerks?: Maybe; updateInvolvementPreferences?: Maybe; + /** + * Updates a Message's subject/body/dispatch/reply-to/recipient filters. Works on a + * Message in any state, including ACTIVE (already sent) - edits are not retroactive: + * existing MessageRecipient rows keep their immutable rendered snapshot, and the + * updated content only applies to recipients who receive it from now on (subsequent + * explicit re-sends and the auto-send hook for newly-matching involvements). + */ + updateMessage?: Maybe; + updateMessageReplyTo?: Maybe; updateOrder?: Maybe; updateProduct?: Maybe; updateProgram?: Maybe; @@ -1766,6 +1947,16 @@ export type MutationConfirmOrderCancellationArgs = { }; +export type MutationCreateMessageArgs = { + input: CreateMessageInput; +}; + + +export type MutationCreateMessageReplyToArgs = { + input: CreateMessageReplyToInput; +}; + + export type MutationCreateOrderArgs = { input: CreateOrderInput; }; @@ -1826,6 +2017,16 @@ export type MutationDeleteInvitationArgs = { }; +export type MutationDeleteMessageArgs = { + input: DeleteMessageInput; +}; + + +export type MutationDeleteMessageReplyToArgs = { + input: DeleteMessageReplyToInput; +}; + + export type MutationDeleteProductArgs = { input: DeleteProductInput; }; @@ -1866,6 +2067,11 @@ export type MutationDeleteSurveyResponsesArgs = { }; +export type MutationExpireMessageArgs = { + input: ExpireMessageInput; +}; + + export type MutationGenerateKeyPairArgs = { password: Scalars['String']['input']; }; @@ -1951,6 +2157,11 @@ export type MutationRevokeKeyPairArgs = { }; +export type MutationSendMessageArgs = { + input: SendMessageInput; +}; + + export type MutationSubscribeToSurveyResponsesArgs = { input: SubscriptionInput; }; @@ -1996,6 +2207,16 @@ export type MutationUpdateInvolvementPreferencesArgs = { }; +export type MutationUpdateMessageArgs = { + input: UpdateMessageInput; +}; + + +export type MutationUpdateMessageReplyToArgs = { + input: UpdateMessageReplyToInput; +}; + + export type MutationUpdateOrderArgs = { input: UpdateOrderInput; }; @@ -2082,6 +2303,8 @@ export type OwnProfileType = { id: Scalars['ID']['output']; keypairs?: Maybe>; lastName: Scalars['String']['output']; + /** Messages V2: messages sent to the current user, most recent first. */ + messages: Array; /** If you go by a nick name or handle that you want printed in your badge and programme details, enter it here. */ nick: Scalars['String']['output']; phoneNumber: Scalars['String']['output']; @@ -2351,6 +2574,9 @@ export type ProgramV2EventMetaType = { /** Like `dimensions` but returns dimensions from the Involvement universe. Differs from `event.involvement.dimensions` in that permissions are checked based on the Program V2 application privileges, not Involvement. `is_list_filter` - only return dimensions that are shown in the list filter. `is_shown_in_detail` - only return dimensions that are shown in the detail view. If you supply both, you only get their intersection. */ involvementDimensions: Array; isSchedulePublic: Scalars['Boolean']['output']; + message?: Maybe; + /** Messages V2: messages of this event's involvement universe. */ + messages: Array; program?: Maybe; programHosts: Array; programHostsExcelExportLink: Scalars['String']['output']; @@ -2363,6 +2589,10 @@ export type ProgramV2EventMetaType = { programs: Array; /** The program schedule becomes publicly visible at this point in time. Leave unset to keep the schedule private. */ publicFrom?: Maybe; + /** Messages V2: involvement dimensions (including the technical type/state dimensions) available for building a message's recipient filters. */ + recipientDimensions: Array; + /** Messages V2: reply-to addresses configured for this event, offered in the compose view and managed on the Program V2 admin preferences page. */ + replyToAddresses: Array; reports: Array; scheduleItem?: Maybe; scheduleItems: Array; @@ -2406,6 +2636,24 @@ export type ProgramV2EventMetaTypeInvolvementDimensionsArgs = { }; +/** + * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. + * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. + */ +export type ProgramV2EventMetaTypeMessageArgs = { + id: Scalars['String']['input']; +}; + + +/** + * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. + * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. + */ +export type ProgramV2EventMetaTypeMessagesArgs = { + includeDrafts?: InputMaybe; +}; + + /** * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. @@ -2749,6 +2997,22 @@ export type SelectedProfileType = { profileFieldSelector: ProfileFieldSelectorType; }; +/** + * Sends a Message: on a draft, transitions it to ACTIVE and dispatches sending to all + * currently matching recipients. On an already ACTIVE message, this re-sends to any + * currently matching recipients who have not yet received it (MessageRecipient's + * uniqueness constraints make this idempotent for everyone else). + */ +export type SendMessage = { + __typename?: 'SendMessage'; + message?: Maybe; +}; + +export type SendMessageInput = { + eventSlug: Scalars['String']['input']; + messageId: Scalars['String']['input']; +}; + export type SubscribeToSurveyResponses = { __typename?: 'SubscribeToSurveyResponses'; success: Scalars['Boolean']['output']; @@ -2970,6 +3234,40 @@ export type UpdateInvolvementPreferencesInput = { shirtsFrozenAt?: InputMaybe; }; +/** + * Updates a Message's subject/body/dispatch/reply-to/recipient filters. Works on a + * Message in any state, including ACTIVE (already sent) - edits are not retroactive: + * existing MessageRecipient rows keep their immutable rendered snapshot, and the + * updated content only applies to recipients who receive it from now on (subsequent + * explicit re-sends and the auto-send hook for newly-matching involvements). + */ +export type UpdateMessage = { + __typename?: 'UpdateMessage'; + message?: Maybe; +}; + +export type UpdateMessageInput = { + body: Scalars['String']['input']; + dispatch: MessageDispatch; + eventSlug: Scalars['String']['input']; + messageId: Scalars['String']['input']; + recipientFilters: Scalars['GenericScalar']['input']; + replyToId?: InputMaybe; + subject: Scalars['String']['input']; +}; + +export type UpdateMessageReplyTo = { + __typename?: 'UpdateMessageReplyTo'; + replyTo?: Maybe; +}; + +export type UpdateMessageReplyToInput = { + email: Scalars['String']['input']; + eventSlug: Scalars['String']['input']; + name: Scalars['String']['input']; + replyToId: Scalars['String']['input']; +}; + export type UpdateOrder = { __typename?: 'UpdateOrder'; order?: Maybe; @@ -3725,6 +4023,69 @@ export type ProgramAdminInvitationsQueryVariables = Exact<{ export type ProgramAdminInvitationsQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, program?: { __typename?: 'ProgramV2EventMetaType', invitations: Array<{ __typename?: 'FullInvitationType', id: string, email: string, createdAt: string, cachedDimensions?: unknown | null, program?: { __typename?: 'LimitedProgramType', slug: string, title: string } | null }> } | null } | null }; +export type UpdateMessageMutationVariables = Exact<{ + input: UpdateMessageInput; +}>; + + +export type UpdateMessageMutation = { __typename?: 'Mutation', updateMessage?: { __typename?: 'UpdateMessage', message?: { __typename?: 'MessageType', id: string } | null } | null }; + +export type SendMessageMutationVariables = Exact<{ + input: SendMessageInput; +}>; + + +export type SendMessageMutation = { __typename?: 'Mutation', sendMessage?: { __typename?: 'SendMessage', message?: { __typename?: 'MessageType', id: string } | null } | null }; + +export type ExpireMessageMutationVariables = Exact<{ + input: ExpireMessageInput; +}>; + + +export type ExpireMessageMutation = { __typename?: 'Mutation', expireMessage?: { __typename?: 'ExpireMessage', message?: { __typename?: 'MessageType', id: string } | null } | null }; + +export type DeleteMessageMutationVariables = Exact<{ + input: DeleteMessageInput; +}>; + + +export type DeleteMessageMutation = { __typename?: 'Mutation', deleteMessage?: { __typename?: 'DeleteMessage', messageId?: string | null } | null }; + +export type MessageComposeFragment = { __typename?: 'MessageType', id: string, subject: string, body: string, dispatch: MessageDispatch, state: MessageState, createdAt: string, sentAt?: string | null, expiredAt?: string | null, recipientFilters: unknown, recipientCount: number, replyTo?: { __typename?: 'MessageReplyToType', id: string } | null }; + +export type ProgramMessageComposePageQueryVariables = Exact<{ + eventSlug: Scalars['String']['input']; + messageId: Scalars['String']['input']; + locale?: InputMaybe; +}>; + + +export type ProgramMessageComposePageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, program?: { __typename?: 'ProgramV2EventMetaType', message?: { __typename?: 'MessageType', id: string, subject: string, body: string, dispatch: MessageDispatch, state: MessageState, createdAt: string, sentAt?: string | null, expiredAt?: string | null, recipientFilters: unknown, recipientCount: number, replyTo?: { __typename?: 'MessageReplyToType', id: string } | null } | null, replyToAddresses: Array<{ __typename?: 'MessageReplyToType', id: string, name: string, email: string }>, recipientDimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }> } | null } | null }; + +export type CreateMessageMutationVariables = Exact<{ + input: CreateMessageInput; +}>; + + +export type CreateMessageMutation = { __typename?: 'Mutation', createMessage?: { __typename?: 'CreateMessage', message?: { __typename?: 'MessageType', id: string } | null } | null }; + +export type ProgramMessageNewPageQueryVariables = Exact<{ + eventSlug: Scalars['String']['input']; + locale?: InputMaybe; +}>; + + +export type ProgramMessageNewPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, program?: { __typename?: 'ProgramV2EventMetaType', replyToAddresses: Array<{ __typename?: 'MessageReplyToType', id: string, name: string, email: string }>, recipientDimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }> } | null } | null }; + +export type ProgramMessageListRowFragment = { __typename?: 'MessageType', id: string, subject: string, state: MessageState, dispatch: MessageDispatch, createdAt: string, sentAt?: string | null, recipientCount: number }; + +export type ProgramMessagesPageQueryVariables = Exact<{ + eventSlug: Scalars['String']['input']; +}>; + + +export type ProgramMessagesPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, program?: { __typename?: 'ProgramV2EventMetaType', messages: Array<{ __typename?: 'MessageType', id: string, subject: string, state: MessageState, dispatch: MessageDispatch, createdAt: string, sentAt?: string | null, recipientCount: number }> } | null } | null }; + export type AcceptProgramOfferMutationVariables = Exact<{ input: AcceptProgramOfferInput; }>; @@ -3794,12 +4155,35 @@ export type UpdateProgramPreferencesMutationVariables = Exact<{ export type UpdateProgramPreferencesMutation = { __typename?: 'Mutation', updateProgramPreferences?: { __typename?: 'UpdateProgramPreferences', preferences?: { __typename?: 'ProgramV2EventMetaType', publicFrom?: string | null, isSchedulePublic: boolean } | null } | null }; +export type CreateMessageReplyToMutationVariables = Exact<{ + input: CreateMessageReplyToInput; +}>; + + +export type CreateMessageReplyToMutation = { __typename?: 'Mutation', createMessageReplyTo?: { __typename?: 'CreateMessageReplyTo', replyTo?: { __typename?: 'MessageReplyToType', id: string } | null } | null }; + +export type UpdateMessageReplyToMutationVariables = Exact<{ + input: UpdateMessageReplyToInput; +}>; + + +export type UpdateMessageReplyToMutation = { __typename?: 'Mutation', updateMessageReplyTo?: { __typename?: 'UpdateMessageReplyTo', replyTo?: { __typename?: 'MessageReplyToType', id: string } | null } | null }; + +export type DeleteMessageReplyToMutationVariables = Exact<{ + input: DeleteMessageReplyToInput; +}>; + + +export type DeleteMessageReplyToMutation = { __typename?: 'Mutation', deleteMessageReplyTo?: { __typename?: 'DeleteMessageReplyTo', replyToId?: string | null } | null }; + +export type MessageReplyToRowFragment = { __typename?: 'MessageReplyToType', id: string, name: string, email: string }; + export type ProgramPreferencesQueryVariables = Exact<{ eventSlug: Scalars['String']['input']; }>; -export type ProgramPreferencesQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, program?: { __typename?: 'ProgramV2EventMetaType', publicFrom?: string | null, isSchedulePublic: boolean } | null } | null }; +export type ProgramPreferencesQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, program?: { __typename?: 'ProgramV2EventMetaType', publicFrom?: string | null, isSchedulePublic: boolean, replyToAddresses: Array<{ __typename?: 'MessageReplyToType', id: string, name: string, email: string }> } | null } | null }; export type ProgramAdminReportsPageQueryVariables = Exact<{ eventSlug: Scalars['String']['input']; @@ -4175,6 +4559,13 @@ export type ProfileEncryptionKeysQueryVariables = Exact<{ [key: string]: never; export type ProfileEncryptionKeysQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', keypairs?: Array<{ __typename?: 'KeyPairType', id: string, createdAt: string }> | null } | null }; +export type ProfileMessageRowFragment = { __typename?: 'LimitedMessageType', id: string, subject: string, sentAt: string, bodyHtml: string, event: { __typename?: 'LimitedEventType', slug: string, name: string } }; + +export type ProfileMessagesQueryVariables = Exact<{ [key: string]: never; }>; + + +export type ProfileMessagesQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', messages: Array<{ __typename?: 'LimitedMessageType', id: string, subject: string, sentAt: string, bodyHtml: string, event: { __typename?: 'LimitedEventType', slug: string, name: string } }> } | null }; + export type ProfileOrderDetailQueryVariables = Exact<{ eventSlug: Scalars['String']['input']; orderId: Scalars['String']['input']; @@ -4311,6 +4702,8 @@ export const EditProgramFormFragmentDoc = {"kind":"Document","definitions":[{"ki export const OfferFormFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"OfferForm"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullSurveyType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"activeFrom"}},{"kind":"Field","name":{"kind":"Name","value":"activeUntil"}},{"kind":"Field","name":{"kind":"Name","value":"countResponses"}},{"kind":"Field","name":{"kind":"Name","value":"purpose"}},{"kind":"Field","name":{"kind":"Name","value":"languages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"language"}}]}}]}}]} as unknown as DocumentNode; export const ProgramAdminHostFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProgramAdminHost"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullProgramHostType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"person"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"nick"}}]}},{"kind":"Field","name":{"kind":"Name","value":"programs"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"cachedDimensions"}}]}}]}}]} as unknown as DocumentNode; export const ProgramAdminInvitationFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProgramAdminInvitation"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullInvitationType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"cachedDimensions"}},{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}}]}}]}}]} as unknown as DocumentNode; +export const MessageComposeFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"MessageCompose"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"MessageType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"subject"}},{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"dispatch"}},{"kind":"Field","name":{"kind":"Name","value":"state"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"sentAt"}},{"kind":"Field","name":{"kind":"Name","value":"expiredAt"}},{"kind":"Field","name":{"kind":"Name","value":"recipientFilters"}},{"kind":"Field","name":{"kind":"Name","value":"recipientCount"}},{"kind":"Field","name":{"kind":"Name","value":"replyTo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; +export const ProgramMessageListRowFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProgramMessageListRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"MessageType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"subject"}},{"kind":"Field","name":{"kind":"Name","value":"state"}},{"kind":"Field","name":{"kind":"Name","value":"dispatch"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"sentAt"}},{"kind":"Field","name":{"kind":"Name","value":"recipientCount"}}]}}]} as unknown as DocumentNode; export const FullSelectedProfileFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FullSelectedProfile"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SelectedProfileType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"nick"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"phoneNumber"}},{"kind":"Field","name":{"kind":"Name","value":"discordHandle"}}]}}]} as unknown as DocumentNode; export const ResponseRevisionFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ResponseRevision"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedResponseType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"revisionCreatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"revisionCreatedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"displayName"}}]}}]}}]} as unknown as DocumentNode; export const ProgramOfferEditFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProgramOfferEdit"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullResponseType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"revisionCreatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"originalCreatedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"fullName"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"FullSelectedProfile"}}]}},{"kind":"Field","name":{"kind":"Name","value":"language"}},{"kind":"Field","name":{"kind":"Name","value":"values"}},{"kind":"Field","name":{"kind":"Name","value":"form"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"fields"}},{"kind":"Field","name":{"kind":"Name","value":"survey"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"cachedDefaultResponseDimensions"}},{"kind":"Field","name":{"kind":"Name","value":"profileFieldSelector"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FullProfileFieldSelector"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"cachedDimensions"}},{"kind":"Field","name":{"kind":"Name","value":"supersededBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ResponseRevision"}}]}},{"kind":"Field","name":{"kind":"Name","value":"oldVersions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ResponseRevision"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canEdit"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"mode"},"value":{"kind":"EnumValue","value":"ADMIN"}}]}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FullSelectedProfile"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SelectedProfileType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"nick"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"phoneNumber"}},{"kind":"Field","name":{"kind":"Name","value":"discordHandle"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FullProfileFieldSelector"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ProfileFieldSelectorType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"nick"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"phoneNumber"}},{"kind":"Field","name":{"kind":"Name","value":"discordHandle"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ResponseRevision"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedResponseType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"revisionCreatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"revisionCreatedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"displayName"}}]}}]}}]} as unknown as DocumentNode; @@ -4323,6 +4716,7 @@ export const DimensionFilterFragmentDoc = {"kind":"Document","definitions":[{"ki export const ColoredDimensionTableCellFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ColoredDimensionTableCell"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isKeyDimension"}},{"kind":"Field","name":{"kind":"Name","value":"isTechnical"}},{"kind":"Field","name":{"kind":"Name","value":"isMultiValue"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"color"}}]}}]}}]} as unknown as DocumentNode; export const DimensionValueSelectFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionValueSelect"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isTechnical"}},{"kind":"Field","name":{"kind":"Name","value":"isMultiValue"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}}]}}]} as unknown as DocumentNode; export const ProgramOfferDimensionFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProgramOfferDimension"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DimensionFilter"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"ColoredDimensionTableCell"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"DimensionValueSelect"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionFilterValue"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"DimensionValueType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionFilter"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isMultiValue"}},{"kind":"Field","name":{"kind":"Name","value":"isListFilter"}},{"kind":"Field","name":{"kind":"Name","value":"isKeyDimension"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DimensionFilterValue"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ColoredDimensionTableCell"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isKeyDimension"}},{"kind":"Field","name":{"kind":"Name","value":"isTechnical"}},{"kind":"Field","name":{"kind":"Name","value":"isMultiValue"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"color"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionValueSelect"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isTechnical"}},{"kind":"Field","name":{"kind":"Name","value":"isMultiValue"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}}]}}]} as unknown as DocumentNode; +export const MessageReplyToRowFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"MessageReplyToRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"MessageReplyToType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"email"}}]}}]} as unknown as DocumentNode; export const ScheduleProgramFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ScheduleProgram"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedProgramType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"cachedDimensions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"publicOnly"},"value":{"kind":"BooleanValue","value":true}},{"kind":"Argument","name":{"kind":"Name","value":"listFiltersOnly"},"value":{"kind":"BooleanValue","value":true}}]},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"isCancelled"}}]}}]} as unknown as DocumentNode; export const ScheduleItemListFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ScheduleItemList"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullScheduleItemType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"location"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"subtitle"}},{"kind":"Field","name":{"kind":"Name","value":"startTime"}},{"kind":"Field","name":{"kind":"Name","value":"endTime"}},{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ScheduleProgram"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ScheduleProgram"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedProgramType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"cachedDimensions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"publicOnly"},"value":{"kind":"BooleanValue","value":true}},{"kind":"Argument","name":{"kind":"Name","value":"listFiltersOnly"},"value":{"kind":"BooleanValue","value":true}}]},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"isCancelled"}}]}}]} as unknown as DocumentNode; export const ProgramDetailAnnotationFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProgramDetailAnnotation"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ProgramAnnotationType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"annotation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}},{"kind":"Field","name":{"kind":"Name","value":"value"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}}]} as unknown as DocumentNode; @@ -4340,6 +4734,7 @@ export const SurveyResponseFragmentDoc = {"kind":"Document","definitions":[{"kin export const SurveyFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"Survey"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullSurveyType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"activeFrom"}},{"kind":"Field","name":{"kind":"Name","value":"activeUntil"}},{"kind":"Field","name":{"kind":"Name","value":"countResponses"}},{"kind":"Field","name":{"kind":"Name","value":"languages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"language"}}]}}]}}]} as unknown as DocumentNode; export const ProfileSurveyFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProfileSurvey"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullSurveyType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}}]} as unknown as DocumentNode; export const ProfileEncryptionKeysFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProfileEncryptionKeys"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"KeyPairType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]} as unknown as DocumentNode; +export const ProfileMessageRowFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProfileMessageRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedMessageType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"subject"}},{"kind":"Field","name":{"kind":"Name","value":"sentAt"}},{"kind":"Field","name":{"kind":"Name","value":"bodyHtml"}},{"kind":"Field","name":{"kind":"Name","value":"event"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]} as unknown as DocumentNode; export const ProfileOrderFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProfileOrder"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ProfileOrderType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"formattedOrderNumber"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"totalPrice"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"eticketsLink"}},{"kind":"Field","name":{"kind":"Name","value":"canPay"}},{"kind":"Field","name":{"kind":"Name","value":"canCancel"}},{"kind":"Field","name":{"kind":"Name","value":"event"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]} as unknown as DocumentNode; export const ProfileProgramItemFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProfileProgramItem"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullProgramType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"event"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"timezone"}}]}},{"kind":"Field","name":{"kind":"Name","value":"scheduleItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"startTime"}},{"kind":"Field","name":{"kind":"Name","value":"endTime"}},{"kind":"Field","name":{"kind":"Name","value":"durationMinutes"}},{"kind":"Field","name":{"kind":"Name","value":"location"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"subtitle"}}]}}]}}]} as unknown as DocumentNode; export const ProfileResponsesTableRowFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProfileResponsesTableRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ProfileResponseType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"revisionCreatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"editedByAnother"}},{"kind":"Field","name":{"kind":"Name","value":"canEdit"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"mode"},"value":{"kind":"EnumValue","value":"OWNER"}}]},{"kind":"Field","name":{"kind":"Name","value":"values"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"keyFieldsOnly"},"value":{"kind":"BooleanValue","value":true}}]},{"kind":"Field","name":{"kind":"Name","value":"dimensions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"keyDimensionsOnly"},"value":{"kind":"BooleanValue","value":true}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"dimension"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}},{"kind":"Field","name":{"kind":"Name","value":"value"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"color"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"form"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"event"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"survey"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}}]}}]} as unknown as DocumentNode; @@ -4425,6 +4820,14 @@ export const CreateProgramFormDocument = {"kind":"Document","definitions":[{"kin export const ProgramFormsPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProgramFormsPage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"profile"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"forms"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"surveys"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"relation"},"value":{"kind":"EnumValue","value":"ACCESSIBLE"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ProfileSurvey"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"forms"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"surveys"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"includeInactive"},"value":{"kind":"BooleanValue","value":true}},{"kind":"Argument","name":{"kind":"Name","value":"app"},"value":{"kind":"EnumValue","value":"PROGRAM_V2"}},{"kind":"Argument","name":{"kind":"Name","value":"purpose"},"value":{"kind":"ListValue","values":[{"kind":"EnumValue","value":"DEFAULT"},{"kind":"EnumValue","value":"INVITE"}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"OfferForm"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProfileSurvey"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullSurveyType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"OfferForm"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullSurveyType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"activeFrom"}},{"kind":"Field","name":{"kind":"Name","value":"activeUntil"}},{"kind":"Field","name":{"kind":"Name","value":"countResponses"}},{"kind":"Field","name":{"kind":"Name","value":"purpose"}},{"kind":"Field","name":{"kind":"Name","value":"languages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"language"}}]}}]}}]} as unknown as DocumentNode; export const ProgramAdminHostsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProgramAdminHosts"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filters"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"DimensionFilterInput"}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"timezone"}},{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"programHostsExcelExportLink"}},{"kind":"Field","name":{"kind":"Name","value":"dimensions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"isListFilter"},"value":{"kind":"BooleanValue","value":true}},{"kind":"Argument","name":{"kind":"Name","value":"publicOnly"},"value":{"kind":"BooleanValue","value":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DimensionFilter"}}]}},{"kind":"Field","name":{"kind":"Name","value":"programHosts"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"programFilters"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filters"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ProgramAdminHost"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionFilterValue"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"DimensionValueType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionFilter"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isMultiValue"}},{"kind":"Field","name":{"kind":"Name","value":"isListFilter"}},{"kind":"Field","name":{"kind":"Name","value":"isKeyDimension"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DimensionFilterValue"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProgramAdminHost"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullProgramHostType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"person"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"nick"}}]}},{"kind":"Field","name":{"kind":"Name","value":"programs"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"cachedDimensions"}}]}}]}}]} as unknown as DocumentNode; export const ProgramAdminInvitationsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProgramAdminInvitations"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"timezone"}},{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"invitations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ProgramAdminInvitation"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProgramAdminInvitation"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullInvitationType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"cachedDimensions"}},{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}}]}}]}}]} as unknown as DocumentNode; +export const UpdateMessageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateMessage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateMessageInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateMessage"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"message"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; +export const SendMessageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SendMessage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SendMessageInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"sendMessage"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"message"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; +export const ExpireMessageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ExpireMessage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ExpireMessageInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"expireMessage"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"message"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; +export const DeleteMessageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteMessage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"DeleteMessageInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteMessage"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"messageId"}}]}}]}}]} as unknown as DocumentNode; +export const ProgramMessageComposePageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProgramMessageComposePage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"messageId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"message"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"messageId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"MessageCompose"}}]}},{"kind":"Field","name":{"kind":"Name","value":"replyToAddresses"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"email"}}]}},{"kind":"Field","name":{"kind":"Name","value":"recipientDimensions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DimensionValueSelect"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"MessageCompose"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"MessageType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"subject"}},{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"dispatch"}},{"kind":"Field","name":{"kind":"Name","value":"state"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"sentAt"}},{"kind":"Field","name":{"kind":"Name","value":"expiredAt"}},{"kind":"Field","name":{"kind":"Name","value":"recipientFilters"}},{"kind":"Field","name":{"kind":"Name","value":"recipientCount"}},{"kind":"Field","name":{"kind":"Name","value":"replyTo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionValueSelect"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isTechnical"}},{"kind":"Field","name":{"kind":"Name","value":"isMultiValue"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}}]}}]} as unknown as DocumentNode; +export const CreateMessageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateMessage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateMessageInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createMessage"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"message"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; +export const ProgramMessageNewPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProgramMessageNewPage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"replyToAddresses"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"email"}}]}},{"kind":"Field","name":{"kind":"Name","value":"recipientDimensions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DimensionValueSelect"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionValueSelect"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isTechnical"}},{"kind":"Field","name":{"kind":"Name","value":"isMultiValue"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}}]}}]} as unknown as DocumentNode; +export const ProgramMessagesPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProgramMessagesPage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"messages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ProgramMessageListRow"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProgramMessageListRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"MessageType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"subject"}},{"kind":"Field","name":{"kind":"Name","value":"state"}},{"kind":"Field","name":{"kind":"Name","value":"dispatch"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"sentAt"}},{"kind":"Field","name":{"kind":"Name","value":"recipientCount"}}]}}]} as unknown as DocumentNode; export const AcceptProgramOfferDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"AcceptProgramOffer"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"AcceptProgramOfferInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"acceptProgramOffer"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}}]}}]} as unknown as DocumentNode; export const CancelProgramOfferDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CancelProgramOffer"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CancelProgramOfferInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"cancelProgramOffer"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"responseId"}}]}}]}}]} as unknown as DocumentNode; export const EditProgramOfferDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"EditProgramOffer"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateSurveyResponseInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createSurveyResponse"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"response"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; @@ -4433,7 +4836,10 @@ export const ProgramOfferPageDocument = {"kind":"Document","definitions":[{"kind export const DeleteProgramOffersDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteProgramOffers"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"DeleteProgramOffersInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteProgramOffers"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"countDeleted"}}]}}]}}]} as unknown as DocumentNode; export const ProgramOffersDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProgramOffers"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filters"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"DimensionFilterInput"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"programOffersExcelExportLink"}},{"kind":"Field","name":{"kind":"Name","value":"canDeleteProgramOffers"}},{"kind":"Field","alias":{"kind":"Name","value":"listFilters"},"name":{"kind":"Name","value":"dimensions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"isListFilter"},"value":{"kind":"BooleanValue","value":true}},{"kind":"Argument","name":{"kind":"Name","value":"publicOnly"},"value":{"kind":"BooleanValue","value":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ProgramOfferDimension"}}]}},{"kind":"Field","alias":{"kind":"Name","value":"keyDimensions"},"name":{"kind":"Name","value":"dimensions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"keyDimensionsOnly"},"value":{"kind":"BooleanValue","value":true}},{"kind":"Argument","name":{"kind":"Name","value":"publicOnly"},"value":{"kind":"BooleanValue","value":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ProgramOfferDimension"}}]}},{"kind":"Field","name":{"kind":"Name","value":"stateDimension"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ProgramOfferDimension"}}]}},{"kind":"Field","name":{"kind":"Name","value":"countProgramOffers"}},{"kind":"Field","name":{"kind":"Name","value":"programOffers"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filters"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ProgramOffer"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionFilterValue"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"DimensionValueType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionFilter"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isMultiValue"}},{"kind":"Field","name":{"kind":"Name","value":"isListFilter"}},{"kind":"Field","name":{"kind":"Name","value":"isKeyDimension"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DimensionFilterValue"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ColoredDimensionTableCell"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isKeyDimension"}},{"kind":"Field","name":{"kind":"Name","value":"isTechnical"}},{"kind":"Field","name":{"kind":"Name","value":"isMultiValue"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"color"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionValueSelect"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isTechnical"}},{"kind":"Field","name":{"kind":"Name","value":"isMultiValue"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProgramOfferDimension"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DimensionFilter"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"ColoredDimensionTableCell"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"DimensionValueSelect"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProgramOffer"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullResponseType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalCreatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"originalCreatedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"fullName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sequenceNumber"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"keyFieldsOnly"},"value":{"kind":"BooleanValue","value":true}}]},{"kind":"Field","name":{"kind":"Name","value":"form"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"survey"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}},{"kind":"Field","name":{"kind":"Name","value":"language"}}]}},{"kind":"Field","name":{"kind":"Name","value":"cachedDimensions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"publicOnly"},"value":{"kind":"BooleanValue","value":false}}]},{"kind":"Field","name":{"kind":"Name","value":"programs"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}}]}}]}}]} as unknown as DocumentNode; export const UpdateProgramPreferencesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateProgramPreferences"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateProgramPreferencesInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateProgramPreferences"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"preferences"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"publicFrom"}},{"kind":"Field","name":{"kind":"Name","value":"isSchedulePublic"}}]}}]}}]}}]} as unknown as DocumentNode; -export const ProgramPreferencesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProgramPreferences"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"publicFrom"}},{"kind":"Field","name":{"kind":"Name","value":"isSchedulePublic"}}]}}]}}]}}]} as unknown as DocumentNode; +export const CreateMessageReplyToDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateMessageReplyTo"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateMessageReplyToInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createMessageReplyTo"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"replyTo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; +export const UpdateMessageReplyToDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateMessageReplyTo"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateMessageReplyToInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateMessageReplyTo"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"replyTo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; +export const DeleteMessageReplyToDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteMessageReplyTo"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"DeleteMessageReplyToInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteMessageReplyTo"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"replyToId"}}]}}]}}]} as unknown as DocumentNode; +export const ProgramPreferencesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProgramPreferences"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"publicFrom"}},{"kind":"Field","name":{"kind":"Name","value":"isSchedulePublic"}},{"kind":"Field","name":{"kind":"Name","value":"replyToAddresses"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"MessageReplyToRow"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"MessageReplyToRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"MessageReplyToType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"email"}}]}}]} as unknown as DocumentNode; export const ProgramAdminReportsPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProgramAdminReportsPage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"timezone"}},{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reports"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"Report"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"Report"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ReportType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"footer"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"columns"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"type"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rows"}},{"kind":"Field","name":{"kind":"Name","value":"totalRow"}}]}}]} as unknown as DocumentNode; export const MarkScheduleItemAsFavoriteDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"MarkScheduleItemAsFavorite"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"FavoriteScheduleItemInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"markScheduleItemAsFavorite"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"success"}}]}}]}}]} as unknown as DocumentNode; export const UnmarkScheduleItemAsFavoriteDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UnmarkScheduleItemAsFavorite"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"FavoriteScheduleItemInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"unmarkScheduleItemAsFavorite"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"success"}}]}}]}}]} as unknown as DocumentNode; @@ -4479,6 +4885,7 @@ export const TicketsAdminReportsPageDocument = {"kind":"Document","definitions": export const GenerateKeyPairDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"GenerateKeyPair"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"password"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"generateKeyPair"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"password"},"value":{"kind":"Variable","name":{"kind":"Name","value":"password"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const RevokeKeyPairDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"RevokeKeyPair"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"revokeKeyPair"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const ProfileEncryptionKeysDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProfileEncryptionKeys"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"profile"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"keypairs"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ProfileEncryptionKeys"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProfileEncryptionKeys"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"KeyPairType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]} as unknown as DocumentNode; +export const ProfileMessagesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProfileMessages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"profile"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"messages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ProfileMessageRow"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProfileMessageRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedMessageType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"subject"}},{"kind":"Field","name":{"kind":"Name","value":"sentAt"}},{"kind":"Field","name":{"kind":"Name","value":"bodyHtml"}},{"kind":"Field","name":{"kind":"Name","value":"event"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]} as unknown as DocumentNode; export const ProfileOrderDetailDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProfileOrderDetail"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"orderId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"profile"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"tickets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"order"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"eventSlug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}},{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"orderId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"formattedOrderNumber"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"totalPrice"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"eticketsLink"}},{"kind":"Field","name":{"kind":"Name","value":"canPay"}},{"kind":"Field","name":{"kind":"Name","value":"canCancel"}},{"kind":"Field","name":{"kind":"Name","value":"canRequestCancellation"}},{"kind":"Field","name":{"kind":"Name","value":"ticketsContactEmail"}},{"kind":"Field","name":{"kind":"Name","value":"products"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}},{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"vatPercentage"}}]}},{"kind":"Field","name":{"kind":"Name","value":"event"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"organization"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"businessId"}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; export const ConfirmEmailDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ConfirmEmail"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ConfirmEmailInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"confirmEmail"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"email"}}]}}]}}]}}]} as unknown as DocumentNode; export const ProfileOrdersDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProfileOrders"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"profile"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"tickets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"orders"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ProfileOrder"}}]}},{"kind":"Field","name":{"kind":"Name","value":"haveUnlinkedOrders"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProfileOrder"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ProfileOrderType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"formattedOrderNumber"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"totalPrice"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"eticketsLink"}},{"kind":"Field","name":{"kind":"Name","value":"canPay"}},{"kind":"Field","name":{"kind":"Name","value":"canCancel"}},{"kind":"Field","name":{"kind":"Name","value":"event"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]} as unknown as DocumentNode; diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/MessageComposeCard.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/MessageComposeCard.tsx new file mode 100644 index 000000000..182fd63aa --- /dev/null +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/MessageComposeCard.tsx @@ -0,0 +1,153 @@ +import { ReactNode } from "react"; +import Card from "react-bootstrap/Card"; +import CardBody from "react-bootstrap/CardBody"; + +import formatRecipientFilterSummary from "./formatRecipientFilterSummary"; +import RecipientFilterField from "./RecipientFilterField"; +import { DimensionValueSelectFragment } from "@/__generated__/graphql"; +import { Field } from "@/components/forms/models"; +import { SchemaForm } from "@/components/forms/SchemaForm"; +import SubmitButton from "@/components/forms/SubmitButton"; +import type { Translations } from "@/translations/en"; + +interface RecipientFilterItem { + dimension: string; + values?: string[] | null; +} + +interface Props { + formId: string; + action(formData: FormData): void; + translations: Translations; + locale: string; + replyToAddresses: { id: string; name: string; email: string }[]; + recipientDimensions: DimensionValueSelectFragment[]; + recipientGroups: RecipientFilterItem[][]; + /// null when the message has not been saved yet, so the actual recipient count is + /// not yet known (it depends on data that only exists once the filters are saved). + recipientCount: number | null; + values: { + subject: string; + dispatch: string; + replyToId: string; + body: string; + }; + /// Label for the submit button. The caller decides the wording (eg. "Save draft" vs. + /// "Save changes") since that depends on whether this message has been sent yet - + /// something this component does not otherwise need to know. + saveLabel: ReactNode; + /// Optional text shown next to the submit button, eg. to make clear that saving does + /// not send the message. + saveHelpText?: ReactNode; +} + +/// The subject/body/dispatch/reply-to/recipients form shared by the "new message" and +/// "edit message" views. The caller decides what `action` does (create vs. update). +export default function MessageComposeCard({ + formId, + action, + translations, + locale, + replyToAddresses, + recipientDimensions, + recipientGroups, + recipientCount, + values, + saveLabel, + saveHelpText, +}: Props) { + const t = translations.Program.Message; + + const fields: Field[] = [ + { + slug: "subject", + type: "SingleLineText", + title: t.attributes.subject.title, + required: true, + }, + { + slug: "dispatch", + type: "SingleSelect", + presentation: "dropdown", + title: t.attributes.dispatch.title, + helpText: t.attributes.dispatch.helpText, + required: true, + choices: [ + { + slug: "PER_PERSON", + title: t.attributes.dispatch.choices.PER_PERSON, + }, + { + slug: "PER_INVOLVEMENT", + title: t.attributes.dispatch.choices.PER_INVOLVEMENT, + }, + ], + }, + { + slug: "replyToId", + type: "SingleSelect", + presentation: "dropdown", + title: t.attributes.replyTo.title, + helpText: t.attributes.replyTo.helpText, + required: true, + choices: [ + { slug: "", title: t.attributes.replyTo.useDefault }, + ...replyToAddresses.map((replyTo) => ({ + slug: replyTo.id, + title: `${replyTo.name} <${replyTo.email}>`, + })), + ], + }, + { + slug: "body", + type: "MarkdownText", + title: t.attributes.body.title, + helpText: t.attributes.body.helpText, + required: true, + rows: 14, + }, + ]; + + const recipientSummary = formatRecipientFilterSummary( + recipientGroups, + recipientDimensions, + ); + + return ( + + +

+ {t.attributes.recipientCount.title}:{" "} + {recipientSummary || t.recipientEditor.noFiltersYet}{" "} + {recipientCount === null + ? t.attributes.recipientCount.notYetKnown + : t.attributes.recipientCount.value(recipientCount)} +

+
+ + + +
+ {saveLabel} + {saveHelpText && ( + {saveHelpText} + )} +
+ +
+
+ ); +} diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/RecipientFilterEditor.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/RecipientFilterEditor.tsx new file mode 100644 index 000000000..a5eefad21 --- /dev/null +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/RecipientFilterEditor.tsx @@ -0,0 +1,139 @@ +"use client"; + +import Button from "react-bootstrap/Button"; +import Card from "react-bootstrap/Card"; +import CardBody from "react-bootstrap/CardBody"; + +import formatRecipientFilterSummary from "./formatRecipientFilterSummary"; +import { DimensionValueSelectFragment } from "@/__generated__/graphql"; +import type { Translations } from "@/translations/en"; + +export type FilterGroup = Record; + +interface Props { + groups: FilterGroup[]; + onChange(groups: FilterGroup[]): void; + dimensions: DimensionValueSelectFragment[]; + messages: Translations["Program"]["Message"]["recipientEditor"]; + readOnly?: boolean; +} + +function toFilterItems(groups: FilterGroup[]) { + return groups + .map((group) => + Object.entries(group) + .filter(([, values]) => values.length > 0) + .map(([dimension, values]) => ({ dimension, values })), + ) + .filter((group) => group.length > 0); +} + +/// Editor for a Message's recipientFilters: an OR of AND-groups of dimension value +/// selections. A controlled component - the caller (RecipientFilterField) owns +/// `groups`, so the selection survives this editor - and the modal it's normally shown +/// in - being unmounted (react-bootstrap's Modal unmounts its body while hidden). +export default function RecipientFilterEditor({ + groups, + onChange, + dimensions, + messages: t, + readOnly = false, +}: Props) { + function toggleValue( + groupIndex: number, + dimensionSlug: string, + valueSlug: string, + checked: boolean, + ) { + onChange( + groups.map((group, idx) => { + if (idx !== groupIndex) return group; + const current = group[dimensionSlug] ?? []; + const next = checked + ? [...current, valueSlug] + : current.filter((slug) => slug !== valueSlug); + return { ...group, [dimensionSlug]: next }; + }), + ); + } + + const liveSummary = formatRecipientFilterSummary( + toFilterItems(groups), + dimensions, + ); + + return ( +
+

+ {t.currentSelection}: {liveSummary || t.noFiltersYet} +

+ {groups.map((group, groupIndex) => ( + + + {groupIndex > 0 && ( +

{t.orSeparator}

+ )} +
+ {dimensions.map((dimension) => ( +
+ + {dimension.title ?? dimension.slug} + + {dimension.values.map((value) => { + const checked = (group[dimension.slug] ?? []).includes( + value.slug, + ); + const inputId = `recipient-filter-${groupIndex}-${dimension.slug}-${value.slug}`; + return ( +
+ + toggleValue( + groupIndex, + dimension.slug, + value.slug, + event.target.checked, + ) + } + /> + +
+ ); + })} +
+ ))} +
+ {!readOnly && groups.length > 1 && ( + + )} +
+
+ ))} + {!readOnly && ( + + )} +
+ ); +} diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/RecipientFilterField.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/RecipientFilterField.tsx new file mode 100644 index 000000000..10815db93 --- /dev/null +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/RecipientFilterField.tsx @@ -0,0 +1,88 @@ +"use client"; + +import { useState } from "react"; + +import RecipientFilterEditor, { FilterGroup } from "./RecipientFilterEditor"; +import { DimensionValueSelectFragment } from "@/__generated__/graphql"; +import ModalButton from "@/components/ModalButton"; +import type { Translations } from "@/translations/en"; + +interface RecipientFilterItem { + dimension: string; + values?: string[] | null; +} + +interface Props { + name: string; + initialGroups: RecipientFilterItem[][]; + dimensions: DimensionValueSelectFragment[]; + modalTitle: string; + modalMessages: Translations["Modal"]; + confirmLabel: string; + editorMessages: Translations["Program"]["Message"]["recipientEditor"]; + buttonClassName?: string; +} + +function groupsToJson(groups: FilterGroup[]) { + const cleaned = groups + .map((group) => + Object.entries(group) + .filter(([, values]) => values.length > 0) + .map(([dimension, values]) => ({ dimension, values })), + ) + .filter((group) => group.length > 0); + return JSON.stringify(cleaned); +} + +function toFilterGroups( + recipientGroups: RecipientFilterItem[][], +): FilterGroup[] { + const converted = recipientGroups.map((group) => { + const record: Record = {}; + for (const item of group) { + record[item.dimension] = item.values ?? []; + } + return record; + }); + return converted.length > 0 ? converted : [{}]; +} + +/// Owns the recipientFilters selection state so it survives the "Edit recipients" +/// modal being closed and reopened - react-bootstrap's Modal unmounts its body while +/// hidden, so state must live in a component that stays mounted for as long as the +/// page does, not in the modal's children. Renders a hidden input holding the current +/// selection as JSON; place this inside the compose
so it gets submitted with +/// the rest of the message. +export default function RecipientFilterField({ + name, + initialGroups, + dimensions, + modalTitle, + modalMessages, + confirmLabel, + editorMessages, + buttonClassName = "btn btn-outline-secondary btn-sm", +}: Props) { + const [groups, setGroups] = useState(() => + toFilterGroups(initialGroups), + ); + + return ( + <> + + + + + + ); +} diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/[messageId]/actions.ts b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/[messageId]/actions.ts new file mode 100644 index 000000000..724045559 --- /dev/null +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/[messageId]/actions.ts @@ -0,0 +1,127 @@ +"use server"; + +import { revalidatePath } from "next/cache"; +import { redirect } from "next/navigation"; +import { graphql } from "@/__generated__"; +import { MessageDispatch } from "@/__generated__/graphql"; +import { getClient } from "@/apolloClient"; + +const updateMessageMutation = graphql(` + mutation UpdateMessage($input: UpdateMessageInput!) { + updateMessage(input: $input) { + message { + id + } + } + } +`); + +export async function updateMessage( + locale: string, + eventSlug: string, + messageId: string, + formData: FormData, +) { + const recipientFiltersRaw = formData.get("recipientFilters"); + const recipientFilters = + typeof recipientFiltersRaw === "string" && recipientFiltersRaw + ? JSON.parse(recipientFiltersRaw) + : []; + + const replyToIdRaw = formData.get("replyToId"); + const replyToId = + typeof replyToIdRaw === "string" && replyToIdRaw ? replyToIdRaw : null; + + await getClient().mutate({ + mutation: updateMessageMutation, + variables: { + input: { + eventSlug, + messageId, + subject: String(formData.get("subject") ?? ""), + body: String(formData.get("body") ?? ""), + dispatch: + (formData.get("dispatch") as MessageDispatch | null) ?? + MessageDispatch.PerPerson, + replyToId, + recipientFilters, + }, + }, + }); + + revalidatePath(`/${locale}/${eventSlug}/program-messages/${messageId}`); + revalidatePath(`/${locale}/${eventSlug}/program-messages`); +} + +const sendMessageMutation = graphql(` + mutation SendMessage($input: SendMessageInput!) { + sendMessage(input: $input) { + message { + id + } + } + } +`); + +export async function sendMessage( + locale: string, + eventSlug: string, + messageId: string, + _formData: FormData, +) { + await getClient().mutate({ + mutation: sendMessageMutation, + variables: { input: { eventSlug, messageId } }, + }); + + revalidatePath(`/${locale}/${eventSlug}/program-messages/${messageId}`); + revalidatePath(`/${locale}/${eventSlug}/program-messages`); +} + +const expireMessageMutation = graphql(` + mutation ExpireMessage($input: ExpireMessageInput!) { + expireMessage(input: $input) { + message { + id + } + } + } +`); + +export async function expireMessage( + locale: string, + eventSlug: string, + messageId: string, + _formData: FormData, +) { + await getClient().mutate({ + mutation: expireMessageMutation, + variables: { input: { eventSlug, messageId } }, + }); + + revalidatePath(`/${locale}/${eventSlug}/program-messages/${messageId}`); + revalidatePath(`/${locale}/${eventSlug}/program-messages`); +} + +const deleteMessageMutation = graphql(` + mutation DeleteMessage($input: DeleteMessageInput!) { + deleteMessage(input: $input) { + messageId + } + } +`); + +export async function deleteMessage( + locale: string, + eventSlug: string, + messageId: string, + _formData: FormData, +) { + await getClient().mutate({ + mutation: deleteMessageMutation, + variables: { input: { eventSlug, messageId } }, + }); + + revalidatePath(`/${locale}/${eventSlug}/program-messages`); + redirect(`/${eventSlug}/program-messages`); +} diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/[messageId]/page.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/[messageId]/page.tsx new file mode 100644 index 000000000..41b569ba0 --- /dev/null +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/[messageId]/page.tsx @@ -0,0 +1,198 @@ +import { notFound } from "next/navigation"; + +import { + deleteMessage, + expireMessage, + sendMessage, + updateMessage, +} from "./actions"; +import MessageComposeCard from "../MessageComposeCard"; +import { graphql } from "@/__generated__"; +import { getClient } from "@/apolloClient"; +import { auth } from "@/auth"; +import SignInRequired from "@/components/errors/SignInRequired"; +import ModalButton from "@/components/ModalButton"; +import ProgramAdminView from "@/components/program/ProgramAdminView"; +import getPageTitle from "@/helpers/getPageTitle"; +import { getTranslations } from "@/translations"; +import { ButtonGroup } from "react-bootstrap"; + +graphql(` + fragment MessageCompose on MessageType { + id + subject + body + dispatch + state + createdAt + sentAt + expiredAt + recipientFilters + recipientCount + replyTo { + id + } + } +`); + +const query = graphql(` + query ProgramMessageComposePage( + $eventSlug: String! + $messageId: String! + $locale: String + ) { + event(slug: $eventSlug) { + name + slug + + program { + message(id: $messageId) { + ...MessageCompose + } + replyToAddresses { + id + name + email + } + recipientDimensions { + ...DimensionValueSelect + } + } + } + } +`); + +interface Props { + params: Promise<{ + locale: string; + eventSlug: string; + messageId: string; + }>; +} + +export const revalidate = 0; + +export async function generateMetadata(props: Props) { + const params = await props.params; + const { locale, eventSlug, messageId } = params; + const translations = getTranslations(locale); + + const session = await auth(); + if (!session) { + return translations.SignInRequired.metadata; + } + + const { data } = await getClient().query({ + query, + variables: { eventSlug, messageId, locale }, + }); + + return { + title: getPageTitle({ + translations, + event: data.event, + viewTitle: translations.Program.Message.listTitle, + subject: data.event?.program?.message?.subject, + }), + }; +} + +export default async function ProgramMessageComposePage(props: Props) { + const params = await props.params; + const { locale, eventSlug, messageId } = params; + const translations = getTranslations(locale); + const t = translations.Program.Message; + + const session = await auth(); + if (!session) { + return ; + } + + const { data } = await getClient().query({ + query, + variables: { eventSlug, messageId, locale }, + }); + + const event = data.event; + const message = event?.program?.message; + const replyToAddresses = event?.program?.replyToAddresses ?? []; + const recipientDimensions = event?.program?.recipientDimensions ?? []; + + if (!event || !event.program || !message) { + notFound(); + } + + const isSent = message.state !== "DRAFT"; + const formId = "message-compose-form"; + + const values = { + subject: message.subject, + dispatch: message.dispatch, + replyToId: message.replyTo?.id ?? "", + body: message.body, + }; + + const recipientGroups = (message.recipientFilters ?? []) as { + dimension: string; + values?: string[] | null; + }[][]; + + return ( + + + {isSent + ? t.actions.send.confirmationResend + : t.actions.send.confirmation} + + {isSent && message.state === "ACTIVE" && ( + + {t.actions.expire.confirmation} + + )} + {!isSent && ( + + {t.actions.delete.confirmation} + + )} + + } + > + + + ); +} diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/formatRecipientFilterSummary.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/formatRecipientFilterSummary.tsx new file mode 100644 index 000000000..af8f987db --- /dev/null +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/formatRecipientFilterSummary.tsx @@ -0,0 +1,34 @@ +import { DimensionValueSelectFragment } from "@/__generated__/graphql"; + +interface FilterItem { + dimension: string; + values?: string[] | null; +} + +/// Renders recipientFilters (OR of AND-groups) as a short human-readable summary, +/// eg. "(Type: Program host, State: Active) OR (Type: Program offer)". +export default function formatRecipientFilterSummary( + groups: FilterItem[][], + dimensions: DimensionValueSelectFragment[], +): string { + if (groups.length === 0) { + return ""; + } + + const dimensionsBySlug = new Map(dimensions.map((d) => [d.slug, d])); + + const groupSummaries = groups.map((group) => { + const itemSummaries = group.map((item) => { + const dimension = dimensionsBySlug.get(item.dimension); + const dimensionTitle = dimension?.title ?? item.dimension; + const valueTitles = (item.values ?? []).map((valueSlug) => { + const value = dimension?.values.find((v) => v.slug === valueSlug); + return value?.title ?? valueSlug; + }); + return `${dimensionTitle}: ${valueTitles.join("/")}`; + }); + return `(${itemSummaries.join(", ")})`; + }); + + return groupSummaries.join(" OR "); +} diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/new/actions.ts b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/new/actions.ts new file mode 100644 index 000000000..bb977ffc7 --- /dev/null +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/new/actions.ts @@ -0,0 +1,54 @@ +"use server"; + +import { revalidatePath } from "next/cache"; +import { redirect } from "next/navigation"; +import { graphql } from "@/__generated__"; +import { MessageDispatch } from "@/__generated__/graphql"; +import { getClient } from "@/apolloClient"; + +const createMessageMutation = graphql(` + mutation CreateMessage($input: CreateMessageInput!) { + createMessage(input: $input) { + message { + id + } + } + } +`); + +export async function createMessage( + locale: string, + eventSlug: string, + formData: FormData, +) { + const recipientFiltersRaw = formData.get("recipientFilters"); + const recipientFilters = + typeof recipientFiltersRaw === "string" && recipientFiltersRaw + ? JSON.parse(recipientFiltersRaw) + : []; + + const replyToIdRaw = formData.get("replyToId"); + const replyToId = + typeof replyToIdRaw === "string" && replyToIdRaw ? replyToIdRaw : null; + + const result = await getClient().mutate({ + mutation: createMessageMutation, + variables: { + input: { + eventSlug, + subject: String(formData.get("subject") ?? ""), + body: String(formData.get("body") ?? ""), + dispatch: + (formData.get("dispatch") as MessageDispatch | null) ?? + MessageDispatch.PerPerson, + replyToId, + recipientFilters, + }, + }, + }); + + revalidatePath(`/${locale}/${eventSlug}/program-messages`); + + const newMessageId = result.data?.createMessage?.message?.id; + redirect(`/${eventSlug}/program-messages/${newMessageId ?? ""}`); +} diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/new/page.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/new/page.tsx new file mode 100644 index 000000000..fa3c5a534 --- /dev/null +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/new/page.tsx @@ -0,0 +1,122 @@ +import { notFound } from "next/navigation"; + +import { createMessage } from "./actions"; +import MessageComposeCard from "../MessageComposeCard"; +import { graphql } from "@/__generated__"; +import { getClient } from "@/apolloClient"; +import { auth } from "@/auth"; +import SignInRequired from "@/components/errors/SignInRequired"; +import ProgramAdminView from "@/components/program/ProgramAdminView"; +import getPageTitle from "@/helpers/getPageTitle"; +import { getTranslations } from "@/translations"; + +const query = graphql(` + query ProgramMessageNewPage($eventSlug: String!, $locale: String) { + event(slug: $eventSlug) { + name + slug + + program { + replyToAddresses { + id + name + email + } + recipientDimensions { + ...DimensionValueSelect + } + } + } + } +`); + +interface Props { + params: Promise<{ + locale: string; + eventSlug: string; + }>; +} + +export const revalidate = 0; + +export async function generateMetadata(props: Props) { + const params = await props.params; + const { locale, eventSlug } = params; + const translations = getTranslations(locale); + + const session = await auth(); + if (!session) { + return translations.SignInRequired.metadata; + } + + const { data } = await getClient().query({ + query, + variables: { eventSlug, locale }, + }); + + return { + title: getPageTitle({ + translations, + event: data.event, + viewTitle: translations.Program.Message.actions.newMessage.title, + }), + }; +} + +/// Renders the compose form for a message that does not exist in the database yet. +/// It is only created (via CreateMessage) when this form is first saved - viewing this +/// page, or navigating away from it, never commits anything. +export default async function ProgramMessageNewPage(props: Props) { + const params = await props.params; + const { locale, eventSlug } = params; + const translations = getTranslations(locale); + const t = translations.Program.Message; + + const session = await auth(); + if (!session) { + return ; + } + + const { data } = await getClient().query({ + query, + variables: { eventSlug, locale }, + }); + + const event = data.event; + if (!event || !event.program) { + notFound(); + } + + const replyToAddresses = event.program.replyToAddresses; + const recipientDimensions = event.program.recipientDimensions; + + const values = { + subject: "", + dispatch: "PER_PERSON", + replyToId: "", + body: "", + }; + + return ( + + + + ); +} diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/page.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/page.tsx new file mode 100644 index 000000000..7c162022f --- /dev/null +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/page.tsx @@ -0,0 +1,154 @@ +import Link from "next/link"; +import { notFound } from "next/navigation"; + +import { graphql } from "@/__generated__"; +import { getClient } from "@/apolloClient"; +import { auth } from "@/auth"; +import { Column, DataTable } from "@/components/DataTable"; +import SignInRequired from "@/components/errors/SignInRequired"; +import FormattedDateTime from "@/components/FormattedDateTime"; +import ProgramAdminView from "@/components/program/ProgramAdminView"; +import getPageTitle from "@/helpers/getPageTitle"; +import { getTranslations } from "@/translations"; + +graphql(` + fragment ProgramMessageListRow on MessageType { + id + subject + state + dispatch + createdAt + sentAt + recipientCount + } +`); + +const query = graphql(` + query ProgramMessagesPage($eventSlug: String!) { + event(slug: $eventSlug) { + name + slug + + program { + messages { + ...ProgramMessageListRow + } + } + } + } +`); + +interface Props { + params: Promise<{ + locale: string; + eventSlug: string; + }>; + searchParams: Promise>; +} + +export const revalidate = 0; + +export async function generateMetadata(props: Props) { + const params = await props.params; + const { locale, eventSlug } = params; + const translations = getTranslations(locale); + + const session = await auth(); + if (!session) { + return translations.SignInRequired.metadata; + } + + const { data } = await getClient().query({ query, variables: { eventSlug } }); + + return { + title: getPageTitle({ + translations, + event: data.event, + viewTitle: translations.Program.Message.listTitle, + }), + }; +} + +export default async function ProgramMessagesPage(props: Props) { + const params = await props.params; + const searchParams = await props.searchParams; + const { locale, eventSlug } = params; + const translations = getTranslations(locale); + const t = translations.Program.Message; + + const session = await auth(); + if (!session) { + return ; + } + + const { data } = await getClient().query({ query, variables: { eventSlug } }); + + const event = data.event; + if (!event || !event.program) { + notFound(); + } + + const messages = event.program.messages; + + const columns: Column<(typeof messages)[number]>[] = [ + { + slug: "subject", + title: t.attributes.subject.title, + getCellContents: (message) => ( + + {message.subject || t.attributes.subject.noSubject} + + ), + className: "col-4 align-middle", + }, + { + slug: "state", + title: t.attributes.state.title, + getCellContents: (message) => t.attributes.state.choices[message.state], + className: "col-2 align-middle", + }, + { + slug: "createdAt", + title: t.attributes.createdAt.title, + getCellContents: (message) => ( + + ), + className: "col-2 align-middle", + }, + { + slug: "recipientCount", + title: t.attributes.recipientCount.title, + getCellContents: (message) => + t.attributes.recipientCount.value(message.recipientCount), + className: "col-2 align-middle", + }, + ]; + + return ( + + {t.actions.newMessage.title}… + + } + > + + + ); +} diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-preferences/actions.ts b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-preferences/actions.ts index 0dbe21025..804469066 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-preferences/actions.ts +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-preferences/actions.ts @@ -39,3 +39,91 @@ export async function updateProgramPreferences( revalidatePath(`/${locale}/${eventSlug}/program-preferences`); revalidatePath(`/${locale}/${eventSlug}/program`); } + +const createMessageReplyToMutation = graphql(` + mutation CreateMessageReplyTo($input: CreateMessageReplyToInput!) { + createMessageReplyTo(input: $input) { + replyTo { + id + } + } + } +`); + +export async function createMessageReplyTo( + locale: string, + eventSlug: string, + formData: FormData, +) { + await getClient().mutate({ + mutation: createMessageReplyToMutation, + variables: { + input: { + eventSlug, + slug: String(formData.get("slug") ?? ""), + name: String(formData.get("name") ?? ""), + email: String(formData.get("email") ?? ""), + }, + }, + }); + + revalidatePath(`/${locale}/${eventSlug}/program-preferences`); +} + +const updateMessageReplyToMutation = graphql(` + mutation UpdateMessageReplyTo($input: UpdateMessageReplyToInput!) { + updateMessageReplyTo(input: $input) { + replyTo { + id + } + } + } +`); + +export async function updateMessageReplyTo( + locale: string, + eventSlug: string, + replyToId: string, + formData: FormData, +) { + await getClient().mutate({ + mutation: updateMessageReplyToMutation, + variables: { + input: { + eventSlug, + replyToId, + name: String(formData.get("name") ?? ""), + email: String(formData.get("email") ?? ""), + }, + }, + }); + + revalidatePath(`/${locale}/${eventSlug}/program-preferences`); +} + +const deleteMessageReplyToMutation = graphql(` + mutation DeleteMessageReplyTo($input: DeleteMessageReplyToInput!) { + deleteMessageReplyTo(input: $input) { + replyToId + } + } +`); + +export async function deleteMessageReplyTo( + locale: string, + eventSlug: string, + replyToId: string, + _formData: FormData, +) { + await getClient().mutate({ + mutation: deleteMessageReplyToMutation, + variables: { + input: { + eventSlug, + replyToId, + }, + }, + }); + + revalidatePath(`/${locale}/${eventSlug}/program-preferences`); +} diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-preferences/page.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-preferences/page.tsx index 50521a830..8ae2ed6e4 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-preferences/page.tsx +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-preferences/page.tsx @@ -2,18 +2,34 @@ import { notFound } from "next/navigation"; import Card from "react-bootstrap/Card"; import CardBody from "react-bootstrap/CardBody"; -import { updateProgramPreferences } from "./actions"; +import CardTitle from "react-bootstrap/CardTitle"; +import { + createMessageReplyTo, + deleteMessageReplyTo, + updateMessageReplyTo, + updateProgramPreferences, +} from "./actions"; import { graphql } from "@/__generated__"; import { getClient } from "@/apolloClient"; import { auth } from "@/auth"; +import { Column, DataTable } from "@/components/DataTable"; import SignInRequired from "@/components/errors/SignInRequired"; import { Field } from "@/components/forms/models"; import { SchemaForm } from "@/components/forms/SchemaForm"; import SubmitButton from "@/components/forms/SubmitButton"; +import ModalButton from "@/components/ModalButton"; import ProgramAdminView from "@/components/program/ProgramAdminView"; import getPageTitle from "@/helpers/getPageTitle"; import { getTranslations } from "@/translations"; +graphql(` + fragment MessageReplyToRow on MessageReplyToType { + id + name + email + } +`); + const query = graphql(` query ProgramPreferences($eventSlug: String!) { event(slug: $eventSlug) { @@ -23,6 +39,10 @@ const query = graphql(` program { publicFrom isSchedulePublic + + replyToAddresses { + ...MessageReplyToRow + } } } } @@ -86,6 +106,69 @@ export default async function ProgramPreferencesPage(props: Props) { notFound(); } + const tReplyTo = translations.Program.Message.ReplyTo; + const replyToAddresses = program.replyToAddresses; + + const replyToFields: Field[] = [ + { + slug: "name", + type: "SingleLineText", + title: tReplyTo.attributes.name.title, + required: true, + }, + { + slug: "email", + type: "SingleLineText", + htmlType: "email", + title: tReplyTo.attributes.email.title, + required: true, + }, + ]; + + const replyToColumns: Column<(typeof replyToAddresses)[number]>[] = [ + { slug: "name", title: tReplyTo.attributes.name.title }, + { slug: "email", title: tReplyTo.attributes.email.title }, + { + slug: "actions", + title: translations.Common.actions, + getCellContents: (replyTo) => ( + <> + + + + + {tReplyTo.actions.delete.confirmation(replyTo.name)} + + + ), + }, + ]; + const fields: Field[] = [ { slug: "publicFrom", @@ -128,6 +211,26 @@ export default async function ProgramPreferencesPage(props: Props) { + + + + {tReplyTo.listTitle} +

{tReplyTo.description}

+ + + + +
+
); } diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/surveys/[surveySlug]/responses/summary/FieldSummaryComponent.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/surveys/[surveySlug]/responses/summary/FieldSummaryComponent.tsx index c717158a8..ab1f7b6ec 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/surveys/[surveySlug]/responses/summary/FieldSummaryComponent.tsx +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/surveys/[surveySlug]/responses/summary/FieldSummaryComponent.tsx @@ -74,6 +74,7 @@ function getSummaryChoices( case "SingleLineText": case "Divider": case "MultiLineText": + case "MarkdownText": case "Spacer": case "StaticText": case "FileUpload": diff --git a/kompassi-v2-frontend/src/app/[locale]/profile/messages/page.tsx b/kompassi-v2-frontend/src/app/[locale]/profile/messages/page.tsx new file mode 100644 index 000000000..46daac085 --- /dev/null +++ b/kompassi-v2-frontend/src/app/[locale]/profile/messages/page.tsx @@ -0,0 +1,109 @@ +import { graphql } from "@/__generated__"; +import { getClient } from "@/apolloClient"; +import { auth } from "@/auth"; +import { Column, DataTable } from "@/components/DataTable"; +import SignInRequired from "@/components/errors/SignInRequired"; +import FormattedDateTime from "@/components/FormattedDateTime"; +import ModalButton from "@/components/ModalButton"; +import ViewContainer from "@/components/ViewContainer"; +import ViewHeading from "@/components/ViewHeading"; +import { getTranslations } from "@/translations"; + +graphql(` + fragment ProfileMessageRow on LimitedMessageType { + id + subject + sentAt + bodyHtml + event { + slug + name + } + } +`); + +const query = graphql(` + query ProfileMessages { + profile { + messages { + ...ProfileMessageRow + } + } + } +`); + +interface Props { + params: Promise<{ + locale: string; + }>; +} + +export const revalidate = 0; + +export async function generateMetadata(props: Props) { + const params = await props.params; + const { locale } = params; + const translations = getTranslations(locale); + const t = translations.Program.Message.profile; + + return { + title: `${t.title} – Kompassi`, + }; +} + +export default async function ProfileMessagesPage(props: Props) { + const params = await props.params; + const { locale } = params; + const translations = getTranslations(locale); + const t = translations.Program.Message.profile; + const session = await auth(); + + if (!session) { + return ; + } + + const { data } = await getClient().query({ query }); + const messages = data.profile?.messages ?? []; + + const columns: Column<(typeof messages)[number]>[] = [ + { + slug: "sentAt", + title: t.attributes.sentAt, + getCellContents: (message) => ( + + } + > +
+ + ), + className: "col-2 align-middle", + }, + { + slug: "event", + title: t.attributes.event, + getCellContents: (message) => message.event.name, + className: "col-3 align-middle", + }, + { + slug: "subject", + title: t.attributes.subject, + className: "col-7 align-middle", + }, + ]; + + return ( + + {t.title} + + + ); +} diff --git a/kompassi-v2-frontend/src/components/ModalButton.tsx b/kompassi-v2-frontend/src/components/ModalButton.tsx index 947d8f673..fecf5b105 100644 --- a/kompassi-v2-frontend/src/components/ModalButton.tsx +++ b/kompassi-v2-frontend/src/components/ModalButton.tsx @@ -16,6 +16,13 @@ interface Props { disabled?: boolean; className?: string; submitButtonVariant?: "primary" | "danger" | "success"; + /// When set (and no `action` is given), the modal gets a primary button with this + /// label that just closes the modal, instead of the plain "cancel"-only close + /// button. Use for modals whose content is a client-side widget that is already + /// live-synced to state elsewhere (eg. an outer form via a `form` attribute) and so + /// has no separate submit step of its own - the button just confirms "I'm done + /// selecting", it does not discard anything on close either way. + confirmLabel?: string; } /// Renders a button that opens a modal. Pass modal contents as children @@ -29,6 +36,7 @@ export default function ModalButton({ disabled, className = "btn btn-link p-0 link-subtle", submitButtonVariant = "primary", + confirmLabel, }: Props) { const [isVisible, setIsVisible] = useState(false); const close = useCallback(() => { @@ -76,8 +84,11 @@ export default function ModalButton({ <> {children} - diff --git a/kompassi-v2-frontend/src/components/forms/MarkdownEditor.tsx b/kompassi-v2-frontend/src/components/forms/MarkdownEditor.tsx new file mode 100644 index 000000000..f86a70ac8 --- /dev/null +++ b/kompassi-v2-frontend/src/components/forms/MarkdownEditor.tsx @@ -0,0 +1,86 @@ +"use client"; + +import MDEditor from "@uiw/react-md-editor"; +import * as commands from "@uiw/react-md-editor/commands"; +import { useState } from "react"; + +// Required for the editor's layout (in particular, for the text area and preview pane +// to actually fill the visible bordered box instead of collapsing to their browser +// default size while the surrounding chrome renders at the full configured height). +import "@uiw/react-md-editor/markdown-editor.css"; +import "@uiw/react-markdown-preview/markdown.css"; + +interface MarkdownEditorProps { + id?: string; + name: string; + defaultValue?: string; + required?: boolean; + readOnly?: boolean; + rows?: number; +} + +// Keep the toolbar limited to the formatting we actually allow through the backend +// sanitizer and document in the field's help text: headings, bold, italics, lists, +// links. In particular, only offer h1-h4 (not h5/h6, which nh3 would strip), and omit +// strikethrough, quote, code, tables, images, and horizontal rules entirely. +const toolbarCommands = [ + commands.group( + [commands.title1, commands.title2, commands.title3, commands.title4], + { + name: "title", + groupName: "title", + buttonProps: { "aria-label": "Insert heading" }, + icon: commands.title.icon, + }, + ), + commands.bold, + commands.italic, + commands.divider, + commands.unorderedListCommand, + commands.orderedListCommand, + commands.divider, + commands.link, +]; + +/// A Markdown editor with a toolbar and preview restricted to the formatting the +/// backend renders/sanitizes, backed by a hidden input so it participates in normal +///
submission. +export default function MarkdownEditor({ + id, + name, + defaultValue = "", + required, + readOnly, + rows = 10, +}: MarkdownEditorProps) { + const [value, setValue] = useState(defaultValue); + // The toolbar (~40px) sits above the text area within `height`, so the text area's + // own minHeight must leave room for it - otherwise its min-height (forced via an + // inline style, see below) exceeds the space actually left for it after the + // toolbar, and `.w-md-editor-area`'s `overflow: auto` permanently shows a scrollbar. + const toolbarHeight = 40; + const contentHeight = rows * 24; + const editorHeight = contentHeight + toolbarHeight; + + return ( +
+ + setValue(newValue ?? "")} + preview={readOnly ? "preview" : "live"} + visibleDragbar={false} + height={editorHeight} + // MDEditor's `minHeight` defaults to 100px and, once set, is applied as an + // inline style overriding the stylesheet's `min-height: 100%` rule on the + // text area's wrapper - so without this, the editable area stays stuck at + // 100px regardless of `height`, even though the surrounding chrome (and the + // preview pane) do size to `height` correctly. + minHeight={contentHeight} + textareaProps={{ readOnly }} + commands={toolbarCommands} + /> +
+ ); +} diff --git a/kompassi-v2-frontend/src/components/forms/SchemaFormInput.tsx b/kompassi-v2-frontend/src/components/forms/SchemaFormInput.tsx index 2ac4ed14a..18c4d3c13 100644 --- a/kompassi-v2-frontend/src/components/forms/SchemaFormInput.tsx +++ b/kompassi-v2-frontend/src/components/forms/SchemaFormInput.tsx @@ -1,6 +1,7 @@ import Card from "react-bootstrap/Card"; import CardBody from "react-bootstrap/CardBody"; import makeInputId from "./makeInputId"; +import MarkdownEditor from "./MarkdownEditor"; import type { Choice, Field, SingleSelectPresentation } from "./models"; import PatternTextInput from "./PatternTextInput"; import { SchemaForm } from "./SchemaForm"; @@ -84,6 +85,17 @@ function SchemaFormInput({ name={slug} /> ); + case "MarkdownText": + return ( + + ); case "NumberField": case "DecimalField": return ( @@ -134,7 +146,9 @@ function SchemaFormInput({ switch (presentation) { case "dropdown": - choices = [{ slug: "", title: "" }, ...choices]; + if (!field.required) { + choices = [{ slug: "", title: "" }, ...choices]; + } // FIXME React 19 / Next 15 regression? // On AutoSelectForms, when onChange calls requestSubmit, defaultValue={value} does receive the new value diff --git a/kompassi-v2-frontend/src/components/forms/models.ts b/kompassi-v2-frontend/src/components/forms/models.ts index 6e4bafaf9..3a295249f 100644 --- a/kompassi-v2-frontend/src/components/forms/models.ts +++ b/kompassi-v2-frontend/src/components/forms/models.ts @@ -3,6 +3,7 @@ import { ReactNode } from "react"; export type FieldType = | "SingleLineText" | "MultiLineText" + | "MarkdownText" | "Divider" | "StaticText" | "Spacer" @@ -25,6 +26,7 @@ export type FieldType = export const fieldTypes: FieldType[] = [ "SingleLineText", "MultiLineText", + "MarkdownText", "SingleCheckbox", "Tristate", "DimensionSingleCheckbox", @@ -102,6 +104,11 @@ export interface MultiLineText extends BaseField { rows?: number; } +export interface MarkdownText extends BaseField { + type: "MarkdownText"; + rows?: number; +} + export interface NumberField extends BaseField { type: "NumberField"; decimalPlaces?: number; @@ -215,6 +222,7 @@ export type Values = Record; export type Field = | SingleLineText | MultiLineText + | MarkdownText | Divider | Spacer | StaticText diff --git a/kompassi-v2-frontend/src/components/forms/newField.ts b/kompassi-v2-frontend/src/components/forms/newField.ts index 0f0a530c6..dd57152df 100644 --- a/kompassi-v2-frontend/src/components/forms/newField.ts +++ b/kompassi-v2-frontend/src/components/forms/newField.ts @@ -12,6 +12,7 @@ export default function newField( case "StaticText": case "SingleLineText": case "MultiLineText": + case "MarkdownText": case "NumberField": case "DecimalField": case "SingleCheckbox": diff --git a/kompassi-v2-frontend/src/components/forms/processFormData.ts b/kompassi-v2-frontend/src/components/forms/processFormData.ts index d141afd7e..1579cc46a 100644 --- a/kompassi-v2-frontend/src/components/forms/processFormData.ts +++ b/kompassi-v2-frontend/src/components/forms/processFormData.ts @@ -24,6 +24,7 @@ export default function processFormData( case "SingleLineText": case "MultiLineText": + case "MarkdownText": case "SingleSelect": case "DimensionSingleSelect": case "DateTimeField": diff --git a/kompassi-v2-frontend/src/components/navigation/NavigationMenus.tsx b/kompassi-v2-frontend/src/components/navigation/NavigationMenus.tsx index 1c8ecca6c..3fa1ab8e7 100644 --- a/kompassi-v2-frontend/src/components/navigation/NavigationMenus.tsx +++ b/kompassi-v2-frontend/src/components/navigation/NavigationMenus.tsx @@ -50,6 +50,7 @@ export default function NavigationMenus({ session, locale, messages }: Props) { { href: "/profile/orders", title: messages.UserMenu.tickets }, { href: "/profile/program", title: messages.UserMenu.program }, { href: "/profile/responses", title: messages.UserMenu.responses }, + { href: "/profile/messages", title: messages.UserMenu.messages }, // { href: "/profile/keys", title: messages.UserMenu.keys }, ]; diff --git a/kompassi-v2-frontend/src/components/program/ProgramAdminTabs.tsx b/kompassi-v2-frontend/src/components/program/ProgramAdminTabs.tsx index b883ebfc7..0a824d22e 100644 --- a/kompassi-v2-frontend/src/components/program/ProgramAdminTabs.tsx +++ b/kompassi-v2-frontend/src/components/program/ProgramAdminTabs.tsx @@ -11,6 +11,7 @@ export interface ProgramAdminTabsProps { | "invitations" | "dimensions" | "annotations" + | "programMessages" | "preferences" | "reports"; translations: Translations; @@ -60,7 +61,7 @@ export default function ProgramAdminTabs({ }, { slug: "invitations", - title: translations.Invitation.listTitle, + title: translations.Invitation.tabHeader, href: `/${eventSlug}/program-invitations${queryString}`, }, { @@ -73,6 +74,11 @@ export default function ProgramAdminTabs({ title: translations.Annotation.listTitle, href: `/${eventSlug}/program-annotations`, }, + { + slug: "programMessages", + title: t.Message.listTitle, + href: `/${eventSlug}/program-messages${queryString}`, + }, { slug: "reports", title: translations.Report.listTitle, diff --git a/kompassi-v2-frontend/src/translations/en.tsx b/kompassi-v2-frontend/src/translations/en.tsx index a33355aa8..aab2d586a 100644 --- a/kompassi-v2-frontend/src/translations/en.tsx +++ b/kompassi-v2-frontend/src/translations/en.tsx @@ -167,6 +167,7 @@ const translations = { responses: "Survey responses", keys: "Encryption keys", program: "Program items and offers", + messages: "Messages", signIn: "Sign in", signOut: "Sign out", }, @@ -275,6 +276,7 @@ const translations = { fieldTypes: { SingleLineText: "Single line text", MultiLineText: "Multi-line text", + MarkdownText: "Multi-line text (Markdown)", Divider: "Divider", StaticText: "Static text", Spacer: "Empty space", @@ -1947,6 +1949,165 @@ const translations = { }, }, + Message: { + singleTitle: "Message", + listTitle: "Messages", + attributes: { + count: (numMessages: number) => ( + <> + Showing {numMessages} message{numMessages === 1 ? "" : "s"}. + + ), + subject: { + title: "Subject", + noSubject: "(no subject)", + }, + body: { + title: "Message", + helpText: + "Limited Markdown formatting is supported (headings, bold, italics, lists, links). " + + "You can use the following placeholders, which will be replaced with the recipient's own data: " + + "{FIRST_NAME} (recipient's first name), {EVENT_NAME} (name of the event), and, " + + "when sending one message per program item, {PROGRAM_TITLE} (title of the program item).", + }, + dispatch: { + title: "Sending mode", + helpText: + "One message per person sends a single copy to each matching person, even if they " + + "match via multiple program items. One message per program item sends a separate " + + "copy for each matching program item a person hosts, and makes the {PROGRAM_TITLE} " + + "placeholder available.", + choices: { + PER_PERSON: "One message per person", + PER_INVOLVEMENT: "One message per program item", + }, + }, + replyTo: { + title: "Reply-to address", + helpText: + "Replies will be directed to this address instead of the event's default contact address. " + + "Manage the available addresses on this page, below.", + useDefault: "Event's default contact address", + }, + state: { + title: "State", + choices: { + DRAFT: "Draft", + ACTIVE: "Active", + EXPIRED: "Expired", + }, + }, + createdAt: { + title: "Created", + }, + sentAt: { + title: "Sent", + }, + recipientCount: { + title: "Recipients", + value: (numRecipients: number) => + `(${numRecipients} recipient${numRecipients === 1 ? "" : "s"})`, + notYetKnown: "(recipient count will be shown after saving)", + }, + }, + actions: { + newMessage: { + title: "New message", + }, + editRecipients: { + title: "Edit recipients", + }, + saveDraft: "Save draft", + saveDraftHelpText: + "This saves the message as a draft. It will not be sent to anyone until you press Send.", + saveChanges: "Save changes", + send: { + title: "Send", + confirmation: + "Are you sure you want to send this message to its current recipients? " + + "You can still edit and resend it later; people who already received it will not receive it again unless they newly match the recipient filters.", + confirmationResend: + "This message has already been sent. Sending it again will deliver the current content " + + "to anyone matching the recipient filters who has not yet received it. People who already " + + "received it will not receive it again, and will not see these changes.", + modalActions: { + submit: "Send", + cancel: "Cancel", + }, + }, + expire: { + title: "Expire", + confirmation: + "Are you sure you want to expire this message? It will no longer be sent to newly matching recipients. " + + "People who already received it are not affected.", + modalActions: { + submit: "Expire", + cancel: "Cancel", + }, + }, + delete: { + title: "Delete draft", + confirmation: "Are you sure you want to delete this draft message?", + modalActions: { + submit: "Delete", + cancel: "Cancel", + }, + }, + alreadySentWarning: + "This message has already been sent. Your changes will only apply to recipients who receive it " + + "from now on; people who already received it keep the original.", + }, + recipientEditor: { + currentSelection: "Current selection", + noFiltersYet: "No recipients selected yet.", + addGroup: "Add alternative recipient group (OR)", + removeGroup: "Remove this group", + orSeparator: "OR match all of:", + confirm: "Done", + }, + profile: { + title: "Messages", + noSubject: "(no subject)", + attributes: { + sentAt: "Date", + event: "Event", + subject: "Subject", + }, + }, + ReplyTo: { + listTitle: "Reply-to addresses", + description: + "Configure the reply-to addresses that can be selected when composing a message. " + + "The sender address itself is always the event's contact address.", + attributes: { + name: { + title: "Name", + }, + email: { + title: "Email address", + }, + }, + actions: { + create: { + title: "New reply-to address", + }, + edit: { + title: "Edit reply-to address", + }, + delete: { + title: "Delete reply-to address", + confirmation: (name: string) => ( + <> + Are you sure you want to delete the reply-to address{" "} + {name}? Messages using it will fall back to the + event's default contact address. + + ), + }, + }, + }, + }, + ScheduleItem: { singleTitle: "Schedule item", listTitle: "Schedule items", @@ -2785,6 +2946,7 @@ const translations = { }, Invitation: { + tabHeader: "Invitations", listTitle: "Open invitations", listDescription: ( <> diff --git a/kompassi-v2-frontend/src/translations/fi.tsx b/kompassi-v2-frontend/src/translations/fi.tsx index 7e23f09e6..c551c6849 100644 --- a/kompassi-v2-frontend/src/translations/fi.tsx +++ b/kompassi-v2-frontend/src/translations/fi.tsx @@ -155,8 +155,8 @@ const translations: Translations = { dataToBeTransferred: "Luovutettavat henkilötiedot", }, Modal: { - submit: "Submit", - cancel: "Cancel", + submit: "Lähetä", + cancel: "Peruuta", }, DataTable: { create: "Luo uusi", @@ -173,6 +173,7 @@ const translations: Translations = { responses: "Kyselyvastaukset", keys: "Salausavaimet", program: "Ohjelmanumerot ja -tarjoukset", + messages: "Viestit", signIn: "Kirjaudu sisään", signOut: "Kirjaudu ulos", }, @@ -282,6 +283,7 @@ const translations: Translations = { fieldTypes: { SingleLineText: "Yksirivinen tekstikenttä", MultiLineText: "Monirivinen tekstikenttä", + MarkdownText: "Monirivinen tekstikenttä (Markdown)", Divider: "Erotinviiva", StaticText: "Kiinteä teksti", Spacer: "Tyhjä tila", @@ -1955,6 +1957,166 @@ const translations: Translations = { }, }, + Message: { + singleTitle: "Viesti", + listTitle: "Viestit", + attributes: { + count: (numMessages: number) => ( + <> + Näytetään {numMessages} viesti{numMessages === 1 ? "" : "ä"}. + + ), + subject: { + title: "Otsikko", + noSubject: "(ei otsikkoa)", + }, + body: { + title: "Viesti", + helpText: + "Rajoitettu Markdown-muotoilu on tuettu (otsikot, lihavointi, kursivointi, listat, linkit). " + + "Voit käyttää seuraavia paikanpitäjiä, jotka korvataan vastaanottajan omilla tiedoilla: " + + "{FIRST_NAME} (vastaanottajan etunimi), {EVENT_NAME} (tapahtuman nimi) ja, kun viesti " + + "lähetetään yksi kappale per ohjelmanumero, {PROGRAM_TITLE} (ohjelmanumeron nimi).", + }, + dispatch: { + title: "Lähetystapa", + helpText: + "Yksi viesti per henkilö lähettää yhden kappaleen kullekin osuvalle henkilölle, vaikka " + + "hän osuisi useamman ohjelmanumeron kautta. Yksi viesti per ohjelmanumero lähettää oman " + + "kappaleensa kustakin osuvasta ohjelmanumerosta, jota henkilö pitää, ja tekee " + + "{PROGRAM_TITLE}-paikanpitäjän käytettäväksi.", + choices: { + PER_PERSON: "Yksi viesti per henkilö", + PER_INVOLVEMENT: "Yksi viesti per ohjelmanumero", + }, + }, + replyTo: { + title: "Vastausosoite", + helpText: + "Vastaukset ohjataan tähän osoitteeseen tapahtuman oletusyhteysosoitteen sijaan. " + + "Hallitse käytettävissä olevia osoitteita tällä sivulla alempana.", + useDefault: "Tapahtuman oletusyhteysosoite", + }, + state: { + title: "Tila", + choices: { + DRAFT: "Luonnos", + ACTIVE: "Aktiivinen", + EXPIRED: "Vanhentunut", + }, + }, + createdAt: { + title: "Luotu", + }, + sentAt: { + title: "Lähetetty", + }, + recipientCount: { + title: "Vastaanottajat", + value: (numRecipients: number) => + `(${numRecipients} vastaanottaja${numRecipients === 1 ? "" : "a"})`, + notYetKnown: "(vastaanottajien määrä näkyy tallentamisen jälkeen)", + }, + }, + actions: { + newMessage: { + title: "Uusi viesti", + }, + editRecipients: { + title: "Muokkaa vastaanottajia", + }, + saveDraft: "Tallenna luonnos", + saveDraftHelpText: + "Tämä tallentaa viestin luonnoksena. Sitä ei lähetetä kenellekään ennen kuin painat Lähetä.", + saveChanges: "Tallenna muutokset", + send: { + title: "Lähetä", + confirmation: + "Haluatko varmasti lähettää tämän viestin sen nykyisille vastaanottajille? " + + "Voit muokata ja lähettää sen uudelleen myöhemmin; ne, jotka ovat sen jo saaneet, " + + "eivät saa sitä uudelleen, elleivät he täytä vastaanottajaehtoja uudelleen.", + confirmationResend: + "Tämä viesti on jo lähetetty. Sen lähettäminen uudelleen toimittaa nykyisen sisällön " + + "kaikille vastaanottajaehdot täyttäville, jotka eivät ole sitä vielä saaneet. Ne, jotka " + + "ovat sen jo saaneet, eivät saa sitä uudelleen eivätkä näe näitä muutoksia.", + modalActions: { + submit: "Lähetä", + cancel: "Peruuta", + }, + }, + expire: { + title: "Vanhenna", + confirmation: + "Haluatko varmasti vanhentaa tämän viestin? Sitä ei enää lähetetä uusille osuville " + + "vastaanottajille. Ne, jotka ovat sen jo saaneet, eivät ole tähän vaikutuksen alaisia.", + modalActions: { + submit: "Vanhenna", + cancel: "Peruuta", + }, + }, + delete: { + title: "Poista luonnos", + confirmation: "Haluatko varmasti poistaa tämän viestiluonnoksen?", + modalActions: { + submit: "Poista", + cancel: "Peruuta", + }, + }, + alreadySentWarning: + "Tämä viesti on jo lähetetty. Muutoksesi koskevat vain vastaanottajia, jotka saavat " + + "viestin tästä eteenpäin; ne, jotka ovat sen jo saaneet, näkevät alkuperäisen sisällön.", + }, + recipientEditor: { + currentSelection: "Nykyinen valinta", + noFiltersYet: "Vastaanottajia ei ole vielä valittu.", + addGroup: "Lisää vaihtoehtoinen vastaanottajaryhmä (TAI)", + removeGroup: "Poista tämä ryhmä", + orSeparator: "TAI täyttää kaikki näistä:", + confirm: "Valmis", + }, + profile: { + title: "Viestit", + noSubject: "(ei otsikkoa)", + attributes: { + sentAt: "Päivämäärä", + event: "Tapahtuma", + subject: "Otsikko", + }, + }, + ReplyTo: { + listTitle: "Vastausosoitteet", + description: + "Määritä vastausosoitteet, joita voidaan valita viestiä laadittaessa. " + + "Lähettäjän osoite on aina tapahtuman yhteysosoite.", + attributes: { + name: { + title: "Nimi", + }, + email: { + title: "Sähköpostiosoite", + }, + }, + actions: { + create: { + title: "Uusi vastausosoite", + }, + edit: { + title: "Muokkaa vastausosoitetta", + }, + delete: { + title: "Poista vastausosoite", + confirmation: (name: string) => ( + <> + Haluatko varmasti poistaa vastausosoitteen{" "} + {name}? Sitä käyttävät viestit palaavat + käyttämään tapahtuman oletusyhteysosoitetta. + + ), + }, + }, + }, + }, + ScheduleItem: { singleTitle: "Aikataulumerkintä", listTitle: "Aikataulumerkinnät", @@ -2881,6 +3043,7 @@ const translations: Translations = { }, Invitation: { + tabHeader: "Kutsut", listTitle: "Avoimet kutsut", listDescription: ( <> diff --git a/kompassi-v2-frontend/src/translations/sv.tsx b/kompassi-v2-frontend/src/translations/sv.tsx index 3a85c0006..986606284 100644 --- a/kompassi-v2-frontend/src/translations/sv.tsx +++ b/kompassi-v2-frontend/src/translations/sv.tsx @@ -163,6 +163,7 @@ const translations: Translations = { responses: "Enkätsvar", keys: "Krypteringsnycklar", program: "Program", + messages: "Meddelanden", signIn: "Logga in", signOut: "Logga ut", }, @@ -272,6 +273,7 @@ const translations: Translations = { fieldTypes: { SingleLineText: "Textfält med en rad", MultiLineText: "Textfält med flera rader", + MarkdownText: "Textfält med flera rader (Markdown)", Divider: "Separatorlinje", StaticText: "Statisk text", Spacer: "Tomt utrymme", @@ -1918,6 +1920,165 @@ const translations: Translations = { }, }, + Message: { + singleTitle: "Meddelande", + listTitle: "Meddelanden", + attributes: { + count: (numMessages: number) => ( + <> + Visar {numMessages} meddelande{numMessages === 1 ? "" : "n"}. + + ), + subject: { + title: "Ämne", + noSubject: "(inget ämne)", + }, + body: { + title: "Meddelande", + helpText: + "Begränsad Markdown-formatering stöds (rubriker, fetstil, kursiv, listor, länkar). " + + "Du kan använda följande platshållare, som ersätts med mottagarens egna uppgifter: " + + "{FIRST_NAME} (mottagarens förnamn), {EVENT_NAME} (evenemangets namn) och, när " + + "meddelandet skickas ett exemplar per programpunkt, {PROGRAM_TITLE} (programpunktens titel).", + }, + dispatch: { + title: "Sändningssätt", + helpText: + "Ett meddelande per person skickar ett enda exemplar till varje matchande person, även " + + "om de matchar via flera programpunkter. Ett meddelande per programpunkt skickar ett " + + "separat exemplar för varje matchande programpunkt en person är värd för, och gör " + + "platshållaren {PROGRAM_TITLE} tillgänglig.", + choices: { + PER_PERSON: "Ett meddelande per person", + PER_INVOLVEMENT: "Ett meddelande per programpunkt", + }, + }, + replyTo: { + title: "Svarsadress", + helpText: + "Svar riktas till denna adress istället för evenemangets standardkontaktadress. " + + "Hantera de tillgängliga adresserna nedan på denna sida.", + useDefault: "Evenemangets standardkontaktadress", + }, + state: { + title: "Status", + choices: { + DRAFT: "Utkast", + ACTIVE: "Aktivt", + EXPIRED: "Utgånget", + }, + }, + createdAt: { + title: "Skapat", + }, + sentAt: { + title: "Skickat", + }, + recipientCount: { + title: "Mottagare", + value: (numRecipients: number) => `(${numRecipients} mottagare)`, + notYetKnown: "(antalet mottagare visas efter att du sparat)", + }, + }, + actions: { + newMessage: { + title: "Nytt meddelande", + }, + editRecipients: { + title: "Redigera mottagare", + }, + saveDraft: "Spara utkast", + saveDraftHelpText: + "Detta sparar meddelandet som ett utkast. Det skickas inte till någon förrän du trycker på Skicka.", + saveChanges: "Spara ändringar", + send: { + title: "Skicka", + confirmation: + "Är du säker på att du vill skicka detta meddelande till dess nuvarande mottagare? " + + "Du kan fortfarande redigera och skicka det igen senare; de som redan fått det kommer " + + "inte att få det igen om de inte på nytt matchar mottagarfiltren.", + confirmationResend: + "Detta meddelande har redan skickats. Att skicka det igen levererar det aktuella " + + "innehållet till alla som matchar mottagarfiltren och som ännu inte fått det. De som " + + "redan fått det får inte det igen och ser inte dessa ändringar.", + modalActions: { + submit: "Skicka", + cancel: "Avbryt", + }, + }, + expire: { + title: "Låt gå ut", + confirmation: + "Är du säker på att du vill låta detta meddelande gå ut? Det skickas inte längre till " + + "nya matchande mottagare. De som redan fått det påverkas inte.", + modalActions: { + submit: "Låt gå ut", + cancel: "Avbryt", + }, + }, + delete: { + title: "Ta bort utkast", + confirmation: "Är du säker på att du vill ta bort detta utkast?", + modalActions: { + submit: "Ta bort", + cancel: "Avbryt", + }, + }, + alreadySentWarning: + "Detta meddelande har redan skickats. Dina ändringar gäller endast mottagare som får " + + "meddelandet från nu och framåt; de som redan fått det ser det ursprungliga innehållet.", + }, + recipientEditor: { + currentSelection: "Nuvarande val", + noFiltersYet: "Inga mottagare valda ännu.", + addGroup: "Lägg till alternativ mottagargrupp (ELLER)", + removeGroup: "Ta bort denna grupp", + orSeparator: "ELLER uppfyller alla av:", + confirm: "Klart", + }, + profile: { + title: "Meddelanden", + noSubject: "(inget ämne)", + attributes: { + sentAt: "Datum", + event: "Evenemang", + subject: "Ämne", + }, + }, + ReplyTo: { + listTitle: "Svarsadresser", + description: + "Konfigurera de svarsadresser som kan väljas när ett meddelande skrivs. " + + "Avsändaradressen är alltid evenemangets kontaktadress.", + attributes: { + name: { + title: "Namn", + }, + email: { + title: "E-postadress", + }, + }, + actions: { + create: { + title: "Ny svarsadress", + }, + edit: { + title: "Redigera svarsadress", + }, + delete: { + title: "Ta bort svarsadress", + confirmation: (name: string) => ( + <> + Är du säker på att du vill ta bort svarsadressen{" "} + {name}? Meddelanden som använder den återgår + till evenemangets standardkontaktadress. + + ), + }, + }, + }, + }, + ScheduleItem: { singleTitle: "Schemapunkt", listTitle: "Schemapunkter", @@ -2809,6 +2970,7 @@ const translations: Translations = { }, Invitation: { + tabHeader: "Inbjudningar", listTitle: "Öppna inbjudningar", listDescription: ( <> diff --git a/kompassi/core/graphql/profile_own.py b/kompassi/core/graphql/profile_own.py index ad785498a..b41219572 100644 --- a/kompassi/core/graphql/profile_own.py +++ b/kompassi/core/graphql/profile_own.py @@ -6,6 +6,8 @@ from kompassi.forms.graphql.meta import FormsProfileMetaType from kompassi.forms.models.keypair import KeyPair from kompassi.forms.models.meta import FormsProfileMeta +from kompassi.messages_v2.graphql.message_limited import LimitedMessageType +from kompassi.messages_v2.models.message_recipient import MessageRecipient from kompassi.program_v2.graphql.meta import ProgramV2ProfileMetaType from kompassi.program_v2.models.meta import ProgramV2ProfileMeta from kompassi.tickets_v2.graphql.meta import TicketsV2ProfileMetaType @@ -63,3 +65,15 @@ def resolve_keypairs(person: Person, info): graphene.NonNull(KeyPairType), description=normalize_whitespace(resolve_keypairs.__doc__ or ""), ) + + @staticmethod + def resolve_messages(person: Person, info): + """ + Messages V2: messages sent to the current user, most recent first. + """ + return MessageRecipient.objects.filter(person=person).select_related("message__universe__scope__event", "body") + + messages = graphene.NonNull( + graphene.List(graphene.NonNull(LimitedMessageType)), + description=normalize_whitespace(resolve_messages.__doc__ or ""), + ) diff --git a/kompassi/graphql_api/schema.py b/kompassi/graphql_api/schema.py index 69aa46ba5..581117d00 100644 --- a/kompassi/graphql_api/schema.py +++ b/kompassi/graphql_api/schema.py @@ -34,6 +34,14 @@ from kompassi.involvement.graphql.mutations.update_involvement_preferences import UpdateInvolvementPreferences from kompassi.involvement.graphql.registry_limited import LimitedRegistryType from kompassi.involvement.models.registry import Registry +from kompassi.messages_v2.graphql.mutations.create_message import CreateMessage +from kompassi.messages_v2.graphql.mutations.create_message_reply_to import CreateMessageReplyTo +from kompassi.messages_v2.graphql.mutations.delete_message import DeleteMessage +from kompassi.messages_v2.graphql.mutations.delete_message_reply_to import DeleteMessageReplyTo +from kompassi.messages_v2.graphql.mutations.expire_message import ExpireMessage +from kompassi.messages_v2.graphql.mutations.send_message import SendMessage +from kompassi.messages_v2.graphql.mutations.update_message import UpdateMessage +from kompassi.messages_v2.graphql.mutations.update_message_reply_to import UpdateMessageReplyTo from kompassi.program_v2.graphql.mutations.accept_program_offer import AcceptProgramOffer from kompassi.program_v2.graphql.mutations.cancel_program import CancelProgram from kompassi.program_v2.graphql.mutations.cancel_program_offer import CancelProgramOffer @@ -198,6 +206,17 @@ class Mutation(graphene.ObjectType): invite_program_host = InviteProgramHost.Field() delete_program_host = DeleteProgramHost.Field() + # Messages v2 + create_message = CreateMessage.Field() + update_message = UpdateMessage.Field() + send_message = SendMessage.Field() + expire_message = ExpireMessage.Field() + delete_message = DeleteMessage.Field() + + create_message_reply_to = CreateMessageReplyTo.Field() + update_message_reply_to = UpdateMessageReplyTo.Field() + delete_message_reply_to = DeleteMessageReplyTo.Field() + put_schedule_item = PutScheduleItem.Field() delete_schedule_item = DeleteScheduleItem.Field() diff --git a/kompassi/involvement/models/involvement.py b/kompassi/involvement/models/involvement.py index 8a725dd97..f14fa100a 100644 --- a/kompassi/involvement/models/involvement.py +++ b/kompassi/involvement/models/involvement.py @@ -775,6 +775,19 @@ def refresh_dependents(self): InvolvementToGroupMapping.ensure(self.universe, self.person) + self.enqueue_matching_messages() + + def enqueue_matching_messages(self): + """ + Async hook for Messages V2 auto-send: whenever an involvement is created or its + dimensions/is_active change, check active Messages of this event for a newly + matching recipient and send to them incrementally. Dispatched async so as not + to slow down the request path that got us here. + """ + from kompassi.messages_v2.tasks import send_matching_messages + + send_matching_messages.delay(self.id) + @cached_property def dimensions_pairs(self) -> set[tuple[str, str]]: """ diff --git a/kompassi/messages_v2/__init__.py b/kompassi/messages_v2/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/kompassi/messages_v2/admin.py b/kompassi/messages_v2/admin.py new file mode 100644 index 000000000..0f23d93f3 --- /dev/null +++ b/kompassi/messages_v2/admin.py @@ -0,0 +1,69 @@ +from django.contrib import admin + +from .models.message import Message +from .models.message_recipient import MessageRecipient +from .models.message_reply_to import MessageReplyTo + + +@admin.register(Message) +class MessageAdmin(admin.ModelAdmin): + list_display = ( + "universe", + "subject", + "state", + "sent_at", + "expired_at", + ) + list_display_links = ("universe", "subject") + list_filter = ("universe__scope__event",) + search_fields = ("subject",) + ordering = ("-id",) + + raw_id_fields = ("universe", "reply_to", "created_by") + fields = ( + "universe", + "app", + "subject", + "body", + "dispatch", + "reply_to", + "recipient_filters", + "sent_at", + "expired_at", + "created_by", + ) + readonly_fields = fields + + +@admin.register(MessageReplyTo) +class MessageReplyToAdmin(admin.ModelAdmin): + list_display = ("universe", "name", "email") + list_display_links = ("universe", "name") + list_filter = ("universe__scope__event",) + search_fields = ("name", "email") + + raw_id_fields = ("universe",) + fields = ("universe", "app", "name", "email") + readonly_fields = fields + + +@admin.register(MessageRecipient) +class MessageRecipientAdmin(admin.ModelAdmin): + list_display = ("message", "person", "email", "sent_at") + list_display_links = ("message", "person") + list_filter = ("message__universe__scope__event",) + search_fields = ("person__surname", "person__first_name", "email") + ordering = ("-sent_at",) + + raw_id_fields = ("message", "person", "involvement", "body") + fields = ( + "message", + "person", + "involvement", + "email", + "subject", + "body", + "sent_at", + "cached_dimensions", + ) + readonly_fields = fields diff --git a/kompassi/messages_v2/apps.py b/kompassi/messages_v2/apps.py new file mode 100644 index 000000000..58894c13d --- /dev/null +++ b/kompassi/messages_v2/apps.py @@ -0,0 +1,10 @@ +from django.apps import AppConfig +from django.utils.translation import gettext_lazy as _ + + +class MessagesV2AppConfig(AppConfig): + name = "kompassi.messages_v2" + verbose_name = _("Messages (v2)") + + def ready(self) -> None: + from . import event_log_entry_types # noqa: F401 diff --git a/kompassi/messages_v2/event_log_entry_types.py b/kompassi/messages_v2/event_log_entry_types.py new file mode 100644 index 000000000..bb207a786 --- /dev/null +++ b/kompassi/messages_v2/event_log_entry_types.py @@ -0,0 +1,26 @@ +from kompassi.event_log_v2 import registry + +registry.register( + name="messages_v2.message.created", + message="A message draft for {event} was created by {actor}: {message_subject}", +) + +registry.register( + name="messages_v2.message.edited", + message="A message for {event} was edited by {actor}: {message_subject}", +) + +registry.register( + name="messages_v2.message.sent", + message="A message for {event} was sent by {actor} to {initial_recipients} recipients: {message_subject}", +) + +registry.register( + name="messages_v2.message.expired", + message="A message for {event} was expired by {actor}: {message_subject}", +) + +registry.register( + name="messages_v2.message.deleted", + message="A message draft for {event} was deleted by {actor}: {message_subject}", +) diff --git a/kompassi/messages_v2/graphql/__init__.py b/kompassi/messages_v2/graphql/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/kompassi/messages_v2/graphql/enums.py b/kompassi/messages_v2/graphql/enums.py new file mode 100644 index 000000000..3835e53c2 --- /dev/null +++ b/kompassi/messages_v2/graphql/enums.py @@ -0,0 +1,7 @@ +import graphene + +from ..models.enums import MessageApp, MessageDispatch, MessageState + +MessageAppType = graphene.Enum.from_enum(MessageApp) +MessageDispatchType = graphene.Enum.from_enum(MessageDispatch) +MessageStateType = graphene.Enum.from_enum(MessageState) diff --git a/kompassi/messages_v2/graphql/message.py b/kompassi/messages_v2/graphql/message.py new file mode 100644 index 000000000..9907a55b3 --- /dev/null +++ b/kompassi/messages_v2/graphql/message.py @@ -0,0 +1,50 @@ +import graphene +import graphene_django +from graphene.types.generic import GenericScalar + +from ..models.message import Message +from .enums import MessageAppType, MessageDispatchType, MessageStateType +from .message_reply_to import MessageReplyToType + + +class MessageType(graphene_django.DjangoObjectType): + """ + Admin-facing representation of a Message, used by the Program V2 admin compose/list + views. Never exposed to recipients - see LimitedMessageType for the profile view. + """ + + class Meta: + model = Message + fields = ( + "id", + "subject", + "body", + "updated_at", + "sent_at", + "expired_at", + ) + + app = graphene.NonNull(MessageAppType) + dispatch = graphene.NonNull(MessageDispatchType) + state = graphene.NonNull(MessageStateType) + reply_to = graphene.Field(MessageReplyToType) + recipient_filters = graphene.NonNull(GenericScalar) + + @staticmethod + def resolve_created_at(message: Message, info): + return message.created_at + + created_at = graphene.NonNull(graphene.DateTime) + + @staticmethod + def resolve_recipient_count(message: Message, info): + """ + Number of distinct recipients (people for PER_PERSON, involvements for + PER_INVOLVEMENT) currently matching this message's recipient filters. + """ + return message.resolve_recipient_count() + + recipient_count = graphene.NonNull( + graphene.Int, + description=(resolve_recipient_count.__doc__ or "").strip(), + ) diff --git a/kompassi/messages_v2/graphql/message_limited.py b/kompassi/messages_v2/graphql/message_limited.py new file mode 100644 index 000000000..9ee9bb146 --- /dev/null +++ b/kompassi/messages_v2/graphql/message_limited.py @@ -0,0 +1,35 @@ +import graphene +import graphene_django +from graphene.types.generic import GenericScalar + +from kompassi.core.graphql.event_limited import LimitedEventType + +from ..models.message_recipient import MessageRecipient + + +class LimitedMessageType(graphene_django.DjangoObjectType): + """ + A message as seen by its recipient in their profile: the immutable rendered + snapshot from MessageRecipient, not the (possibly since-edited) Message. Carries no + sender identity. + """ + + class Meta: + model = MessageRecipient + fields = ( + "id", + "subject", + "sent_at", + ) + + cached_dimensions = graphene.NonNull(GenericScalar) + event = graphene.NonNull(LimitedEventType) + body_html = graphene.NonNull(graphene.String) + + @staticmethod + def resolve_event(recipient: MessageRecipient, info): + return recipient.message.event + + @staticmethod + def resolve_body_html(recipient: MessageRecipient, info): + return recipient.body.text diff --git a/kompassi/messages_v2/graphql/message_reply_to.py b/kompassi/messages_v2/graphql/message_reply_to.py new file mode 100644 index 000000000..d652fde2a --- /dev/null +++ b/kompassi/messages_v2/graphql/message_reply_to.py @@ -0,0 +1,17 @@ +import graphene +import graphene_django + +from ..models.message_reply_to import MessageReplyTo +from .enums import MessageAppType + + +class MessageReplyToType(graphene_django.DjangoObjectType): + class Meta: + model = MessageReplyTo + fields = ( + "id", + "name", + "email", + ) + + app = graphene.NonNull(MessageAppType) diff --git a/kompassi/messages_v2/graphql/mutations/__init__.py b/kompassi/messages_v2/graphql/mutations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/kompassi/messages_v2/graphql/mutations/create_message.py b/kompassi/messages_v2/graphql/mutations/create_message.py new file mode 100644 index 000000000..05411d26f --- /dev/null +++ b/kompassi/messages_v2/graphql/mutations/create_message.py @@ -0,0 +1,65 @@ +import graphene +from django.db import transaction +from django.http import HttpRequest +from graphene.types.generic import GenericScalar + +from kompassi.access.cbac import graphql_check_model +from kompassi.core.models.event import Event +from kompassi.event_log_v2.utils.emit import emit +from kompassi.involvement.models.involvement import Involvement + +from ...models.message import Message +from ..enums import MessageDispatchType +from ..message import MessageType + + +class CreateMessageInput(graphene.InputObjectType): + event_slug = graphene.String(required=True) + subject = graphene.String(required=True) + body = graphene.String(required=True) + dispatch = graphene.Argument(MessageDispatchType, required=True) + reply_to_id = graphene.String() + # list[list[{dimension: str, values: list[str] | null}]] - OR of AND-groups. + recipient_filters = GenericScalar(required=True) + + +class CreateMessage(graphene.Mutation): + """ + Creates a new Message with the given content. Called only when the compose view + for a not-yet-existing message ("new") is first saved - until then, the draft only + exists in the browser, never in the database. + """ + + class Arguments: + input = CreateMessageInput(required=True) + + message = graphene.Field(MessageType) + + @transaction.atomic + @staticmethod + def mutate(_root, info, input: CreateMessageInput): + request: HttpRequest = info.context + event = Event.objects.get(slug=input.event_slug) + + graphql_check_model(Involvement, event.scope, info, app="program_v2", field="messages", operation="create") + + message = Message( + universe=event.involvement_universe, + created_by=request.user, + subject=input.subject, + body=input.body, + dispatch=input.dispatch, + reply_to_id=input.reply_to_id or None, + recipient_filters=input.recipient_filters or [], + ) + message.clean_recipient_filters() + message.save() + + emit( + "messages_v2.message.created", + request=request, + event=event, + other_fields=dict(message_subject=message.subject or "(no subject)"), + ) + + return CreateMessage(message=message) # type: ignore diff --git a/kompassi/messages_v2/graphql/mutations/create_message_reply_to.py b/kompassi/messages_v2/graphql/mutations/create_message_reply_to.py new file mode 100644 index 000000000..d1ac1fdab --- /dev/null +++ b/kompassi/messages_v2/graphql/mutations/create_message_reply_to.py @@ -0,0 +1,39 @@ +import graphene +from django.db import transaction + +from kompassi.access.cbac import graphql_check_model +from kompassi.core.models.event import Event +from kompassi.involvement.models.involvement import Involvement + +from ...models.message_reply_to import MessageReplyTo +from ..message_reply_to import MessageReplyToType + + +class CreateMessageReplyToInput(graphene.InputObjectType): + event_slug = graphene.String(required=True) + name = graphene.String(required=True) + email = graphene.String(required=True) + + +class CreateMessageReplyTo(graphene.Mutation): + class Arguments: + input = CreateMessageReplyToInput(required=True) + + reply_to = graphene.Field(MessageReplyToType) + + @transaction.atomic + @staticmethod + def mutate(_root, info, input: CreateMessageReplyToInput): + event = Event.objects.get(slug=input.event_slug) + + graphql_check_model( + Involvement, event.scope, info, app="program_v2", field="message_reply_to", operation="create" + ) + + reply_to = MessageReplyTo.objects.create( + universe=event.involvement_universe, + name=input.name, + email=input.email, + ) + + return CreateMessageReplyTo(reply_to=reply_to) # type: ignore diff --git a/kompassi/messages_v2/graphql/mutations/delete_message.py b/kompassi/messages_v2/graphql/mutations/delete_message.py new file mode 100644 index 000000000..d76e61ff8 --- /dev/null +++ b/kompassi/messages_v2/graphql/mutations/delete_message.py @@ -0,0 +1,53 @@ +import graphene +from django.db import transaction +from django.http import HttpRequest + +from kompassi.access.cbac import graphql_check_model +from kompassi.core.models.event import Event +from kompassi.event_log_v2.utils.emit import emit +from kompassi.involvement.models.involvement import Involvement + +from ...models.enums import MessageState +from ...models.message import Message + + +class DeleteMessageInput(graphene.InputObjectType): + event_slug = graphene.String(required=True) + message_id = graphene.String(required=True) + + +class DeleteMessage(graphene.Mutation): + """ + Deletes a Message draft. Only drafts can be deleted - once sent, a Message is kept + (possibly expired) so its MessageRecipients remain visible in recipients' profiles. + """ + + class Arguments: + input = DeleteMessageInput(required=True) + + message_id = graphene.String() + + @transaction.atomic + @staticmethod + def mutate(_root, info, input: DeleteMessageInput): + request: HttpRequest = info.context + event = Event.objects.get(slug=input.event_slug) + + graphql_check_model(Involvement, event.scope, info, app="program_v2", field="messages", operation="delete") + + message = Message.objects.get(universe=event.involvement_universe, id=input.message_id) + if message.state != MessageState.DRAFT: + raise ValueError("Only draft messages can be deleted") + + message_subject = message.subject + message_id = message.id + message.delete() + + emit( + "messages_v2.message.deleted", + request=request, + event=event, + other_fields=dict(message_subject=message_subject or "(no subject)"), + ) + + return DeleteMessage(message_id=str(message_id)) # type: ignore diff --git a/kompassi/messages_v2/graphql/mutations/delete_message_reply_to.py b/kompassi/messages_v2/graphql/mutations/delete_message_reply_to.py new file mode 100644 index 000000000..318bb13ee --- /dev/null +++ b/kompassi/messages_v2/graphql/mutations/delete_message_reply_to.py @@ -0,0 +1,40 @@ +import graphene +from django.db import transaction + +from kompassi.access.cbac import graphql_check_model +from kompassi.core.models.event import Event +from kompassi.involvement.models.involvement import Involvement + +from ...models.message_reply_to import MessageReplyTo + + +class DeleteMessageReplyToInput(graphene.InputObjectType): + event_slug = graphene.String(required=True) + reply_to_id = graphene.String(required=True) + + +class DeleteMessageReplyTo(graphene.Mutation): + """ + Deletes a reply-to option. Messages that reference it fall back to the event's + default plain contact email (Message.reply_to is SET_NULL on delete). + """ + + class Arguments: + input = DeleteMessageReplyToInput(required=True) + + reply_to_id = graphene.String() + + @transaction.atomic + @staticmethod + def mutate(_root, info, input: DeleteMessageReplyToInput): + event = Event.objects.get(slug=input.event_slug) + + graphql_check_model( + Involvement, event.scope, info, app="program_v2", field="message_reply_to", operation="delete" + ) + + reply_to = MessageReplyTo.objects.get(universe=event.involvement_universe, id=input.reply_to_id) + reply_to_id = reply_to.id + reply_to.delete() + + return DeleteMessageReplyTo(reply_to_id=str(reply_to_id)) # type: ignore diff --git a/kompassi/messages_v2/graphql/mutations/expire_message.py b/kompassi/messages_v2/graphql/mutations/expire_message.py new file mode 100644 index 000000000..14bc59f75 --- /dev/null +++ b/kompassi/messages_v2/graphql/mutations/expire_message.py @@ -0,0 +1,48 @@ +import graphene +from django.db import transaction +from django.http import HttpRequest + +from kompassi.access.cbac import graphql_check_model +from kompassi.core.models.event import Event +from kompassi.event_log_v2.utils.emit import emit +from kompassi.involvement.models.involvement import Involvement + +from ...models.message import Message +from ..message import MessageType + + +class ExpireMessageInput(graphene.InputObjectType): + event_slug = graphene.String(required=True) + message_id = graphene.String(required=True) + + +class ExpireMessage(graphene.Mutation): + """ + Expires an active Message: it stops being sent to new/auto-matching recipients. + People who already received it are unaffected. + """ + + class Arguments: + input = ExpireMessageInput(required=True) + + message = graphene.Field(MessageType) + + @transaction.atomic + @staticmethod + def mutate(_root, info, input: ExpireMessageInput): + request: HttpRequest = info.context + event = Event.objects.get(slug=input.event_slug) + + graphql_check_model(Involvement, event.scope, info, app="program_v2", field="messages", operation="update") + + message = Message.objects.get(universe=event.involvement_universe, id=input.message_id) + message.expire() + + emit( + "messages_v2.message.expired", + request=request, + event=event, + other_fields=dict(message_subject=message.subject or "(no subject)"), + ) + + return ExpireMessage(message=message) # type: ignore diff --git a/kompassi/messages_v2/graphql/mutations/send_message.py b/kompassi/messages_v2/graphql/mutations/send_message.py new file mode 100644 index 000000000..0336e0ea4 --- /dev/null +++ b/kompassi/messages_v2/graphql/mutations/send_message.py @@ -0,0 +1,58 @@ +import graphene +from django.db import transaction +from django.http import HttpRequest + +from kompassi.access.cbac import graphql_check_model +from kompassi.core.models.event import Event +from kompassi.event_log_v2.utils.emit import emit +from kompassi.involvement.models.involvement import Involvement + +from ...models.message import Message +from ..message import MessageType + + +class SendMessageInput(graphene.InputObjectType): + event_slug = graphene.String(required=True) + message_id = graphene.String(required=True) + + +class SendMessage(graphene.Mutation): + """ + Sends a Message: on a draft, transitions it to ACTIVE and dispatches sending to all + currently matching recipients. On an already ACTIVE message, this re-sends to any + currently matching recipients who have not yet received it (MessageRecipient's + uniqueness constraints make this idempotent for everyone else). + """ + + class Arguments: + input = SendMessageInput(required=True) + + message = graphene.Field(MessageType) + + @transaction.atomic + @staticmethod + def mutate(_root, info, input: SendMessageInput): + request: HttpRequest = info.context + event = Event.objects.get(slug=input.event_slug) + + graphql_check_model(Involvement, event.scope, info, app="program_v2", field="messages", operation="update") + + message = Message.objects.get(universe=event.involvement_universe, id=input.message_id) + was_draft = message.sent_at is None + initial_recipients = message.resolve_recipient_count() + message.send() + + if was_draft: + # "sent" is emitted only once, on the draft -> active transition (never + # on a subsequent explicit re-send), and never carries recipient emails. + emit( + "messages_v2.message.sent", + request=request, + event=event, + other_fields=dict( + message_subject=message.subject or "(no subject)", + initial_recipients=initial_recipients, + ), + ) + + return SendMessage(message=message) # type: ignore diff --git a/kompassi/messages_v2/graphql/mutations/update_message.py b/kompassi/messages_v2/graphql/mutations/update_message.py new file mode 100644 index 000000000..f6e252919 --- /dev/null +++ b/kompassi/messages_v2/graphql/mutations/update_message.py @@ -0,0 +1,66 @@ +import graphene +from django.db import transaction +from django.http import HttpRequest +from graphene.types.generic import GenericScalar + +from kompassi.access.cbac import graphql_check_model +from kompassi.core.models.event import Event +from kompassi.event_log_v2.utils.emit import emit +from kompassi.involvement.models.involvement import Involvement + +from ...models.message import Message +from ..enums import MessageDispatchType +from ..message import MessageType + + +class UpdateMessageInput(graphene.InputObjectType): + event_slug = graphene.String(required=True) + message_id = graphene.String(required=True) + subject = graphene.String(required=True) + body = graphene.String(required=True) + dispatch = graphene.Argument(MessageDispatchType, required=True) + reply_to_id = graphene.String() + # list[list[{dimension: str, values: list[str] | null}]] - OR of AND-groups. + recipient_filters = GenericScalar(required=True) + + +class UpdateMessage(graphene.Mutation): + """ + Updates a Message's subject/body/dispatch/reply-to/recipient filters. Works on a + Message in any state, including ACTIVE (already sent) - edits are not retroactive: + existing MessageRecipient rows keep their immutable rendered snapshot, and the + updated content only applies to recipients who receive it from now on (subsequent + explicit re-sends and the auto-send hook for newly-matching involvements). + """ + + class Arguments: + input = UpdateMessageInput(required=True) + + message = graphene.Field(MessageType) + + @transaction.atomic + @staticmethod + def mutate(_root, info, input: UpdateMessageInput): + request: HttpRequest = info.context + event = Event.objects.get(slug=input.event_slug) + + graphql_check_model(Involvement, event.scope, info, app="program_v2", field="messages", operation="update") + + message = Message.objects.get(universe=event.involvement_universe, id=input.message_id) + + message.subject = input.subject + message.body = input.body + message.dispatch = input.dispatch + message.reply_to_id = input.reply_to_id or None + message.recipient_filters = input.recipient_filters or [] + message.clean_recipient_filters() + message.save() + + emit( + "messages_v2.message.edited", + request=request, + event=event, + other_fields=dict(message_subject=message.subject or "(no subject)"), + ) + + return UpdateMessage(message=message) # type: ignore diff --git a/kompassi/messages_v2/graphql/mutations/update_message_reply_to.py b/kompassi/messages_v2/graphql/mutations/update_message_reply_to.py new file mode 100644 index 000000000..4bec973f9 --- /dev/null +++ b/kompassi/messages_v2/graphql/mutations/update_message_reply_to.py @@ -0,0 +1,39 @@ +import graphene +from django.db import transaction + +from kompassi.access.cbac import graphql_check_model +from kompassi.core.models.event import Event +from kompassi.involvement.models.involvement import Involvement + +from ...models.message_reply_to import MessageReplyTo +from ..message_reply_to import MessageReplyToType + + +class UpdateMessageReplyToInput(graphene.InputObjectType): + event_slug = graphene.String(required=True) + reply_to_id = graphene.String(required=True) + name = graphene.String(required=True) + email = graphene.String(required=True) + + +class UpdateMessageReplyTo(graphene.Mutation): + class Arguments: + input = UpdateMessageReplyToInput(required=True) + + reply_to = graphene.Field(MessageReplyToType) + + @transaction.atomic + @staticmethod + def mutate(_root, info, input: UpdateMessageReplyToInput): + event = Event.objects.get(slug=input.event_slug) + + graphql_check_model( + Involvement, event.scope, info, app="program_v2", field="message_reply_to", operation="update" + ) + + reply_to = MessageReplyTo.objects.get(universe=event.involvement_universe, id=input.reply_to_id) + reply_to.name = input.name + reply_to.email = input.email + reply_to.save() + + return UpdateMessageReplyTo(reply_to=reply_to) # type: ignore diff --git a/kompassi/messages_v2/migrations/0001_initial.py b/kompassi/messages_v2/migrations/0001_initial.py new file mode 100644 index 000000000..459a18295 --- /dev/null +++ b/kompassi/messages_v2/migrations/0001_initial.py @@ -0,0 +1,190 @@ +# Generated by Django 6.0.7 on 2026-07-28 11:15 + +import django.db.models.deletion +import django_enum.fields +from django.conf import settings +from django.db import migrations, models + +import kompassi.tickets_v2.optimized_server.utils.uuid7 + + +class Migration(migrations.Migration): + initial = True + + dependencies = [ + ("core", "0044_organization_business_id"), + ("dimensions", "0017_remove_annotation_dimensions_annotation_type_annotationdatatype_and_more"), + ("involvement", "0010_involvementeventmeta_admin_group"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="MessageBody", + fields=[ + ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), + ("digest", models.CharField(db_index=True, max_length=128)), + ("text", models.TextField()), + ], + ), + migrations.CreateModel( + name="MessageReplyTo", + fields=[ + ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), + ( + "app", + django_enum.fields.EnumCharField( + choices=[("program_v2", "PROGRAM")], default="program_v2", max_length=10 + ), + ), + ("name", models.CharField(max_length=255)), + ("email", models.EmailField(max_length=254)), + ( + "universe", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="message_reply_tos", + to="dimensions.universe", + ), + ), + ], + options={ + "ordering": ("universe", "name"), + }, + ), + migrations.CreateModel( + name="Message", + fields=[ + ( + "id", + models.UUIDField( + default=kompassi.tickets_v2.optimized_server.utils.uuid7.uuid7, + editable=False, + primary_key=True, + serialize=False, + ), + ), + ( + "app", + django_enum.fields.EnumCharField( + choices=[("program_v2", "PROGRAM")], default="program_v2", max_length=10 + ), + ), + ("subject", models.CharField(blank=True, default="", max_length=255)), + ("body", models.TextField(blank=True, default="")), + ( + "dispatch", + django_enum.fields.EnumCharField( + choices=[("per_person", "PER_PERSON"), ("per_involvement", "PER_INVOLVEMENT")], + default="per_person", + max_length=15, + ), + ), + ("recipient_filters", models.JSONField(blank=True, default=list)), + ("updated_at", models.DateTimeField(auto_now=True)), + ("sent_at", models.DateTimeField(blank=True, null=True)), + ("expired_at", models.DateTimeField(blank=True, null=True)), + ( + "created_by", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to=settings.AUTH_USER_MODEL, + ), + ), + ( + "universe", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name="messages", to="dimensions.universe" + ), + ), + ( + "reply_to", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="messages", + to="messages_v2.messagereplyto", + ), + ), + ], + options={ + "ordering": ("-id",), + }, + ), + migrations.CreateModel( + name="MessageRecipient", + fields=[ + ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), + ("email", models.CharField(max_length=255)), + ("subject", models.CharField(max_length=255)), + ("sent_at", models.DateTimeField(auto_now_add=True)), + ("cached_dimensions", models.JSONField(blank=True, default=dict)), + ( + "body", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name="+", to="messages_v2.messagebody" + ), + ), + ( + "involvement", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="+", + to="involvement.involvement", + ), + ), + ( + "message", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name="recipients", to="messages_v2.message" + ), + ), + ( + "person", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name="received_messages", to="core.person" + ), + ), + ], + options={ + "ordering": ("-sent_at",), + "constraints": [ + models.UniqueConstraint( + condition=models.Q(("involvement__isnull", True)), + fields=("message", "person"), + name="messages_v2_messagerecipient_unique_person", + ), + models.UniqueConstraint( + condition=models.Q(("involvement__isnull", False)), + fields=("message", "involvement"), + name="messages_v2_messagerecipient_unique_involvement", + ), + ], + }, + ), + migrations.AddConstraint( + model_name="messagereplyto", + constraint=models.CheckConstraint( + condition=models.Q(("app__in", ["program_v2"])), name="messages_v2_MessageReplyTo_app_MessageApp" + ), + ), + migrations.AddConstraint( + model_name="message", + constraint=models.CheckConstraint( + condition=models.Q(("app__in", ["program_v2"])), name="messages_v2_Message_app_MessageApp" + ), + ), + migrations.AddConstraint( + model_name="message", + constraint=models.CheckConstraint( + condition=models.Q(("dispatch__in", ["per_person", "per_involvement"])), + name="messages_v2_Message_dispatch_MessageDispatch", + ), + ), + ] diff --git a/kompassi/messages_v2/migrations/__init__.py b/kompassi/messages_v2/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/kompassi/messages_v2/models/__init__.py b/kompassi/messages_v2/models/__init__.py new file mode 100644 index 000000000..39fcc5057 --- /dev/null +++ b/kompassi/messages_v2/models/__init__.py @@ -0,0 +1,15 @@ +from .enums import MessageApp, MessageDispatch, MessageState +from .message import Message +from .message_body import MessageBody +from .message_recipient import MessageRecipient +from .message_reply_to import MessageReplyTo + +__all__ = [ + "Message", + "MessageApp", + "MessageBody", + "MessageDispatch", + "MessageRecipient", + "MessageReplyTo", + "MessageState", +] diff --git a/kompassi/messages_v2/models/enums.py b/kompassi/messages_v2/models/enums.py new file mode 100644 index 000000000..13a2cdfbf --- /dev/null +++ b/kompassi/messages_v2/models/enums.py @@ -0,0 +1,23 @@ +from __future__ import annotations + +from enum import Enum + + +class MessageApp(Enum): + """ + Records which product owns a Message. Only PROGRAM is used for now; + the enum reserves room for forms/involvement/volunteers to reuse Messages V2 later. + """ + + PROGRAM = "program_v2" + + +class MessageDispatch(Enum): + PER_PERSON = "per_person" + PER_INVOLVEMENT = "per_involvement" + + +class MessageState(Enum): + DRAFT = "draft" + ACTIVE = "active" + EXPIRED = "expired" diff --git a/kompassi/messages_v2/models/message.py b/kompassi/messages_v2/models/message.py new file mode 100644 index 000000000..c32125c53 --- /dev/null +++ b/kompassi/messages_v2/models/message.py @@ -0,0 +1,156 @@ +from __future__ import annotations + +import logging +from functools import cached_property +from typing import TYPE_CHECKING + +from django.conf import settings +from django.db import models, transaction +from django.utils.timezone import now +from django_enum import EnumField + +from kompassi.dimensions.filters import DimensionFilters +from kompassi.dimensions.models.scope import Scope +from kompassi.dimensions.models.universe import Universe +from kompassi.tickets_v2.optimized_server.utils.uuid7 import uuid7, uuid7_to_datetime + +from .enums import MessageApp, MessageDispatch, MessageState +from .recipient_filters import validate_recipient_filters + +if TYPE_CHECKING: + from kompassi.core.models.event import Event + from kompassi.involvement.models.involvement import Involvement + + from .message_reply_to import MessageReplyTo + +logger = logging.getLogger(__name__) + + +class Message(models.Model): + """ + A message that program managers can send to program offerers/hosts (and, in the + future, other Involvement-based recipients). See docs/plans or the messages_v2 + app for the full design; in short: draft -> active (sent) -> optionally expired. + """ + + id = models.UUIDField(primary_key=True, default=uuid7, editable=False) + + universe: models.ForeignKey[Universe] = models.ForeignKey( + Universe, + on_delete=models.CASCADE, + related_name="messages", + ) + + app: EnumField[MessageApp] = EnumField( # type: ignore + MessageApp, + default=MessageApp.PROGRAM, + ) + + subject = models.CharField(max_length=255, blank=True, default="") + body = models.TextField(blank=True, default="") + + dispatch: EnumField[MessageDispatch] = EnumField( # type: ignore + MessageDispatch, + default=MessageDispatch.PER_PERSON, + ) + + reply_to: models.ForeignKey[MessageReplyTo] | None = models.ForeignKey( + "messages_v2.MessageReplyTo", + on_delete=models.SET_NULL, + related_name="messages", + null=True, + blank=True, + ) + + # list[list[{dimension: str, values: list[str] | None}]] - OR of AND-groups, validated + # by validate_recipient_filters() before save (see clean_recipient_filters()). + recipient_filters = models.JSONField(default=list, blank=True) + + updated_at = models.DateTimeField(auto_now=True) + sent_at = models.DateTimeField(null=True, blank=True) + expired_at = models.DateTimeField(null=True, blank=True) + + created_by = models.ForeignKey( + settings.AUTH_USER_MODEL, + on_delete=models.SET_NULL, + related_name="+", + null=True, + blank=True, + ) + + recipients: models.QuerySet + + class Meta: + ordering = ("-id",) + + def __str__(self): + return self.subject or f"Message {self.pk}" + + @cached_property + def created_at(self): + return uuid7_to_datetime(self.id) + + @cached_property + def scope(self) -> Scope: + return self.universe.scope + + @cached_property + def event(self) -> Event: + event = self.scope.event + if event is None: + raise ValueError(f"Scope of universe {self.universe} has no event") + return event + + @property + def state(self) -> MessageState: + if self.sent_at is None: + return MessageState.DRAFT + if self.expired_at is not None and self.expired_at <= now(): + return MessageState.EXPIRED + return MessageState.ACTIVE + + def clean_recipient_filters(self): + """ + Call before save whenever recipient_filters may have come from untrusted input. + """ + self.recipient_filters = validate_recipient_filters(self.recipient_filters) + + def resolve_involvements(self) -> models.QuerySet[Involvement]: + """ + Involvements matching any of the OR-of-AND recipient filter groups. + """ + from kompassi.involvement.models.involvement import Involvement + + base = self.universe.all_involvements.all() + + if not self.recipient_filters: + return base.none() + + involvement_ids: set[int] = set() + for group in self.recipient_filters: + filters = {item["dimension"]: item.get("values") or ["*"] for item in group} + involvement_ids.update(DimensionFilters(filters=filters).filter(base).values_list("id", flat=True)) + + return Involvement.objects.filter(id__in=involvement_ids) + + def resolve_recipient_count(self) -> int: + involvements = self.resolve_involvements() + + if self.dispatch == MessageDispatch.PER_INVOLVEMENT: + return involvements.count() + + return involvements.values("person_id").distinct().count() + + @transaction.atomic + def send(self): + from ..tasks import send_message + + if self.sent_at is None: + self.sent_at = now() + self.save(update_fields=["sent_at"]) + + send_message.delay(str(self.id)) + + def expire(self): + self.expired_at = now() + self.save(update_fields=["expired_at"]) diff --git a/kompassi/messages_v2/models/message_body.py b/kompassi/messages_v2/models/message_body.py new file mode 100644 index 000000000..452743930 --- /dev/null +++ b/kompassi/messages_v2/models/message_body.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +import logging +from hashlib import blake2b + +from django.db import models + +logger = logging.getLogger(__name__) + + +class MessageBody(models.Model): + """ + Deduplicated store of rendered (sanitized HTML) message bodies. Reused across + MessageRecipients whose rendered body happens to be byte-identical (eg. a message + with no placeholders sent to many recipients, or a PER_PERSON message body that + does not vary per recipient). + """ + + digest = models.CharField(max_length=128, db_index=True) + text = models.TextField() + + id: int + pk: int + + @classmethod + def get_or_create(cls, text: str) -> tuple[MessageBody, bool]: + digest = blake2b(text.encode("utf-8")).hexdigest() + + try: + return cls.objects.get_or_create(digest=digest, defaults=dict(text=text)) + except cls.MultipleObjectsReturned: + logger.warning("Multiple MessageBody returned for digest %s", digest) + return cls.objects.filter(digest=digest, text=text).first(), False # type: ignore diff --git a/kompassi/messages_v2/models/message_recipient.py b/kompassi/messages_v2/models/message_recipient.py new file mode 100644 index 000000000..c6115c8b7 --- /dev/null +++ b/kompassi/messages_v2/models/message_recipient.py @@ -0,0 +1,71 @@ +from __future__ import annotations + +from django.db import models + +from .message import Message +from .message_body import MessageBody + + +class MessageRecipient(models.Model): + """ + A per-recipient sent record. Doubles as the idempotency guard (a person/involvement + is only ever sent a given Message once) and as the immutable rendered snapshot that + the recipient sees in their profile - edits to Message after this row exists never + change what this row shows. + """ + + message: models.ForeignKey[Message] = models.ForeignKey( + Message, + on_delete=models.CASCADE, + related_name="recipients", + ) + person = models.ForeignKey( + "core.Person", + on_delete=models.CASCADE, + related_name="received_messages", + ) + # Set for PER_INVOLVEMENT dispatch (the involvement this copy was sent for) and for + # auto-send (the involvement whose change triggered the send); null for a PER_PERSON + # send that groups multiple involvements into a single copy. + involvement = models.ForeignKey( + "involvement.Involvement", + on_delete=models.CASCADE, + related_name="+", + null=True, + blank=True, + ) + + email = models.CharField(max_length=255) + subject = models.CharField(max_length=255) + body: models.ForeignKey[MessageBody] = models.ForeignKey( + MessageBody, + on_delete=models.CASCADE, + related_name="+", + ) + + sent_at = models.DateTimeField(auto_now_add=True) + + # Snapshot of the involvement's cached_dimensions at send time, so the profile view + # can offer DimensionFilters by event/type without joining back to Involvement. + cached_dimensions = models.JSONField(default=dict, blank=True) + + id: int + pk: int + + class Meta: + ordering = ("-sent_at",) + constraints = [ + models.UniqueConstraint( + fields=["message", "person"], + condition=models.Q(involvement__isnull=True), + name="messages_v2_messagerecipient_unique_person", + ), + models.UniqueConstraint( + fields=["message", "involvement"], + condition=models.Q(involvement__isnull=False), + name="messages_v2_messagerecipient_unique_involvement", + ), + ] + + def __str__(self): + return f"{self.message} -> {self.person} ({self.email})" diff --git a/kompassi/messages_v2/models/message_reply_to.py b/kompassi/messages_v2/models/message_reply_to.py new file mode 100644 index 000000000..17148d144 --- /dev/null +++ b/kompassi/messages_v2/models/message_reply_to.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +from functools import cached_property +from typing import TYPE_CHECKING + +from django.db import models +from django_enum import EnumField + +from kompassi.dimensions.models.scope import Scope +from kompassi.dimensions.models.universe import Universe + +from .enums import MessageApp + +if TYPE_CHECKING: + from kompassi.core.models.event import Event + + +class MessageReplyTo(models.Model): + """ + A reply-to address program managers may choose from when composing a Message. + Managed on the Program V2 admin preferences page. Note the cloaked *from* address + is unchanged (event.program_v2_event_meta.cloaked_contact_email) - only reply-to + is selectable here. + """ + + universe: models.ForeignKey[Universe] = models.ForeignKey( + Universe, + on_delete=models.CASCADE, + related_name="message_reply_tos", + ) + + app: EnumField[MessageApp] = EnumField( # type: ignore + MessageApp, + default=MessageApp.PROGRAM, + ) + + name = models.CharField(max_length=255) + email = models.EmailField() + + id: int + pk: int + messages: models.QuerySet + + class Meta: + ordering = ("universe", "name") + + def __str__(self): + return f"{self.name} <{self.email}>" + + @cached_property + def scope(self) -> Scope: + return self.universe.scope + + @cached_property + def event(self) -> Event: + event = self.scope.event + if event is None: + raise ValueError(f"Scope of universe {self.universe} has no event") + return event diff --git a/kompassi/messages_v2/models/recipient_filters.py b/kompassi/messages_v2/models/recipient_filters.py new file mode 100644 index 000000000..c43d36a9f --- /dev/null +++ b/kompassi/messages_v2/models/recipient_filters.py @@ -0,0 +1,25 @@ +from __future__ import annotations + +from typing import Any + +import pydantic + + +class RecipientFilterItem(pydantic.BaseModel): + dimension: str + values: list[str] | None = None + + +RecipientFilterGroup = list[RecipientFilterItem] +RecipientFilters = list[RecipientFilterGroup] + +_adapter = pydantic.TypeAdapter(RecipientFilters) + + +def validate_recipient_filters(input: Any) -> list[list[dict[str, Any]]]: + """ + Return recipientFilters (OR of AND-groups of {dimension, values}) coerced into + plain JSON-serializable form, or raise pydantic.ValidationError on invalid input. + """ + validated = _adapter.validate_python(input) + return [[item.model_dump(exclude_none=True) for item in group] for group in validated] diff --git a/kompassi/messages_v2/rendering.py b/kompassi/messages_v2/rendering.py new file mode 100644 index 000000000..b13bea52f --- /dev/null +++ b/kompassi/messages_v2/rendering.py @@ -0,0 +1,179 @@ +""" +Security-critical rendering pipeline for Messages V2. Unlike V1 mailings, there is no +template engine: placeholder values are user-controlled data (eg. a program offerer's +own program title) and must never be allowed to introduce Markdown or HTML structure. + +To guarantee that, placeholders are substituted *after* Markdown rendering and +sanitization, using opaque sentinels that pass through both steps verbatim, and the +substituted values are always HTML-escaped in the HTML output. See PLACEHOLDERS for the +whitelist of recognized tokens - there is no `{{ ... }}`, no control structures, and no +object traversal; only a fixed set of scalars pulled from (event, person, involvement, +program). +""" + +from __future__ import annotations + +import html +import re +import uuid +from dataclasses import dataclass +from typing import TYPE_CHECKING + +import markdown as markdown_lib +import nh3 +from django.template.loader import render_to_string + +if TYPE_CHECKING: + from kompassi.core.models.event import Event + from kompassi.core.models.person import Person + from kompassi.involvement.models.involvement import Involvement + from kompassi.program_v2.models.program import Program + + +@dataclass(frozen=True) +class Placeholder: + token: str + description_en: str + per_involvement_only: bool = False + + def resolve( + self, + *, + event: Event, + person: Person, + involvement: Involvement | None, + program: Program | None, + ) -> str: + match self.token: + case "EVENT_NAME": + return event.name + case "FIRST_NAME": + return person.first_name + case "PROGRAM_TITLE": + return program.title if program else "" + case _: + raise ValueError(f"Unknown placeholder token: {self.token}") + + +# Recognized tokens are a whitelist only. PROGRAM_TITLE varies per involvement, so it is +# only offered for MessageDispatch.PER_INVOLVEMENT in the compose UI. +PLACEHOLDERS = [ + Placeholder("EVENT_NAME", "The name of the event"), + Placeholder("FIRST_NAME", "The recipient's first name"), + Placeholder("PROGRAM_TITLE", "The title of the program item", per_involvement_only=True), +] +PLACEHOLDERS_BY_TOKEN = {placeholder.token: placeholder for placeholder in PLACEHOLDERS} + +_PLACEHOLDER_RE = re.compile(r"\{(" + "|".join(re.escape(token) for token in PLACEHOLDERS_BY_TOKEN) + r")\}") + +_ALLOWED_TAGS = { + "h1", + "h2", + "h3", + "h4", + "p", + "strong", + "em", + "ul", + "ol", + "li", + "a", + "br", + "blockquote", + "code", + "pre", +} +_ALLOWED_ATTRIBUTES = {"a": {"href"}} + + +def _tokenize(source: str) -> tuple[str, dict[str, str]]: + """ + Replace each recognized placeholder token with an opaque sentinel that survives + Markdown rendering and HTML sanitization verbatim. Returns the tokenized source and + a sentinel -> placeholder token map. + """ + sentinel_by_token: dict[str, str] = {} + + def replace(match: re.Match[str]) -> str: + token = match.group(1) + return sentinel_by_token.setdefault(token, f"MSGV2{uuid.uuid4().hex}SENTINEL") + + tokenized = _PLACEHOLDER_RE.sub(replace, source) + return tokenized, {sentinel: token for token, sentinel in sentinel_by_token.items()} + + +def _resolve_sentinel_values( + sentinel_to_token: dict[str, str], + *, + event: Event, + person: Person, + involvement: Involvement | None, + program: Program | None, +) -> dict[str, str]: + return { + sentinel: PLACEHOLDERS_BY_TOKEN[token].resolve( + event=event, person=person, involvement=involvement, program=program + ) + for sentinel, token in sentinel_to_token.items() + } + + +def render_subject( + source: str, + *, + event: Event, + person: Person, + involvement: Involvement | None = None, + program: Program | None = None, +) -> str: + """ + Subject lines carry no Markdown formatting, only placeholder substitution. + The result is later consumed as plain text (email subject, GraphQL string field). + """ + tokenized, sentinel_to_token = _tokenize(source) + values = _resolve_sentinel_values( + sentinel_to_token, event=event, person=person, involvement=involvement, program=program + ) + + rendered = tokenized + for sentinel, value in values.items(): + rendered = rendered.replace(sentinel, value) + + return rendered + + +def render_body( + source: str, + *, + event: Event, + person: Person, + involvement: Involvement | None = None, + program: Program | None = None, +) -> tuple[str, str]: + """ + Renders the Markdown body into a (sanitized_html, plaintext) pair, with placeholder + values substituted as inert literal text in both - never interpreted as Markdown or + HTML, even if the value itself looks like a link, an image tag, or a heading. + """ + tokenized, sentinel_to_token = _tokenize(source) + values = _resolve_sentinel_values( + sentinel_to_token, event=event, person=person, involvement=involvement, program=program + ) + + html_fragment = markdown_lib.markdown(tokenized) + sanitized_html = nh3.clean(html_fragment, tags=_ALLOWED_TAGS, attributes=_ALLOWED_ATTRIBUTES) + for sentinel, value in values.items(): + sanitized_html = sanitized_html.replace(sentinel, html.escape(value)) + + plaintext = tokenized + for sentinel, value in values.items(): + plaintext = plaintext.replace(sentinel, value) + + return sanitized_html, plaintext + + +def render_email_html(body_html: str, *, event: Event, subject: str) -> str: + return render_to_string( + "messages_v2/email.html", + {"body_html": body_html, "event": event, "subject": subject}, + ) diff --git a/kompassi/messages_v2/tasks.py b/kompassi/messages_v2/tasks.py new file mode 100644 index 000000000..33023a5b1 --- /dev/null +++ b/kompassi/messages_v2/tasks.py @@ -0,0 +1,140 @@ +from __future__ import annotations + +import logging + +from django.conf import settings +from django.core.mail import EmailMultiAlternatives + +from kompassi.celery_app import app + +from .models.enums import MessageDispatch + +logger = logging.getLogger(__name__) + + +@app.task(ignore_result=True) +def send_message(message_id: str, involvement_ids: list[int] | None = None): + """ + Sends `message` to all currently matching recipients, or, if `involvement_ids` is + given, only to the (already matching) involvements with those ids - used for + incremental auto-send. MessageRecipient's uniqueness constraints make this + idempotent: recipients who already have a MessageRecipient row for this message are + skipped. + """ + from .models.message import Message + from .models.message_body import MessageBody + from .models.message_recipient import MessageRecipient + from .rendering import render_body, render_email_html, render_subject + + message = Message.objects.select_related("reply_to", "universe__scope__event").get(id=message_id) + event = message.event + meta = event.program_v2_event_meta + if meta is None: + raise ValueError(f"Event {event.slug} has no ProgramV2EventMeta") + + involvements = message.resolve_involvements().select_related("person", "program") + if involvement_ids is not None: + involvements = involvements.filter(id__in=involvement_ids) + + if message.dispatch == MessageDispatch.PER_INVOLVEMENT: + units = [(involvement.person, involvement) for involvement in involvements] + else: + units_by_person = {} + for involvement in involvements: + units_by_person.setdefault(involvement.person_id, (involvement.person, involvement)) + units = list(units_by_person.values()) + + reply_to_email = message.reply_to.email if message.reply_to else meta.plain_contact_email + + num_sent = 0 + for person, involvement in units: + involvement_for_recipient = involvement if message.dispatch == MessageDispatch.PER_INVOLVEMENT else None + + if MessageRecipient.objects.filter( + message=message, person=person, involvement=involvement_for_recipient + ).exists(): + continue + + program = involvement.program if involvement else None + subject = render_subject(message.subject, event=event, person=person, involvement=involvement, program=program) + body_html, body_text = render_body( + message.body, event=event, person=person, involvement=involvement, program=program + ) + body, _ = MessageBody.get_or_create(body_html) + + if settings.DEBUG: + print(f"--- Messages V2: sending {subject!r} to {person.name_and_email} ---") + print(body_text) + + email = EmailMultiAlternatives( + subject=subject, + body=body_text, + from_email=meta.cloaked_contact_email, + to=[person.name_and_email], + reply_to=[reply_to_email] if reply_to_email else None, + ) + email.attach_alternative(render_email_html(body_html, event=event, subject=subject), "text/html") + email.send(fail_silently=True) + + MessageRecipient.objects.create( + message=message, + person=person, + involvement=involvement_for_recipient, + email=person.email, + subject=subject, + body=body, + cached_dimensions=involvement.cached_dimensions if involvement else {}, + ) + num_sent += 1 + + logger.info("Sent message %s to %s recipients", message.id, num_sent) + + +@app.task(ignore_result=True) +def send_matching_messages(involvement_id: int): + """ + Called whenever an involvement is created or its dimensions/is_active change. + Sends every active Message of the involvement's event whose recipient filters now + match this involvement, incrementally (only to this involvement). + """ + from kompassi.dimensions.filters import DimensionFilters + from kompassi.involvement.models.involvement import Involvement + + from .models.enums import MessageState + from .models.message import Message + from .models.message_recipient import MessageRecipient + + try: + involvement = Involvement.objects.get(id=involvement_id) + except Involvement.DoesNotExist: + return + + if not involvement.is_active: + return + + active_messages = [ + message + for message in Message.objects.filter(universe=involvement.universe) + if message.state == MessageState.ACTIVE + ] + + for message in active_messages: + already_matched_person = ( + message.dispatch == MessageDispatch.PER_PERSON + and MessageRecipient.objects.filter( + message=message, + person=involvement.person, + ).exists() + ) + if already_matched_person: + continue + + matches = False + for group in message.recipient_filters: + filters = {item["dimension"]: item.get("values") or ["*"] for item in group} + if DimensionFilters(filters=filters).filter(Involvement.objects.filter(id=involvement.id)).exists(): + matches = True + break + + if matches: + send_message.delay(str(message.id), involvement_ids=[involvement.id]) diff --git a/kompassi/messages_v2/templates/messages_v2/email.html b/kompassi/messages_v2/templates/messages_v2/email.html new file mode 100644 index 000000000..927ad3967 --- /dev/null +++ b/kompassi/messages_v2/templates/messages_v2/email.html @@ -0,0 +1,28 @@ +{% load i18n %} + + + + + {{ subject }} + + + + + + +
+ + + + + + + +
+ {{ event.name }} +
+ {{ body_html|safe }} +
+
+ + diff --git a/kompassi/messages_v2/tests.py b/kompassi/messages_v2/tests.py new file mode 100644 index 000000000..223c5ae47 --- /dev/null +++ b/kompassi/messages_v2/tests.py @@ -0,0 +1,255 @@ +import pytest +from django.core import mail +from django.utils.timezone import now + +from kompassi.core.graphql.profile_own import OwnProfileType +from kompassi.core.models.event import Event +from kompassi.core.models.person import Person +from kompassi.event_log_v2.models import Entry +from kompassi.event_log_v2.utils.emit import emit +from kompassi.involvement.models.enums import InvolvementApp, InvolvementType +from kompassi.involvement.models.involvement import Involvement +from kompassi.involvement.models.registry import Registry +from kompassi.program_v2.models.meta import ProgramV2EventMeta + +from .models.enums import MessageDispatch, MessageState +from .models.message import Message +from .models.message_recipient import MessageRecipient + +INJECTION_PAYLOAD = "[x](javascript:alert(1)) **bold** # heading" + + +def _setup_event(name: str): + """A ProgramV2EventMeta (and, transitively, InvolvementEventMeta) for a fresh dummy event.""" + event, _ = Event.get_or_create_dummy(name=name) + registry, _ = Registry.get_or_create_dummy() + + meta, created = ProgramV2EventMeta.objects.get_or_create( + event=event, + defaults=dict( + admin_group=ProgramV2EventMeta.get_or_create_groups(event, ("admins",))[0], + is_accepting_feedback=True, + contact_email="Messages Test ", + guide_v2_embedded_url="https://example.com/guide", + default_registry=registry, + ), + ) + if created: + meta.ensure() + + return event, meta + + +def _make_involvement(universe, person, registry, *, type, is_active, **extra_dimensions): + cached_dimensions = { + "app": [InvolvementApp.PROGRAM.value], + "type": [type.value], + "state": ["active"] if is_active else ["inactive"], + "registry": [registry.slug], + **extra_dimensions, + } + return Involvement.objects.create( + universe=universe, + person=person, + app=InvolvementApp.PROGRAM, + type=type, + registry=registry, + is_active=is_active, + cached_dimensions=cached_dimensions, + ) + + +@pytest.mark.django_db +def test_compose_and_send_message(): + Entry.ensure_partitions() + + event, meta = _setup_event("Messages V2 Send Test") + universe = event.involvement_universe + registry = event.involvement_event_meta.default_registry + + offerer, _ = Person.get_or_create_dummy() + offerer.first_name = "Ada" + offerer.save() + + # Same rendered FIRST_NAME/EVENT_NAME as offerer -> exercises MessageBody dedup. + host, _ = Person.get_or_create_dummy(another=True) + host.first_name = "Ada" + host.save() + + injected = Person.objects.create(first_name=INJECTION_PAYLOAD, surname="Payload", email="injected@example.com") + wrong_category_host = Person.objects.create(first_name="Bob", surname="Wrong", email="wrong@example.com") + inactive_host = Person.objects.create(first_name="Carl", surname="Inactive", email="inactive@example.com") + + _make_involvement(universe, offerer, registry, type=InvolvementType.PROGRAM_OFFER, is_active=True) + _make_involvement(universe, injected, registry, type=InvolvementType.PROGRAM_OFFER, is_active=True) + _make_involvement( + universe, host, registry, type=InvolvementType.PROGRAM_HOST, is_active=True, category=["miniature-games"] + ) + _make_involvement( + universe, + wrong_category_host, + registry, + type=InvolvementType.PROGRAM_HOST, + is_active=True, + category=["board-games"], + ) + _make_involvement( + universe, + inactive_host, + registry, + type=InvolvementType.PROGRAM_HOST, + is_active=False, + category=["miniature-games"], + ) + + message = Message.objects.create( + universe=universe, + subject="Hello {FIRST_NAME}", + body="Hi {FIRST_NAME}!\n\n**Welcome** to {EVENT_NAME}.\n\n# Important", + dispatch=MessageDispatch.PER_PERSON, + recipient_filters=[ + [{"dimension": "type", "values": ["program-offer"]}, {"dimension": "state", "values": ["active"]}], + [ + {"dimension": "type", "values": ["program-host"]}, + {"dimension": "state", "values": ["active"]}, + {"dimension": "category", "values": ["miniature-games"]}, + ], + ], + ) + message.clean_recipient_filters() + message.save() + + emit("messages_v2.message.created", event=event, other_fields=dict(message_subject=message.subject)) + + assert message.state == MessageState.DRAFT + assert message.resolve_recipient_count() == 3 + + initial_recipients = message.resolve_recipient_count() + message.send() + + emit( + "messages_v2.message.sent", + event=event, + other_fields=dict(message_subject=message.subject, initial_recipients=initial_recipients), + ) + + message.refresh_from_db() + assert message.state == MessageState.ACTIVE + + # One email per matching recipient - no co-recipient leakage, and the two + # non-matching involvements (wrong category, inactive) got nothing. + assert len(mail.outbox) == 3 + sent_by_email = {sent.to[0]: sent for sent in mail.outbox} + assert set(sent_by_email) == {offerer.name_and_email, host.name_and_email, injected.name_and_email} + + for sent in mail.outbox: + assert len(sent.to) == 1 + assert sent.from_email == meta.cloaked_contact_email + assert sent.reply_to == [meta.plain_contact_email] + + injected_email = sent_by_email[injected.name_and_email] + html_body = next(content for content, mimetype in injected_email.alternatives if mimetype == "text/html") + + # The author's own Markdown formatting is rendered ... + assert "Welcome" in html_body + assert "

Important

" in html_body + # ... but the placeholder value (fully attacker-controlled) is never interpreted as + # Markdown or HTML, even though it looks exactly like an injection payload. + assert " Date: Tue, 28 Jul 2026 20:47:03 +0300 Subject: [PATCH 02/12] chore(forms): also have backend recognize MarkdownText --- kompassi/forms/models/field.py | 1 + kompassi/forms/utils/process_form_data.py | 1 + kompassi/forms/utils/summarize_responses.py | 5 +++-- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kompassi/forms/models/field.py b/kompassi/forms/models/field.py index 123353e6e..89c1a3d48 100644 --- a/kompassi/forms/models/field.py +++ b/kompassi/forms/models/field.py @@ -11,6 +11,7 @@ class FieldType(StrEnum): SINGLE_LINE_TEXT = "SingleLineText" MULTI_LINE_TEXT = "MultiLineText" + MARKDOWN_TEXT = "MarkdownText" SINGLE_CHECKBOX = "SingleCheckbox" TRISTATE = "Tristate" STATIC_TEXT = "StaticText" diff --git a/kompassi/forms/utils/process_form_data.py b/kompassi/forms/utils/process_form_data.py index 7b25285e5..f96236b4f 100644 --- a/kompassi/forms/utils/process_form_data.py +++ b/kompassi/forms/utils/process_form_data.py @@ -269,6 +269,7 @@ def validate_value(self, field: Field, value: Any) -> list[FieldWarning]: FIELD_PROCESSORS: dict[FieldType, FieldProcessor] = { FieldType.SINGLE_LINE_TEXT: FieldProcessor(), FieldType.MULTI_LINE_TEXT: FieldProcessor(), + FieldType.MARKDOWN_TEXT: FieldProcessor(), FieldType.SINGLE_CHECKBOX: SingleCheckboxFieldProcessor(), FieldType.TRISTATE: TristateFieldProcessor(), FieldType.DIMENSION_SINGLE_CHECKBOX: SingleCheckboxFieldProcessor(), diff --git a/kompassi/forms/utils/summarize_responses.py b/kompassi/forms/utils/summarize_responses.py index 7c41de22a..940d1daf1 100644 --- a/kompassi/forms/utils/summarize_responses.py +++ b/kompassi/forms/utils/summarize_responses.py @@ -4,7 +4,7 @@ """ from collections import Counter -from enum import Enum +from enum import StrEnum from typing import Any, Literal, Self import pydantic @@ -16,7 +16,7 @@ Values = dict[str, Any] -class SummaryType(str, Enum): +class SummaryType(StrEnum): TEXT = "Text" SINGLE_CHECKBOX = "SingleCheckbox" SELECT = "Select" @@ -115,6 +115,7 @@ def summarize_responses(fields: list[Field], valuesies: list[Values]) -> Summary FieldType.SINGLE_LINE_TEXT | FieldType.DECIMAL_FIELD | FieldType.MULTI_LINE_TEXT + | FieldType.MARKDOWN_TEXT | FieldType.DATE_FIELD | FieldType.TIME_FIELD | FieldType.DATE_TIME_FIELD From 5f348cc629e5131a7ea8172332eaa018e2ef948d Mon Sep 17 00:00:00 2001 From: Luka Pajukanta Date: Tue, 28 Jul 2026 21:24:19 +0300 Subject: [PATCH 03/12] feat(program_v2): messages profile page help text --- .../app/[locale]/profile/messages/page.tsx | 54 ++++++++++++++++++- kompassi-v2-frontend/src/translations/en.tsx | 50 +++++++++++++---- kompassi-v2-frontend/src/translations/fi.tsx | 50 +++++++++++++---- kompassi-v2-frontend/src/translations/sv.tsx | 36 +++++++++---- 4 files changed, 158 insertions(+), 32 deletions(-) diff --git a/kompassi-v2-frontend/src/app/[locale]/profile/messages/page.tsx b/kompassi-v2-frontend/src/app/[locale]/profile/messages/page.tsx index 46daac085..e1f010793 100644 --- a/kompassi-v2-frontend/src/app/[locale]/profile/messages/page.tsx +++ b/kompassi-v2-frontend/src/app/[locale]/profile/messages/page.tsx @@ -2,11 +2,13 @@ import { graphql } from "@/__generated__"; import { getClient } from "@/apolloClient"; import { auth } from "@/auth"; import { Column, DataTable } from "@/components/DataTable"; +import { DimensionFilters } from "@/components/dimensions/DimensionFilters"; import SignInRequired from "@/components/errors/SignInRequired"; import FormattedDateTime from "@/components/FormattedDateTime"; import ModalButton from "@/components/ModalButton"; import ViewContainer from "@/components/ViewContainer"; import ViewHeading from "@/components/ViewHeading"; +import { kompassiBaseUrl } from "@/config"; import { getTranslations } from "@/translations"; graphql(` @@ -36,6 +38,7 @@ interface Props { params: Promise<{ locale: string; }>; + searchParams: Promise>; } export const revalidate = 0; @@ -53,6 +56,7 @@ export async function generateMetadata(props: Props) { export default async function ProfileMessagesPage(props: Props) { const params = await props.params; + const searchParams = await props.searchParams; const { locale } = params; const translations = getTranslations(locale); const t = translations.Program.Message.profile; @@ -63,7 +67,31 @@ export default async function ProfileMessagesPage(props: Props) { } const { data } = await getClient().query({ query }); - const messages = data.profile?.messages ?? []; + const allMessages = data.profile?.messages ?? []; + + // "event" isn't a real dimension of a message, but reusing DimensionFilters gives + // us a familiar filter dropdown (and URL search param) for free. + const eventChoicesBySlug = new Map( + allMessages.map((message) => [ + message.event.slug, + { slug: message.event.slug, title: message.event.name }, + ]), + ); + const eventFilter = { + slug: "event", + title: t.attributes.event, + isMultiValue: false, + isListFilter: true, + isKeyDimension: false, + values: [...eventChoicesBySlug.values()].sort((a, b) => + a.title.localeCompare(b.title), + ), + }; + + const selectedEventSlug = searchParams.event; + const messages = selectedEventSlug + ? allMessages.filter((message) => message.event.slug === selectedEventSlug) + : allMessages; const columns: Column<(typeof messages)[number]>[] = [ { @@ -100,10 +128,32 @@ export default async function ProfileMessagesPage(props: Props) { }, ]; + const VolunteerMessagesLink = ({ + children, + }: { + children: React.ReactNode; + }) => ( + + {children} + + ); + return ( {t.title} - + {t.description(VolunteerMessagesLink)} + + + + + {t.tableFooter(messages.length)} + + + ); } diff --git a/kompassi-v2-frontend/src/translations/en.tsx b/kompassi-v2-frontend/src/translations/en.tsx index aab2d586a..99360e2f6 100644 --- a/kompassi-v2-frontend/src/translations/en.tsx +++ b/kompassi-v2-frontend/src/translations/en.tsx @@ -1964,19 +1964,28 @@ const translations = { }, body: { title: "Message", - helpText: - "Limited Markdown formatting is supported (headings, bold, italics, lists, links). " + - "You can use the following placeholders, which will be replaced with the recipient's own data: " + - "{FIRST_NAME} (recipient's first name), {EVENT_NAME} (name of the event), and, " + - "when sending one message per program item, {PROGRAM_TITLE} (title of the program item).", + helpText: ( + <> + Limited Markdown formatting is supported (headings, bold, italics, + lists, links). You can use the following placeholders, which will + be replaced with the appropriate values: {"{FIRST_NAME}"} (first + name of the recipient), {"{EVENT_NAME}"} (name of the event), and, + when sending one message per program item, {"{PROGRAM_TITLE}"}{" "} + (title of the program item). + + ), }, dispatch: { title: "Sending mode", - helpText: - "One message per person sends a single copy to each matching person, even if they " + - "match via multiple program items. One message per program item sends a separate " + - "copy for each matching program item a person hosts, and makes the {PROGRAM_TITLE} " + - "placeholder available.", + helpText: ( + <> + One message per person sends a single copy to each matching + person, even if they match via multiple program items. One message + per program item sends a separate copy for each matching program + item a person hosts, and makes the {"{PROGRAM_TITLE}"} placeholder + available. + + ), choices: { PER_PERSON: "One message per person", PER_INVOLVEMENT: "One message per program item", @@ -2067,12 +2076,33 @@ const translations = { }, profile: { title: "Messages", + description: ( + VolunteerMessagesLink: React.ComponentType<{ + children: React.ReactNode; + }>, + ) => ( + <> +

+ When you host program items in an event and the program manager + sends you messages, you will see them here. +

+

+ When you volunteer in an event and the volunteer manager sends you + messages, those messages can be found in{" "} + Messages V1. The + volunteer experience is being migrated to Kompassi V2, so in the + future all messages will be found here. +

+ + ), noSubject: "(no subject)", attributes: { sentAt: "Date", event: "Event", subject: "Subject", }, + tableFooter: (numMessages: number) => + numMessages === 1 ? <>One message. : <>{numMessages} messages., }, ReplyTo: { listTitle: "Reply-to addresses", diff --git a/kompassi-v2-frontend/src/translations/fi.tsx b/kompassi-v2-frontend/src/translations/fi.tsx index c551c6849..c76c7760a 100644 --- a/kompassi-v2-frontend/src/translations/fi.tsx +++ b/kompassi-v2-frontend/src/translations/fi.tsx @@ -1972,19 +1972,28 @@ const translations: Translations = { }, body: { title: "Viesti", - helpText: - "Rajoitettu Markdown-muotoilu on tuettu (otsikot, lihavointi, kursivointi, listat, linkit). " + - "Voit käyttää seuraavia paikanpitäjiä, jotka korvataan vastaanottajan omilla tiedoilla: " + - "{FIRST_NAME} (vastaanottajan etunimi), {EVENT_NAME} (tapahtuman nimi) ja, kun viesti " + - "lähetetään yksi kappale per ohjelmanumero, {PROGRAM_TITLE} (ohjelmanumeron nimi).", + helpText: ( + <> + Voit käyttää seuraavia Markdown-muotoiluja: otsikot, lihavointi, + kursivointi, listat ja linkit. Seuraavat paikkamerkit korvataan + vastaanottajan omilla tiedoilla: {"{FIRST_NAME}"} (vastaanottajan + etunimi), {"{EVENT_NAME}"} (tapahtuman nimi) ja, kun viesti + lähetetään yksi kappale per ohjelmanumero, {"{PROGRAM_TITLE}"}{" "} + (ohjelmanumeron nimi). + + ), }, dispatch: { title: "Lähetystapa", - helpText: - "Yksi viesti per henkilö lähettää yhden kappaleen kullekin osuvalle henkilölle, vaikka " + - "hän osuisi useamman ohjelmanumeron kautta. Yksi viesti per ohjelmanumero lähettää oman " + - "kappaleensa kustakin osuvasta ohjelmanumerosta, jota henkilö pitää, ja tekee " + - "{PROGRAM_TITLE}-paikanpitäjän käytettäväksi.", + helpText: ( + <> + Yksi viesti per henkilö lähettää yhden kappaleen kullekin osuvalle + henkilölle, vaikka hän osuisi useamman ohjelmanumeron kautta. Yksi + viesti per ohjelmanumero lähettää oman kappaleensa kustakin + osuvasta ohjelmanumerosta, jota henkilö pitää, ja tekee{" "} + {"{PROGRAM_TITLE}"}-paikkamerkin käytettäväksi. + + ), choices: { PER_PERSON: "Yksi viesti per henkilö", PER_INVOLVEMENT: "Yksi viesti per ohjelmanumero", @@ -2076,12 +2085,33 @@ const translations: Translations = { }, profile: { title: "Viestit", + description: ( + VolunteerMessagesLink: React.ComponentType<{ + children: React.ReactNode; + }>, + ) => ( + <> +

+ Kun järjestät ohjelmaa tapahtumassa ja tapahtuman ohjelmavastaava + lähettää sinulle viestejä, löydät ne täältä. +

+

+ Kun teet tapahtumassa vapaaehtoistyötä ja vapaaehtoisvastaava + lähettää sinulle viestejä, löydät ne toistaiseksi{" "} + V1-puolelta. + Vapaaehtoisten Kompassi-toiminnot ovat siirtymässä Kompassi + V2:een, joten tulevaisuudessa kaikki viestit löytyvät täältä. +

+ + ), noSubject: "(ei otsikkoa)", attributes: { sentAt: "Päivämäärä", event: "Tapahtuma", subject: "Otsikko", }, + tableFooter: (numMessages: number) => + numMessages === 1 ? <>Yksi viesti. : <>{numMessages} viestiä., }, ReplyTo: { listTitle: "Vastausosoitteet", diff --git a/kompassi-v2-frontend/src/translations/sv.tsx b/kompassi-v2-frontend/src/translations/sv.tsx index 986606284..5f0d44b30 100644 --- a/kompassi-v2-frontend/src/translations/sv.tsx +++ b/kompassi-v2-frontend/src/translations/sv.tsx @@ -1935,19 +1935,28 @@ const translations: Translations = { }, body: { title: "Meddelande", - helpText: - "Begränsad Markdown-formatering stöds (rubriker, fetstil, kursiv, listor, länkar). " + - "Du kan använda följande platshållare, som ersätts med mottagarens egna uppgifter: " + - "{FIRST_NAME} (mottagarens förnamn), {EVENT_NAME} (evenemangets namn) och, när " + - "meddelandet skickas ett exemplar per programpunkt, {PROGRAM_TITLE} (programpunktens titel).", + helpText: ( + <> + Begränsad Markdown-formatering stöds (rubriker, fetstil, kursiv, + listor, länkar). Du kan använda följande platshållare, som ersätts + med mottagarens egna uppgifter: {"{FIRST_NAME}"} (mottagarens + förnamn), {"{EVENT_NAME}"} (evenemangets namn) och, när + meddelandet skickas ett exemplar per programpunkt,{" "} + {"{PROGRAM_TITLE}"} (programpunktens titel). + + ), }, dispatch: { title: "Sändningssätt", - helpText: - "Ett meddelande per person skickar ett enda exemplar till varje matchande person, även " + - "om de matchar via flera programpunkter. Ett meddelande per programpunkt skickar ett " + - "separat exemplar för varje matchande programpunkt en person är värd för, och gör " + - "platshållaren {PROGRAM_TITLE} tillgänglig.", + helpText: ( + <> + Ett meddelande per person skickar ett enda exemplar till varje + matchande person, även om de matchar via flera programpunkter. Ett + meddelande per programpunkt skickar ett separat exemplar för varje + matchande programpunkt en person är värd för, och gör + platshållaren {"{PROGRAM_TITLE}"} tillgänglig. + + ), choices: { PER_PERSON: "Ett meddelande per person", PER_INVOLVEMENT: "Ett meddelande per programpunkt", @@ -2038,12 +2047,19 @@ const translations: Translations = { }, profile: { title: "Meddelanden", + description: UNTRANSLATED(en.Program.Message.profile.description), noSubject: "(inget ämne)", attributes: { sentAt: "Datum", event: "Evenemang", subject: "Ämne", }, + tableFooter: (numMessages: number) => + numMessages === 1 ? ( + <>Ett meddelande. + ) : ( + <>{numMessages} meddelanden. + ), }, ReplyTo: { listTitle: "Svarsadresser", From b42c1fc39bfc9c5f87b2829c45cbe32ee007f2fd Mon Sep 17 00:00:00 2001 From: Luka Pajukanta Date: Thu, 30 Jul 2026 12:03:23 +0300 Subject: [PATCH 04/12] fix(messages_v2): harden send path from code review Address findings from a security/correctness/performance review of Messages V2: - Only record a MessageRecipient once the email actually sends (fail_silently off + logged), so a transient failure no longer permanently marks a person as delivered and blocks retries. - Refuse to send a message with empty recipient filters (an empty AND-group would otherwise match every involvement in the universe); drafts may still be saved empty. - Validate reply-to email addresses in the create/update mutations, which bypassed EmailField validation. - Skip the auto-send Celery dispatch unless the universe has an active message, avoiding a task per involvement change system-wide. - Resolve recipients with a single OR'd queryset instead of a Python id set. - Extract group_to_dimension_filters() shared by message.py and tasks.py. - Make MessageBody.digest unique so dedup get_or_create is race-safe. Frontend: - Real Swedish translation for the profile messages description. - Join recipient filter groups with language-neutral " / " instead of " OR ". - Localize the MarkdownEditor "insert heading" aria-label. - Parse the recipientFilters hidden field via a helper that fails cleanly on invalid JSON instead of raising an opaque 500. Co-Authored-By: Claude Fable 5 --- .../program-messages/[messageId]/actions.ts | 9 ++-- .../formatRecipientFilterSummary.tsx | 5 ++- .../program-messages/new/actions.ts | 9 ++-- .../program-messages/parseRecipientFilters.ts | 17 ++++++++ .../src/components/forms/MarkdownEditor.tsx | 42 ++++++++++--------- .../src/components/forms/SchemaFormInput.tsx | 1 + kompassi-v2-frontend/src/translations/en.tsx | 3 ++ kompassi-v2-frontend/src/translations/fi.tsx | 3 ++ kompassi-v2-frontend/src/translations/sv.tsx | 25 ++++++++++- kompassi/involvement/models/involvement.py | 16 +++++++ .../mutations/create_message_reply_to.py | 3 ++ .../mutations/update_message_reply_to.py | 3 ++ .../messages_v2/migrations/0001_initial.py | 2 +- kompassi/messages_v2/models/message.py | 30 +++++++++---- kompassi/messages_v2/models/message_body.py | 14 ++----- .../messages_v2/models/recipient_filters.py | 8 ++++ kompassi/messages_v2/tasks.py | 13 +++++- 17 files changed, 149 insertions(+), 54 deletions(-) create mode 100644 kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/parseRecipientFilters.ts diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/[messageId]/actions.ts b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/[messageId]/actions.ts index 724045559..e21a6c7da 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/[messageId]/actions.ts +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/[messageId]/actions.ts @@ -5,6 +5,7 @@ import { redirect } from "next/navigation"; import { graphql } from "@/__generated__"; import { MessageDispatch } from "@/__generated__/graphql"; import { getClient } from "@/apolloClient"; +import parseRecipientFilters from "../parseRecipientFilters"; const updateMessageMutation = graphql(` mutation UpdateMessage($input: UpdateMessageInput!) { @@ -22,11 +23,9 @@ export async function updateMessage( messageId: string, formData: FormData, ) { - const recipientFiltersRaw = formData.get("recipientFilters"); - const recipientFilters = - typeof recipientFiltersRaw === "string" && recipientFiltersRaw - ? JSON.parse(recipientFiltersRaw) - : []; + const recipientFilters = parseRecipientFilters( + formData.get("recipientFilters"), + ); const replyToIdRaw = formData.get("replyToId"); const replyToId = diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/formatRecipientFilterSummary.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/formatRecipientFilterSummary.tsx index af8f987db..d2ddafc80 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/formatRecipientFilterSummary.tsx +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/formatRecipientFilterSummary.tsx @@ -6,7 +6,8 @@ interface FilterItem { } /// Renders recipientFilters (OR of AND-groups) as a short human-readable summary, -/// eg. "(Type: Program host, State: Active) OR (Type: Program offer)". +/// eg. "(Type: Program host, State: Active) / (Type: Program offer)". Groups are joined +/// with a language-neutral "/" so the summary needs no per-locale wording. export default function formatRecipientFilterSummary( groups: FilterItem[][], dimensions: DimensionValueSelectFragment[], @@ -30,5 +31,5 @@ export default function formatRecipientFilterSummary( return `(${itemSummaries.join(", ")})`; }); - return groupSummaries.join(" OR "); + return groupSummaries.join(" / "); } diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/new/actions.ts b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/new/actions.ts index bb977ffc7..d143902a0 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/new/actions.ts +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/new/actions.ts @@ -5,6 +5,7 @@ import { redirect } from "next/navigation"; import { graphql } from "@/__generated__"; import { MessageDispatch } from "@/__generated__/graphql"; import { getClient } from "@/apolloClient"; +import parseRecipientFilters from "../parseRecipientFilters"; const createMessageMutation = graphql(` mutation CreateMessage($input: CreateMessageInput!) { @@ -21,11 +22,9 @@ export async function createMessage( eventSlug: string, formData: FormData, ) { - const recipientFiltersRaw = formData.get("recipientFilters"); - const recipientFilters = - typeof recipientFiltersRaw === "string" && recipientFiltersRaw - ? JSON.parse(recipientFiltersRaw) - : []; + const recipientFilters = parseRecipientFilters( + formData.get("recipientFilters"), + ); const replyToIdRaw = formData.get("replyToId"); const replyToId = diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/parseRecipientFilters.ts b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/parseRecipientFilters.ts new file mode 100644 index 000000000..0711ce9d8 --- /dev/null +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-messages/parseRecipientFilters.ts @@ -0,0 +1,17 @@ +/// Parses the hidden `recipientFilters` form field (a JSON-encoded OR-of-AND-groups +/// array produced by RecipientFilterEditor). Returns [] when absent/empty, and throws a +/// clear error instead of a raw SyntaxError if the value is present but not valid JSON, +/// so a tampered submission fails cleanly rather than as an opaque 500. +export default function parseRecipientFilters( + raw: FormDataEntryValue | null, +): unknown { + if (typeof raw !== "string" || !raw) { + return []; + } + + try { + return JSON.parse(raw); + } catch { + throw new Error("Invalid recipientFilters: not valid JSON"); + } +} diff --git a/kompassi-v2-frontend/src/components/forms/MarkdownEditor.tsx b/kompassi-v2-frontend/src/components/forms/MarkdownEditor.tsx index f86a70ac8..f5d0f42a1 100644 --- a/kompassi-v2-frontend/src/components/forms/MarkdownEditor.tsx +++ b/kompassi-v2-frontend/src/components/forms/MarkdownEditor.tsx @@ -17,30 +17,33 @@ interface MarkdownEditorProps { required?: boolean; readOnly?: boolean; rows?: number; + insertHeadingLabel: string; } // Keep the toolbar limited to the formatting we actually allow through the backend // sanitizer and document in the field's help text: headings, bold, italics, lists, // links. In particular, only offer h1-h4 (not h5/h6, which nh3 would strip), and omit // strikethrough, quote, code, tables, images, and horizontal rules entirely. -const toolbarCommands = [ - commands.group( - [commands.title1, commands.title2, commands.title3, commands.title4], - { - name: "title", - groupName: "title", - buttonProps: { "aria-label": "Insert heading" }, - icon: commands.title.icon, - }, - ), - commands.bold, - commands.italic, - commands.divider, - commands.unorderedListCommand, - commands.orderedListCommand, - commands.divider, - commands.link, -]; +function buildToolbarCommands(insertHeadingLabel: string) { + return [ + commands.group( + [commands.title1, commands.title2, commands.title3, commands.title4], + { + name: "title", + groupName: "title", + buttonProps: { "aria-label": insertHeadingLabel }, + icon: commands.title.icon, + }, + ), + commands.bold, + commands.italic, + commands.divider, + commands.unorderedListCommand, + commands.orderedListCommand, + commands.divider, + commands.link, + ]; +} /// A Markdown editor with a toolbar and preview restricted to the formatting the /// backend renders/sanitizes, backed by a hidden input so it participates in normal @@ -52,6 +55,7 @@ export default function MarkdownEditor({ required, readOnly, rows = 10, + insertHeadingLabel, }: MarkdownEditorProps) { const [value, setValue] = useState(defaultValue); // The toolbar (~40px) sits above the text area within `height`, so the text area's @@ -79,7 +83,7 @@ export default function MarkdownEditor({ // preview pane) do size to `height` correctly. minHeight={contentHeight} textareaProps={{ readOnly }} - commands={toolbarCommands} + commands={buildToolbarCommands(insertHeadingLabel)} />
); diff --git a/kompassi-v2-frontend/src/components/forms/SchemaFormInput.tsx b/kompassi-v2-frontend/src/components/forms/SchemaFormInput.tsx index 18c4d3c13..b8fff147e 100644 --- a/kompassi-v2-frontend/src/components/forms/SchemaFormInput.tsx +++ b/kompassi-v2-frontend/src/components/forms/SchemaFormInput.tsx @@ -94,6 +94,7 @@ function SchemaFormInput({ required={required} readOnly={readOnly} rows={field.rows ?? defaultRows} + insertHeadingLabel={t.markdownEditor.insertHeadingLabel} /> ); case "NumberField": diff --git a/kompassi-v2-frontend/src/translations/en.tsx b/kompassi-v2-frontend/src/translations/en.tsx index 99360e2f6..6df694f80 100644 --- a/kompassi-v2-frontend/src/translations/en.tsx +++ b/kompassi-v2-frontend/src/translations/en.tsx @@ -190,6 +190,9 @@ const translations = { checked: "Checked", unchecked: "Not checked", }, + markdownEditor: { + insertHeadingLabel: "Insert heading", + }, }, MainView: { defaultErrorMessage: diff --git a/kompassi-v2-frontend/src/translations/fi.tsx b/kompassi-v2-frontend/src/translations/fi.tsx index c76c7760a..21c9e5d36 100644 --- a/kompassi-v2-frontend/src/translations/fi.tsx +++ b/kompassi-v2-frontend/src/translations/fi.tsx @@ -197,6 +197,9 @@ const translations: Translations = { checked: "Valittu", unchecked: "Ei valittu", }, + markdownEditor: { + insertHeadingLabel: "Lisää otsikko", + }, }, MainView: { defaultErrorMessage: diff --git a/kompassi-v2-frontend/src/translations/sv.tsx b/kompassi-v2-frontend/src/translations/sv.tsx index 5f0d44b30..6d9f5497b 100644 --- a/kompassi-v2-frontend/src/translations/sv.tsx +++ b/kompassi-v2-frontend/src/translations/sv.tsx @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ // Translators: Kirsi Västi, Calle Tengman, Luka Pajukanta, Claude Sonnet 4.6 -import { ReactNode, JSX } from "react"; +import { ComponentType, ReactNode, JSX } from "react"; import en, { Translations } from "./en"; /// Mark untranslated English strings with this @@ -187,6 +187,9 @@ const translations: Translations = { checked: "Valt", unchecked: "Icke valt", }, + markdownEditor: { + insertHeadingLabel: "Infoga rubrik", + }, }, MainView: { defaultErrorMessage: @@ -2047,7 +2050,25 @@ const translations: Translations = { }, profile: { title: "Meddelanden", - description: UNTRANSLATED(en.Program.Message.profile.description), + description: ( + VolunteerMessagesLink: ComponentType<{ + children: ReactNode; + }>, + ) => ( + <> +

+ När du arrangerar program på ett evenemang och evenemangets + programansvariga skickar meddelanden till dig, hittar du dem här. +

+

+ När du gör frivilligarbete på ett evenemang och frivilligansvariga + skickar meddelanden till dig, hittar du dem tills vidare i{" "} + Meddelanden V1. + Frivilligupplevelsen håller på att migreras till Kompassi V2, så i + framtiden hittas alla meddelanden här. +

+ + ), noSubject: "(inget ämne)", attributes: { sentAt: "Datum", diff --git a/kompassi/involvement/models/involvement.py b/kompassi/involvement/models/involvement.py index f14fa100a..cad02b3f8 100644 --- a/kompassi/involvement/models/involvement.py +++ b/kompassi/involvement/models/involvement.py @@ -783,9 +783,25 @@ def enqueue_matching_messages(self): dimensions/is_active change, check active Messages of this event for a newly matching recipient and send to them incrementally. Dispatched async so as not to slow down the request path that got us here. + + As this runs on every involvement change across all events and apps, skip the + task dispatch entirely unless this universe actually has a sendable (active) + message - the common case being none. """ + from django.db.models import Q + from django.utils.timezone import now + + from kompassi.messages_v2.models.message import Message from kompassi.messages_v2.tasks import send_matching_messages + has_active_message = ( + Message.objects.filter(universe_id=self.universe_id, sent_at__isnull=False) + .filter(Q(expired_at__isnull=True) | Q(expired_at__gt=now())) + .exists() + ) + if not has_active_message: + return + send_matching_messages.delay(self.id) @cached_property diff --git a/kompassi/messages_v2/graphql/mutations/create_message_reply_to.py b/kompassi/messages_v2/graphql/mutations/create_message_reply_to.py index d1ac1fdab..91559836d 100644 --- a/kompassi/messages_v2/graphql/mutations/create_message_reply_to.py +++ b/kompassi/messages_v2/graphql/mutations/create_message_reply_to.py @@ -1,4 +1,5 @@ import graphene +from django.core.validators import validate_email from django.db import transaction from kompassi.access.cbac import graphql_check_model @@ -30,6 +31,8 @@ def mutate(_root, info, input: CreateMessageReplyToInput): Involvement, event.scope, info, app="program_v2", field="message_reply_to", operation="create" ) + validate_email(input.email) + reply_to = MessageReplyTo.objects.create( universe=event.involvement_universe, name=input.name, diff --git a/kompassi/messages_v2/graphql/mutations/update_message_reply_to.py b/kompassi/messages_v2/graphql/mutations/update_message_reply_to.py index 4bec973f9..458bac4b9 100644 --- a/kompassi/messages_v2/graphql/mutations/update_message_reply_to.py +++ b/kompassi/messages_v2/graphql/mutations/update_message_reply_to.py @@ -1,4 +1,5 @@ import graphene +from django.core.validators import validate_email from django.db import transaction from kompassi.access.cbac import graphql_check_model @@ -31,6 +32,8 @@ def mutate(_root, info, input: UpdateMessageReplyToInput): Involvement, event.scope, info, app="program_v2", field="message_reply_to", operation="update" ) + validate_email(input.email) + reply_to = MessageReplyTo.objects.get(universe=event.involvement_universe, id=input.reply_to_id) reply_to.name = input.name reply_to.email = input.email diff --git a/kompassi/messages_v2/migrations/0001_initial.py b/kompassi/messages_v2/migrations/0001_initial.py index 459a18295..b4f4a7bed 100644 --- a/kompassi/messages_v2/migrations/0001_initial.py +++ b/kompassi/messages_v2/migrations/0001_initial.py @@ -23,7 +23,7 @@ class Migration(migrations.Migration): name="MessageBody", fields=[ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), - ("digest", models.CharField(db_index=True, max_length=128)), + ("digest", models.CharField(max_length=128, unique=True)), ("text", models.TextField()), ], ), diff --git a/kompassi/messages_v2/models/message.py b/kompassi/messages_v2/models/message.py index c32125c53..cc61f5993 100644 --- a/kompassi/messages_v2/models/message.py +++ b/kompassi/messages_v2/models/message.py @@ -15,7 +15,7 @@ from kompassi.tickets_v2.optimized_server.utils.uuid7 import uuid7, uuid7_to_datetime from .enums import MessageApp, MessageDispatch, MessageState -from .recipient_filters import validate_recipient_filters +from .recipient_filters import group_to_dimension_filters, validate_recipient_filters if TYPE_CHECKING: from kompassi.core.models.event import Event @@ -117,21 +117,23 @@ def clean_recipient_filters(self): def resolve_involvements(self) -> models.QuerySet[Involvement]: """ - Involvements matching any of the OR-of-AND recipient filter groups. + Involvements matching any of the OR-of-AND recipient filter groups, resolved as a + single OR'd query (no intermediate id set / IN clause). """ - from kompassi.involvement.models.involvement import Involvement - base = self.universe.all_involvements.all() if not self.recipient_filters: return base.none() - involvement_ids: set[int] = set() + combined: models.QuerySet[Involvement] | None = None for group in self.recipient_filters: - filters = {item["dimension"]: item.get("values") or ["*"] for item in group} - involvement_ids.update(DimensionFilters(filters=filters).filter(base).values_list("id", flat=True)) + group_qs = DimensionFilters(filters=group_to_dimension_filters(group)).filter(base) + combined = group_qs if combined is None else combined | group_qs + + if combined is None: + return base.none() - return Involvement.objects.filter(id__in=involvement_ids) + return combined.distinct() def resolve_recipient_count(self) -> int: involvements = self.resolve_involvements() @@ -141,10 +143,22 @@ def resolve_recipient_count(self) -> int: return involvements.values("person_id").distinct().count() + def validate_sendable(self): + """ + A message may be saved as a draft with empty recipient filters, but it must not + be *sent* with them: an empty filter set (no groups) matches nobody, and an empty + AND-group matches every involvement in the universe (all types, active or not). + Both are almost certainly mistakes, so refuse rather than mass-mail or no-op. + """ + if not self.recipient_filters or any(not group for group in self.recipient_filters): + raise ValueError("Cannot send a message with empty recipient filters") + @transaction.atomic def send(self): from ..tasks import send_message + self.validate_sendable() + if self.sent_at is None: self.sent_at = now() self.save(update_fields=["sent_at"]) diff --git a/kompassi/messages_v2/models/message_body.py b/kompassi/messages_v2/models/message_body.py index 452743930..d6ecdafd0 100644 --- a/kompassi/messages_v2/models/message_body.py +++ b/kompassi/messages_v2/models/message_body.py @@ -1,12 +1,9 @@ from __future__ import annotations -import logging from hashlib import blake2b from django.db import models -logger = logging.getLogger(__name__) - class MessageBody(models.Model): """ @@ -16,7 +13,7 @@ class MessageBody(models.Model): does not vary per recipient). """ - digest = models.CharField(max_length=128, db_index=True) + digest = models.CharField(max_length=128, unique=True) text = models.TextField() id: int @@ -24,10 +21,7 @@ class MessageBody(models.Model): @classmethod def get_or_create(cls, text: str) -> tuple[MessageBody, bool]: + # The unique constraint on `digest` makes get_or_create atomic under concurrent + # sends (it retries the get on IntegrityError), so no dedup race handling needed. digest = blake2b(text.encode("utf-8")).hexdigest() - - try: - return cls.objects.get_or_create(digest=digest, defaults=dict(text=text)) - except cls.MultipleObjectsReturned: - logger.warning("Multiple MessageBody returned for digest %s", digest) - return cls.objects.filter(digest=digest, text=text).first(), False # type: ignore + return cls.objects.get_or_create(digest=digest, defaults=dict(text=text)) diff --git a/kompassi/messages_v2/models/recipient_filters.py b/kompassi/messages_v2/models/recipient_filters.py index c43d36a9f..d3525d527 100644 --- a/kompassi/messages_v2/models/recipient_filters.py +++ b/kompassi/messages_v2/models/recipient_filters.py @@ -23,3 +23,11 @@ def validate_recipient_filters(input: Any) -> list[list[dict[str, Any]]]: """ validated = _adapter.validate_python(input) return [[item.model_dump(exclude_none=True) for item in group] for group in validated] + + +def group_to_dimension_filters(group: list[dict[str, Any]]) -> dict[str, list[str]]: + """ + Convert one AND-group of {dimension, values} items into the dict form consumed by + DimensionFilters. A missing/empty values list means "any value" (wildcard). + """ + return {item["dimension"]: item.get("values") or ["*"] for item in group} diff --git a/kompassi/messages_v2/tasks.py b/kompassi/messages_v2/tasks.py index 33023a5b1..f355ea2b6 100644 --- a/kompassi/messages_v2/tasks.py +++ b/kompassi/messages_v2/tasks.py @@ -74,7 +74,15 @@ def send_message(message_id: str, involvement_ids: list[int] | None = None): reply_to=[reply_to_email] if reply_to_email else None, ) email.attach_alternative(render_email_html(body_html, event=event, subject=subject), "text/html") - email.send(fail_silently=True) + + # Only record a MessageRecipient (which doubles as the idempotency guard) once the + # send actually succeeds - otherwise a transient failure would permanently mark + # the person as sent-to and they'd never be retried on a subsequent (re-)send. + try: + email.send(fail_silently=False) + except Exception: + logger.exception("Failed to send message %s to %s", message.id, person.email) + continue MessageRecipient.objects.create( message=message, @@ -103,6 +111,7 @@ def send_matching_messages(involvement_id: int): from .models.enums import MessageState from .models.message import Message from .models.message_recipient import MessageRecipient + from .models.recipient_filters import group_to_dimension_filters try: involvement = Involvement.objects.get(id=involvement_id) @@ -131,7 +140,7 @@ def send_matching_messages(involvement_id: int): matches = False for group in message.recipient_filters: - filters = {item["dimension"]: item.get("values") or ["*"] for item in group} + filters = group_to_dimension_filters(group) if DimensionFilters(filters=filters).filter(Involvement.objects.filter(id=involvement.id)).exists(): matches = True break From d4df339d7cbdfdfbf452e26979dce97aef78a9de Mon Sep 17 00:00:00 2001 From: Luka Pajukanta Date: Thu, 30 Jul 2026 17:48:19 +0300 Subject: [PATCH 05/12] fix(frontend): align session cookie lifetime with JWT and quiet expected auth log spam session.maxAge defaulted to next-auth's 30 days while jwt.maxAge was 10h, so the browser kept resending a stale-JWT cookie for weeks, causing a JWT_SESSION_ERROR stack trace on every request once the JWT went stale. Co-Authored-By: Claude Sonnet 5 --- kompassi-v2-frontend/src/auth.ts | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/kompassi-v2-frontend/src/auth.ts b/kompassi-v2-frontend/src/auth.ts index a4e2cc084..f38bc1e4d 100644 --- a/kompassi-v2-frontend/src/auth.ts +++ b/kompassi-v2-frontend/src/auth.ts @@ -23,12 +23,30 @@ export const authOptions: AuthOptions = { }, ], + // TODO make this expire at the same time as the Kompassi access token + // currently we just assume this is the validity period of the Kompassi access token + session: { + maxAge: 10 * 60 * 60, // 10 hours + }, jwt: { - // TODO make this expire at the same time as the Kompassi access token - // currently we just assume this is the validity period of the Kompassi access token maxAge: 10 * 60 * 60, // 10 hours }, + // session.maxAge above also governs the session cookie's Max-Age, so the + // browser drops the cookie once the JWT inside it would be stale, instead + // of holding on to it for next-auth's 30-day default and hitting + // JWT_SESSION_ERROR on every request in between. + logger: { + error(code, metadata) { + if (code === "JWT_SESSION_ERROR") { + // Expected once the JWT outlives the Kompassi access token it wraps; + // the user will simply be prompted to log in again. + return; + } + console.error(code, metadata); + }, + }, + // persist the Kompassi access token in the session callbacks: { jwt({ token, account }) { From 22a932699fd6cd8d5c784a1d8d47b956e567d74a Mon Sep 17 00:00:00 2001 From: Luka Pajukanta Date: Thu, 30 Jul 2026 17:49:59 +0300 Subject: [PATCH 06/12] fix(frontend): derive session JWT expiry from actual Kompassi access token lifetime Previously the JWT's exp was always set to a hardcoded 10h guess. Now the jwt callback captures account.expires_at (from the OIDC token response's expires_in) and a custom jwt.encode uses it to set the real exp, falling back to the 10h guess only when expires_at is unavailable. Co-Authored-By: Claude Sonnet 5 --- kompassi-v2-frontend/src/auth.ts | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/kompassi-v2-frontend/src/auth.ts b/kompassi-v2-frontend/src/auth.ts index f38bc1e4d..77c843bf3 100644 --- a/kompassi-v2-frontend/src/auth.ts +++ b/kompassi-v2-frontend/src/auth.ts @@ -1,8 +1,11 @@ import { AuthOptions } from "next-auth"; import { getServerSession } from "next-auth/next"; +import { encode as defaultEncode } from "next-auth/jwt"; import { kompassiOidc } from "@/config"; +const FALLBACK_MAX_AGE = 10 * 60 * 60; // 10 hours, used only if the Kompassi token response has no expires_in + export const authOptions: AuthOptions = { providers: [ { @@ -23,13 +26,24 @@ export const authOptions: AuthOptions = { }, ], - // TODO make this expire at the same time as the Kompassi access token - // currently we just assume this is the validity period of the Kompassi access token session: { - maxAge: 10 * 60 * 60, // 10 hours + maxAge: FALLBACK_MAX_AGE, }, jwt: { - maxAge: 10 * 60 * 60, // 10 hours + maxAge: FALLBACK_MAX_AGE, + + // The default encode() always sets exp = now + maxAge, ignoring any exp + // already on the token. We want the session JWT to expire together with + // the Kompassi access token it carries (set as token.exp in the jwt + // callback below), so re-derive maxAge from that when present. + encode(params) { + const exp = params.token?.exp; + const maxAge = + typeof exp === "number" + ? exp - Math.floor(Date.now() / 1000) + : params.maxAge; + return defaultEncode({ ...params, maxAge }); + }, }, // session.maxAge above also governs the session cookie's Max-Age, so the @@ -52,6 +66,13 @@ export const authOptions: AuthOptions = { jwt({ token, account }) { if (account) { token.accessToken = account.access_token; + // Kompassi's token endpoint returns expires_in, which next-auth + // normalizes into expires_at; mirror it so the session JWT (see + // jwt.encode above) expires together with the access token instead + // of the FALLBACK_MAX_AGE guess. + if (typeof account.expires_at === "number") { + token.exp = account.expires_at; + } } return token; }, From bae02df35754817db37c49917ea49c24e24068f8 Mon Sep 17 00:00:00 2001 From: Luka Pajukanta Date: Thu, 30 Jul 2026 19:25:13 +0300 Subject: [PATCH 07/12] ci: run prettier directly instead of via unmaintained plugin --- .pre-commit-config.yaml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fddf131b5..fde61a5a5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -16,17 +16,16 @@ repos: - id: end-of-file-fixer exclude: .*__generated__.* - id: trailing-whitespace - - repo: https://github.com/pre-commit/mirrors-prettier - rev: v3.1.0 + - repo: local hooks: - id: prettier - exclude: | - (?x)( - .*__generated__.*| - ^kompassi/| - ^kubernetes/| - ^.github - ) + name: prettier + entry: prettier + args: [--check, --ignore-unknown] + language: node + types_or: [javascript, jsx, ts, tsx] + additional_dependencies: + - prettier@3.9.6 # XXX somehow the typechecking still leaks to parts of the code that is not yet ready for pyrekt # - repo: https://github.com/RobertCraigie/pyright-python # rev: v1.1.367 From 1fc669e4956a2e162bc3360884e7011d6bc7f555 Mon Sep 17 00:00:00 2001 From: Luka Pajukanta Date: Thu, 30 Jul 2026 19:25:23 +0300 Subject: [PATCH 08/12] deps: backend deps --- uv.lock | 531 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 269 insertions(+), 262 deletions(-) diff --git a/uv.lock b/uv.lock index 465b2e3a9..dd3d64952 100644 --- a/uv.lock +++ b/uv.lock @@ -28,7 +28,7 @@ wheels = [ [[package]] name = "aiohttp" -version = "3.14.1" +version = "3.14.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohappyeyeballs" }, @@ -39,49 +39,49 @@ dependencies = [ { name = "propcache" }, { name = "yarl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/82/78/8ea7308cac6934de8c74a14f3d5f65d1c89287426688be79538d0e5c013d/aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035", size = 7955794, upload-time = "2026-06-07T21:09:35.529Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/a1/5fafa04e1ca91ddb47608699d60649c1c6db3cf41c99e78fc4056f9513db/aiohttp-3.14.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:7c106c26852ca1c2047c6b80384f17100b4e439af276f21ef3d4e2f450ae7e15", size = 508531, upload-time = "2026-06-07T21:08:02.093Z" }, - { url = "https://files.pythonhosted.org/packages/fa/2e/bfa02f699d87ffc86d5959270b28f1cb410add3ccaced8ed2e0b8a5238fc/aiohttp-3.14.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:20205f7f5ade7aaec9f4b500549bbc071b046453aed72f9c06dcab87896a83e8", size = 514718, upload-time = "2026-06-07T21:08:04.476Z" }, - { url = "https://files.pythonhosted.org/packages/85/a5/9594ad6289eebbc97d167c44213d557807f90e59115caad24de21ad2c3b1/aiohttp-3.14.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:62a759436b29e677181a9e76bab8b8f689a29cb9c535f45f7c48c9c830d3f8c3", size = 487918, upload-time = "2026-06-07T21:08:06.377Z" }, - { url = "https://files.pythonhosted.org/packages/b4/61/16a32c36c3c49edec122a3dc811f2057df2f94d3b14aa107c8017d981618/aiohttp-3.14.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:2964cbf553df4d7a57348da44d961d871895fc1ee4e8c322b2a95612c7b17fba", size = 494014, upload-time = "2026-06-07T21:08:08.263Z" }, - { url = "https://files.pythonhosted.org/packages/9b/89/3ebcf96ed99c05bec9c434aaac6963fd3cbab4a786ae739908a144d9ce44/aiohttp-3.14.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:237651caadc3a59badd39319c54642b5299e9cc98a3a194310e55d5bb9f5e397", size = 502398, upload-time = "2026-06-07T21:08:10.244Z" }, - { url = "https://files.pythonhosted.org/packages/fd/3d/b74870a0c2d40c355928cd5b96c7a11fa821b8a40fc41365e64479b151fb/aiohttp-3.14.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:896e12dfdbbab9d8f7e16d2b28c6769a60126fa92095d1ebf9473d02593a2448", size = 758018, upload-time = "2026-06-07T21:08:12.447Z" }, - { url = "https://files.pythonhosted.org/packages/d3/66/f42f5c984d99e49c6cff5f26f590750f2e2f7ef1fcfb99966ab5be1b632e/aiohttp-3.14.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d03f281ed22579314ba00821ce20115a7c0ac430660b4cc05704a3f818b3e004", size = 512462, upload-time = "2026-06-07T21:08:14.624Z" }, - { url = "https://files.pythonhosted.org/packages/e9/a7/248e1aebe0c7810b0271e021a0f2a5eb6e78a051885b3c9df49f42a5802d/aiohttp-3.14.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07eabb979d236335fed927e137a928c9adfb7df3b9ec7aa31726f133a62be983", size = 512824, upload-time = "2026-06-07T21:08:16.572Z" }, - { url = "https://files.pythonhosted.org/packages/26/97/2aa0e5ba0727dc3bd5aaebb7ccbc510f7dfb7fb961ec87497cd496635ab1/aiohttp-3.14.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4fe1f1087cbadb280b5e1bb054a4f00d1423c74d6626c5e48400d871d34ecefe", size = 1749898, upload-time = "2026-06-07T21:08:18.635Z" }, - { url = "https://files.pythonhosted.org/packages/00/8d/e97f6c96c891d457c8479d92a514ba194d0412f981d72c70341ee18488ed/aiohttp-3.14.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:367a9314fdc79dab0fac96e216cb41dd73c85bdca85306ce8999118ba7e0f333", size = 1710114, upload-time = "2026-06-07T21:08:20.892Z" }, - { url = "https://files.pythonhosted.org/packages/6f/e6/aa8d7e863048c8fceb5cd6ce74017311cec3ead07847387e12265fb4444e/aiohttp-3.14.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a24f677ebe83749039e7bdf862ff0bbb16818ae4193d4ef96505e269375bcce0", size = 1802541, upload-time = "2026-06-07T21:08:23.044Z" }, - { url = "https://files.pythonhosted.org/packages/83/a8/72193137de57fda4ebfae4563182d082c8856e3b6e9871d0b46f028fb369/aiohttp-3.14.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c83afe0ba876be7e943d2e0ba645809ad441575d2840c895c21ee5de93b9377a", size = 1875776, upload-time = "2026-06-07T21:08:25.288Z" }, - { url = "https://files.pythonhosted.org/packages/a0/18/938441025db6769a3464596b2410af3afde0b21eb2f204c6f766f68af4bd/aiohttp-3.14.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:634e385930fb6d2d479cf3aa66515955863b77a5e3c2b5894ca259a25b308602", size = 1760329, upload-time = "2026-06-07T21:08:27.363Z" }, - { url = "https://files.pythonhosted.org/packages/60/29/bf2496b4065e76e09fe48015aaffe5ce161d8f089b06ac6982070f653076/aiohttp-3.14.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eeea07c4397bbc57719c4eed8f9c284874d4f175f9b6d57f7a1546b976d455ca", size = 1587293, upload-time = "2026-06-07T21:08:29.805Z" }, - { url = "https://files.pythonhosted.org/packages/49/a2/2136674d52123b1354bd05dd5753c318db47dc0c927cc70b27bab3755456/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:335c0cc3e3545ce98dcb9cfcb836f40c3411f43fa03dab757597d80c89af8a35", size = 1714756, upload-time = "2026-06-07T21:08:32.094Z" }, - { url = "https://files.pythonhosted.org/packages/a7/b9/e5fd2e6f915503081c0f9b1e8540947037929c70c191da2e4d54b31a21a1/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:ae6be797afdef264e8a84864a85b196ca06045586481b3df8a967322fd2fa844", size = 1721052, upload-time = "2026-06-07T21:08:34.167Z" }, - { url = "https://files.pythonhosted.org/packages/63/5a/2833e324a2263e104e31e2e91bc5bbee81bc499afd32203faee048a883f0/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:8560b4d712474335d08907db7973f71912d3a9a8f1dee992ec06b5d2fe359496", size = 1766888, upload-time = "2026-06-07T21:08:36.95Z" }, - { url = "https://files.pythonhosted.org/packages/57/fa/dea6511870913162f3b2e8c42a7614eb203a4540b8c2da43e0bfb0548f3c/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7edd08e0a5deb1e8564a2fcd8f4561014a3f05252334671bbf55ddd47db0e5", size = 1581679, upload-time = "2026-06-07T21:08:39.292Z" }, - { url = "https://files.pythonhosted.org/packages/14/bd/3cf0d55e71784b33534e9710a67d382d900598b4787fbce6cc7317f8c42a/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:b6ff7fcee63287ae57b5df3e4f5957ce032122802509246dec1a5bcc55904c95", size = 1782021, upload-time = "2026-06-07T21:08:41.407Z" }, - { url = "https://files.pythonhosted.org/packages/c1/af/14bb5843eccbe234f4dfb78ab73e549d99727247e62ae5d62cbd22eaf5b0/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6ffbb2f4ec1ceaff7e07d43922954da26b223d188bf30658e561b98e23089444", size = 1742574, upload-time = "2026-06-07T21:08:43.795Z" }, - { url = "https://files.pythonhosted.org/packages/f2/1e/fbeb7af9210a67ac0f9c9bec0f8f4568497924e33137a3d5b48e1cf85f3f/aiohttp-3.14.1-cp314-cp314-win32.whl", hash = "sha256:a9875b46d910cff3ea2f5962f9d266b465459fe634e22556ab9bd6fc1192eea0", size = 457773, upload-time = "2026-06-07T21:08:46.168Z" }, - { url = "https://files.pythonhosted.org/packages/f0/2b/13e8d741a9ec5db7d900c060554cf8352ab85e44e2a4469ebb9d377bda17/aiohttp-3.14.1-cp314-cp314-win_amd64.whl", hash = "sha256:af8b4b81a960eeaf1234971ac3cd0ba5901f3cd42eae42a46b4d089a8b492719", size = 485001, upload-time = "2026-06-07T21:08:48.401Z" }, - { url = "https://files.pythonhosted.org/packages/df/30/491acfa2c4d6c3ff59c49a14fc1b50be3241e25bbb0c84c09e2da4d11395/aiohttp-3.14.1-cp314-cp314-win_arm64.whl", hash = "sha256:cf4491381b1b57425c315a56a439251b1bdac07b2275f19a8c44bc57744532ec", size = 453809, upload-time = "2026-06-07T21:08:50.7Z" }, - { url = "https://files.pythonhosted.org/packages/34/e3/19dbe1a1f4cc6230eb9e314de7fe68053b0992f9302b27d12141a0b5db53/aiohttp-3.14.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:819c054312f1af92947e6a55883d1b66feefab11531a7fc45e0fb9b63880b5c2", size = 793320, upload-time = "2026-06-07T21:08:52.775Z" }, - { url = "https://files.pythonhosted.org/packages/7f/20/1b7182219ba1b108430d6e4dc53d25ae02dcfcf5a045b33af4e8c5167527/aiohttp-3.14.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:10ee9c1753a8f706345b22496c79fbddb5be0599e0823f3738b1534058e25340", size = 529077, upload-time = "2026-06-07T21:08:55Z" }, - { url = "https://files.pythonhosted.org/packages/b9/c8/14ce60ec31a2e5f5274bb17d383a6f7a3aabca31ac04eee05585bbadab16/aiohttp-3.14.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1601cc37baf5750ccacae618ec2daf020769581695550e3b654a911f859c563d", size = 532476, upload-time = "2026-06-07T21:08:57.176Z" }, - { url = "https://files.pythonhosted.org/packages/7e/02/9ac85e081e53da2e061b02fa7758fe0a12d17b8ce2d1f5e6c7cb76730328/aiohttp-3.14.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d6e0ac9da31c9c04c84e1c0182ad8d6df35965a85cae29cd71d089621b3ae94", size = 1922347, upload-time = "2026-06-07T21:08:59.563Z" }, - { url = "https://files.pythonhosted.org/packages/c0/3e/d3ba07a0ab38b5389e10bec4362d21e10a4f667cba2d79ba30837b3a5059/aiohttp-3.14.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9e8f2d660c350b3d0e259c7a7e3d9b7fc8b41210cbcc3d4a7076ff0a5e5c2fdc", size = 1786465, upload-time = "2026-06-07T21:09:01.909Z" }, - { url = "https://files.pythonhosted.org/packages/0b/cb/e2ee978a00cfb2df829704a69528b18154eba5939f45bc1efa8f33aee4c5/aiohttp-3.14.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4691802dda97be727f79d86818acaad7eb8e9252626a1d6b519fedbb92d5e251", size = 1909423, upload-time = "2026-06-07T21:09:04.357Z" }, - { url = "https://files.pythonhosted.org/packages/73/5d/1430334858b1022b58ae50399a918f0bd6fe8fa7fa183598d657ff61e040/aiohttp-3.14.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c389c482a7e9b9dc3ee2701ac46c4125297a3818875b9c305ddb603c04828fd1", size = 2001906, upload-time = "2026-06-07T21:09:06.722Z" }, - { url = "https://files.pythonhosted.org/packages/66/4e/560c7472d3d198a23aa5c8b19a5115bf6a9b77b7d3e4bb363da320430ad2/aiohttp-3.14.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc0cacab7ba4e56f0f81c82a98c09bed2f39c940107b03a34b168bdf7597edd3", size = 1877095, upload-time = "2026-06-07T21:09:09.011Z" }, - { url = "https://files.pythonhosted.org/packages/0d/f1/4745806578d447db4a784a8591e2dae3afdfc2bcb96f8f81271b13df6543/aiohttp-3.14.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:979ed4717f59b8bb12e3963378fa285d93d367e15bcd66c721311826d3c44a6c", size = 1676222, upload-time = "2026-06-07T21:09:11.461Z" }, - { url = "https://files.pythonhosted.org/packages/6a/c9/48255813cca749a229ef0ab476004ec623728ad79a9c0840616f6c076325/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:38e1e7daaea81df51c952e18483f323d878499a1e2bfe564790e0f9701d6f203", size = 1842922, upload-time = "2026-06-07T21:09:14.118Z" }, - { url = "https://files.pythonhosted.org/packages/3d/c0/bbd054e2bee909f529523a5af3891052606af5143c09f5f183ec3b234676/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:4132e72c608fe9fecb8f409113567605915b83e9bdd3ea56538d2f9cd35002f1", size = 1825035, upload-time = "2026-06-07T21:09:16.447Z" }, - { url = "https://files.pythonhosted.org/packages/a8/ae/90395d4376deceb74e09ec26b6adf7d2015a6f8802d6d84446af860fef04/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:eefd9cc9b6d4a2db5f00a26bc3e4f9acf71926a6ec557cd56c9c6f27c290b665", size = 1849512, upload-time = "2026-06-07T21:09:18.742Z" }, - { url = "https://files.pythonhosted.org/packages/93/bd/fb25f3049957553d4ce0ba6ae480aa2f592a6985497fca590837d16c1be0/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:b165790117eea512d7f3fb22f1f6dad3d55a7189571993eb015591c1401276d1", size = 1668571, upload-time = "2026-06-07T21:09:21.458Z" }, - { url = "https://files.pythonhosted.org/packages/3f/22/7f73303d64dd567ff3addca90b556690ed1233a47b8f55d242fb90af3681/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ed09c7eb1c391271c2ed0314a51903e72a3acb653d5ccfc264cdf3ef11f8269d", size = 1881159, upload-time = "2026-06-07T21:09:23.813Z" }, - { url = "https://files.pythonhosted.org/packages/44/be/0474c5a8b5640e1e4aa1923430a91f4151be82e511373fe764189b89aef5/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:99abd37084b82f5830c635fddd0b4993b9742a66eb746dacf433c8590e8f9e3c", size = 1841409, upload-time = "2026-06-07T21:09:26.207Z" }, - { url = "https://files.pythonhosted.org/packages/7b/3c/bb4a7cba26956cb3da4553cc2056cf67be5b5ff6e6d8fa4fbdff73bfb7ae/aiohttp-3.14.1-cp314-cp314t-win32.whl", hash = "sha256:47ddf841cdecc810749921d25606dee45857d12d2ad5ddb7b5bd7eab12e4b365", size = 494166, upload-time = "2026-06-07T21:09:28.505Z" }, - { url = "https://files.pythonhosted.org/packages/8a/84/ec80c2c1f66a952555a9f86df6b33af65108a6febfa0471b69013a12f807/aiohttp-3.14.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e78b522b7a6e27e0b25d19b247b75039ac4c94f99823e3c9e53ae1603a9f7e9", size = 530255, upload-time = "2026-06-07T21:09:30.843Z" }, - { url = "https://files.pythonhosted.org/packages/2a/71/6e22be134a4061ada85a92951b842f2657f17d926b727f3f94c56ae963d6/aiohttp-3.14.1-cp314-cp314t-win_arm64.whl", hash = "sha256:90d53f1609c29ccc2193945ef732428382a28f78d0456ae4d3daf0d48b74f0f6", size = 469640, upload-time = "2026-06-07T21:09:33.028Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/58/d9/22ce5786ac0c1653ae8b6c23bded02c1686d11f0dbb45b31ce128e0df985/aiohttp-3.14.3.tar.gz", hash = "sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc", size = 7971213, upload-time = "2026-07-23T01:57:27.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/20/887fdcf832326571b370ffc347b3e70abe101096f3720126aac161b1d872/aiohttp-3.14.3-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062", size = 509067, upload-time = "2026-07-23T01:55:42.618Z" }, + { url = "https://files.pythonhosted.org/packages/ad/a3/92cec936f78cc4bf0fa5554ebe593b73459d94e3c62303e1902a4cccb6f7/aiohttp-3.14.3-cp314-cp314-android_24_x86_64.whl", hash = "sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6", size = 514774, upload-time = "2026-07-23T01:55:44.937Z" }, + { url = "https://files.pythonhosted.org/packages/29/ba/2a0c38df3fc557620b6a5acd98364af050053b6285b4dc7ee74100c63c18/aiohttp-3.14.3-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919", size = 488134, upload-time = "2026-07-23T01:55:47.135Z" }, + { url = "https://files.pythonhosted.org/packages/48/d6/d51b7d4bf309af3693940d8ffd2b9ed0b682434ef85959b7c9c137f60cf8/aiohttp-3.14.3-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7", size = 494201, upload-time = "2026-07-23T01:55:49.451Z" }, + { url = "https://files.pythonhosted.org/packages/3f/5a/8f624384e5f1efabb5229b94157eb966b021e97bdb188c62860c2ae243c2/aiohttp-3.14.3-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0", size = 502766, upload-time = "2026-07-23T01:55:51.656Z" }, + { url = "https://files.pythonhosted.org/packages/a6/26/4ff0164370deec18fb19254ee4ab10b7a73304ac0c860b13f5f84663759b/aiohttp-3.14.3-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924", size = 756557, upload-time = "2026-07-23T01:55:53.964Z" }, + { url = "https://files.pythonhosted.org/packages/97/a3/7056b86dc0d9ec709ea9777eae3b0161428f943372f8b98c01c11593b682/aiohttp-3.14.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646", size = 510168, upload-time = "2026-07-23T01:55:56.22Z" }, + { url = "https://files.pythonhosted.org/packages/85/ed/0357a015892fd68058bf2d39d3fd1958e459b997a7db30aaa6aaa434ae96/aiohttp-3.14.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b", size = 512957, upload-time = "2026-07-23T01:55:58.437Z" }, + { url = "https://files.pythonhosted.org/packages/47/d1/8aba53f15ccb2238405f5e9d30e2a8ca44f93878c26e7165ade00d374b1c/aiohttp-3.14.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30", size = 1750149, upload-time = "2026-07-23T01:56:00.856Z" }, + { url = "https://files.pythonhosted.org/packages/49/bd/40c3fee327529284375c6701cbb0fa4600cc2e8432af1378f897e2ef7d3a/aiohttp-3.14.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9", size = 1707685, upload-time = "2026-07-23T01:56:03.371Z" }, + { url = "https://files.pythonhosted.org/packages/2a/a3/ca0cc6724cca8114b05694abd916060758c79894c3aa5b012cdadc1bc28e/aiohttp-3.14.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f", size = 1803911, upload-time = "2026-07-23T01:56:05.817Z" }, + { url = "https://files.pythonhosted.org/packages/95/b5/85b099c299c3ffd38ad9b3e43694c8a346934e4a30c88c4fd5a841234f77/aiohttp-3.14.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d", size = 1876929, upload-time = "2026-07-23T01:56:08.413Z" }, + { url = "https://files.pythonhosted.org/packages/d5/b7/1da684a04175473fa4cddbf9a2f572e79514c3fd27a74597f43057d4f3da/aiohttp-3.14.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147", size = 1761112, upload-time = "2026-07-23T01:56:10.918Z" }, + { url = "https://files.pythonhosted.org/packages/d1/16/bc4b55e3e5cb175fd69c53c90d60d2f47797cb343da5106e23863dc4dba4/aiohttp-3.14.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c", size = 1583500, upload-time = "2026-07-23T01:56:13.613Z" }, + { url = "https://files.pythonhosted.org/packages/2a/e8/13a9d957a1ee40837f46aa30f0f4c657e673ad86a2e6362a9f9be20d26d9/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a", size = 1713940, upload-time = "2026-07-23T01:56:15.969Z" }, + { url = "https://files.pythonhosted.org/packages/38/05/d33c680c1bcf1c7e130f9cbfc1fc02fe8bb0c4af2a94a53dd5fb56131e5c/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0", size = 1724413, upload-time = "2026-07-23T01:56:18.591Z" }, + { url = "https://files.pythonhosted.org/packages/85/1d/af798d306f7a74b6a632dbcabcf62a4c91391b7582d2a8c6d7712e2cc54e/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661", size = 1770748, upload-time = "2026-07-23T01:56:21.074Z" }, + { url = "https://files.pythonhosted.org/packages/a8/92/ad720d472556a995049206867765e9410969684f86ee09423ff9969044c1/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22", size = 1577564, upload-time = "2026-07-23T01:56:23.475Z" }, + { url = "https://files.pythonhosted.org/packages/60/ad/0ed7586cbef7a884e23a752fa2bb987a122e6a5dd50dab109258d0a95193/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41", size = 1782080, upload-time = "2026-07-23T01:56:25.994Z" }, + { url = "https://files.pythonhosted.org/packages/97/ea/dbaed0d73e8a69aad653b045dab451c67c2454bb731a37b45a86593e9422/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf", size = 1745813, upload-time = "2026-07-23T01:56:28.604Z" }, + { url = "https://files.pythonhosted.org/packages/81/1b/6893d4bc57e434fc93a6c9217c637d967a0b651d989f6e3265179375754a/aiohttp-3.14.3-cp314-cp314-win32.whl", hash = "sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da", size = 455872, upload-time = "2026-07-23T01:56:31.031Z" }, + { url = "https://files.pythonhosted.org/packages/f5/8b/c7baa1ba1eda4db6989baefe5de6d99834921b84ebd7918624febcb9f290/aiohttp-3.14.3-cp314-cp314-win_amd64.whl", hash = "sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100", size = 481030, upload-time = "2026-07-23T01:56:33.365Z" }, + { url = "https://files.pythonhosted.org/packages/22/8c/c29d067df825a2df88ca432db848aa2fe8199598359cc06c12b09320cac9/aiohttp-3.14.3-cp314-cp314-win_arm64.whl", hash = "sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc", size = 453669, upload-time = "2026-07-23T01:56:35.731Z" }, + { url = "https://files.pythonhosted.org/packages/6a/a4/9c033beb355d39b6147980597ec9645e4729243f686ee4dc73945de72030/aiohttp-3.14.3-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b", size = 791403, upload-time = "2026-07-23T01:56:37.972Z" }, + { url = "https://files.pythonhosted.org/packages/80/ca/87c32a0a7704583cfc49660bd817889bae5b830bf53b5dcb4e92145ac2da/aiohttp-3.14.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0", size = 526413, upload-time = "2026-07-23T01:56:40.523Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d8/8ec0e471248c500acdce2be3f46db8fb62b5eb60efef072529cc85ee1d26/aiohttp-3.14.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e", size = 532135, upload-time = "2026-07-23T01:56:42.876Z" }, + { url = "https://files.pythonhosted.org/packages/fe/45/f8919fd936e8b79fcd9bda7b6d8e62613462a713f4f17987fd7c34399142/aiohttp-3.14.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716", size = 1922742, upload-time = "2026-07-23T01:56:45.528Z" }, + { url = "https://files.pythonhosted.org/packages/f6/ec/9ca76b28a27525b0cc53e20842e0228b022f301ce1f436b7d814b4aaf2df/aiohttp-3.14.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f", size = 1787371, upload-time = "2026-07-23T01:56:48.045Z" }, + { url = "https://files.pythonhosted.org/packages/b1/04/6acdbf17315f7b55f1937e3387acb89a3cddeb4995689553d064af8e92ab/aiohttp-3.14.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553", size = 1912623, upload-time = "2026-07-23T01:56:50.605Z" }, + { url = "https://files.pythonhosted.org/packages/86/e6/438b0c79ca6f45eb9fd9817dd4c01a91919a38c0de5ee9e05e2b4dc0ece7/aiohttp-3.14.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100", size = 2005515, upload-time = "2026-07-23T01:56:53.153Z" }, + { url = "https://files.pythonhosted.org/packages/bb/6b/62cbd6577758699525f5c712d1ddef57d9875fbab0ae8d5f5a202fd598f8/aiohttp-3.14.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85", size = 1879906, upload-time = "2026-07-23T01:56:55.818Z" }, + { url = "https://files.pythonhosted.org/packages/00/95/18bcbf830a21dc3aae24d8f6b6feaf3db1d2090242d00a7868db2ffb0b67/aiohttp-3.14.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33", size = 1675849, upload-time = "2026-07-23T01:56:58.861Z" }, + { url = "https://files.pythonhosted.org/packages/a9/19/47f4968659c5e23606c3790c80fc624e691c153d036148449ee84d31b287/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f", size = 1843496, upload-time = "2026-07-23T01:57:01.591Z" }, + { url = "https://files.pythonhosted.org/packages/64/af/38c33c4dd82fddcb4e56c4653b6f1072a8edbc6b7fa15809f14932c41e2d/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0", size = 1827746, upload-time = "2026-07-23T01:57:05.131Z" }, + { url = "https://files.pythonhosted.org/packages/a1/9d/0537cda4885ac8f5b7053d164dd06312f4c483a4edcb8ee5b8aaf2a989bf/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098", size = 1853810, upload-time = "2026-07-23T01:57:08.043Z" }, + { url = "https://files.pythonhosted.org/packages/19/fe/26f9c5e6458385aa86497836b0dea6fb2f027827d63f37c7856cce9286ee/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25", size = 1668895, upload-time = "2026-07-23T01:57:10.837Z" }, + { url = "https://files.pythonhosted.org/packages/ec/4c/618b1db9b9ba079b8875d2cdf78e7c4a3bf72903bd5850fee7dd9544600a/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9", size = 1883833, upload-time = "2026-07-23T01:57:13.672Z" }, + { url = "https://files.pythonhosted.org/packages/94/c6/bd959bd1e4771f9fd944e9e436224c48c77b018b73b519b5aad346335bcc/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb", size = 1844251, upload-time = "2026-07-23T01:57:16.593Z" }, + { url = "https://files.pythonhosted.org/packages/5e/19/08d41839658bdd44a0ed2480f3891705ecb487ce28c0dde62c9040c997e0/aiohttp-3.14.3-cp314-cp314t-win32.whl", hash = "sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963", size = 474180, upload-time = "2026-07-23T01:57:19.306Z" }, + { url = "https://files.pythonhosted.org/packages/99/5d/3cd6ef0a2b2851f7ab913b5b079334781bd50ff56a323e4454063377a080/aiohttp-3.14.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b", size = 500528, upload-time = "2026-07-23T01:57:21.762Z" }, + { url = "https://files.pythonhosted.org/packages/a4/37/cfd1ed540a4d318da025590d96b728e63713c09e9377950fc655dadeb856/aiohttp-3.14.3-cp314-cp314t-win_arm64.whl", hash = "sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7", size = 469280, upload-time = "2026-07-23T01:57:24.241Z" }, ] [package.optional-dependencies] @@ -117,20 +117,20 @@ wheels = [ [[package]] name = "annotated-doc" -version = "0.0.4" +version = "0.0.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/8e/38aa427ed5402449e226975b649c5dc73ccadfefeb95e6aecb8f8ea4b6b6/annotated_doc-0.0.5.tar.gz", hash = "sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb", size = 10758, upload-time = "2026-07-28T13:50:58.129Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, + { url = "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", hash = "sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", size = 5302, upload-time = "2026-07-28T13:50:57.239Z" }, ] [[package]] name = "annotated-types" -version = "0.7.0" +version = "0.8.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, + { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, ] [[package]] @@ -203,11 +203,11 @@ wheels = [ [[package]] name = "asgiref" -version = "3.11.1" +version = "3.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/63/40/f03da1264ae8f7cfdbf9146542e5e7e8100a4c66ab48e791df9a03d3f6c0/asgiref-3.11.1.tar.gz", hash = "sha256:5f184dc43b7e763efe848065441eac62229c9f7b0475f41f80e207a114eda4ce", size = 38550, upload-time = "2026-02-03T13:30:14.33Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e6/26/3b59f2bdae5f640389becb1f673cded775287f5fc4f816309d9ca9a3f93d/asgiref-3.12.1.tar.gz", hash = "sha256:59dcb51c272ad209d59bed5708a64a333083e86017d7fcdd67498eeab7784340", size = 42378, upload-time = "2026-07-14T09:56:18.087Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/0a/a72d10ed65068e115044937873362e6e32fab1b7dce0046aeb224682c989/asgiref-3.11.1-py3-none-any.whl", hash = "sha256:e8667a091e69529631969fd45dc268fa79b99c92c5fcdda727757e52146ec133", size = 24345, upload-time = "2026-02-03T13:30:13.039Z" }, + { url = "https://files.pythonhosted.org/packages/c0/1b/54f4ad77cd8a584fa70746c47df988e002cf1ee1eba43364d46f87803647/asgiref-3.12.1-py3-none-any.whl", hash = "sha256:fe386d1c2bff7259ea95929266d12a8cf9a8b5a1c2598402967d8792e7a7c094", size = 25478, upload-time = "2026-07-14T09:56:16.926Z" }, ] [[package]] @@ -332,30 +332,30 @@ wheels = [ [[package]] name = "boto3" -version = "1.43.46" +version = "1.43.59" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "botocore" }, { name = "jmespath" }, { name = "s3transfer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f2/e7/976bf3dfe0aa5d7f31bec2f2cf57c79641620c910a39bc843a237aa9592d/boto3-1.43.46.tar.gz", hash = "sha256:66c0d943b049a46a492ec4ec2ebe73c930b1842c7137bee83aad6d93e95d4d96", size = 112654, upload-time = "2026-07-10T19:32:12.498Z" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/c8/ef9de1d7413da3adcdb6363258ba6b5cc703593409d8c1957825b20a69d3/boto3-1.43.59.tar.gz", hash = "sha256:4e9b14f89adc1a533c89312e86d8e00455a6f15d398796d92f9191b06e56b401", size = 112653, upload-time = "2026-07-29T19:33:25.703Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/1d/c52e66ff32ba7911664e6c4c2ac62e1c6d2d1e7550c7ac185d3f4b70a8a4/boto3-1.43.46-py3-none-any.whl", hash = "sha256:69453e2c1bcb9fd9806527ab99950cacfc2826cb0dce9a3a0414d19270c06c3c", size = 140031, upload-time = "2026-07-10T19:32:11.129Z" }, + { url = "https://files.pythonhosted.org/packages/2b/10/c5999e72b020012f2e0ccccf2a15632329edd34cb95b02b1ccfb1712ec08/boto3-1.43.59-py3-none-any.whl", hash = "sha256:58b9635deebf075c1c3d76df78df08eb2979c2a74283194676783a0bff3b4557", size = 140024, upload-time = "2026-07-29T19:33:23.751Z" }, ] [[package]] name = "botocore" -version = "1.43.46" +version = "1.43.59" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jmespath" }, { name = "python-dateutil" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7d/f1/1917891851ac5ac09bb9f4862b8fc9252a009d7c24e8688bb67e4383d9e7/botocore-1.43.46.tar.gz", hash = "sha256:59f2e1ac3cdc66d191cae91c0804bc41847ce817dc8147cf43eaada8f76a5533", size = 15694635, upload-time = "2026-07-10T19:32:00.437Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/37/3712a70796583570a5a2e426163e13762ba5ec615a73e966ad18e5933954/botocore-1.43.59.tar.gz", hash = "sha256:8016da69ecc1d705249a8ef13548d3c95eec87ac1cd26133a8bdfa73ca175be0", size = 15788291, upload-time = "2026-07-29T19:33:14.871Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/f2/4bd8f2f419088feb3ce55f0ca91040ff902f402edfd197450b20a2e1d533/botocore-1.43.46-py3-none-any.whl", hash = "sha256:cb673891e623ae6e6a1bf24d94ef169504f3eb02584adb5d5bee2f6aae819b60", size = 15380350, upload-time = "2026-07-10T19:31:57.616Z" }, + { url = "https://files.pythonhosted.org/packages/f6/cd/62d749f824b25c152144665f7c5eb8b5ca8be967a87e0c63577b7d4501ae/botocore-1.43.59-py3-none-any.whl", hash = "sha256:21393c35d23b19d7ba95cc4156b59f4013f80696d667997e1abd9d4e29651708", size = 15471171, upload-time = "2026-07-29T19:33:10.864Z" }, ] [[package]] @@ -419,11 +419,11 @@ wheels = [ [[package]] name = "certifi" -version = "2026.6.17" +version = "2026.7.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c9/c7/424b75da314c1045981bd9777432fad05a9e0c69daa4ed7e308bbaffe405/certifi-2026.6.17.tar.gz", hash = "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432", size = 134594, upload-time = "2026-06-17T10:31:07.894Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl", hash = "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db", size = 133289, upload-time = "2026-06-17T10:31:06.348Z" }, + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, ] [[package]] @@ -702,14 +702,14 @@ argon2 = [ [[package]] name = "django-bootstrap3" -version = "26.1" +version = "26.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f7/71/289b22cc19292e9a035a5a89277ef40ac3072b3bc52b12b00dadfbd9a3ba/django_bootstrap3-26.1.tar.gz", hash = "sha256:c437ec3bf19d9ef0b7554664b4dbea27c73fbd9927f8c7aa20559c68d38e8eea", size = 41832, upload-time = "2026-01-03T11:51:25.404Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/e3/0f0f40276e34e9b22cc95a284a26e732675dde272f44eb8b5b2bb49c4809/django_bootstrap3-26.2.tar.gz", hash = "sha256:e9be75b7bbf63c14a4c5955cf77546eb1d36eb80c135943ae094aa4d5b2f7d4e", size = 46887, upload-time = "2026-07-30T11:12:23.686Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/2d/c00d368d32d153b998a22b167b20db038f2f7d469d5d08f23256d8037518/django_bootstrap3-26.1-py3-none-any.whl", hash = "sha256:657201127b6c09f69d0ca60e944a32593fb6132923a9d1293bc6bfaacdb1a4ba", size = 24232, upload-time = "2026-01-03T11:51:24.335Z" }, + { url = "https://files.pythonhosted.org/packages/83/59/fdbd0fa0ba375b4831bab34d4e3a8063de9b0bfed44f38feee7bdcb2a671/django_bootstrap3-26.2-py3-none-any.whl", hash = "sha256:7b86df95f2c10d2d94f0e1d327b7b32c4f3a4022d20804180f396e165f9aab4e", size = 24172, upload-time = "2026-07-30T11:12:22.658Z" }, ] [[package]] @@ -727,14 +727,14 @@ wheels = [ [[package]] name = "django-crispy-forms" -version = "2.6" +version = "2.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/73/42/c2cfb672493730b963ef377b103e29871c56348a215d0ae8cf362fe8ab1e/django_crispy_forms-2.6.tar.gz", hash = "sha256:4921a1087c6cd4f9fa3c139654c1de1c1c385f8bd6729aaee530bc0121ab4b93", size = 1097838, upload-time = "2026-03-01T09:03:37.138Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bc/f5/b79e3ed7cae871d5d71bf3448d627e1fabab769358bb90808bec056556fe/django_crispy_forms-2.7.tar.gz", hash = "sha256:4c59bed60417375cba26cebb2c67ab350b655934670270b1c89dbcd7e60f1b4c", size = 1097842, upload-time = "2026-07-29T11:12:12.081Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/e3/4c5915a732d6ab54da8871400852b67529518eedfb6b78ecf10bbccfcabb/django_crispy_forms-2.6-py3-none-any.whl", hash = "sha256:8ee0ae28b6b0ac41ff48a65944480c049fe8d1b0047086874fd7efabf4ec1374", size = 31479, upload-time = "2026-03-01T09:03:36.048Z" }, + { url = "https://files.pythonhosted.org/packages/1f/44/50335d09c4deb70affee0c54feef07ba458df015e32e45490615d9dc5b6b/django_crispy_forms-2.7-py3-none-any.whl", hash = "sha256:42a7ecb05ac3fd050d006dfe7aeceb7f318c30e5b5124ff619e2be252f36f096", size = 31478, upload-time = "2026-07-29T11:12:11.052Z" }, ] [[package]] @@ -798,17 +798,18 @@ wheels = [ [[package]] name = "django-oauth-toolkit" -version = "3.3.0" +version = "3.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, { name = "jwcrypto" }, { name = "oauthlib" }, { name = "requests" }, + { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/62/2b/011f3e964f474b7814828586de0277ad373197096b28274d0ae8bf45d5f9/django_oauth_toolkit-3.3.0.tar.gz", hash = "sha256:2b375d14b1c0ff86e5df5e5de5d1a6d9868873304f54aca37c50158552d5b922", size = 118319, upload-time = "2026-05-29T18:13:57.065Z" } +sdist = { url = "https://files.pythonhosted.org/packages/59/a7/f185dc058f859b104c1fed06ab25eeebbb7e182c3e25c6f7e11e8df3f739/django_oauth_toolkit-3.4.0.tar.gz", hash = "sha256:e43bef1568d6322b44175e27eff82ed7d7cf210889a07d10b8a64e4190ff1351", size = 220227, upload-time = "2026-07-24T02:50:38.186Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/e4/d05b3d50d0250f2d2f3a5dc9cd21f85e313ee1493ff60b729dccb8e08c46/django_oauth_toolkit-3.3.0-py3-none-any.whl", hash = "sha256:7af1365cd80735211454b0dca810bc9e860c631e61fd17768ad0fa331737954f", size = 88415, upload-time = "2026-05-29T18:13:55.827Z" }, + { url = "https://files.pythonhosted.org/packages/56/64/3cb3a71aaac17ebfc1db56522fdacddeb79dd041f1174584b210988df4c3/django_oauth_toolkit-3.4.0-py3-none-any.whl", hash = "sha256:c504457898a363d332fb98beed5eceeec9da4aa659055a50a93aa52e8ed55534", size = 145738, upload-time = "2026-07-24T02:50:36.852Z" }, ] [[package]] @@ -838,7 +839,7 @@ wheels = [ [[package]] name = "django-stubs" -version = "6.0.6" +version = "6.0.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, @@ -846,22 +847,22 @@ dependencies = [ { name = "types-pyyaml" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/91/de/1b8ccb0909970fb4a8b48426f67132164110304875abdb4e4912c55480f4/django_stubs-6.0.6.tar.gz", hash = "sha256:dfc01e052e33c7f8f0c30c3ff8eda0903ee29ac710d1e46d9effd773744a69b0", size = 281381, upload-time = "2026-06-23T08:22:54.098Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/90/087c6e424e705e05182e543ef6b366a59eb5c92ab008b0dbbba55f357a40/django_stubs-6.0.7.tar.gz", hash = "sha256:bc55431c0af745a64e39cf33a8d36c87dccbedeae2fe26fab47dd355270e8538", size = 282293, upload-time = "2026-07-14T10:08:27.122Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/b0/b73855fb9cf381fa1d754ea33c25f14f5b11c297f48dc3a4e0359dc3adc2/django_stubs-6.0.6-py3-none-any.whl", hash = "sha256:c488fea05a9eac40ddbdc69887f63a5c0922cb13df285291ee99c9bbc89bc4f1", size = 546491, upload-time = "2026-06-23T08:22:52.466Z" }, + { url = "https://files.pythonhosted.org/packages/02/86/230ae6056221b543d63f7710d73967fe1c6840693540e99ea3c54f45859c/django_stubs-6.0.7-py3-none-any.whl", hash = "sha256:7ed9a14c438e589272ca04e966dee82a4d1ff7ca5c2171bc986c50a0d03ec35b", size = 547460, upload-time = "2026-07-14T10:08:25.626Z" }, ] [[package]] name = "django-stubs-ext" -version = "6.0.6" +version = "6.0.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/51/8b/dc3c37cf994836ee09bc07f6a0c0ea840b975449940bd7ff77cc97a732f3/django_stubs_ext-6.0.6.tar.gz", hash = "sha256:e6f09884e48d7c5b250a373dfa22aa3e83bb91b8babbd8d05187f6b92247f232", size = 6674, upload-time = "2026-06-23T08:21:38.355Z" } +sdist = { url = "https://files.pythonhosted.org/packages/36/50/917f7224ea470e89cdcdc93d3dfe75b8391adf976cf12f2ecdb5f5d122be/django_stubs_ext-6.0.7.tar.gz", hash = "sha256:c3172c5126614fd2a44d0196b313b44c21f717cb09477ba52b447d41f4ce613e", size = 6665, upload-time = "2026-07-14T10:07:56.933Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/e4/7d60a1bdb092807318af34a809dc6674b95cc78ec4d3aaa6027174e7201c/django_stubs_ext-6.0.6-py3-none-any.whl", hash = "sha256:5470c970f61a3ccf5aae7633feef1a097f944f417b955da200c9ac26ecd9134b", size = 10361, upload-time = "2026-06-23T08:21:37.228Z" }, + { url = "https://files.pythonhosted.org/packages/83/65/4d73fce956b5ebf26449259664360e539fbe95f0e86be396c28b636ba72a/django_stubs_ext-6.0.7-py3-none-any.whl", hash = "sha256:53a9c7c5a7c7e718cc6308cfce1e7470f2cac0b9d38dbcd60fbfa82704f1d592", size = 10362, upload-time = "2026-07-14T10:07:55.653Z" }, ] [[package]] @@ -897,7 +898,7 @@ wheels = [ [[package]] name = "fastapi" -version = "0.139.0" +version = "0.141.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-doc" }, @@ -906,9 +907,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d3/af/a5f50ccfa659ec1802cb4ca842c23f06d906a8cc9aef6016a2caeea3d4ed/fastapi-0.139.0.tar.gz", hash = "sha256:99ab7b2d92223c76d6cf10757ab3f89d45b38267fc20b2a136cf02f6beac3145", size = 423016, upload-time = "2026-07-01T16:35:33.436Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/02/91e3416a8fdd715abb903a952a6bec7cdd8d14eed55d415fc8595524c319/fastapi-0.141.1.tar.gz", hash = "sha256:e8822fc40db1e1858054d7a949a888695bc9bdce70139178e33bd2871a453ca1", size = 425799, upload-time = "2026-07-29T17:18:05.568Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/7c/8e3c6ad324ea5cb36604fc3f968554887891c316d9dfde57761611d907ad/fastapi-0.139.0-py3-none-any.whl", hash = "sha256:cf15e1e9e667ddb0ad63811e60bd11390d1aac838ca4a7a23f421807b2308189", size = 130339, upload-time = "2026-07-01T16:35:32.19Z" }, + { url = "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", hash = "sha256:bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3", size = 131954, upload-time = "2026-07-29T17:18:04.364Z" }, ] [package.optional-dependencies] @@ -925,16 +926,16 @@ standard-no-fastapi-cloud-cli = [ [[package]] name = "fastapi-cli" -version = "0.0.29" +version = "0.0.32" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "rich-toolkit" }, { name = "typer" }, { name = "uvicorn", extra = ["standard"] }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6d/82/986d498e3b4c41b043bd14ece562fc1a766b56aa1bfd980ae10717c9bc46/fastapi_cli-0.0.29.tar.gz", hash = "sha256:d1140852664a91754da6db4db1e750ace4059f1a21adcf9b161ad4310271a621", size = 23948, upload-time = "2026-07-08T12:45:03.19Z" } +sdist = { url = "https://files.pythonhosted.org/packages/33/eb/3b534c6f8e157f9ddbf2a153512307c886cad0b258739c200dd8ff8c4452/fastapi_cli-0.0.32.tar.gz", hash = "sha256:38024d2345275e1b37ce8848727a580d84901b570e96b3256d9d36a9a5039424", size = 26636, upload-time = "2026-07-16T12:16:58.678Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/02/13/0786e5265018238f9a014270ff89d84b02065c2303df9bfac6857ab54bab/fastapi_cli-0.0.29-py3-none-any.whl", hash = "sha256:05bf08e0e527e3649a50c44bd1e0a2c13575c6cf9a939ff70013f288afc074de", size = 13191, upload-time = "2026-07-08T12:45:02.378Z" }, + { url = "https://files.pythonhosted.org/packages/d5/53/56ae5ae17bb0a5d89d1d31e5320eb1865553ebbfbde91cdc4c221245f2a8/fastapi_cli-0.0.32-py3-none-any.whl", hash = "sha256:8dcc286fa32f01bbd3f65dd09cfd5a2540ed5f2230b77db7fd30978d6165f3c4", size = 14670, upload-time = "2026-07-16T12:16:57.297Z" }, ] [package.optional-dependencies] @@ -944,11 +945,11 @@ standard-no-fastapi-cloud-cli = [ [[package]] name = "filelock" -version = "3.29.7" +version = "3.32.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/94/00f2059e4835eace3ae8fde680b932c496f8ec7bdc99168dfa53fb2e6b79/filelock-3.29.7.tar.gz", hash = "sha256:5b481979797ae69e72f0b389d89a80bdd585c260c5b3f1fb9c0a5ba9bb3f195d", size = 71521, upload-time = "2026-07-08T05:46:58.716Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/57/3ba6e6cb097f85b855b00163d169f35365f44277df044dcf96d55b8f62a3/filelock-3.32.2.tar.gz", hash = "sha256:c33351e1f49cae33414acbc6d56784e6ecee82514ec90795da1161fc4836b5b8", size = 217172, upload-time = "2026-07-29T22:46:04.895Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl", hash = "sha256:987db6f789a3a2a59f55081801b2b3697cb97e2a736b5f1a9e99b559285fbc51", size = 46036, upload-time = "2026-07-08T05:46:57.53Z" }, + { url = "https://files.pythonhosted.org/packages/c1/e8/72f8cef9fdfeffe06213fe8508039396ee48daa0e3259457ed766173bfd6/filelock-3.32.2-py3-none-any.whl", hash = "sha256:87dd94cf281e586d135fa51132b8e3d9a598b316e90377a288663c9321036c82", size = 98830, upload-time = "2026-07-29T22:46:03.52Z" }, ] [[package]] @@ -1770,11 +1771,11 @@ wheels = [ [[package]] name = "phonenumberslite" -version = "9.0.34" +version = "9.0.35" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/89/27/84fd33a2d493594665ae38d9316a16d7b932cde3b0a0119c1b3675f1a2cb/phonenumberslite-9.0.34.tar.gz", hash = "sha256:83f5d6592a3d3c942a5e52d9bec939c698d80d14199931bff8fe0c17a118b38e", size = 288807, upload-time = "2026-07-03T06:30:07.286Z" } +sdist = { url = "https://files.pythonhosted.org/packages/66/99/7fdff4d1cd75d3905d0c2597d125034b7f3b7df2a14d2433d8a1862340d3/phonenumberslite-9.0.35.tar.gz", hash = "sha256:5ab0bd8aa8483c3e2734c36260568b72da699e094fa8fc11b2096a59deb96ef8", size = 288841, upload-time = "2026-07-26T08:27:57.816Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/ef/eb17521c82565579fe85ca4c69e61946afe4e205a2159afa5c3684f8e1ec/phonenumberslite-9.0.34-py2.py3-none-any.whl", hash = "sha256:cdf6be12d052c3de7921b9290b9f1ad93f18224d5be97b482f16327d03841828", size = 473217, upload-time = "2026-07-03T06:30:05.49Z" }, + { url = "https://files.pythonhosted.org/packages/95/ce/89ba746c9f98951306c5f224a2302c2c71b588f0848ecebb716f05fd5497/phonenumberslite-9.0.35-py2.py3-none-any.whl", hash = "sha256:ce22760d0f434c5378d515523236cc88fa1f1824e84bcd3fa9a96ca1d63d04de", size = 473267, upload-time = "2026-07-26T08:27:56.371Z" }, ] [[package]] @@ -1829,11 +1830,11 @@ wheels = [ [[package]] name = "platformdirs" -version = "4.10.0" +version = "4.11.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" } +sdist = { url = "https://files.pythonhosted.org/packages/78/9b/560e4be8e26f6fd133a03630a8df0c663b9e8d61b4ade152b72005aec83b/platformdirs-4.11.0.tar.gz", hash = "sha256:0555d18370482847566ffabcaa53ad7c6c1c29f195989ae1ed634a05f76ea1e0", size = 31953, upload-time = "2026-07-21T13:09:36.565Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" }, + { url = "https://files.pythonhosted.org/packages/7d/68/d8d58938dfb1370b266a1a729e6d77a985be23689a0496498ee17b2cbf90/platformdirs-4.11.0-py3-none-any.whl", hash = "sha256:360ccded2b7fce0af0ff80cc8f5942a1c5d99b0e856033acb030bfc634709e74", size = 23247, upload-time = "2026-07-21T13:09:35.422Z" }, ] [[package]] @@ -1847,7 +1848,7 @@ wheels = [ [[package]] name = "pre-commit" -version = "4.6.0" +version = "4.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cfgv" }, @@ -1856,9 +1857,9 @@ dependencies = [ { name = "pyyaml" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8e/22/2de9408ac81acbb8a7d05d4cc064a152ccf33b3d480ebe0cd292153db239/pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", size = 198525, upload-time = "2026-04-21T20:31:41.613Z" } +sdist = { url = "https://files.pythonhosted.org/packages/25/3a/ddb78f32a0814e66b18a099377a106a2dcdce92d86a034d69d65df9b256e/pre_commit-4.6.1.tar.gz", hash = "sha256:03e809865c7d178b9979d06c761fcbfe6808fdaded8581a745bb110e52050421", size = 198646, upload-time = "2026-07-21T20:56:58.225Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b", size = 226472, upload-time = "2026-04-21T20:31:40.092Z" }, + { url = "https://files.pythonhosted.org/packages/fb/49/bc925106abcdac498074f2cbe6137e94e09f418dd2b7775df5b577dc0313/pre_commit-4.6.1-py2.py3-none-any.whl", hash = "sha256:0e3b2942510d1fb34eec167a3ec57331bf8442122f1153a9fb8b58f5c49b2717", size = 226186, upload-time = "2026-07-21T20:56:57.064Z" }, ] [[package]] @@ -1872,14 +1873,14 @@ sdist = { url = "https://files.pythonhosted.org/packages/cf/9c/fb5d48abfe5d791cd [[package]] name = "prompt-toolkit" -version = "3.0.52" +version = "3.0.53" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/ea/39b988c938f75cb75d7045b5c69f8bfed47ee2152c8837fb403de29d6fb8/prompt_toolkit-3.0.53.tar.gz", hash = "sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6", size = 435492, upload-time = "2026-07-26T20:56:14.758Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, + { url = "https://files.pythonhosted.org/packages/54/6f/84908cad2d6aa5144abcf7b42709fe4fdb459bc640ec7ac5786e7693dabc/prompt_toolkit-3.0.53-py3-none-any.whl", hash = "sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2", size = 392288, upload-time = "2026-07-26T20:56:12.512Z" }, ] [[package]] @@ -2217,15 +2218,15 @@ wheels = [ [[package]] name = "pypugjs" -version = "6.0.3" +version = "7.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "charset-normalizer" }, { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/57/93/1fb145f3c2d6951d16090e582418f75bd179fd52cc712ef7f67b7554aa9a/pypugjs-6.0.3.tar.gz", hash = "sha256:3c59902df377b5247bf90e413e2842fe524b43c17f144e76a9b06f9173a720ee", size = 35092, upload-time = "2026-04-30T11:11:03.158Z" } +sdist = { url = "https://files.pythonhosted.org/packages/55/4a/6c1dd8955f3676f2350323b265c2a4ee8f438bb76be59b3b5c2f0464912f/pypugjs-7.0.0.tar.gz", hash = "sha256:95bb872afe09a0fa367b589e43b623924e4dd8201a6d61562c0b21614a8a4e67", size = 35768, upload-time = "2026-07-16T14:38:20.543Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/64/1c/88a94511bd1b33b58cbd9539a8e334f81676e67ffee469df1c4b1b2e874e/pypugjs-6.0.3-py2.py3-none-any.whl", hash = "sha256:49340e6cf85e9f4182e312109aaa41218293820db599ea87683c5b963157081a", size = 37388, upload-time = "2026-04-30T11:11:00.497Z" }, + { url = "https://files.pythonhosted.org/packages/6f/35/a52f4f85b09a110be957bf0475f78c74427409ebf6de58caaff5d3292ad7/pypugjs-7.0.0-py2.py3-none-any.whl", hash = "sha256:dbd5dffcb38a8962da019f1721c1a1cb99711e786907307e11d51fb993cff5b6", size = 38043, upload-time = "2026-07-16T14:38:19.234Z" }, ] [[package]] @@ -2283,15 +2284,15 @@ wheels = [ [[package]] name = "python-discovery" -version = "1.4.4" +version = "1.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4c/81/58c70036dffeccb7fe7d79d6260c69f7a28272bbd3909c29a01ea9422744/python_discovery-1.4.4.tar.gz", hash = "sha256:5cad33982d412c1f3ffb8f9ca4ea292c9680bca3942451d30b69c37fce53a4a3", size = 72212, upload-time = "2026-07-08T23:06:50.691Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/51/276f964496a5714ab9f320896195639086881c2b39c03b5ad13de84acbb8/python_discovery-1.5.0.tar.gz", hash = "sha256:3e014c6327154d3dda27939a9a0dc9c5c000439f1906d3f303b48f984bd2ecef", size = 72483, upload-time = "2026-07-21T13:14:14.641Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl", hash = "sha256:abebe9120b43453b68c908acfb1e72a19d1a959ed2cb620ad38fc57d08056dbe", size = 34181, upload-time = "2026-07-08T23:06:49.402Z" }, + { url = "https://files.pythonhosted.org/packages/c7/7b/14882602ddee241d7984a742fcb423cb4a30fb0d6efc546ac3129fba475a/python_discovery-1.5.0-py3-none-any.whl", hash = "sha256:70c4fc61b4e7404e44f01d6fc44a715c4d685ca6cea83d295922f05891877c98", size = 34205, upload-time = "2026-07-21T13:14:13.398Z" }, ] [[package]] @@ -2341,11 +2342,11 @@ wheels = [ [[package]] name = "pytz" -version = "2026.2" +version = "2026.3.post1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861, upload-time = "2026-05-04T01:35:29.667Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fb/48/fb042503b6ca6cd271261dc559fd6432f7d8c713153e9ec5c591af4dfc1c/pytz-2026.3.post1.tar.gz", hash = "sha256:2211d3fcf9a797d3405cac96ac7f61d80e6a644f72a3309607282fe8a2010c5d", size = 319745, upload-time = "2026-07-25T15:12:07.385Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141, upload-time = "2026-05-04T01:35:27.408Z" }, + { url = "https://files.pythonhosted.org/packages/0f/7b/39c34ca613b0b198cb866466651b26b045e2009864c5183c979a3b83f383/pytz-2026.3.post1-py2.py3-none-any.whl", hash = "sha256:dd95840dd199baea12d9cc096a1d452caa6596a1c1e4b5f3dbd1541855d5e815", size = 508283, upload-time = "2026-07-25T15:12:05.782Z" }, ] [[package]] @@ -2376,11 +2377,11 @@ wheels = [ [[package]] name = "redis" -version = "8.0.1" +version = "8.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cc/c3/928b290c2c0ca99ab96eea5b4ff8f30be8112b075301a7d3ba214a3c8c12/redis-8.0.1.tar.gz", hash = "sha256:afc5a7a2f5a084f5b1880dec548dd45be17db7e43c82a30d84f952aefb05cfb0", size = 5114170, upload-time = "2026-06-23T14:52:37.728Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a8/99/604f0b666d4c616d891cf77ebb9db6bb21601344c051aebf1b72b9ff915f/redis-8.1.0.tar.gz", hash = "sha256:6e1a19beef9225c83efd689c7e6b7da2d5215b1f42cd13b7fc3714d0a09c7b25", size = 5254356, upload-time = "2026-07-30T08:51:00.269Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl", hash = "sha256:47daa35a058c23468d6437f17a8c76882cb316b838ef763036af99b96cedd743", size = 502406, upload-time = "2026-06-23T14:52:36.137Z" }, + { url = "https://files.pythonhosted.org/packages/66/9d/c5731f6e3608663d4d3656fd8d3aecee8b509c3082818f5a13eae925baea/redis-8.1.0-py3-none-any.whl", hash = "sha256:a4fe1aac3d3b3cc791d4b3d5931c5a956045dc951ee74d1c913ee3ac4d2ee9fb", size = 560618, upload-time = "2026-07-30T08:50:58.497Z" }, ] [[package]] @@ -2398,42 +2399,42 @@ wheels = [ [[package]] name = "regex" -version = "2026.7.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7b/37/451aaddbf50922f34d744ad5ca919ae1fcfac112123885d9728f52a484b3/regex-2026.7.10.tar.gz", hash = "sha256:1050fedf0a8a92e843971120c2f57c3a99bea86c0dfa1d63a9fac053fe54b135", size = 416282, upload-time = "2026-07-10T19:49:46.267Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/4a/a7fa3ada9bd2d2ce20d56dfceec6b2a51afeed9bf3d8286355ceec5f0628/regex-2026.7.10-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:39f81d1fdf594446495f2f4edd8e62d8eda0f7a802c77ac596dc8448ad4cc5ca", size = 497087, upload-time = "2026-07-10T19:48:40.543Z" }, - { url = "https://files.pythonhosted.org/packages/0f/7e/ca0b1a87192e5828dbc16f16ae6caca9b67f25bf729a3348468a5ff52755/regex-2026.7.10-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:441edc66a54063f8269d1494fc8474d06605e71e8a918f4bcfd079ebda4ce042", size = 297307, upload-time = "2026-07-10T19:48:42.213Z" }, - { url = "https://files.pythonhosted.org/packages/b2/6c/fb40bb34275d3cd4d7a376d5fb2ea1f0f4a96fd884fa83c0c4ae869001bf/regex-2026.7.10-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cfeb11990f59e59a0df26c648f0adfcbf27be77241250636f5769eb08db662be", size = 292163, upload-time = "2026-07-10T19:48:43.929Z" }, - { url = "https://files.pythonhosted.org/packages/18/0b/34cbea16c8fea9a18475a7e8f5837c70af451e738bfeb4eb5b029b7dc07a/regex-2026.7.10-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:460176b2db044a292baaee6891106566739657877af89a251cded228689015a6", size = 797064, upload-time = "2026-07-10T19:48:45.623Z" }, - { url = "https://files.pythonhosted.org/packages/87/77/f6805d97f15f5a710bdfd56a768f3468c978239daf9e1b15efd8935e1967/regex-2026.7.10-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9dc55698737aca028848bde418d6c51d74f2a5fd44872d3c8b56b626729adb89", size = 866155, upload-time = "2026-07-10T19:48:47.589Z" }, - { url = "https://files.pythonhosted.org/packages/a2/e3/a2a905807bba3bcd90d6ebbb67d27af2adf7d41708175cbc6b956a0c75f1/regex-2026.7.10-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d3e10779f60c000213a5b53f518824bd07b3dc119333b26d70c6be1c27b5c794", size = 911596, upload-time = "2026-07-10T19:48:49.473Z" }, - { url = "https://files.pythonhosted.org/packages/a2/ca/a3126888b2c6f33c7e29144fedf85f6d5a52a400024fa045ad8fc0550ef1/regex-2026.7.10-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:38a5926601aaccf379512746b86eb0ac1d29121f6c776dac6ac5b31077432f2c", size = 800713, upload-time = "2026-07-10T19:48:51.452Z" }, - { url = "https://files.pythonhosted.org/packages/66/19/9d252fd969f726c8b56b4bacf910811cc70495a110907b3a7ccb96cd9cad/regex-2026.7.10-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a72ecf5bfd3fc8d57927f7e3ded2487e144472f39010c3acaec3f6f3ff53f361", size = 777286, upload-time = "2026-07-10T19:48:53.443Z" }, - { url = "https://files.pythonhosted.org/packages/40/7a/5f1bf433fa446ecb3aab87bb402603dc9e171ef8052c1bb8690bb4e255a3/regex-2026.7.10-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d50714405845c1010c871098558cfe5718fe39d2a2fab5f95c8863caeb7a82b3", size = 785826, upload-time = "2026-07-10T19:48:55.381Z" }, - { url = "https://files.pythonhosted.org/packages/99/ca/69f3a7281d86f1b592338007f3e535cc219d771448e2b61c0b56e4f9d05b/regex-2026.7.10-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ec1c44cf9bd22079aac37a07cb49a29ced9050ab5bddf24e50aba298f1e34d90", size = 860957, upload-time = "2026-07-10T19:48:57.962Z" }, - { url = "https://files.pythonhosted.org/packages/bc/11/487ff55c8d515ec9dd60d7ba3c129eeaa9e527358ed9e8a054a9e9430f81/regex-2026.7.10-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:9e9aaef25a40d1f1e1bbb1d0eb0190c4a64a7a1750f7eb67b8399bed6f4fd2a6", size = 765959, upload-time = "2026-07-10T19:49:00.27Z" }, - { url = "https://files.pythonhosted.org/packages/73/e1/fa034e6fa8896a09bd0d5e19c81fdc024411ab37980950a0401dccee8f6d/regex-2026.7.10-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:e54e088dc64dd2766014e7cfe5f8bc45399400fd486816e494f93e3f0f55da06", size = 851447, upload-time = "2026-07-10T19:49:02.128Z" }, - { url = "https://files.pythonhosted.org/packages/ee/a5/b9427ed53b0e14c540dc436d56aaf57a19fb9183c6e7abd66f4b4368fbad/regex-2026.7.10-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:834271b1ff2cfa1f67fcd65a48bf11d11e9ab837e21bf79ce554efb648599ae8", size = 789418, upload-time = "2026-07-10T19:49:03.949Z" }, - { url = "https://files.pythonhosted.org/packages/ba/52/aab92420c8aa845c7bcbe68dc65023d4a9e9ea785abf0beb2198f0de5ba1/regex-2026.7.10-cp314-cp314-win32.whl", hash = "sha256:f988a1cec68058f71a38471813fba9e87dffe855582682e8a10e40ece12567a2", size = 272538, upload-time = "2026-07-10T19:49:05.833Z" }, - { url = "https://files.pythonhosted.org/packages/99/16/5c7050e0ef7dd8889441924ff0a2c33b7f0587c0ccb0953fe7ca997d673b/regex-2026.7.10-cp314-cp314-win_amd64.whl", hash = "sha256:2129e4a5e86f26926982d883dff815056f2e98220fdf630e59f961b578a26c43", size = 280796, upload-time = "2026-07-10T19:49:07.593Z" }, - { url = "https://files.pythonhosted.org/packages/e8/1a/4f6099d2ba271502fdb97e697bae2ed0213c0d87f2273fe7d21e2e401d12/regex-2026.7.10-cp314-cp314-win_arm64.whl", hash = "sha256:9cd5b6805396157b4cf993a6940cbb8663161f29b4df2458c1c9991f099299c5", size = 281017, upload-time = "2026-07-10T19:49:09.767Z" }, - { url = "https://files.pythonhosted.org/packages/19/02/4061fc71f64703e0df61e782c2894c3fbc089d277767eff6e16099581c73/regex-2026.7.10-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:103e8f3acc3dcede88c0331c8612766bdcfc47c9250c5477f0e10e0550b9da49", size = 501467, upload-time = "2026-07-10T19:49:11.952Z" }, - { url = "https://files.pythonhosted.org/packages/73/a5/8d42b2f3fd672908a05582effd0f88438bf9bb4e8e02d69a62c723e23601/regex-2026.7.10-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:538ddb143f5ca085e372def17ef3ed9d74b50ad7fc431bd85dc50a9af1a7076f", size = 299700, upload-time = "2026-07-10T19:49:14.067Z" }, - { url = "https://files.pythonhosted.org/packages/65/70/36fa4b46f73d268c0dbe77c40e62da2cd4833ee206d3b2e438c2034e1f36/regex-2026.7.10-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6e3448e86b05ce87d4eb50f9c680860830f3b32493660b39f43957d6263e2eba", size = 294590, upload-time = "2026-07-10T19:49:15.883Z" }, - { url = "https://files.pythonhosted.org/packages/e0/a7/b6db1823f3a233c2a46f854fdc986f4fd424a84ed557b7751f2998efb266/regex-2026.7.10-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5eab9d3f981c423afd1a61db055cfe83553c3f6455949e334db04722469dd0a2", size = 811925, upload-time = "2026-07-10T19:49:17.97Z" }, - { url = "https://files.pythonhosted.org/packages/b6/7d/f8bee4c210c42c7e8b952bb9fb7099dd7fb2f4bd0f33d0d65a8ab08aafc0/regex-2026.7.10-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:177f930af3ad72e1045f8877540e0c43a38f7d328cf05f31963d0bd5f7ecf067", size = 871257, upload-time = "2026-07-10T19:49:19.943Z" }, - { url = "https://files.pythonhosted.org/packages/5d/78/22adf72e614ba0216b996e9aaef5712c23699e360ea127bb3d5ee1a7666f/regex-2026.7.10-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dd3b6d97beb39afb412f2c79522b9e099463c31f4c49ab8347c5a2ca3531c478", size = 917551, upload-time = "2026-07-10T19:49:22.069Z" }, - { url = "https://files.pythonhosted.org/packages/03/f7/ebc15a39e81e6b58da5f913b91fc293a25c6700d353c14d5cd25fc85712a/regex-2026.7.10-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8679f0652a183d93da646fcec8da8228db0be40d1595da37e6d74c2dc8c4713c", size = 816436, upload-time = "2026-07-10T19:49:24.131Z" }, - { url = "https://files.pythonhosted.org/packages/5c/33/20bc2bdd57f7e0fcc51be37e4c4d1bca7f0b4af8dc0a148c23220e689da8/regex-2026.7.10-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:494b19a5805438aeb582de99f9d97603d8fd48e6f4cc74d0088bb292b4da3b70", size = 785935, upload-time = "2026-07-10T19:49:26.265Z" }, - { url = "https://files.pythonhosted.org/packages/b4/51/87ff99c849b56309c40214a72b54b0eef320d0516a8a516970cc8be1b725/regex-2026.7.10-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0911e34151a5429d0325dae538ba9851ec0b62426bdfd613060cda8f1c36ec7f", size = 801494, upload-time = "2026-07-10T19:49:28.493Z" }, - { url = "https://files.pythonhosted.org/packages/16/11/fde67d49083fef489b7e0f841e2e5736516795b166c9867f05956c1e494b/regex-2026.7.10-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b862572b7a5f5ed47d2ba5921e63bf8d9e3b682f859d8f11e0e5ca46f7e82173", size = 866549, upload-time = "2026-07-10T19:49:30.592Z" }, - { url = "https://files.pythonhosted.org/packages/e6/b5/31a156c36acf10181d88f55a66c688d5454a344e53ccc03d49f4a48a2297/regex-2026.7.10-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:3f361215e000d68a4aff375106637b83c80be36091d83ee5107ad3b32bd73f48", size = 773089, upload-time = "2026-07-10T19:49:32.661Z" }, - { url = "https://files.pythonhosted.org/packages/27/bb/734e978c904726664df47ae36ce5eca5065de5141185ae46efec063476a2/regex-2026.7.10-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:4533af6099543db32ef26abc2b2f824781d4eebb309ab9296150fd1a0c7eb07d", size = 856710, upload-time = "2026-07-10T19:49:35.289Z" }, - { url = "https://files.pythonhosted.org/packages/6d/e5/dc35cea074dbdcb9776c4b0542a3bc326ff08454af0768ef35f3fc66e7fa/regex-2026.7.10-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:668ab85105361d0200e3545bec198a1acfc6b0aeb5fff8897647a826e5a171be", size = 803621, upload-time = "2026-07-10T19:49:37.704Z" }, - { url = "https://files.pythonhosted.org/packages/a6/b2/124564af46bc0b592785610b3985315610af0a07f4cf21fa36e06c2398dd/regex-2026.7.10-cp314-cp314t-win32.whl", hash = "sha256:dd7715817a187edd7e2a2390908757f7ba42148e59cad755fb8ee1160c628eca", size = 274558, upload-time = "2026-07-10T19:49:39.926Z" }, - { url = "https://files.pythonhosted.org/packages/4e/9c/cd813ce9f3404c0443915175c1e339c5afd8fcda04310102eaf233015eef/regex-2026.7.10-cp314-cp314t-win_amd64.whl", hash = "sha256:78712d4954234df5ca24fdadb65a2ab034213f0cdfde376c272f9fc5e09866bb", size = 283687, upload-time = "2026-07-10T19:49:41.872Z" }, - { url = "https://files.pythonhosted.org/packages/1b/d3/3dae6a6ce46144940e64425e32b8573a393a009aeaf75fa6752a35399056/regex-2026.7.10-cp314-cp314t-win_arm64.whl", hash = "sha256:749b92640e1970e881fdf22a411d74bf9d049b154f4ef7232eeb9a90dd8be7f3", size = 283377, upload-time = "2026-07-10T19:49:43.985Z" }, +version = "2026.7.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/98/04b13f1ddfb63158025291c02e03eb42fbb7acb51d091d541050eb4e35e8/regex-2026.7.19.tar.gz", hash = "sha256:7e77b324909c1617cbb4c668677e2c6ae13f44d7c1de0d4f15f2e3c10f3315b5", size = 416440, upload-time = "2026-07-19T00:19:48.923Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/25/0c4c452f8ef3efe456745b2f33195f5904b573fb4c2ff3f0cb9ec188461e/regex-2026.7.19-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:a81758ed242b861b72e778ba34d41366441a2e10b16b472784c88da2dea7e2dd", size = 496750, upload-time = "2026-07-19T00:18:39.633Z" }, + { url = "https://files.pythonhosted.org/packages/24/9e/b70ca6c1704f6c7cd32a9e143c86cc5968d10981eca284bad670c245ea7d/regex-2026.7.19-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4aa5435cdb3eb6f55fe98a171b05e3fbcd95fadaa4aa32acf62afd9b0cfdbcac", size = 297093, upload-time = "2026-07-19T00:18:41.583Z" }, + { url = "https://files.pythonhosted.org/packages/87/74/0b692da2520d51fbff19c88b83d97e4c702909dd02386c585998b7e2dbed/regex-2026.7.19-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:60be8693a1dadc210bbcbc0db3e26da5f7d01d1d5a3da594e99b4fa42df404f5", size = 292043, upload-time = "2026-07-19T00:18:43.347Z" }, + { url = "https://files.pythonhosted.org/packages/e3/a7/1d478e614016045a33feae57446215f9fd65b665a5ceb2f891fb3183bc52/regex-2026.7.19-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d19662dbedbe783d323196312d38f5ba53cf56296378252171985da6899887d3", size = 797214, upload-time = "2026-07-19T00:18:45.362Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ae/11b9c9411d92c30e3d2db32df5a31133e4a99a8fc397a604fd08f6c4bffb/regex-2026.7.19-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d15df07081d91b76ff20d43f94592ee110330152d617b730fdbe5ef9fb680053", size = 866433, upload-time = "2026-07-19T00:18:47.315Z" }, + { url = "https://files.pythonhosted.org/packages/b1/62/2b2efc4992f91d6d204b24c647c9f9412e85379d92b7c0ab9fdae622327e/regex-2026.7.19-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:56ad4d9f77df871a99e25c37091052a02528ec0eb059de928ee33956b854b45b", size = 911360, upload-time = "2026-07-19T00:18:49.588Z" }, + { url = "https://files.pythonhosted.org/packages/14/71/986ceea9aa3da548bf1357cad89b63915ec6d21ec957c8113b29ece567df/regex-2026.7.19-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7322ec6cc9fba9d49ab888bb82d67ac5625627aa168f0165139b17018df3fb8a", size = 801275, upload-time = "2026-07-19T00:18:51.767Z" }, + { url = "https://files.pythonhosted.org/packages/15/be/ce9d9534b2cda96eab32c548261224b9b4e220a4126f098f60f42ae7b4cd/regex-2026.7.19-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9c7472192ebfad53a6be7c4a8bfb2d64b81c0e93a1fc8c57e1dd0b638297b5d1", size = 777131, upload-time = "2026-07-19T00:18:54.053Z" }, + { url = "https://files.pythonhosted.org/packages/61/2b/58b5c710f2c3929515a25f3a1ca0dad0dcd4518d4fff3cf23bc7adb8dcd2/regex-2026.7.19-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c10b82c2634df08dfb13b1f04e38fe310d086ee092f4f69c0c8da234251e556e", size = 785020, upload-time = "2026-07-19T00:18:56.579Z" }, + { url = "https://files.pythonhosted.org/packages/84/03/5fe091935b74f15fe0f97998c215cae418d1c0413f6258c7d4d2e83aa37f/regex-2026.7.19-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:17ed5692f6acc4183e98331101a5f9e4f64d72fe58b753da4d444a2c77d05b12", size = 861263, upload-time = "2026-07-19T00:18:58.64Z" }, + { url = "https://files.pythonhosted.org/packages/d8/fa/d60bf82e10841eef62a9e32aac401468f05fddfbcb2942e342b1ba3d2433/regex-2026.7.19-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:22a992de9a0d91bda927bf02b94351d737a0302905432c88a53de7c4b9ce62e2", size = 766199, upload-time = "2026-07-19T00:19:00.705Z" }, + { url = "https://files.pythonhosted.org/packages/bf/5d/11e64d151b0662b81d6bf644c74dc118d461df85bdf2577fadbbf751788a/regex-2026.7.19-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:618a0aed532be87294c4477b0481f3aa0f1520f4014a4374dd4cf789b4cd2c97", size = 851317, upload-time = "2026-07-19T00:19:03.015Z" }, + { url = "https://files.pythonhosted.org/packages/7c/34/532efb87488d90807bae6a443d357ee5e2728a478c597619c8aaa17cc0bd/regex-2026.7.19-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2ce9e679f776649746729b6c86382da519ef649c8e34cc41df0d2e5e0f6c36d4", size = 789557, upload-time = "2026-07-19T00:19:05.338Z" }, + { url = "https://files.pythonhosted.org/packages/d6/90/3a8d5ca977171ec3ae21a71207d2228b2663bde14d7f7ef0e6363ecf9290/regex-2026.7.19-cp314-cp314-win32.whl", hash = "sha256:73f272fba87b8ccfe70a137d02a54af386f6d27aa509fbffdd978f5947aae1aa", size = 272531, upload-time = "2026-07-19T00:19:07.487Z" }, + { url = "https://files.pythonhosted.org/packages/96/e1/8862885e70409de70e8c005f57fb2e7be8d9ef0317250d60f4c9660a300d/regex-2026.7.19-cp314-cp314-win_amd64.whl", hash = "sha256:d721e53758b2cca74990185eb0671dd466d7a388a1a45d0c6f4c13cef41a68ac", size = 280831, upload-time = "2026-07-19T00:19:09.46Z" }, + { url = "https://files.pythonhosted.org/packages/08/82/2693e53e29f9104d9de95d37ce4dd826bd32d5f9c0085d3aa6ac042675c4/regex-2026.7.19-cp314-cp314-win_arm64.whl", hash = "sha256:65fa6cb38ed5e9c3637e68e544f598b39c3b86b808ed0627a67b68320384b459", size = 281099, upload-time = "2026-07-19T00:19:11.398Z" }, + { url = "https://files.pythonhosted.org/packages/92/b7/9a01aa16461a18cde9d7b9c3ab21e501db2ce33725f53014342b91df2b0a/regex-2026.7.19-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:5a2721c8720e2cb3c209925dfb9200199b4b07361c9e01d321719404b21458b3", size = 501121, upload-time = "2026-07-19T00:19:13.425Z" }, + { url = "https://files.pythonhosted.org/packages/f3/5e/bbaeca815dc9191c424c94a4fdc5c87c75748a64a6271821212ebdd4e1a3/regex-2026.7.19-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:199535629f25caf89698039af3d1ad5fcae7f933e2112c73f1cdf49165c99518", size = 299415, upload-time = "2026-07-19T00:19:15.43Z" }, + { url = "https://files.pythonhosted.org/packages/cd/d6/0dd1a321afaab95eb7ff44aa0f637301786f1dc71c6b797b9ed236ed8890/regex-2026.7.19-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9b60d7814174f059e5de4ab98271cc5ba9259cfea55273a81544dceea32dc8d9", size = 294483, upload-time = "2026-07-19T00:19:17.879Z" }, + { url = "https://files.pythonhosted.org/packages/92/5f/40bacf91d0904f812e13bbbab3864604c463eced8afdc54aeaa50492ea95/regex-2026.7.19-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dbece16025afda5e3031af0c4059207e61dcf73ef13af844964f57f387d1c435", size = 811833, upload-time = "2026-07-19T00:19:20.102Z" }, + { url = "https://files.pythonhosted.org/packages/94/7c/4902744261f775aeede8b5627314b38482da29cf49a57b66a6fb753246c5/regex-2026.7.19-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d24ecb4f5e009ea0bd275ee37ad9953b32005e2e5e60f8bbae16da0dbbf0d3a0", size = 871270, upload-time = "2026-07-19T00:19:22.365Z" }, + { url = "https://files.pythonhosted.org/packages/16/70/6980c9be6bf21c0a60ed3e0aea39cf419ecf3b08d1d9947bc56e196ef186/regex-2026.7.19-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8cae6fd77a5b72dae505084b1a2ee0360139faf72fedbab667cd7cc65aae7a6a", size = 917534, upload-time = "2026-07-19T00:19:24.529Z" }, + { url = "https://files.pythonhosted.org/packages/52/92/8b2bd872782ce8c42691e39acb38eb8efe014e5ddb78ad7d943d6f197ce9/regex-2026.7.19-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9724e6cb5e478cd7d8cabf027826178739cb18cf0e117d0e32814d479fa02276", size = 816135, upload-time = "2026-07-19T00:19:26.919Z" }, + { url = "https://files.pythonhosted.org/packages/de/2d/33a602f657bdc4041f17d79f92ab18261d255d91a06117a6e29df023e5e2/regex-2026.7.19-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:572fc57b0009c735ee56c175ea021b637a15551a312f56734277f923d6fd0f6c", size = 785492, upload-time = "2026-07-19T00:19:29.192Z" }, + { url = "https://files.pythonhosted.org/packages/9e/36/0987cf4cb271680064a70d24a475873775a151d0b7058698a006cb0cae4a/regex-2026.7.19-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:20568e182eb82d39a6bf7cff3fd58566f14c75c6f74b2c8c96537eecf9010e3a", size = 800658, upload-time = "2026-07-19T00:19:31.392Z" }, + { url = "https://files.pythonhosted.org/packages/a8/24/c14f31c135e1ba55fa4f9a58ca98d0842512bf6188230763c31c8f449e3b/regex-2026.7.19-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:1d58561843f0ff7dc78b4c28b5e2dc388f3eff94ebc8a232a3adba961fc00009", size = 865073, upload-time = "2026-07-19T00:19:33.485Z" }, + { url = "https://files.pythonhosted.org/packages/14/85/181a12211f22469f24d2de1ebddfe397d2396e2c29013b9a58134a91069a/regex-2026.7.19-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:61bb1bd45520aacd56dd80943bd34991fb5350afdd1f36f2282230fd5154a218", size = 773684, upload-time = "2026-07-19T00:19:35.599Z" }, + { url = "https://files.pythonhosted.org/packages/23/58/bd1a0c1a62251366f8d21f41b1ea3c76994962071b8b6ea42f72d505c0f0/regex-2026.7.19-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:cd3584591ea4429026cdb931b054342c2bcf189b44ff367f8d5c15bc092a2966", size = 857769, upload-time = "2026-07-19T00:19:37.738Z" }, + { url = "https://files.pythonhosted.org/packages/e4/4f/f7e2dad6756b2fe1fe75dd90a628c3b45f249d39f948dd90cd2476325417/regex-2026.7.19-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5cc26a66e212fa5d6c6170c3a40d99d888db3020c6fdab1523250d4341382e44", size = 804546, upload-time = "2026-07-19T00:19:40.229Z" }, + { url = "https://files.pythonhosted.org/packages/2b/d7/01d31d5bdb09bc026fab77f59a371fdf8f9b292e4810546c56182ca70498/regex-2026.7.19-cp314-cp314t-win32.whl", hash = "sha256:2c4e61e2e1be56f63ec3cc618aa9e0de81ef6f43d177205451840022e24f5b78", size = 274526, upload-time = "2026-07-19T00:19:42.398Z" }, + { url = "https://files.pythonhosted.org/packages/52/0e/cea4ce73bc0a8247a0748228ae6669984c7e1f8134b6fa66e59c0572e0ea/regex-2026.7.19-cp314-cp314t-win_amd64.whl", hash = "sha256:c639ea314df70a7b2811e8020448c75af8c9445f5a60f8a4ced81c306a9380c2", size = 283763, upload-time = "2026-07-19T00:19:44.644Z" }, + { url = "https://files.pythonhosted.org/packages/6f/b6/26e41975febae63b7a6e3e02f32cff6cff2e4f10d19c929082f56aebf7c6/regex-2026.7.19-cp314-cp314t-win_arm64.whl", hash = "sha256:9a15e785f244f3e07847b984ce8773fc3da10a9f3c131cc49a4c5b4d672b4547", size = 283451, upload-time = "2026-07-19T00:19:46.639Z" }, ] [[package]] @@ -2492,16 +2493,16 @@ wheels = [ [[package]] name = "rich-toolkit" -version = "0.20.1" +version = "0.20.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "rich" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/29/63/3e427c62f1992945c997d4ec31e2fcb37d26aadbe5aa44ae5b29f7f64d26/rich_toolkit-0.20.1.tar.gz", hash = "sha256:c7336ae281f435c785acecaedc4b71d4b663dc73d9c8079fea96372527e822a4", size = 203473, upload-time = "2026-06-05T08:56:57.679Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/3a/a258c2fbc6c6bdf428611388f5698ba5d57ffdf0755e1cab474d9cc47813/rich_toolkit-0.20.3.tar.gz", hash = "sha256:223dd2cfba325ed55e94933b9e53f3aca13e9fdf76622bd564c18109a2273c1b", size = 205355, upload-time = "2026-07-13T14:38:06.837Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/88/309f07d08155da2ba1d5ceb42d270fb42fbe34a807684543e3ffc10fe713/rich_toolkit-0.20.1-py3-none-any.whl", hash = "sha256:2a6d5f8e15759b9eba5a9ee63da10b275359ead20e5a0fc92bd5b4dbae8ce4bf", size = 35525, upload-time = "2026-06-05T08:56:58.586Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ce/639d0d0ce3d25c5edbd1afecd308bb35dc04883a45ac9f0855c8aee4e919/rich_toolkit-0.20.3-py3-none-any.whl", hash = "sha256:419aa87516d5f3849cca553c6dcf707c02a36d508fcf996946606725d34a3002", size = 36195, upload-time = "2026-07-13T14:38:05.687Z" }, ] [[package]] @@ -2572,39 +2573,39 @@ wheels = [ [[package]] name = "ruff" -version = "0.15.21" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0f/36/6f65aa9989acdec45d417192d8f4e7921931d8a6cf87ac74bce3eed98a8e/ruff-0.15.21.tar.gz", hash = "sha256:d0cfc841c572283c36548f82664a54ce6565567f1b0d5b4cf2caac693d8b7500", size = 4769401, upload-time = "2026-07-09T20:01:34.005Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/c6/ede15cac6839f3dbce52565c8f5164a8210e669c7bc4decb03e5bdf47d0d/ruff-0.15.21-py3-none-linux_armv6l.whl", hash = "sha256:63ea0e965e5d73c90e95b2434beeafc70820536717f561b32ab6e777cb9bdf5d", size = 10854342, upload-time = "2026-07-09T20:00:53.998Z" }, - { url = "https://files.pythonhosted.org/packages/28/9d/d825b07ee7ea9e2d61df92a860033c94e06e7300d50a1c2653aac27d24fe/ruff-0.15.21-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0f212c5d7d54c01bbfe6dcab02b724a39300f3e34ed7acbe995ccb320a2c58bd", size = 11139539, upload-time = "2026-07-09T20:00:57.809Z" }, - { url = "https://files.pythonhosted.org/packages/f5/de/3b107712e642f063c7a9e0887c427b22cb44097de5aab36c05f2e280670c/ruff-0.15.21-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e6312e41bc96791299614995ea3a977c5857c3b5662b1ecef6755b02b87cb646", size = 10595437, upload-time = "2026-07-09T20:01:00.006Z" }, - { url = "https://files.pythonhosted.org/packages/9a/6f/b4523cc90ba239ede441447a19d0c968846a3012e5a0b0c5b62831a3d5e3/ruff-0.15.21-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01d65b4831c6b2a4ba8ee6faa84049d44d982b7a706e622c4094c509e51673be", size = 10990053, upload-time = "2026-07-09T20:01:02.187Z" }, - { url = "https://files.pythonhosted.org/packages/92/cc/c6a9872a5375f0628875481cf2f66b13d7d865bf3ca2e57f91c7e762d976/ruff-0.15.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c5a913a589120ce67933d5d05fd6ddbcc2481c6a054980ee767f7414c72b4fd", size = 10666096, upload-time = "2026-07-09T20:01:04.299Z" }, - { url = "https://files.pythonhosted.org/packages/ab/97/c621f7a17e097f1790fa3af6374138823b330b2d03fc38337945daca212c/ruff-0.15.21-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef04b681d02ad4dc9620f00f83ac5c22f652d0e9a9cfe431d219b16ad5ccc41", size = 11537011, upload-time = "2026-07-09T20:01:06.771Z" }, - { url = "https://files.pythonhosted.org/packages/ea/51/d928727e476e25ccc57c6f449ffd80241a651a973ad949d39cfb2a771d28/ruff-0.15.21-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16d090c0740916594157e75b80d666eab8e78083b39b3b0e1d698f4670a17b86", size = 12347101, upload-time = "2026-07-09T20:01:08.859Z" }, - { url = "https://files.pythonhosted.org/packages/1e/88/8cd62026802b16018ad06931d87997cf795ba2a6239ab659606c87d96bf0/ruff-0.15.21-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a10e74757dd65004d779b73e2f3c5210156d9980b41224d50d2ebcf1db51e67", size = 11572001, upload-time = "2026-07-09T20:01:11.092Z" }, - { url = "https://files.pythonhosted.org/packages/b2/97/f63084cf55444fc110e8cb985ebfcc592af47f597d44453d778cb81bc156/ruff-0.15.21-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bab0905d2f29e0d9fbc3c373ed23db0095edaa3f71f1f4f519ec15134d9e85c8", size = 11549239, upload-time = "2026-07-09T20:01:13.27Z" }, - { url = "https://files.pythonhosted.org/packages/9d/77/f107da4a2874b7715914b03f09ba9c54424de3ff8a1cc5d015d3ee2ce0ac/ruff-0.15.21-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:00eca240af5789fec6fe7df74c088cc1f9644ed83027113468efba7c92b94075", size = 11535340, upload-time = "2026-07-09T20:01:15.206Z" }, - { url = "https://files.pythonhosted.org/packages/d5/e9/601deb322d3303a7bf212b0100ead6f2ee3f6a044d89c30f2f92bf83c731/ruff-0.15.21-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:262ab31557a75141325e32d3357f3597645a7f084e732b6b054dde428ecd9341", size = 10964048, upload-time = "2026-07-09T20:01:17.723Z" }, - { url = "https://files.pythonhosted.org/packages/ea/2e/0f2176d1e99c15192caea19c8c3a0a955246b4cb4de795042eeb616345cd/ruff-0.15.21-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:659c4e7a4212f83306045ec7c5e5a356d16d9a6ef4ae0c7a4d872914fc655d9d", size = 10667055, upload-time = "2026-07-09T20:01:19.73Z" }, - { url = "https://files.pythonhosted.org/packages/48/60/abd74a02e0c4214f12a68becfd30af7165cfdcb0e661ecdc60bbb949c09a/ruff-0.15.21-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9e866eab611a5f959d36df2d10e446973a3610bc42b0c15b31dc27977d59c233", size = 11242043, upload-time = "2026-07-09T20:01:21.947Z" }, - { url = "https://files.pythonhosted.org/packages/b2/c6/583075d8ccabb4b229345edcaf1545eb3d8d6be90f686a479d7e94088bbf/ruff-0.15.21-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e89bc93c0d3803ba870b55c29671bad9dc6d94bb1eb181b056b52eb05b52854f", size = 11648064, upload-time = "2026-07-09T20:01:24.023Z" }, - { url = "https://files.pythonhosted.org/packages/3a/3c/37d0ecb729a7cc2d393ea7dce316fc585680f35d93b8d62139d7d0a3700c/ruff-0.15.21-py3-none-win32.whl", hash = "sha256:01f8d5be84823c172b389e123174f781f9daf86d6c58719d603f941932195cdd", size = 10896555, upload-time = "2026-07-09T20:01:26.941Z" }, - { url = "https://files.pythonhosted.org/packages/c0/b8/e43466b2a6067ce91e669068f6e28d6c719a920f014b070d5c8731725de3/ruff-0.15.21-py3-none-win_amd64.whl", hash = "sha256:d4b8d9a2f0f12b816b50447f6eccb9f4bb01a6b82c86b50fb3b5354b458dc6d3", size = 12038772, upload-time = "2026-07-09T20:01:29.497Z" }, - { url = "https://files.pythonhosted.org/packages/dd/75/e90ab9aeece218a9fc5a5bc3ec97d0ee6bb3c4ff95869463c1de58e29a1c/ruff-0.15.21-py3-none-win_arm64.whl", hash = "sha256:6e83115d4b9377c1cbc13abf0e051f069fab0ef815ea0504a8a008cee24dd0a8", size = 11375265, upload-time = "2026-07-09T20:01:31.772Z" }, +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4d/94/1e5e4967626faf12fa56999cd6222dff6992ceb086ad7945756baf70c7a7/ruff-0.16.0.tar.gz", hash = "sha256:e460aafd5495ec89efaa6ced2e4a9a581116451e1c88b9d37ef497e0f8e93982", size = 4790557, upload-time = "2026-07-23T19:11:30.981Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/81/1c8818fee7ce1a04cd7d1b3172e0a8f8e4f1dc4feb7fc390e16daa8af323/ruff-0.16.0-py3-none-linux_armv6l.whl", hash = "sha256:e5115729eb08c585e5121978ba5d5b60caeae394ce21b9fb5e6cd33a1c6c9b1e", size = 10754633, upload-time = "2026-07-23T19:10:46.415Z" }, + { url = "https://files.pythonhosted.org/packages/23/df/beaf59c09d68db84304d555f188b276a77132a5d5b0b67a5c762aa143628/ruff-0.16.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3c954b1d580bfa035b41654f7858cc7e71d5fc3ac5b723dd62bd9133830ed522", size = 10969164, upload-time = "2026-07-23T19:10:50.271Z" }, + { url = "https://files.pythonhosted.org/packages/42/ce/741cd197496a1abbf51352710fd15ed995d2a2be87189c1da26a450d6e83/ruff-0.16.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e01c21d10eb1b29f47b7454e1f4056db9a3f0260c646aa88457c610291db9f81", size = 10488846, upload-time = "2026-07-23T19:10:52.639Z" }, + { url = "https://files.pythonhosted.org/packages/52/2a/a2db8e88cade358f5cdcb05674a917751074109315d014eb6352d9a893f7/ruff-0.16.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e364e5ed22ed8dc05082fd78e35308618260907ac2d3c1d637b2e682415b6c9", size = 10889729, upload-time = "2026-07-23T19:10:54.89Z" }, + { url = "https://files.pythonhosted.org/packages/42/65/62a771694ebd63029dc953e27dbad40e1588bd4860ff9fe881018fddaa49/ruff-0.16.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d327b8fc113a1d4421a04f3839d3752057c8dd1ee320223a6f3f52d04ada462a", size = 10568275, upload-time = "2026-07-23T19:10:56.993Z" }, + { url = "https://files.pythonhosted.org/packages/3f/e2/ced249fe8af5f086c5c58cc21cc3356d50f32f7401c5df87050c999620a7/ruff-0.16.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b50c55e263103586b3dcf5f73d479eb8cb5fdb6098fec59a62891dab653717", size = 11385112, upload-time = "2026-07-23T19:10:59.615Z" }, + { url = "https://files.pythonhosted.org/packages/87/0b/05154977a8fd69eeb6c103271f55403bfd8711f5c0f8ed07489d95a504e7/ruff-0.16.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ff4a79ce3ec0172f3241943835de1c4cb4e2dcd07f0f8c2d02603dbbbee4b17", size = 12207008, upload-time = "2026-07-23T19:11:02.154Z" }, + { url = "https://files.pythonhosted.org/packages/fb/29/98225831a3a1eab0e02f4acc6ca6559a98611dcc68b6965ff4b7234627c1/ruff-0.16.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e95c448fca1fb2a18372a9440926c5a6ee789639bb975c72e7ae6d0b04218ab4", size = 11650842, upload-time = "2026-07-23T19:11:04.557Z" }, + { url = "https://files.pythonhosted.org/packages/91/66/6bd3cf90500653d55dc0ffc8507aa8300bd49d0214b2e8cb4d3fef2943ba/ruff-0.16.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f11a8d11010301d0a398a2fdef67691feca7294da6aef55e2150e8fa2cd520b", size = 11400718, upload-time = "2026-07-23T19:11:09.233Z" }, + { url = "https://files.pythonhosted.org/packages/8e/a2/a54eb4eae05d66364050a5d3b8a9c5ef88196531b3cbe7109d873f87f819/ruff-0.16.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:48044c678e9cb8698246c99b14aaccfa6601dea7379eb48a6f8f73f7a6d86cd0", size = 11426177, upload-time = "2026-07-23T19:11:11.994Z" }, + { url = "https://files.pythonhosted.org/packages/1a/be/16e3eea4b2a478a496919f5e36f17c4559e54620bd3bbac5d6affa068006/ruff-0.16.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7aa0959bad8eb8bef50340154fc9b58678dae31fa4293afa38b44b6e552c0213", size = 10856126, upload-time = "2026-07-23T19:11:14.221Z" }, + { url = "https://files.pythonhosted.org/packages/a2/84/252eb8b868a16eec7257c14f504f77537e734b2d69c762e639e588e304a3/ruff-0.16.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:28ea2b7df8ebf7f9da6b7d47b230ab48f387c0a29be3b474c4d0740e197bb9af", size = 10571208, upload-time = "2026-07-23T19:11:16.378Z" }, + { url = "https://files.pythonhosted.org/packages/21/09/817a482f542f7570cbb4554b26e896610c7114f539b1d9e2d2145bf6bef6/ruff-0.16.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:33a3dfac8c35f81498dea9181bccc2f4c4bc8f1521a1dd9406e77643e0f0fb09", size = 11063329, upload-time = "2026-07-23T19:11:19.173Z" }, + { url = "https://files.pythonhosted.org/packages/2e/23/9403c180ca1cb9b1f7335f5c3e5305c09d49ea5b345196682a36028bde4a/ruff-0.16.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a5237a0bda500d30d81b8e07a6973a5cbc772864cbf746ae2f4e8a2e01c9f4ed", size = 11489751, upload-time = "2026-07-23T19:11:21.74Z" }, + { url = "https://files.pythonhosted.org/packages/b2/1d/1b2ef7bcde851c78d7f17f1cca13fd6dc695fc4b3d6197941e72cae5b132/ruff-0.16.0-py3-none-win32.whl", hash = "sha256:7fab76fa065c873f41ff744347c6e77bcc3dfec4bcc754dc26b63d23c0f7f5fb", size = 10785885, upload-time = "2026-07-23T19:11:23.947Z" }, + { url = "https://files.pythonhosted.org/packages/b2/a3/d5e4ef7a56be3f928ffb90b94c25ba7d3cb9c7fe0736aeaaedf361770712/ruff-0.16.0-py3-none-win_amd64.whl", hash = "sha256:429c117f022bf481fabd9d551e7a3952b24c65e6ef44337ea09d90bebef14472", size = 11923141, upload-time = "2026-07-23T19:11:26.409Z" }, + { url = "https://files.pythonhosted.org/packages/cb/9a/8415f2657cbe200f41a4531ccededf135505a92d4a012229121f885b26f9/ruff-0.16.0-py3-none-win_arm64.whl", hash = "sha256:14296fedcd2705c77ab8235439278bbb38f285cf7da5528b00b3e330c3d4872d", size = 11273407, upload-time = "2026-07-23T19:11:28.705Z" }, ] [[package]] name = "s3transfer" -version = "0.19.1" +version = "0.19.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "botocore" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/65/da/4bef7ce7bb989b222aa4785a413896dbec53306dfc59c6ce7d16a7ffbd6a/s3transfer-0.19.1.tar.gz", hash = "sha256:d3d6371dc3f1e5c5427b2b457bcf13bcf87bec334c95aed18642eae61f6926f3", size = 165354, upload-time = "2026-07-10T19:32:04.849Z" } +sdist = { url = "https://files.pythonhosted.org/packages/76/43/35e4d8aa320bffe8287fe8f65f578fa2d2db0a64212f0e710dce58267854/s3transfer-0.19.2.tar.gz", hash = "sha256:ba0309fd86be3c27dbf78cdd813c13c5e1df16e5874b99d2535ebbdfb9892993", size = 165592, upload-time = "2026-07-22T19:30:44.432Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/24/23/e84c64ad0e8bc59cd1b2ef98def848deff0ef3456c542afe74d51e9e8c85/s3transfer-0.19.1-py3-none-any.whl", hash = "sha256:d5fd7005ee39307455ad5f310b5ea67f4b1960d7fed5b3671ee50c249de675de", size = 90072, upload-time = "2026-07-10T19:32:03.673Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e7/5c595c75e9f41a44f30e526eda465ea0b4eec93470e074e4a111b253f13a/s3transfer-0.19.2-py3-none-any.whl", hash = "sha256:d8168eccca828cbb2cd573675333f3bddd254313a9c42494b84c76b539e8ba25", size = 90216, upload-time = "2026-07-22T19:30:43.251Z" }, ] [[package]] @@ -2722,7 +2723,7 @@ wheels = [ [[package]] name = "typer" -version = "0.26.8" +version = "0.27.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-doc" }, @@ -2730,18 +2731,18 @@ dependencies = [ { name = "rich" }, { name = "shellingham" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7c/f7/68adc395201b20b872d68e975386832e8005ffeacedd43a1d837a32815be/typer-0.26.8.tar.gz", hash = "sha256:c244a6bd558886fe3f8780efb6bdd28bb9aff005a94eedebaa5cb32926fe2f7e", size = 202097, upload-time = "2026-06-26T09:22:45.705Z" } +sdist = { url = "https://files.pythonhosted.org/packages/37/78/fda3361b56efc27944f24225f6ecd13d96d6fcfe37bd0eb34e2f4c63f9fc/typer-0.27.0.tar.gz", hash = "sha256:629bd12ea5d13a17148125d9a264f949eb171fb3f120f9b04d85873cab054fa5", size = 203430, upload-time = "2026-07-15T19:21:07.007Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/80/87/b9fd69c92c6102a066e1b86a35243f53e70bd4c709f2a26d9f4fee4f4dc0/typer-0.26.8-py3-none-any.whl", hash = "sha256:3512ca79ac5c11113414b36e80281b872884477722440691c89d1112e321a49c", size = 122564, upload-time = "2026-06-26T09:22:44.72Z" }, + { url = "https://files.pythonhosted.org/packages/40/03/26a383c9e58c213199d1aad1c3d353cfc22d4444ec6d2c0bf8ad02523843/typer-0.27.0-py3-none-any.whl", hash = "sha256:6f4b27631e47f077871b7dc30e933ec0131c1390fbe0e387ea5574b5bac9ccf1", size = 122716, upload-time = "2026-07-15T19:21:05.553Z" }, ] [[package]] name = "types-pyyaml" -version = "6.0.12.20260518" +version = "6.0.12.20260724" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b8/83/4a1afc3fbfcf5b8d46fc390cd95ed6b0dc9010a265f4e9f46314efffa37a/types_pyyaml-6.0.12.20260518.tar.gz", hash = "sha256:d917f83fb38462550338c1297faedd860b3ec83912b96b1e3d73255f7473e466", size = 17850, upload-time = "2026-05-18T06:01:58.675Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/6f/a28f44bcd56bebed42b028a2894c79853e2f5e6b5279e633cb3f287a05e7/types_pyyaml-6.0.12.20260724.tar.gz", hash = "sha256:3c1ce1bb73cd5ec02e90390c2b1f00e810d241d8825fd73ff359696839271b6b", size = 17893, upload-time = "2026-07-24T04:58:43.453Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/06/a2/c01db32be2ae7d6a1689972f3c492b149ee4e164b12fdfd9f64b50888215/types_pyyaml-6.0.12.20260518-py3-none-any.whl", hash = "sha256:d2150f75a231c9fe9c7463bd29487d93e60bac90400287351384bc2284eba7cd", size = 20312, upload-time = "2026-05-18T06:01:57.368Z" }, + { url = "https://files.pythonhosted.org/packages/8b/42/0337fefc615e20ee55d1c8f71b774a9b2b734a04669139c20753b27a2a3a/types_pyyaml-6.0.12.20260724-py3-none-any.whl", hash = "sha256:d57db930a4b2efbc57cf430ec8882765d246929432fa253092f383902329a453", size = 20312, upload-time = "2026-07-24T04:58:42.486Z" }, ] [[package]] @@ -2803,15 +2804,15 @@ wheels = [ [[package]] name = "uvicorn" -version = "0.51.0" +version = "0.52.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "h11" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a2/65/b7c6c443ccc58678c91e1e973bbe2a878591538655d6e1d47f24ba1c51f3/uvicorn-0.51.0.tar.gz", hash = "sha256:f6f4b69b657c312f516dd2d268ab9ae6f254b11e4bac504f37b2ab58b24dd0b0", size = 94412, upload-time = "2026-07-08T10:59:05.962Z" } +sdist = { url = "https://files.pythonhosted.org/packages/05/c8/2d307868453a4bca6e64fa3581d122ae0748a0869c53f159339def179c7c/uvicorn-0.52.0.tar.gz", hash = "sha256:ca8876ad6c1983f394157c168b39d52f6dd56dabf5602fa0982751cffc2293ae", size = 97504, upload-time = "2026-07-29T08:45:34.065Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/ec/dbb7e5a6b91f86bfb9eb7d2988a2730907b6a729875b949c7f022e8b88fa/uvicorn-0.51.0-py3-none-any.whl", hash = "sha256:5d38af6cd620f2ae3849fb44fd4879e0890aa1febe8d47eb355fb45d93fe6a5b", size = 73219, upload-time = "2026-07-08T10:59:04.44Z" }, + { url = "https://files.pythonhosted.org/packages/39/e6/b5c0630ace9757232aec07112be8146b812787db52141ff9d50674aa7634/uvicorn-0.52.0-py3-none-any.whl", hash = "sha256:3d887809810b89ed33501bcf0a9aba469b06ecd608158efce04bd6b48d8c9b08", size = 79058, upload-time = "2026-07-29T08:45:32.492Z" }, ] [package.optional-dependencies] @@ -2855,7 +2856,7 @@ wheels = [ [[package]] name = "virtualenv" -version = "21.6.1" +version = "21.7.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, @@ -2863,9 +2864,9 @@ dependencies = [ { name = "platformdirs" }, { name = "python-discovery" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/34/d9/b477fddb68840b570af8b22afe9b035cbc277b5fb7b33dea390617a8b10f/virtualenv-21.6.1.tar.gz", hash = "sha256:15f978b7cd329f24855ff4a0c4b4899cc7678589f49adbdcbbb4d3232e641128", size = 5526620, upload-time = "2026-07-10T19:33:53.312Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/25/e367a7229b0914772ca8d81b41fde012d9feda68523b52644a571bb21ce8/virtualenv-21.7.0.tar.gz", hash = "sha256:7f9519b9432ff11b6e1a3e94061664efc2ff99ea21780e3cf4f6bd0a5da8b37c", size = 5527510, upload-time = "2026-07-21T13:12:14.109Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl", hash = "sha256:afe991df855715a2b2f60edfcc0107ef95a79fdfd8cb4cdaa71603d1c12e463b", size = 5506392, upload-time = "2026-07-10T19:33:51.629Z" }, + { url = "https://files.pythonhosted.org/packages/a5/7a/ae29312b1e88a22e81f5d21fc11526d2a114089776c2550d2b205b6c2a47/virtualenv-21.7.0-py3-none-any.whl", hash = "sha256:a8370c1c5530fbabf955e40b8fbbc68a431648b10f9433faa587db30a06e51dd", size = 5507078, upload-time = "2026-07-21T13:12:12.136Z" }, ] [[package]] @@ -2968,45 +2969,51 @@ wheels = [ [[package]] name = "websockets" -version = "16.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8c/02/b9a097e1e16fee4e2fd1ec8c39f6a9c5d6257bae8fa12640caf869f54436/websockets-16.1.tar.gz", hash = "sha256:299468cbe42e2b9981134c7c51d99387d8a7bf562b00183b3eec53f882846dad", size = 182530, upload-time = "2026-07-10T06:32:57.734Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/e6/da1dc11507f8118145a81c751fe0c77e5e1c11b8554496addb39389e2dc2/websockets-16.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:f881fca0a45dd6789939bd6637cd98169b92f1c3fdc78262f2cb9ec2cb1f324e", size = 179833, upload-time = "2026-07-10T06:31:58.19Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ac/c0d46f62e31e232487b2c123bc3cfd9a4e45684ca7dc0c37f0987f29baae/websockets-16.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:30c379d5b207d3a7f0ba4c2e4602a895b0bcc63fb5f5371a4ae7fbddb03b672b", size = 177524, upload-time = "2026-07-10T06:31:59.563Z" }, - { url = "https://files.pythonhosted.org/packages/4a/33/abd966074b34a51e4f134e0aaed80f5a4a0a35163ea5ac58a1bc5a076d23/websockets-16.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:98ab58a4faa72b46da0127ccc1931dcbfc0985b0778892300a092185910c4cbe", size = 177743, upload-time = "2026-07-10T06:32:00.959Z" }, - { url = "https://files.pythonhosted.org/packages/ea/30/646e47b8a8dff04e227bdab512e6dde60663a647eeac7bbd6edddd92bbc5/websockets-16.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8e9c4e369fc181b2d41a99e01477215cecdc8546a39f7d41a59cc0a7065a0b09", size = 187474, upload-time = "2026-07-10T06:32:02.54Z" }, - { url = "https://files.pythonhosted.org/packages/d2/72/890ab9d77494af93ea65268230bfbc0a90ba789401ed7a44356a44785644/websockets-16.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0704df094b2d5fa7f6f410925a594c2a5c9a09167731a76292e5410934208209", size = 188717, upload-time = "2026-07-10T06:32:04.156Z" }, - { url = "https://files.pythonhosted.org/packages/d5/aa/baedbbaa6bf9ed6029617ed5e8976535bd805f483ca9b3484e7ad9ee08bf/websockets-16.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b22b1f4950f6ab7126623329c3b47b3b90a14c05db517f2db2a026ad6c928352", size = 190090, upload-time = "2026-07-10T06:32:05.822Z" }, - { url = "https://files.pythonhosted.org/packages/52/4f/d813ec94e18002571ef4959d87a630eff6e01b72a51bcb0832b75ae8c51a/websockets-16.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1ae4a686a662964a6671069f84f7f908cc3475e782227726b0c622c715962105", size = 189320, upload-time = "2026-07-10T06:32:07.223Z" }, - { url = "https://files.pythonhosted.org/packages/b8/3c/8ec52a6662f3df64090fba28cd521d405d54759268d8e820477037e8c80d/websockets-16.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:856bdd638f8277f86465057bfdd4da097c73058fb0f9d2bd5baea29e2bf2d367", size = 188068, upload-time = "2026-07-10T06:32:08.586Z" }, - { url = "https://files.pythonhosted.org/packages/96/7f/f0ae6042b14f86fa5f996c6563ea4cf107adc036ccbedc9d4f418d0095f9/websockets-16.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9003a1fde1c21a322a3ca3fa0c4bda8c639da81dbc925162766086643b05ba87", size = 185493, upload-time = "2026-07-10T06:32:09.968Z" }, - { url = "https://files.pythonhosted.org/packages/89/ad/5ffc53af9939c49fd653d147fa5b8f78ced1f6bce6c49a7446860945b0ce/websockets-16.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:39e947b1f5fdab045174306e3916785bf3ed537648acc1549827c08c33b10953", size = 188141, upload-time = "2026-07-10T06:32:11.434Z" }, - { url = "https://files.pythonhosted.org/packages/67/62/729206c0ee577a4db8eae6dd06e0eef725a1287c6df11b2ef831d003df31/websockets-16.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5dd0e666b5931c0509cf65714686a1c5126771e663a79ac5d40da4f58b1f9502", size = 186653, upload-time = "2026-07-10T06:32:12.845Z" }, - { url = "https://files.pythonhosted.org/packages/1b/86/e8806a99ec4589914f255e6b658853fe537bf359c05e6ba5762ad9c27917/websockets-16.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:a0285df7925657ad65a65fb8dc330808bce082827538fd50ef45fa12d1fc5bca", size = 188614, upload-time = "2026-07-10T06:32:14.236Z" }, - { url = "https://files.pythonhosted.org/packages/89/38/ac554e2fc6ff0b8deeff9798b92e7abd8f99e2bd9731532e7033de208220/websockets-16.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:82d1c2cab3c133e9d059b3a5420bed9376bd30e21c185c63dda4ddadf6ddda47", size = 186165, upload-time = "2026-07-10T06:32:15.626Z" }, - { url = "https://files.pythonhosted.org/packages/6c/c5/4ef4d8e53342f94f3c49e1ae089b32c1e8b3878e15e0022c7708c647f351/websockets-16.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:c39907f1eaf11f6277def65aa02d68f30576b693d0c1ca332aafa3caa723ac6d", size = 187119, upload-time = "2026-07-10T06:32:17.114Z" }, - { url = "https://files.pythonhosted.org/packages/3a/33/4788b1dd417bd97eeb2698af3b9df6775ac656f96e9987da0419a067602f/websockets-16.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:45c5ea55446171949eb99fd34b771ceddd511ca21958d40d0197ced33159e5ee", size = 187411, upload-time = "2026-07-10T06:32:18.629Z" }, - { url = "https://files.pythonhosted.org/packages/30/38/00d37aad6dc3244ce349e2864815362e50b3cfc00cac28d216db20efe40f/websockets-16.1-cp314-cp314-win32.whl", hash = "sha256:b8ef8b1c8d6bd029a475ac432e730fba2dfd456715d26c473e2a82291024b99c", size = 179822, upload-time = "2026-07-10T06:32:20.233Z" }, - { url = "https://files.pythonhosted.org/packages/9d/37/2a8cb0eaddee5eaebda47a90a3ba0898d1ce3d866b02a4857fea17d82e5b/websockets-16.1-cp314-cp314-win_amd64.whl", hash = "sha256:7358ff21632b5d062707f73e859c824f1c3807e73d8ca25e71caca7c4cdcf145", size = 180167, upload-time = "2026-07-10T06:32:21.749Z" }, - { url = "https://files.pythonhosted.org/packages/07/5a/262ad5fcaef4198997b165060f09a63f861e76939b1786ab546ccc3f8120/websockets-16.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d0f38f4c3e9b359e257c339c2cc1967ccaeedb102e57c1c986bdce4bf4f32268", size = 180166, upload-time = "2026-07-10T06:32:23.278Z" }, - { url = "https://files.pythonhosted.org/packages/1a/c7/36377db690f4292826e4501a6dec2801dc55fd1cf0405923b04937e478df/websockets-16.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3c3d2cbd1602593bad49bd86fa3fbb25407d87a3b4bf8857c0ac5ac4914e1901", size = 177697, upload-time = "2026-07-10T06:32:25.164Z" }, - { url = "https://files.pythonhosted.org/packages/fa/c7/07171abce1e39799a76f473608580fe98bd43a1230f5146159622c02bccf/websockets-16.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:36069b74671e7e667f48a7484249f84c45a825a134c8b1bdc01875d0daa10d79", size = 177902, upload-time = "2026-07-10T06:32:26.564Z" }, - { url = "https://files.pythonhosted.org/packages/14/17/c831f48e250bc4749f57c00dcce73337c41cd32f6d59a64567b84e782601/websockets-16.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:587f83c2ce8a5d628e166384d77fa7f0ac69b9007d515ab442123e6615aa8da3", size = 187766, upload-time = "2026-07-10T06:32:27.981Z" }, - { url = "https://files.pythonhosted.org/packages/2c/2e/4dfe63e245b0ecfaf470cf082d25c6ce35808159135fd88c82653a6b11ab/websockets-16.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a6db7972d52bc1b66cefe2246902e256cbaebc9ba8a45eac09343d7eb6671b2", size = 188939, upload-time = "2026-07-10T06:32:29.365Z" }, - { url = "https://files.pythonhosted.org/packages/ba/e5/5faf65aebd9562f6b4bc473d24ce38cc56f84eb5f5bee66ed9b86733f93c/websockets-16.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e7d6014888a0632e1ed7a4095248bb3095232999447f2d83bfb1900987dd9ed9", size = 191081, upload-time = "2026-07-10T06:32:30.868Z" }, - { url = "https://files.pythonhosted.org/packages/49/cd/2634f2f2c0556c1aae6501ed6840019cc569dd6fdbcac6494378daea4dc0/websockets-16.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9cb074d150e4ad2a77aa8a332c2be85f3f64f2681519d2570c1225c12c9821ff", size = 189513, upload-time = "2026-07-10T06:32:32.399Z" }, - { url = "https://files.pythonhosted.org/packages/59/bb/2c700b51196104f09715b326b1f092ed25326bdf79a03e00a4842e503743/websockets-16.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d19c9067e1fe9490f974bffbc0e443b80a7674c5efb4980c429cc00771f07c5a", size = 188240, upload-time = "2026-07-10T06:32:33.897Z" }, - { url = "https://files.pythonhosted.org/packages/f1/20/86283636e499a1a357fa9441f690ba34f255e731f2fea174132b3b762b57/websockets-16.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d440ff0c6c7469ad59c0a412c383c235935b43635e89425e3f6a0c36de90c31b", size = 185955, upload-time = "2026-07-10T06:32:35.279Z" }, - { url = "https://files.pythonhosted.org/packages/91/23/d7fb734b0095d43bc7f1c9f68afd50adb4176e7e513403e8c70ad7daa4fa/websockets-16.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8613129a2533f08de24505e69a3e403cedaadae49abdb043c4d170ca71b7e4bd", size = 188491, upload-time = "2026-07-10T06:32:36.673Z" }, - { url = "https://files.pythonhosted.org/packages/6a/5e/168a192689db468405ecf3b8e4a2c18811936b0724d017ad7e6d252734f0/websockets-16.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:a5bf9c23f197b4ec88290fd5463f33db67362a1bb10f85fc2e8e7627f0ddab97", size = 186983, upload-time = "2026-07-10T06:32:38.207Z" }, - { url = "https://files.pythonhosted.org/packages/7e/9b/66795fa91ebe49019ebe4fa910282172252e37046b80e08fc52e0c365150/websockets-16.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:520b0fd0395f075febb283c76755af724ab9fd19dffa4f3bfd18cb4e622790a3", size = 188890, upload-time = "2026-07-10T06:32:39.545Z" }, - { url = "https://files.pythonhosted.org/packages/5a/32/126bbc844be5afb3613fd43211dac10a9645f4cf39741d04acaa2ec7030c/websockets-16.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:7143aa09a67e1c013be44e81a88dfe90fc6244198ab86c7edd064152cf619805", size = 186583, upload-time = "2026-07-10T06:32:41.038Z" }, - { url = "https://files.pythonhosted.org/packages/22/b9/0b5db9cbcf6e4970db4496893244a8d92e07f71a8ef27cf34b08aa02fef1/websockets-16.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:7acb811fad08e611755800d1560e395c67e11a6bd563598ea6abb319afb86938", size = 187353, upload-time = "2026-07-10T06:32:42.501Z" }, - { url = "https://files.pythonhosted.org/packages/99/2e/254b2131a10d831b76e2c18dfe7add9729c6292c674a8085bf8de01ad151/websockets-16.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c5cf88e3faa2f7931bc6baeee7599c97656a3f6ac7f831f4fccba233e141783a", size = 187784, upload-time = "2026-07-10T06:32:43.929Z" }, - { url = "https://files.pythonhosted.org/packages/21/dc/e7288aa8e3ac5a88a0924619984d663c1abf2a87d0ea98290c66fdaee0ec/websockets-16.1-cp314-cp314t-win32.whl", hash = "sha256:589f8842521c8307684ce0b40ce4ad70c5e0aa46484c6f1225a94ef4b8970341", size = 179947, upload-time = "2026-07-10T06:32:45.495Z" }, - { url = "https://files.pythonhosted.org/packages/d3/de/37edf1260ff0fbbd2f82433489c4cfbe799ac2ff21355331609879329fe6/websockets-16.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c0e0857c30bbbc2bb5c30687508f0b7ec19aa026cd9f2ff8424d0fee42dcc07", size = 180291, upload-time = "2026-07-10T06:32:47.119Z" }, - { url = "https://files.pythonhosted.org/packages/66/58/bd83247f39ddc26ffc2c24eb05087a3b749e00cb4509fc6d19daa23c8495/websockets-16.1-py3-none-any.whl", hash = "sha256:c5149dfe490ec7e5ee5dbf624c642fb725f93a5575c7f00ab594ca9eddb8dd81", size = 174031, upload-time = "2026-07-10T06:32:56.079Z" }, +version = "17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/ea/c0f7924f7ccf005d6ad1f829971762ae751727497d6db1977ba5a635314f/websockets-17.0.tar.gz", hash = "sha256:6bbe83c4ef52a7533d2d8c6a3512b93722fd0db6bc6bc638d45edd49ef201444", size = 183456, upload-time = "2026-07-29T18:07:16.726Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/6c/ff0c7950af50bae08ce0ae68bbf3fe72710851566693a709231cea9f3fd4/websockets-17.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:94bbd0c509cdbc2cfd245cc5442b2bb6f2a9df6e60a0d9e4f9d1b1926e30dbbd", size = 212783, upload-time = "2026-07-29T18:05:55.773Z" }, + { url = "https://files.pythonhosted.org/packages/ad/4f/1a4f4129c9a8827559eacb4769b78bd856080cf84b8e7c09ae721802f65e/websockets-17.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:bb43ca37efbc140e1e6f1acf8acf7e85569f48fad588ce95e7f8bc723ec506c8", size = 210471, upload-time = "2026-07-29T18:05:57.255Z" }, + { url = "https://files.pythonhosted.org/packages/4e/34/a086c3caf087cc6a3965a09835c856c8e5a870bb611e1ccf6d73f73494aa/websockets-17.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b0958c062f61b05ebc226d4fc8ccf8a10cbd109db06c745a91fee6218fea77e9", size = 210690, upload-time = "2026-07-29T18:05:58.746Z" }, + { url = "https://files.pythonhosted.org/packages/34/2d/0cb31555e1a22c82e1a72e87db1c158a9ef5b71edc16dc30b43ecd60d1de/websockets-17.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:95f3bfa818c458ea6caf5420cd4b9b487b3a61e411fd55e2d5848aa553da15ea", size = 220071, upload-time = "2026-07-29T18:06:00.199Z" }, + { url = "https://files.pythonhosted.org/packages/39/9a/c231a7395aaea78179b660ff06337608db2114cf0e8c172b6e13234459b9/websockets-17.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8ce14ded954d5fdf3a173d951f1a17cfa40456f8cb4289fdc5ed49348351b7a7", size = 220423, upload-time = "2026-07-29T18:06:01.729Z" }, + { url = "https://files.pythonhosted.org/packages/1c/e4/5a61bc45103267ac116c646f632532b31a12b64392b91c8d63cbf0f6845f/websockets-17.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbfb30a6123a2851cb4a4cacc468dabf8d9f335f63f6cd8dd1a23be7c315979e", size = 221669, upload-time = "2026-07-29T18:06:03.385Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c0/f69a14158ac5d2ef47ce435fb25c72ab95f8483db7def5c11d1732f9b108/websockets-17.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ce99ec8fe4509021bffcdd473651ddfe9064ed142ec83f84eec1c2bf2fe6ad37", size = 223041, upload-time = "2026-07-29T18:06:05.131Z" }, + { url = "https://files.pythonhosted.org/packages/6d/22/e24745306baa56abafeaae99975f8dfe4e531f07a198da741ffbf8dcb662/websockets-17.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3bf6df721d343cf628bce98ca23fa36a7b374c9a022f37bbb55a200a242e4afe", size = 222273, upload-time = "2026-07-29T18:06:06.736Z" }, + { url = "https://files.pythonhosted.org/packages/68/1c/ab93e8018e3102268082c5ccb14f7f77795173c918f023cd01d764790ab7/websockets-17.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3c5c1ddd419ae6f61b8f26ea3577f8f6b75c90bfee563cd2feedf773414cea5a", size = 221019, upload-time = "2026-07-29T18:06:08.222Z" }, + { url = "https://files.pythonhosted.org/packages/ae/07/11414c237d046204de8fca6a1ec4cfffe152c3c5c0fed537cfb88b641226/websockets-17.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c9ed428a473c0d54bb8d60d76928a88fc7cbad8581e60996005185c28b755cf2", size = 218280, upload-time = "2026-07-29T18:06:09.756Z" }, + { url = "https://files.pythonhosted.org/packages/01/0b/fc29062bd253ffc0e19279afb7a85df76d0e84d9adb4bc07932138d52fc7/websockets-17.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:78c73aeaaad88633494a5d3e8aa6a2dbc28aad160cdcd99f29f4f2bb3d8842e8", size = 221095, upload-time = "2026-07-29T18:06:11.712Z" }, + { url = "https://files.pythonhosted.org/packages/b1/7b/5c1aaadd1d392a15a3637225128ad15e41f8c170c8c925323b61dc085bf9/websockets-17.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:9c986364dfb39d10a1d06deee2552e89163d9642a9c9175a41bdc8e136ef89a6", size = 219606, upload-time = "2026-07-29T18:06:13.242Z" }, + { url = "https://files.pythonhosted.org/packages/c0/e0/108c722318f8e55570b9705b930d51a4b4ff1bd24d830059d8cbafbdc6b8/websockets-17.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:76431676743151e985ad9f8ae0ca4372ae3ca2e8462f9227ec9bcf6f8b84c762", size = 220392, upload-time = "2026-07-29T18:06:14.884Z" }, + { url = "https://files.pythonhosted.org/packages/71/0a/9ff02d0c71dcb2b3562fc81487e622dbe482e20a45959c37179dd428b3da/websockets-17.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:cfaadf6866cf62edab1c1b8bedf09b80255af90ec00b0eb0da55407d9ec8f260", size = 221564, upload-time = "2026-07-29T18:06:16.434Z" }, + { url = "https://files.pythonhosted.org/packages/25/7f/d3a12c95e509a612d79efa78be50d94663385b11b2345f70ae3b2f210386/websockets-17.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:954b80f73046bc79b694c8c13d7f4429da149183ed45f171008f780048a37f6d", size = 219119, upload-time = "2026-07-29T18:06:17.99Z" }, + { url = "https://files.pythonhosted.org/packages/ba/1b/e33c4027444df9b279807feb87d9312f7ca5fea09e103e53fce21e307ed0/websockets-17.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:a973940286a570d22a6b65b5531ab6e0d6e4485379bcfc11d239a4ab14f28392", size = 220069, upload-time = "2026-07-29T18:06:19.465Z" }, + { url = "https://files.pythonhosted.org/packages/0e/81/6a65d5971b7e328cdb6d503bde0b4063bfea7caab8acfb7837b2876e2fc5/websockets-17.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3c60792e8a1004cc1aba943c4671d35432f903bc57ff338092de4e4062b4a4f3", size = 220363, upload-time = "2026-07-29T18:06:20.928Z" }, + { url = "https://files.pythonhosted.org/packages/4a/b0/2d47c5004c696dc749de93fd1af5730b296a619454efbaf8520bbe65962e/websockets-17.0-cp314-cp314-win32.whl", hash = "sha256:19ef9a3d55b8176ba6b71b6eb11373ccaa2b674162ced5c7ee26dc90d912fbcc", size = 212734, upload-time = "2026-07-29T18:06:22.533Z" }, + { url = "https://files.pythonhosted.org/packages/f3/94/3d3e1c0016f2938ca026172df97f4a84f6d546f422dc4b6cf07ebdbd1a17/websockets-17.0-cp314-cp314-win_amd64.whl", hash = "sha256:bd902b19f9ff1e88dcf9939500dba8da791b8102da93deceafb696659c7c1f94", size = 213079, upload-time = "2026-07-29T18:06:24.554Z" }, + { url = "https://files.pythonhosted.org/packages/46/9d/3a24ef81d8e05beab88bc36d1ed2695ec59c91194fa40f47fbffbccfbbfa/websockets-17.0-cp314-cp314-win_arm64.whl", hash = "sha256:9a7acf1542a53350d4623c023e4944e5fe3bd9ee6b4385b86fd6287d8d549d81", size = 212958, upload-time = "2026-07-29T18:06:26.372Z" }, + { url = "https://files.pythonhosted.org/packages/9d/91/88c7e6b9f1acbe80643f9189c06c8084a6a81e3653fdbb7aafadaabcc4bf/websockets-17.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:583416c24586432ee8a745cca4727efc2d4682c453f69d79debacbde72863160", size = 213116, upload-time = "2026-07-29T18:06:28.095Z" }, + { url = "https://files.pythonhosted.org/packages/f6/3e/ade0e4181523b906fde2097813583a06c54360a38f3730eb86cf12843979/websockets-17.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:208ba355ab37f488b5d19b1c3a70240c88ffb9ce8407ff991f702e5781bbb5c4", size = 210650, upload-time = "2026-07-29T18:06:29.788Z" }, + { url = "https://files.pythonhosted.org/packages/ff/00/75e805330de2413de10c80adb4e46d83b029a168434cb08f8b7a39733e1c/websockets-17.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ce88616250de9fa206c17a484d07ba2fdba94daefedfd7a8ffa689b0c5ec1fe7", size = 210847, upload-time = "2026-07-29T18:06:31.533Z" }, + { url = "https://files.pythonhosted.org/packages/02/6d/63db81708c3b688dfc7f66a9a35a0b09a818b78c6588d5b2745c481c9bbd/websockets-17.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:14a6c9aaed860f9cd1d3fb71b37b38a436b864f2e78ff605491f43da959227fb", size = 220434, upload-time = "2026-07-29T18:06:33.173Z" }, + { url = "https://files.pythonhosted.org/packages/07/cf/b98becac799a2bb4d5e9f197642f1bc82d586ab66314aafe459814cb2d44/websockets-17.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fc5b304b0100aabb46613e6c911fcbb959e5542fd94c89a1e5df704bf703c6ec", size = 220717, upload-time = "2026-07-29T18:06:34.854Z" }, + { url = "https://files.pythonhosted.org/packages/7e/56/c443f81b483de8f40e00cf41037a14ea4f32e1a67110d1be9293cb8980da/websockets-17.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ea0aaf55be94d587f2b895938434d24d809bd34762407a84de67a42cbfe9af61", size = 221891, upload-time = "2026-07-29T18:06:36.499Z" }, + { url = "https://files.pythonhosted.org/packages/ee/c5/97b101b5afef7c527d7f22484abc1f949447d5a6e55d50b78ce90745b8f0/websockets-17.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:15452af52e7e536cd240c0da28605247d0629da828643f5e7d1fd119e7256197", size = 224033, upload-time = "2026-07-29T18:06:39Z" }, + { url = "https://files.pythonhosted.org/packages/3a/8e/2a1e0f66aca3142ea244caa1f03af49616ff43f61a2ab8a60b8da40c6954/websockets-17.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:79bdaf80414d0c0bf86a016dc6fce803e1cde9046cd900298d74690109c5f118", size = 222462, upload-time = "2026-07-29T18:06:40.635Z" }, + { url = "https://files.pythonhosted.org/packages/fd/00/1538ef951aff7616dffaf7cc64cf64e1ddafddcd8ff0ee3d77aedc9c3ce8/websockets-17.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:51e89a46eb1b7c824e8dd85f2a4544503385af68d1017b4a42800523ac35382c", size = 221192, upload-time = "2026-07-29T18:06:42.453Z" }, + { url = "https://files.pythonhosted.org/packages/06/4c/27deb9b47b06fa891798a33c4ef1be5d02f8b3045c313798abb79f56510e/websockets-17.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a34089ead0fd516f4fa0ad4fedad445520f2144f1764d54b8cda07c466edfb49", size = 218746, upload-time = "2026-07-29T18:06:44.346Z" }, + { url = "https://files.pythonhosted.org/packages/e8/03/14ff4635d6afbf23724234e362354d58e128d2a67fea6de3bb9426ae3024/websockets-17.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c3874b45bb5d235c607c910c5721e2f7b3e7a47cc876e0c37108f55554820a69", size = 221443, upload-time = "2026-07-29T18:06:46.254Z" }, + { url = "https://files.pythonhosted.org/packages/eb/1f/6fe2474ce511c604336b29b1798fe01d7688b24568736fbe4d4f09666742/websockets-17.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:d306f1f15f06f879b43036fc4ece102630ca1d48d7cd2ff79f02fc66ae5db5e8", size = 219933, upload-time = "2026-07-29T18:06:48.018Z" }, + { url = "https://files.pythonhosted.org/packages/87/be/faba0fc471d3bab1d1d63f10e7ff7cba97d580af8f4b9219a6274b664c1a/websockets-17.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:b853c76629b92576e905ca46249435f04ce41cffdda3df3aac378132b40a33ce", size = 220822, upload-time = "2026-07-29T18:06:49.663Z" }, + { url = "https://files.pythonhosted.org/packages/b6/92/5fc01c01d6cce63002329c6d4d3a7b2ac6f758b10e198065273a88d60461/websockets-17.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9d0d77ce8e8080daf411eaa0889b834ee1defd076e386e55a90a75f0187a2008", size = 221843, upload-time = "2026-07-29T18:06:51.241Z" }, + { url = "https://files.pythonhosted.org/packages/9c/18/dae84b24f45852ecfcd734e4a85550e639af1b58bc1f5214dcb1a7e58346/websockets-17.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:27a95b0d35c0f88da71adf52d263f7b6ed23914cd459477cf0b13d2b52a48d48", size = 219534, upload-time = "2026-07-29T18:06:52.86Z" }, + { url = "https://files.pythonhosted.org/packages/a9/1d/1efb52128dc311812127ea337b729a89a945be5d65a75a5dba1f3c4f1d7e/websockets-17.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:c3796b7fb9605dd9df50cd09091c0e9612d30707ba2bcf0371a3a4c5d25219c9", size = 220306, upload-time = "2026-07-29T18:06:54.698Z" }, + { url = "https://files.pythonhosted.org/packages/02/6f/06920cefcfd4adea34565e60b2c08eef0265e6a97e6743586fb9a088da8a/websockets-17.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:41435357c5e80b63085c8e26b8ab2c44963bdd9c4b131c5ef352d3c9107e8c78", size = 220735, upload-time = "2026-07-29T18:06:56.484Z" }, + { url = "https://files.pythonhosted.org/packages/1e/e2/8ad920e410bc7b64f82ca697e31eb71dae995c28cb7761c5ce4a201e2be3/websockets-17.0-cp314-cp314t-win32.whl", hash = "sha256:ede2d4b60d4acc8a4c03b5392808c2b074e38c99b08bcbb45373f1459aef2934", size = 212865, upload-time = "2026-07-29T18:06:58.169Z" }, + { url = "https://files.pythonhosted.org/packages/56/23/286f283a0fbf64cb43dc15f53022c36e749dfae5e70ad1e58ea76813a656/websockets-17.0-cp314-cp314t-win_amd64.whl", hash = "sha256:85849eff1a1a39caf82a73c853006e01eb9a080cb03ba9022a8d72839ac3d671", size = 213206, upload-time = "2026-07-29T18:06:59.816Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f0/b48652b29d781850d0f685f680935a7ae2b2a6d9668f6f4ad7876ef0684d/websockets-17.0-cp314-cp314t-win_arm64.whl", hash = "sha256:8122f76dc4418fa7cb1cd015444871469e277ea845761169009ca4167835f6a8", size = 213122, upload-time = "2026-07-29T18:07:01.758Z" }, + { url = "https://files.pythonhosted.org/packages/9d/b4/9b5bd8ad82a7ace4e4a497aed083b6a9bf9076b1ea1a0bf5831686b4af71/websockets-17.0-py3-none-any.whl", hash = "sha256:0c24d62cafaca7dc1631e9f3bf0672fa83f010e66a2aeff4d00727b18addcd8e", size = 206871, upload-time = "2026-07-29T18:07:15.156Z" }, ] [[package]] @@ -3029,50 +3036,50 @@ wheels = [ [[package]] name = "yarl" -version = "1.24.2" +version = "1.24.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, { name = "multidict" }, { name = "propcache" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/79/12/1e8f37460ea0f7eb59c221fdaf0ed75e7ac43e97f8093b9c6f411df50a78/yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8", size = 210798, upload-time = "2026-05-19T21:31:05.599Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/0e/e08087695fc12789263821c5dc0f8dc52b5b17efd0887cacf419f8a43ba3/yarl-1.24.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:f9312b3c02d9b3d23840f67952913c9c8721d7f1b7db305289faefa878f364c2", size = 129670, upload-time = "2026-05-19T21:29:56.631Z" }, - { url = "https://files.pythonhosted.org/packages/3a/98/ab4b5ed1b1b5cd973c8a3eb994c3a6aefb6ce6d399e21bb5f0316c33815c/yarl-1.24.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a4f4d6cd615823bfc7fb7e9b5987c3f41666371d870d51058f77e2680fbe9630", size = 91916, upload-time = "2026-05-19T21:29:58.645Z" }, - { url = "https://files.pythonhosted.org/packages/ba/b1/5297bb6a7df4782f7605bffc43b31f5044070935fbbcaa6c705a07e6ac65/yarl-1.24.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0c3063e5c0a8e8e62fae6c2596fa01da1561e4cd1da6fec5789f5cf99a8aefd8", size = 91625, upload-time = "2026-05-19T21:30:00.412Z" }, - { url = "https://files.pythonhosted.org/packages/02/a7/45baabfff76829264e623b185cff0c340d7e11bf3e1cd9ea37e7d17934bd/yarl-1.24.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fecd17873a096036c1c87ab3486f1aef7f269ada7f23f7f856f93b1cc7744f14", size = 104574, upload-time = "2026-05-19T21:30:02.544Z" }, - { url = "https://files.pythonhosted.org/packages/f3/40/3a5ab144d3d650ca37d4f4b57e56169be8af3ca34c448793e064b30baaed/yarl-1.24.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a46d1ab4ba4d32e6dc80daf8a28ce0bd83d08df52fbc32f3e288663427734535", size = 97534, upload-time = "2026-05-19T21:30:04.319Z" }, - { url = "https://files.pythonhosted.org/packages/9c/b5/5658fef3681fb5776b4513b052bec750009f47b3a592251c705d75375798/yarl-1.24.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73e68edf6dfd5f73f9ca127d84e2a6f9213c65bdffb736bda19524c0564fcd14", size = 111481, upload-time = "2026-05-19T21:30:05.988Z" }, - { url = "https://files.pythonhosted.org/packages/4c/06/fdcd7dde037f00866dce123ed4ba23dba94beb56fc4cf561668d27be37f2/yarl-1.24.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a296ca617f2d25fbceafb962b88750d627e5984e75732c712154d058ae8d79a3", size = 111529, upload-time = "2026-05-19T21:30:07.738Z" }, - { url = "https://files.pythonhosted.org/packages/c2/53/d81269aaafccea0d33396c03035de997b743f11e648e6e27a0df99c72980/yarl-1.24.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51b2cf5ec89a8b8470177641ed62a3ba22d74e1e898e06ad53aa77972487208", size = 107338, upload-time = "2026-05-19T21:30:09.713Z" }, - { url = "https://files.pythonhosted.org/packages/ae/04/23049463f729bd899df203a7960505a75333edd499cda8aa1d5a82b64df5/yarl-1.24.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:310fc687f7b2044ec54e372c8cbe923bb88f5c37bded0d3079e5791c2fc3cf50", size = 106147, upload-time = "2026-05-19T21:30:11.365Z" }, - { url = "https://files.pythonhosted.org/packages/14/18/04a4b5830b43ed5e4c5015b40e9f6241ad91487d71611061b4e111d6ac80/yarl-1.24.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:297a2fe352ecf858b30a98f87948746ec16f001d279f84aebdbd3bd965e2f1bd", size = 104272, upload-time = "2026-05-19T21:30:12.978Z" }, - { url = "https://files.pythonhosted.org/packages/5a/f7/8cffdf319aee7a7c1dbd07b61d91c3e3fda460c7a93b5f93e445f3806c4c/yarl-1.24.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2a263e76b97bc42bdcd7c5f4953dec1f7cd62a1112fa7f869e57255229390d67", size = 99962, upload-time = "2026-05-19T21:30:15.001Z" }, - { url = "https://files.pythonhosted.org/packages/d7/39/b3cce3b7dbef64ac700ad4cea156a207d01bede0f507587616c364b5468e/yarl-1.24.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:822519b64cf0b474f1a0aaef1dc621438ea46bb77c94df97a5b4d213a7d8a8b1", size = 111063, upload-time = "2026-05-19T21:30:16.683Z" }, - { url = "https://files.pythonhosted.org/packages/a1/ea/100818505e7ebf165c7242ff17fdf7d9fee79e27234aeca871c1082920d7/yarl-1.24.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:b6067060d9dc594899ba83e6db6c48c68d1e494a6dab158156ed86977ca7bcb1", size = 105438, upload-time = "2026-05-19T21:30:18.769Z" }, - { url = "https://files.pythonhosted.org/packages/8f/d2/e075a0b32aa6625087de9e653087df0759fed5de4a435fef594181102a77/yarl-1.24.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:0063adad533e57171b79db3943b229d40dfafeeee579767f96541f106bac5f1b", size = 111458, upload-time = "2026-05-19T21:30:21.024Z" }, - { url = "https://files.pythonhosted.org/packages/e6/5c/ceea7ba98b65c8eb8d947fdc52f9bedfcd43c6a57c9e3c90c17be8f324a3/yarl-1.24.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ee8e3fb34513e8dc082b586ef4910c98335d43a6fab688cd44d4851bacfce3e8", size = 107589, upload-time = "2026-05-19T21:30:23.412Z" }, - { url = "https://files.pythonhosted.org/packages/fa/d9/5582d57e2b2db9b85eb6663a22efdd78e08805f3f5389566e9fcad254d1b/yarl-1.24.2-cp314-cp314-win_amd64.whl", hash = "sha256:afb00d7fd8e0f285ca29a44cc50df2d622ff2f7a6d933fa641577b5f9d5f3db0", size = 94424, upload-time = "2026-05-19T21:30:25.425Z" }, - { url = "https://files.pythonhosted.org/packages/92/10/7dc07a0e22806a9280f42a57361395506e800c64e22737cd7b0886feab42/yarl-1.24.2-cp314-cp314-win_arm64.whl", hash = "sha256:68cf6eacd6028ef1142bc4b48376b81566385ca6f9e7dde3b0fa91be08ffcb57", size = 88690, upload-time = "2026-05-19T21:30:27.623Z" }, - { url = "https://files.pythonhosted.org/packages/9e/13/d5b8e2c8667db955bcb3de233f18798fefe7edf1d7429c2c9d4f9c401114/yarl-1.24.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:221ce1dd921ac4f603957f17d7c18c5cc0797fbb52f156941f92e04605d1d67b", size = 136248, upload-time = "2026-05-19T21:30:29.297Z" }, - { url = "https://files.pythonhosted.org/packages/de/46/a4a97c05c9c9b8fd266bb2a0df12992c7fbd02391eb9640583411b6dab32/yarl-1.24.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:5f3224db28173a00d7afacdee07045cc4673dfab2b15492c7ae10deddbece761", size = 95084, upload-time = "2026-05-19T21:30:31.031Z" }, - { url = "https://files.pythonhosted.org/packages/95/b2/845cf2074a015e6fe0d0808cf1a2d9e868386c4220d657ebd8302b199043/yarl-1.24.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c557165320d6244ebe3a02431b2a201a20080e02f41f0cfa0ccc47a183765da8", size = 95272, upload-time = "2026-05-19T21:30:33.062Z" }, - { url = "https://files.pythonhosted.org/packages/fe/16/e69d4aa244aef45235ddfebc0e04036a6829842bc5a6a795aedc6c998d23/yarl-1.24.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:904065e6e85b1fa54d0d87438bd58c14c0bad97aad654ad1077fd9d87e8478ed", size = 101497, upload-time = "2026-05-19T21:30:34.842Z" }, - { url = "https://files.pythonhosted.org/packages/15/94/c07107715d621076863ee88b3ddf183fa5e9d4aba5769623c9979828410a/yarl-1.24.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8cec2a38d70edc10e0e856ceda886af5327a017ccbde8e1de1bd44d300357543", size = 94002, upload-time = "2026-05-19T21:30:37.724Z" }, - { url = "https://files.pythonhosted.org/packages/a9/35/fc1bbdd895b5e4010b8fdd037f7ed3aa289d3863e08231b30231ca9a0815/yarl-1.24.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e7484b9361ed222ee1ca5b4337aa4cbdcc4618ce5aff57d9ef1582fd95893fc0", size = 106524, upload-time = "2026-05-19T21:30:40.196Z" }, - { url = "https://files.pythonhosted.org/packages/1f/f2/32b66d0a4ba47c296cf86d03e2c67bff58399fe6d6d84d5205c04c66cc6d/yarl-1.24.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:84f9670b89f34db07f81e53aee83e0b938a3412329d51c8f922488be7fcc4024", size = 106165, upload-time = "2026-05-19T21:30:41.888Z" }, - { url = "https://files.pythonhosted.org/packages/95/47/37cb5ff50c5e825d4d38e81bb04d1b7e96bf960f7ab89f9850b162f3f114/yarl-1.24.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:abb2759733d63a28b4956500a5dd57140f26486c92b2caedfb964ab7d9b79dbf", size = 103010, upload-time = "2026-05-19T21:30:43.985Z" }, - { url = "https://files.pythonhosted.org/packages/6f/d2/4597912315096f7bb359e46e13bf8b60994fcbb2db29b804c0902ef4eff5/yarl-1.24.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:081c2bf54efe03774d0311172bc04fedf9ca01e644d4cd8c805688e527209bdc", size = 101128, upload-time = "2026-05-19T21:30:46.291Z" }, - { url = "https://files.pythonhosted.org/packages/b9/d5/c8e86e120521e646013d02a8e3b8884392e28494be8f392366e50d208efc/yarl-1.24.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:86746bef442aa479107fe28132e1277237f9c24c2f00b0b0cf22b3ee0904f2bb", size = 101382, upload-time = "2026-05-19T21:30:48.085Z" }, - { url = "https://files.pythonhosted.org/packages/fa/98/70b229236118f89dbeb739b76f10225bbf53b5497725502594c9a01d699a/yarl-1.24.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:2d07d21d0bc4b17558e8de0b02fbfdf1e347d3bb3699edd00bb92e7c57925420", size = 95964, upload-time = "2026-05-19T21:30:49.785Z" }, - { url = "https://files.pythonhosted.org/packages/87/f8/56c386981e3c8648d279fdef2397ffec577e8320fd5649745e34d54faeb7/yarl-1.24.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:4fb1ac3fc5fecd8ae7453ea237e4d22b49befa70266dfe1629924245c21a0c7f", size = 106204, upload-time = "2026-05-19T21:30:51.862Z" }, - { url = "https://files.pythonhosted.org/packages/1a/1e/765afe97811ca35933e2a7de70ac57b1997ea2e4ee895719ee7a231fb7e5/yarl-1.24.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4da31a5512ed1729ca8d8aacde3f7faeb8843cde3165d6bcf7f88f74f17bb8aa", size = 101510, upload-time = "2026-05-19T21:30:53.62Z" }, - { url = "https://files.pythonhosted.org/packages/ee/78/393913f4b9039e1edd09ae8a9bbb9d539be909a8abf6d8a2084585bed4b7/yarl-1.24.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:533ded4dceb5f1f3da7906244f4e82cf46cfd40d84c69a1faf5ac506aa65ecbe", size = 105584, upload-time = "2026-05-19T21:30:55.962Z" }, - { url = "https://files.pythonhosted.org/packages/78/87/deb17b7049bbe74ea11a713b86f8f27800cc1c8648b0b797243ebb4830ba/yarl-1.24.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7b3a85525f6e7eeabcfdd372862b21ee1915db1b498a04e8bf0e389b607ff0bd", size = 103410, upload-time = "2026-05-19T21:30:57.962Z" }, - { url = "https://files.pythonhosted.org/packages/8f/be/f9f7594e23b5b93affff0318e4593c1920331bcaefda326cabcad94296a1/yarl-1.24.2-cp314-cp314t-win_amd64.whl", hash = "sha256:a7624b1ca46ca5d7b864ef0d2f8efe3091454085ee1855b4e992314529972215", size = 102980, upload-time = "2026-05-19T21:30:59.735Z" }, - { url = "https://files.pythonhosted.org/packages/65/a4/ba80dccd3593ff1f01051a818694d07b58cb8232677ee9a22a5a1f93a9fc/yarl-1.24.2-cp314-cp314t-win_arm64.whl", hash = "sha256:e434a45ce2e7a947f951fc5a8944c8cc080b7e59f9c50ae80fd39107cf88126d", size = 91219, upload-time = "2026-05-19T21:31:01.934Z" }, - { url = "https://files.pythonhosted.org/packages/fd/4d/4b880086bd0d3e034d25647be1d830afc3e3f610e98c4ab3490af6b1b6d5/yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9", size = 53576, upload-time = "2026-05-19T21:31:03.909Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/31/33/ebe9e3d1f86c7a0b51094c0a146392045ca1631d2664889539dec8088a33/yarl-1.24.5.tar.gz", hash = "sha256:e81b83143bee16329c23db3c1b2d82b29892fcbcb849186d2f6e98a5abe9a57f", size = 228679, upload-time = "2026-07-20T02:07:45.435Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/08/5f3085fef9564217074db9dd8573de1795bc82cde61a7ad10b6a7234a569/yarl-1.24.5-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:2729fcfc4f6a596fb0c50f32090400aa9367774ac296a00387e65098c0befa76", size = 135680, upload-time = "2026-07-20T02:06:33.273Z" }, + { url = "https://files.pythonhosted.org/packages/98/35/ba9436e579bd48a8801f2021d842d9ab4994c26e4c7dd3a4c1f1bcb57a9e/yarl-1.24.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ff330d3c30db4eb6b01d79e29d2d0b407a7ecad39cfd9ec993ece57396a2ec0d", size = 97395, upload-time = "2026-07-20T02:06:35.259Z" }, + { url = "https://files.pythonhosted.org/packages/18/a9/a07f76f3c44e02b25cc743af5ef93eef27f7013eadca770451b6a6ccb5db/yarl-1.24.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e42d75862735da90e7fc5a7b23db0c976f737113a54b3c9777a9b665e9cbff75", size = 97223, upload-time = "2026-07-20T02:06:37.216Z" }, + { url = "https://files.pythonhosted.org/packages/77/f7/a9a1d6fa7dd9e388f95b30f6ad3ec4e285f6c8f61f44ce16070c3fcfe414/yarl-1.24.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a3732e66413163e72508da9eff9ce9d2846fde51fae45d3605393d3e6cd303e9", size = 108777, upload-time = "2026-07-20T02:06:39.292Z" }, + { url = "https://files.pythonhosted.org/packages/2f/44/e0b86c302471fabd6f02808ecf2ac52b8412b624787849d4bf2cdb466f6f/yarl-1.24.5-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5b8ee53be440a0cffc991a27be3057e0530122548dbe7c0892df08822fce5ede", size = 103119, upload-time = "2026-07-20T02:06:41.456Z" }, + { url = "https://files.pythonhosted.org/packages/d1/16/9c16d180bf8faaf223225eb50e1245870ff1ae0e302a27153988e65c51fd/yarl-1.24.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:af3aefa655adb5869491fa907e652290386800ae99cc50095cba71e2c6aefdca", size = 116471, upload-time = "2026-07-20T02:06:43.696Z" }, + { url = "https://files.pythonhosted.org/packages/d2/8d/b219b9df28a02ce95cfbdd41d2f7caa5669d0ff979c1c9975697145e33c5/yarl-1.24.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2120b96872df4a117cde97d270bac96aea7cc52205d305cf4611df694a487027", size = 115974, upload-time = "2026-07-20T02:06:45.874Z" }, + { url = "https://files.pythonhosted.org/packages/9b/e8/f20557aca240d88e69850ad1ee91756821d094bb1310565c04d25c6682a2/yarl-1.24.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:66410eb6345d467151934b49bfa70fb32f5b35a6140baa40ad97d6436abea2e9", size = 110830, upload-time = "2026-07-20T02:06:47.852Z" }, + { url = "https://files.pythonhosted.org/packages/db/18/199b85109a53eeca64ee19c9cca228287e8e4ab0cc1a09b28f530e65cce0/yarl-1.24.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4af7b7e1be0a69bee8210735fe6dcfc38879adfac6d62e789d53ba432d1ffa41", size = 110054, upload-time = "2026-07-20T02:06:49.84Z" }, + { url = "https://files.pythonhosted.org/packages/aa/2f/ed28147f8cd7f48c49367c90713b30a555284b6105a6a56f3a05568da795/yarl-1.24.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa139875ff98ab97da323cfadfaff08900d1ad42f1b5087b0b812a55c5a06373", size = 108312, upload-time = "2026-07-20T02:06:51.835Z" }, + { url = "https://files.pythonhosted.org/packages/c5/c5/55e16ae0a5c227cea8df1c6871ba57d614a34243146c05729caf2a1bd9c5/yarl-1.24.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:0055afc45e864b92729ac7600e2d102c17bef060647e74bca75fa84d66b9ff36", size = 103662, upload-time = "2026-07-20T02:06:54.061Z" }, + { url = "https://files.pythonhosted.org/packages/8d/ea/dbd7c2caec459c9a426f18b02688ecbfb58620d0f6a3422d24769fbaf8ab/yarl-1.24.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f0e466ed7511fe9d459a819edbc6c2585c0b6eabde9fa8a8947552468a7a6ef0", size = 116090, upload-time = "2026-07-20T02:06:56.015Z" }, + { url = "https://files.pythonhosted.org/packages/06/84/39ce4ce3059e07fece5fbdbee8c4053406af9aca911ce9fa5f8548aab6af/yarl-1.24.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:f141474e85b7e54998ec5180530a7cda99ab29e282fa50e0756d89981a9b43c5", size = 109523, upload-time = "2026-07-20T02:06:57.926Z" }, + { url = "https://files.pythonhosted.org/packages/a9/8b/71ff44137b405c64a7788075669c24010019f57a7464b78c3a6cbee539d9/yarl-1.24.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:e2935f8c39e3b03e83519292d78f075189978f3f4adc15a78144c7c8e2a1cba5", size = 116084, upload-time = "2026-07-20T02:06:59.868Z" }, + { url = "https://files.pythonhosted.org/packages/62/c0/423078fdd4042e1862c11f0ffd977a0ffa393783c12bee94685923bc189e/yarl-1.24.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9d1216a7f6f77836617dba35687c5b78a4170afc3c3f18fc788f785ba26565c4", size = 111006, upload-time = "2026-07-20T02:07:01.907Z" }, + { url = "https://files.pythonhosted.org/packages/cf/52/6daa2ee9d95e5c98b8128f8df91eb692eb423ab274b8cf08db52152fad26/yarl-1.24.5-cp314-cp314-win_amd64.whl", hash = "sha256:5ba4f78df2bcc19f764a4b26a8a4f5049c110090ad5825993aacb052bf8003ad", size = 99215, upload-time = "2026-07-20T02:07:03.852Z" }, + { url = "https://files.pythonhosted.org/packages/ec/0e/464a847d7359e0da75dd9fc5c1d1aa35d0159ea31e5f8e66a3c1c29ff3d0/yarl-1.24.5-cp314-cp314-win_arm64.whl", hash = "sha256:9e4e16c73d717c5cf27626c524d0a2e261ad20e46932b2670f64ad5dde23e26f", size = 94566, upload-time = "2026-07-20T02:07:06.074Z" }, + { url = "https://files.pythonhosted.org/packages/e2/55/e03acc4446772660bc335e86e41ef31e4d0d838fd641531a11a5ee33b493/yarl-1.24.5-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:e1ae548a9d901adca07899a4147a7c826bbcc06239d3ce9a59f57886a28a4c88", size = 142533, upload-time = "2026-07-20T02:07:08.284Z" }, + { url = "https://files.pythonhosted.org/packages/ae/71/4acd3a1fc7cf14345cdb302665ecd2097f62c365b4f14ca17d4f37775cf9/yarl-1.24.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:ff405d91509d88e8d44129cd87b18d70acd1f0c1aeabd7bc3c46792b1fe2acba", size = 100776, upload-time = "2026-07-20T02:07:10.197Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0b/cfb76b7fe99686db264bff829779a539d923e7564ffd7ef18da6c54c3774/yarl-1.24.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:47e98aab9d8d82ff682e7b0b5dded33bf138a32b817fcf7fa3b27b2d7c412928", size = 100913, upload-time = "2026-07-20T02:07:12.357Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3f/7116e782992abbd4fb6948488aec72078895e929a23078290739e8396fce/yarl-1.24.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f0a658a6d3fafee5c6f63c58f3e785c8c43c93fbc02bf9f2b6663f8185e0971f", size = 106507, upload-time = "2026-07-20T02:07:14.173Z" }, + { url = "https://files.pythonhosted.org/packages/33/90/d4d2d73ee78229cc889872eb8e085d8f5c6f51abdb178409fd9b23cf74fd/yarl-1.24.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4377407001ca3c057773f44d8ddd6358fa5f691407c1ba92210bd3cf8d9e4c95", size = 99219, upload-time = "2026-07-20T02:07:16.019Z" }, + { url = "https://files.pythonhosted.org/packages/3e/fa/a6df1a9bccd644eec00abee0dff4277416222cec435330fd1f2858523ec1/yarl-1.24.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7c0494a31a1ac5461a226e7947a9c9b78c44e1dc7185164fa7e9651557a5d9bc", size = 111804, upload-time = "2026-07-20T02:07:18.141Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9e/7b2a1f4bcc20e9447156dd2b1c4d01f70d9df0759025ee7d09a84ffae134/yarl-1.24.5-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a7cff474ab7cd149765bb784cf6d78b32e18e20473fb7bda860bce98ab58e9da", size = 110943, upload-time = "2026-07-20T02:07:20.06Z" }, + { url = "https://files.pythonhosted.org/packages/08/ff/22c92affb0f9b623ca753d27d968b5625b868f12c6378d049d55ae247643/yarl-1.24.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cbb833ccacdb5519eff9b8b71ee618cc2801c878e77e288775d77c3a2ced858a", size = 108251, upload-time = "2026-07-20T02:07:22.217Z" }, + { url = "https://files.pythonhosted.org/packages/45/44/5769b96298c1e195fb412997b6090af2a84105cf59c17613558a2d011d1f/yarl-1.24.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:82f75e05912e84b7a0fe57075d9c59de3cb352b928330f2eb69b2e1f54c3e1f0", size = 106025, upload-time = "2026-07-20T02:07:24.083Z" }, + { url = "https://files.pythonhosted.org/packages/4c/40/009e8e791fd9762c0e1567e69248acb4f49064597e1680874c16dd8bb798/yarl-1.24.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:16a2f5010280020e90f5330257e6944bc33e73593b136cc5a241e6c1dc292498", size = 106573, upload-time = "2026-07-20T02:07:26.248Z" }, + { url = "https://files.pythonhosted.org/packages/20/c6/b7480578f8a0a80946f36ad6df547ecec704f9ba69d2de60f8aa6f1c1cbf/yarl-1.24.5-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:ffcd54362564dc1a30fb74d8b8a6e5a6b11ebd5e27266adc3b7427a21a6c9104", size = 100751, upload-time = "2026-07-20T02:07:28.098Z" }, + { url = "https://files.pythonhosted.org/packages/d4/27/4476f3360b91a48c5cf125e91f59a3bd35299d84a431a258d57f5977bb11/yarl-1.24.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0465ec8cedc2349b97a6b595ace64084a50c6e839eca40aa0626f38b8350e331", size = 111643, upload-time = "2026-07-20T02:07:30.88Z" }, + { url = "https://files.pythonhosted.org/packages/4c/4b/5cdd3e5ee944e8af31e52f6cd3d3af5fd7b937e036ccbbba2c9ffebede95/yarl-1.24.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4db9aecb141cb7a5447171b57aa1ed3a8fee06af40b992ffc31206c0b0121550", size = 106312, upload-time = "2026-07-20T02:07:33.06Z" }, + { url = "https://files.pythonhosted.org/packages/18/86/f406b0c2a6f99575de2da671ef47aa06f89a5be83a27a46971c3b86cecdb/yarl-1.24.5-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:f540c013589084679a6c7fac07096b10159737918174f5dfc5e11bf5bca4dfe6", size = 110379, upload-time = "2026-07-20T02:07:35.155Z" }, + { url = "https://files.pythonhosted.org/packages/f0/6c/9f3adfbd3b30b4fa0f7ccb3a83eba2c1152d3fff554d535e640ba0f7ba2b/yarl-1.24.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a61834fb15d81322d872eaafd333838ae7c9cea84067f232656f75965933d047", size = 108497, upload-time = "2026-07-20T02:07:37.35Z" }, + { url = "https://files.pythonhosted.org/packages/dd/37/91eb2e5ca883a529c1b390348a74cd9fc0512171727f547ce70bfe02be5c/yarl-1.24.5-cp314-cp314t-win_amd64.whl", hash = "sha256:5c88e5815a49d289e599f3513aa7fde0bc2092ff188f99c940f007f90f53d104", size = 102450, upload-time = "2026-07-20T02:07:39.578Z" }, + { url = "https://files.pythonhosted.org/packages/bf/f4/ed5c402ac8fde4403ed3366c2716bfddc8a6677ebd59f3d62772cc7fe468/yarl-1.24.5-cp314-cp314t-win_arm64.whl", hash = "sha256:cf139c02f5f23ef6532040a30ff662c00a318c952334f211046b8e60b7f17688", size = 97222, upload-time = "2026-07-20T02:07:41.55Z" }, + { url = "https://files.pythonhosted.org/packages/61/02/962c1cbfc401a30c1d034dc67ff395f64b52302c6d62de556c1fca99acc0/yarl-1.24.5-py3-none-any.whl", hash = "sha256:a33700d13d9b7d84fd10947b09ff69fb9a792e519c8cb9764a3ca70baa6c23a7", size = 58612, upload-time = "2026-07-20T02:07:43.461Z" }, ] [[package]] From fa8ccadb20ab042a7c926191bd73a51fe8715720 Mon Sep 17 00:00:00 2001 From: Luka Pajukanta Date: Thu, 30 Jul 2026 19:25:30 +0300 Subject: [PATCH 09/12] deps: frontend deps --- kompassi-v2-frontend/codegen.ts | 2 + kompassi-v2-frontend/eslint.config.mjs | 28 +- kompassi-v2-frontend/next.config.ts | 8 +- kompassi-v2-frontend/package-lock.json | 5739 ++++++++--------- kompassi-v2-frontend/package.json | 58 +- kompassi-v2-frontend/src/__generated__/gql.ts | 6 +- .../src/__generated__/graphql.ts | 4192 ++---------- kompassi-v2-frontend/src/apolloClient.ts | 59 +- .../orders-admin/[orderId]/page.tsx | 1 + .../[eventSlug]/orders-admin/new/actions.ts | 9 +- .../[eventSlug]/orders-admin/page.tsx | 5 +- .../program-admin/[programSlug]/actions.ts | 12 +- .../[eventSlug]/program-admin/actions.ts | 6 +- .../[eventSlug]/program-annotations/page.tsx | 5 +- .../[eventSlug]/program-invitations/page.tsx | 7 +- .../program-offers/[responseId]/actions.tsx | 12 +- .../program-preferences/actions.ts | 1 - .../app/[locale]/profile/messages/page.tsx | 5 +- .../src/components/annotations/service.ts | 14 +- .../dimensions/DimensionFilters.tsx | 2 +- .../DimensionValueSelectionForm.tsx | 2 +- .../src/components/forms/LegacyModal.tsx | 8 +- .../src/components/forms/models.ts | 12 +- .../src/components/involvement/PerksForm.tsx | 2 +- .../components/navigation/NavigationMenus.tsx | 2 - .../program/ProgramAdminDetailTabs.tsx | 6 +- .../response/ResponseHistoryBanner.tsx | 3 +- .../src/{middleware.ts => proxy.ts} | 0 kompassi-v2-frontend/tsconfig.json | 5 +- 29 files changed, 3714 insertions(+), 6497 deletions(-) rename kompassi-v2-frontend/src/{middleware.ts => proxy.ts} (100%) diff --git a/kompassi-v2-frontend/codegen.ts b/kompassi-v2-frontend/codegen.ts index d0d4e71ee..c808e8731 100644 --- a/kompassi-v2-frontend/codegen.ts +++ b/kompassi-v2-frontend/codegen.ts @@ -17,8 +17,10 @@ const config: CodegenConfig = { }, ignoreNoDocuments: true, config: { + enumType: "enum", scalars: { DateTime: "string", + Decimal: "string", GenericScalar: "unknown", JSONString: "string", UUID: "string", diff --git a/kompassi-v2-frontend/eslint.config.mjs b/kompassi-v2-frontend/eslint.config.mjs index aa144f999..c840f2624 100644 --- a/kompassi-v2-frontend/eslint.config.mjs +++ b/kompassi-v2-frontend/eslint.config.mjs @@ -1,20 +1,16 @@ -import { dirname } from "path"; -import { fileURLToPath } from "url"; -import { FlatCompat } from "@eslint/eslintrc"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); - -const compat = new FlatCompat({ - baseDirectory: __dirname, -}); +import nextCoreWebVitals from "eslint-config-next/core-web-vitals"; +import prettier from "eslint-config-prettier"; +import tseslint from "typescript-eslint"; const eslintConfig = [ - ...compat.extends("next/core-web-vitals", "next/typescript", "prettier"), - ...compat.config({ - ignorePatterns: ["src/__generated__/*.ts"], - }), - ...compat.config({ + ...nextCoreWebVitals, + prettier, + { + ignores: ["src/__generated__/*.ts"], + }, + { + files: ["**/*.ts", "**/*.tsx"], + plugins: { "@typescript-eslint": tseslint.plugin }, rules: { "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-unused-vars": [ @@ -22,7 +18,7 @@ const eslintConfig = [ { argsIgnorePattern: "^_" }, ], }, - }), + }, ]; export default eslintConfig; diff --git a/kompassi-v2-frontend/next.config.ts b/kompassi-v2-frontend/next.config.ts index 1e1fd9cd3..e2a6408e2 100644 --- a/kompassi-v2-frontend/next.config.ts +++ b/kompassi-v2-frontend/next.config.ts @@ -9,7 +9,7 @@ const nextConfig: NextConfig = { incomingRequests: false, }, experimental: { - middlewareClientMaxBodySize: bodySizeLimit, + proxyClientMaxBodySize: bodySizeLimit, serverActions: { bodySizeLimit, }, @@ -22,6 +22,12 @@ const nextConfig: NextConfig = { "global-builtin", "color-functions", ], + // Turbopack mishandles Sass's `@charset "UTF-8";` output: it gets turned + // into a raw BOM that lands after Turbopack's own leading comment instead + // of at byte 0, which invalidates the CSS rule it's glued to (Bootstrap's + // `:root` variable declarations). We don't rely on non-ASCII output, so + // just stop Sass from emitting a charset marker at all. + charset: false, }, }; diff --git a/kompassi-v2-frontend/package-lock.json b/kompassi-v2-frontend/package-lock.json index 10f088d12..7b82e9973 100644 --- a/kompassi-v2-frontend/package-lock.json +++ b/kompassi-v2-frontend/package-lock.json @@ -9,45 +9,45 @@ "version": "0.1.0", "license": "MIT", "dependencies": { - "@apollo/client": "^3.13.8", - "@apollo/client-integration-nextjs": "^0.12.2", + "@apollo/client": "^4.2.8", + "@apollo/client-integration-nextjs": "^0.14.5", "@graphql-typed-document-node/core": "^3.2.0", "@js-temporal/polyfill": "^0.5.1", "@uiw/react-markdown-preview": "^5.2.1", "@uiw/react-md-editor": "^4.1.1", "bootstrap": "^5.3.5", - "motion": "^12.0.0", - "next": "^15.5.7", - "next-auth": "^4.24.11", - "next-intl": "^4.3.4", - "react": "^19.2.1", + "motion": "^12.43.0", + "next": "^16.2.12", + "next-auth": "^4.24.15", + "next-intl": "^4.13.4", + "react": "^19.2.8", "react-bootstrap": "^2.10.10", - "react-day-picker": "^9.14.0", - "react-dom": "^19.2.1", - "tsx": "^4.19.4", - "uuid": "^11.1.0" + "react-day-picker": "^10.0.1", + "react-dom": "^19.2.8", + "tsx": "^4.23.1", + "uuid": "^14.0.1" }, "devDependencies": { - "@eslint/eslintrc": "^3", - "@graphql-codegen/cli": "^5.0.0", - "@graphql-codegen/client-preset": "^4.1.0", - "@parcel/watcher": "^2.5.1", - "@types/node": "^22.0.0", - "@types/react": "19.1.16", - "@types/react-dom": "19.1.9", - "concurrently": "^9.0.0", - "eslint": "^9", - "eslint-config-next": "15.5.11", + "@graphql-codegen/cli": "^7.2.0", + "@graphql-codegen/client-preset": "^6.1.0", + "@parcel/watcher": "^2.6.0", + "@types/node": "^26.1.2", + "@types/react": "19.2.17", + "@types/react-dom": "19.2.3", + "concurrently": "^10.0.4", + "eslint": "^9.39.5", + "eslint-config-next": "16.2.12", "eslint-config-prettier": "^10.1.8", - "prettier": "^3.6.2", - "sass": "^1.69.5", - "typescript": "^5.2.2" + "prettier": "^3.9.6", + "sass": "^1.102.0", + "typescript": "^5.9.3", + "typescript-eslint": "^8.65.0" } }, "node_modules/@apollo/client": { - "version": "3.13.9", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.13.9.tgz", - "integrity": "sha512-RStSzQfL1XwL6/NWd7W8avhGQYTgPCtJ+qHkkTTSj9Upp3VVm6Oppv81YWdXG1FgEpDPW4hvCrTUELdcC4inCQ==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-4.2.8.tgz", + "integrity": "sha512-Iw/e/5fpOx+/2CgtcFNLdwxtdPzwTfmD4mYRjHA1UBdkfe6WOtWLRQeRESCUJCh49blXwp9I496A0MIoLgmCsw==", "license": "MIT", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", @@ -55,20 +55,15 @@ "@wry/equality": "^0.5.6", "@wry/trie": "^0.5.0", "graphql-tag": "^2.12.6", - "hoist-non-react-statics": "^3.3.2", "optimism": "^0.18.0", - "prop-types": "^15.7.2", - "rehackt": "^0.1.0", - "symbol-observable": "^4.0.0", - "ts-invariant": "^0.10.3", - "tslib": "^2.3.0", - "zen-observable-ts": "^1.2.5" + "tslib": "^2.3.0" }, "peerDependencies": { - "graphql": "^15.0.0 || ^16.0.0", + "graphql": "^16.0.0 || ^17.0.0", "graphql-ws": "^5.5.5 || ^6.0.3", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc", + "react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc", + "react-dom": "^17.0.0 || ^18.0.0 || >=19.0.0-rc", + "rxjs": "^7.3.0", "subscriptions-transport-ws": "^0.9.0 || ^0.11.0" }, "peerDependenciesMeta": { @@ -87,56 +82,47 @@ } }, "node_modules/@apollo/client-integration-nextjs": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/@apollo/client-integration-nextjs/-/client-integration-nextjs-0.12.3.tgz", - "integrity": "sha512-kX/PwWYJqwNBusnxm5AEM/0eEgkRJWAG04iKcJE2wAg1M+81X+sojlZXdFK5oQB2tc5+H2atzwWiLBq+mk5ddQ==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@apollo/client-integration-nextjs/-/client-integration-nextjs-0.14.5.tgz", + "integrity": "sha512-aNh16zlx5rrGtP946jW+O/J7OUyoSC0dxjicFIztiw/S5tQjNqZgqmlgtOXMn7zAR8qV9VOAiKjK5UROaN8iJg==", "license": "MIT", "dependencies": { - "@apollo/client-react-streaming": "0.12.3" + "@apollo/client-react-streaming": "0.14.5" }, "peerDependencies": { - "@apollo/client": "^3.13.0", - "next": "^15.2.3", - "react": "^19" + "@apollo/client": "^4.0.0", + "next": "^15.2.3 || ^16.0.0", + "react": "^19", + "rxjs": "^7.3.0" } }, "node_modules/@apollo/client-react-streaming": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/@apollo/client-react-streaming/-/client-react-streaming-0.12.3.tgz", - "integrity": "sha512-RyLHV29R79lJQ/qVhXevDV0lVgTujFsbzr4RzyhtjWRknDX4GP7CGKTESHu8/JDM1y6XC8AdNwnXT3dkSBjUsw==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@apollo/client-react-streaming/-/client-react-streaming-0.14.5.tgz", + "integrity": "sha512-ru9FP4g5tULITsWBO6oDSHOflnZaD6lm0AtjT9mkZbbrUkWwoYcSrTKdjNrjfrnppqXS1igv+DpcO+SlXdUGXg==", "license": "MIT", "dependencies": { "@types/react-dom": "^19.0.0", - "@wry/equality": "^0.5.6", - "ts-invariant": "^0.10.3" + "@wry/equality": "^0.5.6" }, "peerDependencies": { - "@apollo/client": "^3.13.0", + "@apollo/client": "^4.0.0", "graphql": "^16 || >=17.0.0-alpha.2", "react": "^19", - "react-dom": "^19" + "react-dom": "^19", + "rxjs": "^7.3.0" } }, "node_modules/@ardatan/relay-compiler": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-12.3.0.tgz", - "integrity": "sha512-lc6PyM1IQCSa87DMChfv61HuhrSquHGhsF+WFSm2csFnKMSHaj0S1M8fnGr04i7O9YnwyR+OcgQ3CfzlEPC9Fg==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-13.0.2.tgz", + "integrity": "sha512-VFpv9UP820SiwDUPYtq7PmD3jifzZlevkQ26bhbSzFeruSTys0eHzQCZyKg+IhgmZzwPI9AFjPe26ABNjGeIKg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/generator": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/runtime": "^7.26.10", - "chalk": "^4.0.0", - "fb-watchman": "^2.0.0", - "immutable": "^5.1.5", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "relay-runtime": "12.0.0", - "signedsource": "^1.0.0" - }, - "bin": { - "relay-compiler": "bin/relay-compiler" + "@babel/runtime": "^8.0.0", + "immutable": "^5.1.9", + "invariant": "^2.2.4" }, "peerDependencies": { "graphql": "*" @@ -275,9 +261,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, "license": "MIT", "engines": { @@ -345,13 +331,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", - "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz", + "integrity": "sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -361,13 +347,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", - "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-8.0.0.tgz", + "integrity": "sha512-sL6cvO2IfkSu/iU+zs2S/w01B7A8V7suXSIKEN4hPFFdZoiPGxrj5pAG0lCaqLWiEIrjKzdznIWuaLcxPR53qw==", + "dev": true, + "license": "MIT" }, "node_modules/@babel/template": { "version": "7.29.7", @@ -418,27 +402,27 @@ } }, "node_modules/@date-fns/tz": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.4.1.tgz", - "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.5.0.tgz", + "integrity": "sha512-lwYN/vDPeNRULcepoE/LO2Pgx+7/RV+S9ARfbc9lr2DtGkOD7pAiruHvbR1RX3Qyf6ja47EWJDMsNK5vK08DJg==", "license": "MIT" }, "node_modules/@emnapi/core": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz", - "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.0.4", + "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", - "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", "license": "MIT", "optional": true, "dependencies": { @@ -446,9 +430,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz", - "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", "dev": true, "license": "MIT", "optional": true, @@ -457,9 +441,9 @@ } }, "node_modules/@envelop/core": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@envelop/core/-/core-5.3.0.tgz", - "integrity": "sha512-xvUkOWXI8JsG2OOnqiI2tOkEc52wbmIqWORr7yGc8B8E53Oh1MMGGGck4mbR80s25LnHVzfNIiIlNkuDgZRuuA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@envelop/core/-/core-5.5.1.tgz", + "integrity": "sha512-3DQg8sFskDo386TkL5j12jyRAdip/8yzK3x7YGbZBgobZ4aKXrvDU0GppU0SnmrpQnNaiTUsxBs9LKkwQ/eyvw==", "dev": true, "license": "MIT", "dependencies": { @@ -917,9 +901,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", "dev": true, "license": "MIT", "dependencies": { @@ -949,9 +933,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -959,34 +943,37 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.6", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", - "minimatch": "^3.1.2" + "minimatch": "^3.1.5" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -997,20 +984,20 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", - "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz", + "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", + "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.1", - "minimatch": "^3.1.2", + "js-yaml": "^4.3.0", + "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" }, "engines": { @@ -1021,9 +1008,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", - "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz", + "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==", "dev": true, "license": "MIT", "engines": { @@ -1034,9 +1021,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1044,13 +1031,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.2", + "@eslint/core": "^0.17.0", "levn": "^0.4.1" }, "engines": { @@ -1058,110 +1045,107 @@ } }, "node_modules/@fastify/busboy": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.1.1.tgz", - "integrity": "sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz", + "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==", "dev": true, "license": "MIT" }, "node_modules/@formatjs/fast-memoize": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.6.tgz", - "integrity": "sha512-H5aexk1Le7T9TPmscacZ+1pR6CTa2n1wq+HDVGXhH8TzUlQQpeXzZs91dRtmFHrbeNbjPFPfQujUqm7MHgVoXQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.7.tgz", + "integrity": "sha512-zXfhLpvA6T7+efdt9JLbBwZ00tT7NsBMDVnDu8rpHeNNv8KfRZAMo2gkG0k9lK/Nzc//3kJ9pImsfuJxk3KhUA==", "license": "MIT" }, "node_modules/@formatjs/icu-messageformat-parser": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-3.5.11.tgz", - "integrity": "sha512-NVsuNsc2dUVG9+4HBJ/srScxtA/18LqGgwtop/tuN/OIBjVl6QA+0KhfZQddDD9sEh2LeVjLFPGVU3ixa3blcA==", + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-3.5.15.tgz", + "integrity": "sha512-5o4grXKotAB3JqQuisLApHG43g17N+paoRTa92Jiz35Zvfemq0cVf4EDvuxyHAzmsJji7igaEowicLO/VmfJ8Q==", "license": "MIT", "dependencies": { - "@formatjs/icu-skeleton-parser": "2.1.10" + "@formatjs/icu-skeleton-parser": "2.1.11" } }, "node_modules/@formatjs/icu-skeleton-parser": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-2.1.10.tgz", - "integrity": "sha512-XuSva+8ZGawk8VnD5VD6UeH8KarQ/Z022zgjHDoHmlNiAewstXuuzXc0Hk5pGFSdG+nNw5bfJKXqj1ZXHn9yUA==", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-2.1.11.tgz", + "integrity": "sha512-j8cUmOJzVgkHuS0QiQ6ga76UIoLOFSAMWhs7aZJztH3aAdCOAE6vpC8KVvFB4cU10ON0y2/5oOVmPJ43s2lTwA==", "license": "MIT" }, "node_modules/@formatjs/intl-localematcher": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.10.tgz", - "integrity": "sha512-P/IC3qws3jH+1fEs+o0RIFgXKRaQlFehjS5W0FPAqdo6hgzawLl+eD0q0JjheQ3XtoOe5n8WSYfX06KQZI/QJA==", + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.13.tgz", + "integrity": "sha512-kHEAFOkeJSPNi7c5PaKaRjxcBrJwzzt81ifUu+8uve1EDW/VJl83KsxmqgqNZLzcFEhSliZGvx3+pk/RH0IOmg==", "license": "MIT", "dependencies": { - "@formatjs/fast-memoize": "3.1.6" + "@formatjs/fast-memoize": "3.1.7" } }, "node_modules/@graphql-codegen/add": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@graphql-codegen/add/-/add-5.0.3.tgz", - "integrity": "sha512-SxXPmramkth8XtBlAHu4H4jYcYXM/o3p01+psU+0NADQowA8jtYkK6MW5rV6T+CxkEaNZItfSmZRPgIuypcqnA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/add/-/add-7.1.0.tgz", + "integrity": "sha512-bytJg1kel5zfgK3JSYbGwtpbNe6F9OPZSR6DiMDe9RVxblAgl6w4zEEPd/mM3rhNJ1VmGYLbNnf5e1eUfXQEbg==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.3", - "tslib": "~2.6.0" + "@graphql-codegen/plugin-helpers": "^7.1.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=16" }, "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-codegen/add/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-codegen/cli": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-5.0.7.tgz", - "integrity": "sha512-h/sxYvSaWtxZxo8GtaA8SvcHTyViaaPd7dweF/hmRDpaQU1o3iU3EZxlcJ+oLTunU0tSMFsnrIXm/mhXxI11Cw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-7.2.0.tgz", + "integrity": "sha512-JPJw2vquEIpO3b8XJyxFVTrYi6WRn/OKu/SlzQA+IwAVT7GZPeG+AHmfRXAvpVMj31899nTpQYEQGUxx3ZqubQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/generator": "^7.18.13", "@babel/template": "^7.18.10", "@babel/types": "^7.18.13", - "@graphql-codegen/client-preset": "^4.8.2", - "@graphql-codegen/core": "^4.0.2", - "@graphql-codegen/plugin-helpers": "^5.1.1", - "@graphql-tools/apollo-engine-loader": "^8.0.0", - "@graphql-tools/code-file-loader": "^8.0.0", - "@graphql-tools/git-loader": "^8.0.0", - "@graphql-tools/github-loader": "^8.0.0", - "@graphql-tools/graphql-file-loader": "^8.0.0", - "@graphql-tools/json-file-loader": "^8.0.0", - "@graphql-tools/load": "^8.1.0", - "@graphql-tools/prisma-loader": "^8.0.0", - "@graphql-tools/url-loader": "^8.0.0", - "@graphql-tools/utils": "^10.0.0", + "@graphql-codegen/client-preset": "^6.1.0", + "@graphql-codegen/core": "^6.2.0", + "@graphql-codegen/plugin-helpers": "^7.1.0", + "@graphql-tools/apollo-engine-loader": "^8.0.28", + "@graphql-tools/code-file-loader": "^8.1.28", + "@graphql-tools/git-loader": "^8.0.32", + "@graphql-tools/github-loader": "^9.0.6", + "@graphql-tools/graphql-file-loader": "^8.1.11", + "@graphql-tools/json-file-loader": "^8.0.26", + "@graphql-tools/load": "^8.1.8", + "@graphql-tools/merge": "^9.0.6", + "@graphql-tools/url-loader": "^9.0.6", + "@graphql-tools/utils": "^11.2.0", + "@inquirer/prompts": "^8.3.2", "@whatwg-node/fetch": "^0.10.0", - "chalk": "^4.1.0", - "cosmiconfig": "^8.1.3", - "debounce": "^1.2.0", - "detect-indent": "^6.0.0", - "graphql-config": "^5.1.1", - "inquirer": "^8.0.0", + "chalk": "^5.6.0", + "cosmiconfig": "^9.0.0", + "debounce": "^3.0.0", + "detect-indent": "^7.0.0", + "graphql-config": "^5.1.6", "is-glob": "^4.0.1", - "jiti": "^1.17.1", + "jiti": "^2.3.0", "json-to-pretty-yaml": "^1.2.2", - "listr2": "^4.0.5", - "log-symbols": "^4.0.0", + "listr2": "^10.2.1", + "log-symbols": "^7.0.0", "micromatch": "^4.0.5", "shell-quote": "^1.7.3", "string-env-interpolation": "^1.0.1", - "ts-log": "^2.2.3", + "ts-log": "^3.0.0", "tslib": "^2.4.0", "yaml": "^2.3.1", - "yargs": "^17.0.0" + "yargs": "^18.0.0" }, "bin": { - "gql-gen": "cjs/bin.js", - "graphql-code-generator": "cjs/bin.js", - "graphql-codegen": "cjs/bin.js", + "gql-gen": "esm/bin.js", + "graphql-code-generator": "esm/bin.js", + "graphql-codegen": "esm/bin.js", + "graphql-codegen-cjs": "cjs/bin.js", "graphql-codegen-esm": "esm/bin.js" }, "engines": { @@ -1169,7 +1153,7 @@ }, "peerDependencies": { "@parcel/watcher": "^2.1.0", - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" }, "peerDependenciesMeta": { "@parcel/watcher": { @@ -1178,31 +1162,31 @@ } }, "node_modules/@graphql-codegen/client-preset": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.8.3.tgz", - "integrity": "sha512-QpEsPSO9fnRxA6Z66AmBuGcwHjZ6dYSxYo5ycMlYgSPzAbyG8gn/kWljofjJfWqSY+T/lRn+r8IXTH14ml24vQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-6.1.0.tgz", + "integrity": "sha512-mGmBuwrOU5oRoaWFodx8g9xu1jecYIiydqvk88QsAIsyMcZwuoybs1lyne85TovpBHjH5CC2wnZGsbDQfcgOCQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/template": "^7.20.7", - "@graphql-codegen/add": "^5.0.3", - "@graphql-codegen/gql-tag-operations": "4.0.17", - "@graphql-codegen/plugin-helpers": "^5.1.1", - "@graphql-codegen/typed-document-node": "^5.1.2", - "@graphql-codegen/typescript": "^4.1.6", - "@graphql-codegen/typescript-operations": "^4.6.1", - "@graphql-codegen/visitor-plugin-common": "^5.8.0", + "@graphql-codegen/add": "^7.1.0", + "@graphql-codegen/gql-tag-operations": "^6.1.0", + "@graphql-codegen/plugin-helpers": "^7.1.0", + "@graphql-codegen/typed-document-node": "^7.1.0", + "@graphql-codegen/typescript": "^6.1.0", + "@graphql-codegen/typescript-operations": "^6.1.0", + "@graphql-codegen/visitor-plugin-common": "^7.2.0", "@graphql-tools/documents": "^1.0.0", - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/utils": "^11.2.0", "@graphql-typed-document-node/core": "3.2.0", - "tslib": "~2.6.0" + "tslib": "^2.8.0" }, "engines": { "node": ">=16" }, "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", "graphql-sock": "^1.0.0" }, "peerDependenciesMeta": { @@ -1211,178 +1195,141 @@ } } }, - "node_modules/@graphql-codegen/client-preset/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-codegen/core": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-4.0.2.tgz", - "integrity": "sha512-IZbpkhwVqgizcjNiaVzNAzm/xbWT6YnGgeOLwVjm4KbJn3V2jchVtuzHH09G5/WkkLSk2wgbXNdwjM41JxO6Eg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-6.2.0.tgz", + "integrity": "sha512-RZadhhwYhuy2ZdIGK40vYVBMzXEFGkCC+58MUC/F2af/gKznEYNzHgmNBUBCk/BTklyUsNu0mIXmyGE4tTA0PA==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.3", + "@graphql-codegen/plugin-helpers": "^7.1.0", "@graphql-tools/schema": "^10.0.0", - "@graphql-tools/utils": "^10.0.0", - "tslib": "~2.6.0" + "@graphql-tools/utils": "^11.2.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=16" }, "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-codegen/core/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-codegen/gql-tag-operations": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.17.tgz", - "integrity": "sha512-2pnvPdIG6W9OuxkrEZ6hvZd142+O3B13lvhrZ48yyEBh2ujtmKokw0eTwDHtlXUqjVS0I3q7+HB2y12G/m69CA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-6.1.0.tgz", + "integrity": "sha512-AmMcZFwonufvWJnQm7I0lBxKpAm+35BcCrOOvUlBoviohiR17aPoTGAOaNAEtpcpI86lnZ9m9AXUdiKMdm8nnQ==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.1.0", - "@graphql-codegen/visitor-plugin-common": "5.8.0", - "@graphql-tools/utils": "^10.0.0", - "auto-bind": "~4.0.0", - "tslib": "~2.6.0" + "@graphql-codegen/plugin-helpers": "^7.1.0", + "@graphql-codegen/visitor-plugin-common": "^7.2.0", + "@graphql-tools/utils": "^11.2.0", + "auto-bind": "^5.0.0", + "tslib": "^2.8.0" }, "engines": { "node": ">=16" }, "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-codegen/gql-tag-operations/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-codegen/plugin-helpers": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.1.1.tgz", - "integrity": "sha512-28GHODK2HY1NhdyRcPP3sCz0Kqxyfiz7boIZ8qIxFYmpLYnlDgiYok5fhFLVSZihyOpCs4Fa37gVHf/Q4I2FEg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-7.1.0.tgz", + "integrity": "sha512-ieJH7kZ5oSZKBPJs7CvHMrFY/CLYLklqv74ir93qMwRna6geZsbIMoJzTDBXohxcQTITiProiYSGrEtZjIpYGg==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^10.0.0", - "change-case-all": "1.0.15", + "@graphql-tools/utils": "^11.2.0", + "change-case-all": "^2.1.0", "common-tags": "1.8.2", "import-from": "4.0.0", - "lodash": "~4.17.0", - "tslib": "~2.6.0" + "tslib": "^2.8.0" }, "engines": { "node": ">=16" }, "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-codegen/plugin-helpers/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-codegen/schema-ast": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-4.1.0.tgz", - "integrity": "sha512-kZVn0z+th9SvqxfKYgztA6PM7mhnSZaj4fiuBWvMTqA+QqQ9BBed6Pz41KuD/jr0gJtnlr2A4++/0VlpVbCTmQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-6.1.0.tgz", + "integrity": "sha512-/xuGkM5gUNFRoaQLumKbENdX7Hc8ha49z9OXsEZY8E+46mMjqzXGF0NtCJ892cmoX7EUgI5c8T+LZqS2upx2Aw==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.3", - "@graphql-tools/utils": "^10.0.0", - "tslib": "~2.6.0" + "@graphql-codegen/plugin-helpers": "^7.1.0", + "@graphql-tools/utils": "^11.2.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=16" }, "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-codegen/schema-ast/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-codegen/typed-document-node": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.1.2.tgz", - "integrity": "sha512-jaxfViDqFRbNQmfKwUY8hDyjnLTw2Z7DhGutxoOiiAI0gE/LfPe0LYaVFKVmVOOD7M3bWxoWfu4slrkbWbUbEw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-7.1.0.tgz", + "integrity": "sha512-V6H+ItyqXtYY+JQb76LAoN627Xfzpn29/ifwCFAv61iEepzNzh86sa+yZclflr0G8LDmhcVY5hpPJd3a1qbOfw==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.1.0", - "@graphql-codegen/visitor-plugin-common": "5.8.0", - "auto-bind": "~4.0.0", - "change-case-all": "1.0.15", - "tslib": "~2.6.0" + "@graphql-codegen/plugin-helpers": "^7.1.0", + "@graphql-codegen/visitor-plugin-common": "^7.2.0", + "auto-bind": "^5.0.0", + "change-case-all": "^2.1.0", + "tslib": "^2.8.0" }, "engines": { "node": ">=16" }, "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-codegen/typed-document-node/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-codegen/typescript": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.6.tgz", - "integrity": "sha512-vpw3sfwf9A7S+kIUjyFxuvrywGxd4lmwmyYnnDVjVE4kSQ6Td3DpqaPTy8aNQ6O96vFoi/bxbZS2BW49PwSUUA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-6.1.0.tgz", + "integrity": "sha512-2Hu3111O/AwV28Ap7tNsixlmXSAJuQbQArQklx+IC/tNswpckZnCfmlcBtTJrGU1+mJXEneJXGfb2XWvKjbhlQ==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.1.0", - "@graphql-codegen/schema-ast": "^4.0.2", - "@graphql-codegen/visitor-plugin-common": "5.8.0", - "auto-bind": "~4.0.0", - "tslib": "~2.6.0" + "@graphql-codegen/plugin-helpers": "^7.1.0", + "@graphql-codegen/schema-ast": "^6.1.0", + "@graphql-codegen/visitor-plugin-common": "^7.2.0", + "auto-bind": "^5.0.0", + "tslib": "~2.8.0" }, "engines": { "node": ">=16" }, "peerDependencies": { - "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-codegen/typescript-operations": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.6.1.tgz", - "integrity": "sha512-k92laxhih7s0WZ8j5WMIbgKwhe64C0As6x+PdcvgZFMudDJ7rPJ/hFqJ9DCRxNjXoHmSjnr6VUuQZq4lT1RzCA==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-6.1.2.tgz", + "integrity": "sha512-EP9xry09q4cOVaf/aC4NO3/SwvXRNzlJIe4dhfA0xyy45Taix5yDL3jeJpmJIv03sa7nK5udVs5vZqdHFU8Xmw==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.1.0", - "@graphql-codegen/typescript": "^4.1.6", - "@graphql-codegen/visitor-plugin-common": "5.8.0", - "auto-bind": "~4.0.0", - "tslib": "~2.6.0" + "@graphql-codegen/plugin-helpers": "^7.1.0", + "@graphql-codegen/schema-ast": "^6.1.0", + "@graphql-codegen/visitor-plugin-common": "^7.2.2", + "auto-bind": "^5.0.0", + "tslib": "^2.8.0" }, "engines": { "node": ">=16" }, "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", "graphql-sock": "^1.0.0" }, "peerDependenciesMeta": { @@ -1391,72 +1338,51 @@ } } }, - "node_modules/@graphql-codegen/typescript-operations/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@graphql-codegen/typescript/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-codegen/visitor-plugin-common": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.8.0.tgz", - "integrity": "sha512-lC1E1Kmuzi3WZUlYlqB4fP6+CvbKH9J+haU1iWmgsBx5/sO2ROeXJG4Dmt8gP03bI2BwjiwV5WxCEMlyeuzLnA==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-7.2.2.tgz", + "integrity": "sha512-nOkAVd8J8r2YdHm9Z4YrBiy+3IQgE8Ndn/EiRWTvWuemMEhioBWyvdlnbq5rHmIo2bNdRQ5ghs0Q3jw7YBrwLQ==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.1.0", + "@graphql-codegen/plugin-helpers": "^7.1.0", "@graphql-tools/optimize": "^2.0.0", - "@graphql-tools/relay-operation-optimizer": "^7.0.0", - "@graphql-tools/utils": "^10.0.0", - "auto-bind": "~4.0.0", - "change-case-all": "1.0.15", - "dependency-graph": "^0.11.0", + "@graphql-tools/relay-operation-optimizer": "^7.1.1", + "@graphql-tools/utils": "^11.2.0", + "auto-bind": "^5.0.0", + "change-case-all": "^2.1.0", + "dependency-graph": "^1.0.0", "graphql-tag": "^2.11.0", "parse-filepath": "^1.0.2", - "tslib": "~2.6.0" + "tslib": "^2.8.0" }, "engines": { "node": ">=16" }, "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-codegen/visitor-plugin-common/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-hive/signal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@graphql-hive/signal/-/signal-1.0.0.tgz", - "integrity": "sha512-RiwLMc89lTjvyLEivZ/qxAC5nBHoS2CtsWFSOsN35sxG9zoo5Z+JsFHM8MlvmO9yt+MJNIyC5MLE1rsbOphlag==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@graphql-hive/signal/-/signal-2.0.0.tgz", + "integrity": "sha512-Pz8wB3K0iU6ae9S1fWfsmJX24CcGeTo6hE7T44ucmV/ALKRj+bxClmqrYcDT7v3f0d12Rh4FAXBb6gon+WkDpQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@graphql-tools/apollo-engine-loader": { - "version": "8.0.22", - "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-8.0.22.tgz", - "integrity": "sha512-ssD2wNxeOTRcUEkuGcp0KfZAGstL9YLTe/y3erTDZtOs2wL1TJESw8NVAp+3oUHPeHKBZQB4Z6RFEbPgMdT2wA==", + "version": "8.0.34", + "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-8.0.34.tgz", + "integrity": "sha512-pxmrIbUtpiH2/Dx0093EQ0x7dXWdlfAZ97uSY280CkUxIB8EYZeNeV2pvk6HksZzBtHrprLRysrjnegLOmQBRA==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^10.9.1", - "@whatwg-node/fetch": "^0.10.0", - "sync-fetch": "0.6.0-2", + "@graphql-tools/utils": "^11.2.2", + "@whatwg-node/fetch": "^0.10.13", + "sync-fetch": "0.6.0", "tslib": "^2.4.0" }, "engines": { @@ -1467,33 +1393,33 @@ } }, "node_modules/@graphql-tools/batch-execute": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-9.0.19.tgz", - "integrity": "sha512-VGamgY4PLzSx48IHPoblRw0oTaBa7S26RpZXt0Y4NN90ytoE0LutlpB2484RbkfcTjv9wa64QD474+YP1kEgGA==", + "version": "10.0.9", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-10.0.9.tgz", + "integrity": "sha512-khIgAPlyaWJ3dVX6SsqOkABZCH1Gii32WHn3xMzavupsxPCfb/9G3zjdswptzTFrOcZ92dWo7MXvwNFkRfNN4w==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^10.9.1", - "@whatwg-node/promise-helpers": "^1.3.0", + "@graphql-tools/utils": "^11.0.0", + "@whatwg-node/promise-helpers": "^1.3.2", "dataloader": "^2.2.3", "tslib": "^2.8.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/code-file-loader": { - "version": "8.1.22", - "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-8.1.22.tgz", - "integrity": "sha512-FSka29kqFkfFmw36CwoQ+4iyhchxfEzPbXOi37lCEjWLHudGaPkXc3RyB9LdmBxx3g3GHEu43a5n5W8gfcrMdA==", + "version": "8.1.36", + "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-8.1.36.tgz", + "integrity": "sha512-EAIogV/vUmcrNa4icqnx5Xr5z3uLNSZ6867DEJyizuUfOCnD5JzCBQNsBjOBl3R5rzUiV3+GGSzzo15/jLN4oQ==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/graphql-tag-pluck": "8.3.21", - "@graphql-tools/utils": "^10.9.1", + "@graphql-tools/graphql-tag-pluck": "8.3.35", + "@graphql-tools/utils": "^11.2.2", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" @@ -1506,24 +1432,23 @@ } }, "node_modules/@graphql-tools/delegate": { - "version": "10.2.23", - "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-10.2.23.tgz", - "integrity": "sha512-xrPtl7f1LxS+B6o+W7ueuQh67CwRkfl+UKJncaslnqYdkxKmNBB4wnzVcW8ZsRdwbsla/v43PtwAvSlzxCzq2w==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-12.1.1.tgz", + "integrity": "sha512-BiePOU2Nev9KDpAEOw25isTm6y/Ea6Sb3c/aH0P9s25c/6mzluvpEo66nnA9vWeirIRScS7rUtN0Jv3P02h3VA==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/batch-execute": "^9.0.19", - "@graphql-tools/executor": "^1.4.9", - "@graphql-tools/schema": "^10.0.25", - "@graphql-tools/utils": "^10.9.1", + "@graphql-tools/batch-execute": "^10.0.9", + "@graphql-tools/executor": "^1.4.13", + "@graphql-tools/schema": "^10.0.29", + "@graphql-tools/utils": "^11.0.0", "@repeaterjs/repeater": "^3.0.6", - "@whatwg-node/promise-helpers": "^1.3.0", + "@whatwg-node/promise-helpers": "^1.3.2", "dataloader": "^2.2.3", - "dset": "^3.1.2", "tslib": "^2.8.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" @@ -1547,15 +1472,15 @@ } }, "node_modules/@graphql-tools/executor": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.4.9.tgz", - "integrity": "sha512-SAUlDT70JAvXeqV87gGzvDzUGofn39nvaVcVhNf12Dt+GfWHtNNO/RCn/Ea4VJaSLGzraUd41ObnN3i80EBU7w==", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.5.7.tgz", + "integrity": "sha512-UcXVClkBml+qyGEsQxfEaAkboqySVGFUd9ivn7pDc9jZSckgF6zL21cNxuRH5ZA2exneV3PTtcc0I0rDOdE0Tg==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^10.9.1", + "@graphql-tools/utils": "^11.2.2", "@graphql-typed-document-node/core": "^3.2.0", - "@repeaterjs/repeater": "^3.0.4", + "@repeaterjs/repeater": "^3.1.0", "@whatwg-node/disposablestack": "^0.0.6", "@whatwg-node/promise-helpers": "^1.0.0", "tslib": "^2.4.0" @@ -1568,97 +1493,80 @@ } }, "node_modules/@graphql-tools/executor-common": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-common/-/executor-common-0.0.4.tgz", - "integrity": "sha512-SEH/OWR+sHbknqZyROCFHcRrbZeUAyjCsgpVWCRjqjqRbiJiXq6TxNIIOmpXgkrXWW/2Ev4Wms6YSGJXjdCs6Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-common/-/executor-common-1.0.6.tgz", + "integrity": "sha512-23/K5C+LSlHDI0mj2SwCJ33RcELCcyDUgABm1Z8St7u/4Z5+95i925H/NAjUyggRjiaY8vYtNiMOPE49aPX1sg==", "dev": true, "license": "MIT", "dependencies": { - "@envelop/core": "^5.2.3", - "@graphql-tools/utils": "^10.8.1" + "@envelop/core": "^5.4.0", + "@graphql-tools/utils": "^11.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/executor-graphql-ws": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-2.0.7.tgz", - "integrity": "sha512-J27za7sKF6RjhmvSOwOQFeNhNHyP4f4niqPnerJmq73OtLx9Y2PGOhkXOEB0PjhvPJceuttkD2O1yMgEkTGs3Q==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-3.1.5.tgz", + "integrity": "sha512-WXRsfwu9AkrORD9nShrd61OwwxeQ5+eXYcABRR3XPONFIS8pWQfDJGGqxql9/227o/s0DV5SIfkBURb5Knzv+A==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/executor-common": "^0.0.6", - "@graphql-tools/utils": "^10.9.1", + "@graphql-tools/executor-common": "^1.0.6", + "@graphql-tools/utils": "^11.0.0", "@whatwg-node/disposablestack": "^0.0.6", "graphql-ws": "^6.0.6", - "isomorphic-ws": "^5.0.0", + "isows": "^1.0.7", "tslib": "^2.8.1", "ws": "^8.18.3" }, "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/executor-graphql-ws/node_modules/@graphql-tools/executor-common": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-common/-/executor-common-0.0.6.tgz", - "integrity": "sha512-JAH/R1zf77CSkpYATIJw+eOJwsbWocdDjY+avY7G+P5HCXxwQjAjWVkJI1QJBQYjPQDVxwf1fmTZlIN3VOadow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@envelop/core": "^5.3.0", - "@graphql-tools/utils": "^10.9.1" - }, - "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/executor-http": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-1.3.3.tgz", - "integrity": "sha512-LIy+l08/Ivl8f8sMiHW2ebyck59JzyzO/yF9SFS4NH6MJZUezA1xThUXCDIKhHiD56h/gPojbkpcFvM2CbNE7A==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-3.3.0.tgz", + "integrity": "sha512-IkKXIjSg9U8MNsQUBVJAXE4+LSxaQ0cs7p5JTALLGDABY1o17vPDRwWALsX81AXD5dY27ihi/+OhGMueW/Fopg==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-hive/signal": "^1.0.0", - "@graphql-tools/executor-common": "^0.0.4", - "@graphql-tools/utils": "^10.8.1", + "@graphql-hive/signal": "^2.0.0", + "@graphql-tools/executor-common": "^1.0.6", + "@graphql-tools/utils": "^11.0.0", "@repeaterjs/repeater": "^3.0.4", "@whatwg-node/disposablestack": "^0.0.6", - "@whatwg-node/fetch": "^0.10.4", - "@whatwg-node/promise-helpers": "^1.3.0", - "meros": "^1.2.1", + "@whatwg-node/fetch": "^0.10.13", + "@whatwg-node/promise-helpers": "^1.3.2", + "meros": "^1.3.2", "tslib": "^2.8.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/executor-legacy-ws": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-1.1.19.tgz", - "integrity": "sha512-bEbv/SlEdhWQD0WZLUX1kOenEdVZk1yYtilrAWjRUgfHRZoEkY9s+oiqOxnth3z68wC2MWYx7ykkS5hhDamixg==", + "version": "1.1.32", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-1.1.32.tgz", + "integrity": "sha512-rmSp846dAgEGtwdQ7ntdgpLJzzRvw5rE8sR7ASPci2QoIn3McxVYwjq52SMNntoH4VaBeI/BrpyQIN5L68zAfA==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^10.9.1", + "@graphql-tools/utils": "^11.2.2", "@types/ws": "^8.0.0", "isomorphic-ws": "^5.0.0", "tslib": "^2.4.0", - "ws": "^8.17.1" + "ws": "^8.21.1" }, "engines": { "node": ">=16.0.0" @@ -1668,14 +1576,14 @@ } }, "node_modules/@graphql-tools/git-loader": { - "version": "8.0.26", - "resolved": "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-8.0.26.tgz", - "integrity": "sha512-0g+9eng8DaT4ZmZvUmPgjLTgesUa6M8xrDjNBltRldZkB055rOeUgJiKmL6u8PjzI5VxkkVsn0wtAHXhDI2UXQ==", + "version": "8.0.40", + "resolved": "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-8.0.40.tgz", + "integrity": "sha512-aQkcTTymjeQBREoH8/x5JZWt/banq9D7fs8Gqqd2HGirh8JBYGoEbKm45bSdUqCLnqsOJ2oal5A73rsC7ASASw==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/graphql-tag-pluck": "8.3.21", - "@graphql-tools/utils": "^10.9.1", + "@graphql-tools/graphql-tag-pluck": "8.3.35", + "@graphql-tools/utils": "^11.2.2", "is-glob": "4.0.3", "micromatch": "^4.0.8", "tslib": "^2.4.0", @@ -1689,36 +1597,36 @@ } }, "node_modules/@graphql-tools/github-loader": { - "version": "8.0.22", - "resolved": "https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-8.0.22.tgz", - "integrity": "sha512-uQ4JNcNPsyMkTIgzeSbsoT9hogLjYrZooLUYd173l5eUGUi49EAcsGdiBCKaKfEjanv410FE8hjaHr7fjSRkJw==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-9.1.6.tgz", + "integrity": "sha512-hWsCcTZJ5NLKDUYynZjK7kVh/xmc/MpnLkBII+WQHCLOOXimaESZRnUuoo/nMqOwBKghBC0iF1nHiG9PqD9t3w==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/executor-http": "^1.1.9", - "@graphql-tools/graphql-tag-pluck": "^8.3.21", - "@graphql-tools/utils": "^10.9.1", - "@whatwg-node/fetch": "^0.10.0", + "@graphql-tools/executor-http": "^3.3.0", + "@graphql-tools/graphql-tag-pluck": "^8.3.35", + "@graphql-tools/utils": "^11.2.2", + "@whatwg-node/fetch": "^0.10.13", "@whatwg-node/promise-helpers": "^1.0.0", - "sync-fetch": "0.6.0-2", + "sync-fetch": "0.6.0", "tslib": "^2.4.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/graphql-file-loader": { - "version": "8.0.22", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.0.22.tgz", - "integrity": "sha512-KFUbjXgWr5+w/AioOuIuULy4LwcyDuQqTRFQGe+US1d9Z4+ZopcJLwsJTqp5B+icDkCqld4paN0y0qi9MrIvbg==", + "version": "8.1.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.1.18.tgz", + "integrity": "sha512-MBbAPFfGZN+jaRQQkqfY1Ztj4ftFgk9m7zh0h1jQC83xsVJ8zvMk2TGwg7g3lEGqa0cLOOEp/a1/78MSdhj2Zg==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/import": "7.0.21", - "@graphql-tools/utils": "^10.9.1", + "@graphql-tools/import": "^7.1.18", + "@graphql-tools/utils": "^11.2.2", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" @@ -1731,18 +1639,18 @@ } }, "node_modules/@graphql-tools/graphql-tag-pluck": { - "version": "8.3.21", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.3.21.tgz", - "integrity": "sha512-TJhELNvR1tmghXMi6HVKp/Swxbx1rcSp/zdkuJZT0DCM3vOY11FXY6NW3aoxumcuYDNN3jqXcCPKstYGFPi5GQ==", + "version": "8.3.35", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.3.35.tgz", + "integrity": "sha512-k6udGhRFzf/FnfV/pl+2dxVURHtqdOj8evG3xFJahMS9bSMLkmTRCqTaR8e+ErYZEUODE2zCSPth3JLQEfAEqQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.26.10", - "@babel/parser": "^7.26.10", + "@babel/core": "^7.29.7", + "@babel/parser": "^7.29.3", "@babel/plugin-syntax-import-assertions": "^7.26.0", "@babel/traverse": "^7.26.10", "@babel/types": "^7.26.10", - "@graphql-tools/utils": "^10.9.1", + "@graphql-tools/utils": "^11.2.2", "tslib": "^2.4.0" }, "engines": { @@ -1753,14 +1661,13 @@ } }, "node_modules/@graphql-tools/import": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-7.0.21.tgz", - "integrity": "sha512-bcAqNWm/gLVEOy55o/WdaROERpDyUEmIfZ9E6NDjVk1ZGWfZe47+RgriTV80j6J5S5J1g+6loFkVWGAMqdN06g==", + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-7.1.18.tgz", + "integrity": "sha512-/lCEk28rbUiypbX8jl5x0RBiHDsXk3YJ5jAU1nlqXEdxNiNI6p5ts+vt0N7UximIuolwV7BeRxLn5RUejyKZYQ==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^10.9.1", - "@theguild/federation-composition": "^0.19.0", + "@graphql-tools/utils": "^11.2.2", "resolve-from": "5.0.0", "tslib": "^2.4.0" }, @@ -1772,13 +1679,13 @@ } }, "node_modules/@graphql-tools/json-file-loader": { - "version": "8.0.20", - "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-8.0.20.tgz", - "integrity": "sha512-5v6W+ZLBBML5SgntuBDLsYoqUvwfNboAwL6BwPHi3z/hH1f8BS9/0+MCW9OGY712g7E4pc3y9KqS67mWF753eA==", + "version": "8.0.32", + "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-8.0.32.tgz", + "integrity": "sha512-PJ06nGC836vWWLCAPignLKAnIF+CKNkXlCIe9zkkb02jFPNdG5nA0PUxa1rqt/lqZd/x/ravZQ4yM47pxtLajg==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^10.9.1", + "@graphql-tools/utils": "^11.2.2", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" @@ -1791,14 +1698,14 @@ } }, "node_modules/@graphql-tools/load": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-8.1.2.tgz", - "integrity": "sha512-WhDPv25/jRND+0uripofMX0IEwo6mrv+tJg6HifRmDu8USCD7nZhufT0PP7lIcuutqjIQFyogqT70BQsy6wOgw==", + "version": "8.1.15", + "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-8.1.15.tgz", + "integrity": "sha512-QpCve0kf1IxNOWAk99VjS4CEZinQjKAfsgDDRWGUg9+9TqBbvCdsLAQshykHcfueEUPetVRVqqqOIRKo9eJ2xQ==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/schema": "^10.0.25", - "@graphql-tools/utils": "^10.9.1", + "@graphql-tools/schema": "^10.0.38", + "@graphql-tools/utils": "^11.2.2", "p-limit": "3.1.0", "tslib": "^2.4.0" }, @@ -1810,13 +1717,13 @@ } }, "node_modules/@graphql-tools/merge": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.1.1.tgz", - "integrity": "sha512-BJ5/7Y7GOhTuvzzO5tSBFL4NGr7PVqTJY3KeIDlVTT8YLcTXtBR+hlrC3uyEym7Ragn+zyWdHeJ9ev+nRX1X2w==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.2.2.tgz", + "integrity": "sha512-DSLLAztOIQId7QE3m8Ehk5lV+0pjxNSSRDHPzlYQ9E4KJ9AoUMBprC4C+eX3v4srh05S2ujm5/veqAr5yEWFSQ==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^10.9.1", + "@graphql-tools/utils": "^11.2.2", "tslib": "^2.4.0" }, "engines": { @@ -1842,46 +1749,15 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/prisma-loader": { - "version": "8.0.17", - "resolved": "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-8.0.17.tgz", - "integrity": "sha512-fnuTLeQhqRbA156pAyzJYN0KxCjKYRU5bz1q/SKOwElSnAU4k7/G1kyVsWLh7fneY78LoMNH5n+KlFV8iQlnyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@graphql-tools/url-loader": "^8.0.15", - "@graphql-tools/utils": "^10.5.6", - "@types/js-yaml": "^4.0.0", - "@whatwg-node/fetch": "^0.10.0", - "chalk": "^4.1.0", - "debug": "^4.3.1", - "dotenv": "^16.0.0", - "graphql-request": "^6.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "jose": "^5.0.0", - "js-yaml": "^4.0.0", - "lodash": "^4.17.20", - "scuid": "^1.1.0", - "tslib": "^2.4.0", - "yaml-ast-parser": "^0.0.43" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, "node_modules/@graphql-tools/relay-operation-optimizer": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-7.0.21.tgz", - "integrity": "sha512-vMdU0+XfeBh9RCwPqRsr3A05hPA3MsahFn/7OAwXzMySA5EVnSH5R4poWNs3h1a0yT0tDPLhxORhK7qJdSWj2A==", + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-7.1.8.tgz", + "integrity": "sha512-s16NYT+66VSLCITBURoGNTwh+YvZRSlW3MtFJC2gsvrHZHf6KpCvIR3Qju4yh0FtCoN7Wg7yOI/JT/UzaMEOwQ==", "dev": true, "license": "MIT", "dependencies": { - "@ardatan/relay-compiler": "^12.0.3", - "@graphql-tools/utils": "^10.9.1", + "@ardatan/relay-compiler": "^13.0.2", + "@graphql-tools/utils": "^11.2.2", "tslib": "^2.4.0" }, "engines": { @@ -1892,14 +1768,14 @@ } }, "node_modules/@graphql-tools/schema": { - "version": "10.0.25", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.25.tgz", - "integrity": "sha512-/PqE8US8kdQ7lB9M5+jlW8AyVjRGCKU7TSktuW3WNKSKmDO0MK1wakvb5gGdyT49MjAIb4a3LWxIpwo5VygZuw==", + "version": "10.0.38", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.38.tgz", + "integrity": "sha512-Kckk2/vm+rELJ7ijvFaAn9ouWSVUTD0D4SJIvYF4rKeuQHAfCzE/jzMFonZVpTXleqJjPXLZjVbuaMorw7A5Og==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/merge": "^9.1.1", - "@graphql-tools/utils": "^10.9.1", + "@graphql-tools/merge": "^9.2.2", + "@graphql-tools/utils": "^11.2.2", "tslib": "^2.4.0" }, "engines": { @@ -1910,43 +1786,42 @@ } }, "node_modules/@graphql-tools/url-loader": { - "version": "8.0.33", - "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-8.0.33.tgz", - "integrity": "sha512-Fu626qcNHcqAj8uYd7QRarcJn5XZ863kmxsg1sm0fyjyfBJnsvC7ddFt6Hayz5kxVKfsnjxiDfPMXanvsQVBKw==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-9.1.6.tgz", + "integrity": "sha512-BUFafQJv1OVZ/pZvzqXx4oLi2SKeqiWUAIDgz9HGRF/UpJuLY98tYMFzxhYurXg7lAuJMrDjUfl2nFSCX743Nw==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/executor-graphql-ws": "^2.0.1", - "@graphql-tools/executor-http": "^1.1.9", - "@graphql-tools/executor-legacy-ws": "^1.1.19", - "@graphql-tools/utils": "^10.9.1", - "@graphql-tools/wrap": "^10.0.16", + "@graphql-tools/executor-graphql-ws": "^3.1.4", + "@graphql-tools/executor-http": "^3.3.0", + "@graphql-tools/executor-legacy-ws": "^1.1.32", + "@graphql-tools/utils": "^11.2.2", + "@graphql-tools/wrap": "^11.1.1", "@types/ws": "^8.0.0", - "@whatwg-node/fetch": "^0.10.0", + "@whatwg-node/fetch": "^0.10.13", "@whatwg-node/promise-helpers": "^1.0.0", "isomorphic-ws": "^5.0.0", - "sync-fetch": "0.6.0-2", + "sync-fetch": "0.6.0", "tslib": "^2.4.0", - "ws": "^8.17.1" + "ws": "^8.21.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/utils": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.9.1.tgz", - "integrity": "sha512-B1wwkXk9UvU7LCBkPs8513WxOQ2H8Fo5p8HR1+Id9WmYE5+bd51vqN+MbrqvWczHCH2gwkREgHJN88tE0n1FCw==", + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-11.2.2.tgz", + "integrity": "sha512-Do2A/t6ayqOma8m7PvpYMsCBswL+NB35BQSng4GWSBqafL2/BnfAZy/NSENPwV721Rm2fG0BHETFC0+FJJZmLw==", "dev": true, "license": "MIT", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^1.0.0", "cross-inspect": "1.0.1", - "dset": "^3.1.4", "tslib": "^2.4.0" }, "engines": { @@ -1957,20 +1832,20 @@ } }, "node_modules/@graphql-tools/wrap": { - "version": "10.1.4", - "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-10.1.4.tgz", - "integrity": "sha512-7pyNKqXProRjlSdqOtrbnFRMQAVamCmEREilOXtZujxY6kYit3tvWWSjUrcIOheltTffoRh7EQSjpy2JDCzasg==", + "version": "11.1.21", + "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-11.1.21.tgz", + "integrity": "sha512-28a+cTtDONeO+Bg+241biALEHdZuIyFk7libduztuh+Ecwk5hCZgLVFn1S5yJXgvMvkm9+MRVSRQaWILsyougA==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-tools/delegate": "^10.2.23", - "@graphql-tools/schema": "^10.0.25", - "@graphql-tools/utils": "^10.9.1", - "@whatwg-node/promise-helpers": "^1.3.0", + "@graphql-tools/delegate": "^12.1.1", + "@graphql-tools/schema": "^10.0.29", + "@graphql-tools/utils": "^11.0.0", + "@whatwg-node/promise-helpers": "^1.3.2", "tslib": "^2.8.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" @@ -1986,41 +1861,41 @@ } }, "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, "engines": { "node": ">=18.18.0" } }, "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -2051,10 +1926,20 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz", - "integrity": "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.3.tgz", + "integrity": "sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==", "cpu": [ "arm64" ], @@ -2064,19 +1949,19 @@ "darwin" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.0" + "@img/sharp-libvips-darwin-arm64": "1.3.2" } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.3.tgz", - "integrity": "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.3.tgz", + "integrity": "sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==", "cpu": [ "x64" ], @@ -2086,19 +1971,38 @@ "darwin" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.0" + "@img/sharp-libvips-darwin-x64": "1.3.2" + } + }, + "node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.3.tgz", + "integrity": "sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==", + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "dependencies": { + "@img/sharp-wasm32": "0.35.3" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.0.tgz", - "integrity": "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.2.tgz", + "integrity": "sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==", "cpu": [ "arm64" ], @@ -2112,9 +2016,9 @@ } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.0.tgz", - "integrity": "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.2.tgz", + "integrity": "sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==", "cpu": [ "x64" ], @@ -2128,12 +2032,15 @@ } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.0.tgz", - "integrity": "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.2.tgz", + "integrity": "sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==", "cpu": [ "arm" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -2144,12 +2051,15 @@ } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.0.tgz", - "integrity": "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.2.tgz", + "integrity": "sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==", "cpu": [ "arm64" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -2160,12 +2070,34 @@ } }, "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.0.tgz", - "integrity": "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.2.tgz", + "integrity": "sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==", "cpu": [ "ppc64" ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.2.tgz", + "integrity": "sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -2176,12 +2108,15 @@ } }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.0.tgz", - "integrity": "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.2.tgz", + "integrity": "sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==", "cpu": [ "s390x" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -2192,12 +2127,15 @@ } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz", - "integrity": "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.2.tgz", + "integrity": "sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==", "cpu": [ "x64" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -2208,12 +2146,15 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.0.tgz", - "integrity": "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.2.tgz", + "integrity": "sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==", "cpu": [ "arm64" ], + "libc": [ + "musl" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -2224,12 +2165,15 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.0.tgz", - "integrity": "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.2.tgz", + "integrity": "sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==", "cpu": [ "x64" ], + "libc": [ + "musl" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -2240,77 +2184,89 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.3.tgz", - "integrity": "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.3.tgz", + "integrity": "sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==", "cpu": [ "arm" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.0" + "@img/sharp-libvips-linux-arm": "1.3.2" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.3.tgz", - "integrity": "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.3.tgz", + "integrity": "sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==", "cpu": [ "arm64" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.0" + "@img/sharp-libvips-linux-arm64": "1.3.2" } }, "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.3.tgz", - "integrity": "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.3.tgz", + "integrity": "sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==", "cpu": [ "ppc64" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.0" + "@img/sharp-libvips-linux-ppc64": "1.3.2" } }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.3.tgz", - "integrity": "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==", + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.3.tgz", + "integrity": "sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==", "cpu": [ - "s390x" + "riscv64" + ], + "libc": [ + "glibc" ], "license": "Apache-2.0", "optional": true, @@ -2318,104 +2274,154 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.0" + "@img/sharp-libvips-linux-riscv64": "1.3.2" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.3.tgz", + "integrity": "sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.3.2" } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz", - "integrity": "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.3.tgz", + "integrity": "sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==", "cpu": [ "x64" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.0" + "@img/sharp-libvips-linux-x64": "1.3.2" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.3.tgz", - "integrity": "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.3.tgz", + "integrity": "sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==", "cpu": [ "arm64" ], + "libc": [ + "musl" + ], "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.0" + "@img/sharp-libvips-linuxmusl-arm64": "1.3.2" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.3.tgz", - "integrity": "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.3.tgz", + "integrity": "sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==", "cpu": [ "x64" ], + "libc": [ + "musl" + ], "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.0" + "@img/sharp-libvips-linuxmusl-x64": "1.3.2" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.3.tgz", - "integrity": "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz", + "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==", + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.11.1" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.3.tgz", + "integrity": "sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==", "cpu": [ "wasm32" ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.4.4" + "@img/sharp-wasm32": "0.35.3" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.3.tgz", - "integrity": "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.3.tgz", + "integrity": "sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==", "cpu": [ "arm64" ], @@ -2425,16 +2431,16 @@ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.3.tgz", - "integrity": "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.3.tgz", + "integrity": "sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==", "cpu": [ "ia32" ], @@ -2444,16 +2450,16 @@ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.3.tgz", - "integrity": "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.3.tgz", + "integrity": "sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==", "cpu": [ "x64" ], @@ -2463,24 +2469,152 @@ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, + "node_modules/@inquirer/ansi": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.7.tgz", + "integrity": "sha512-3eTuUO1vH2cZm2ZKHeQxnOqlTi9EfZDGgIe3BL3I4u+rJHocr9Fz86M4fjYABPvFnQG/gGK551HqDiIcETwU6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.2.1.tgz", + "integrity": "sha512-b6xmA/VlTe0ZgDQHDui+Nav470u7u49nRd8/iuhOcQPO9Ch7lGuogydhi2VOmNlZ+zXcM8IcPuNSwQcdJaF/kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/core": "^11.2.1", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.1.1.tgz", + "integrity": "sha512-eb8DBZcz/2qHWQda4rk2JiQk5h9QV/cVHi1yjt0f69WFZMRFn0sJTye3EAP8icut8UDMjQPsaH5KbcOogefrFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.2.1.tgz", + "integrity": "sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.2.2.tgz", + "integrity": "sha512-ZRVd/oD+sYsUd5zVm0NflqEzlqfYCyHNsqkHl2oWXEUHs12tCbcSFi+wVFEvD8+LGRaMUsVrE7qeo6lSG/S1Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/external-editor": "^3.0.3", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.1.1.tgz", + "integrity": "sha512-YmQpenjbFSHAK3sOd44puHh3V1KXXr+JiNpUztoSQ4drLh2rTVzTap/YtlAVu/5xavifIlBfNEzJ/neZJ1a/1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, "node_modules/@inquirer/external-editor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.1.tgz", - "integrity": "sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-6thf5I8q7lZwzGLAxPaaGEREEkZ3nyePPDQ1oyobblxmEE8mqTLguScP7pDjUTAibiyb4hfXl+qjUEJ+di/aNA==", "dev": true, "license": "MIT", "dependencies": { - "chardet": "^2.1.0", - "iconv-lite": "^0.6.3" + "chardet": "^2.1.1", + "iconv-lite": "^0.7.2" }, "engines": { - "node": ">=18" + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" }, "peerDependencies": { "@types/node": ">=18" @@ -2491,10 +2625,231 @@ } } }, + "node_modules/@inquirer/figures": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.7.tgz", + "integrity": "sha512-aJ8TBPOGB6f/2qziPfElISTCEd5XOYTFckA2SGjhNmiKzfK/u4ot3v0DUzGVdUnKjN10EqnnEPck36BkyfLnJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/input": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.1.2.tgz", + "integrity": "sha512-9K/DDBSQpOyZSkt6sOVP9Vo0TR7atX2kuILsUu0x3wVcVbe97lJwIJKMLdMw25tDYuXl/qp6erT0Xs1rfmcfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.1.1.tgz", + "integrity": "sha512-XF4IXAbPnGPgw0wsbC/i2tPcyfdZgDpUlhsqU0SfT4IRIGWha6Xm9VRgN5yYxJq+jnyXlfXI/nQ3ulfk0iEICA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.1.1.tgz", + "integrity": "sha512-3XBfF7DAsp5qeDsvN5Rd1HmbNokVvEQoUM0QLrRcybC9nX96w3Pbmu7qUsb3IT3J3jBvs2+mTXaKHOUsgHMLzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.5.2.tgz", + "integrity": "sha512-IYR/3C/paEVVQYQvdDlFZVjRCJVYHHON0XXMH91KO9GSxs0TdKYWlUdvfQl2EfAHDxUaN3IBffkE/BDTh5nJ6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^5.2.1", + "@inquirer/confirm": "^6.1.1", + "@inquirer/editor": "^5.2.2", + "@inquirer/expand": "^5.1.1", + "@inquirer/input": "^5.1.2", + "@inquirer/number": "^4.1.1", + "@inquirer/password": "^5.1.1", + "@inquirer/rawlist": "^5.3.1", + "@inquirer/search": "^4.2.1", + "@inquirer/select": "^5.2.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.3.1.tgz", + "integrity": "sha512-QqdTqQddL3qPX/PPrjobpsO25NZ4dWXgTLenrR445L2ptLEYE6Z+PD5c5CNDJNx4ugRgELAIpSIJxZaO2jJ2Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.2.1.tgz", + "integrity": "sha512-xJj8QWKRSrfKoBIITLZK61dD3zwo0Rz11fgDImku30/Oe81zMdIdGgrLY2h6RkJ+KZ/GhNYIRMKnH/62qBTA5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.2.1.tgz", + "integrity": "sha512-FlDndEUww8m7BfukO2nJa25vhD+H5jxxCv4oGioKqzyWz3nPHhhw4LKdYRSlXuAx7DsdWia7iyaBPKKS95Evfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/core": "^11.2.1", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.7.tgz", + "integrity": "sha512-t28inv14nMQ1PhKpsJPY+kEs/c00qzeCOS2gTNRyTjG5d6qsVA2fItxW4hkvGZ5lvanGLdtCzVIx5dwdRpN1+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@internationalized/date": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.2.tgz", + "integrity": "sha512-FY1Y+H64NDs+HAF6omlnWxm3mEpfgaCSWtL5l551ZZfImA+kGjPFgrnJrGjH6lfmLL0g8Z/mBu1R3kufeCp6Jw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.7", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.7.tgz", + "integrity": "sha512-3ji1fcrT+FPAK86UqEhB/psHixYo6niWPJtt7+qRaYFynt/BaJG8GhAPimtWUpEiVSTq8ZM8L5psMxGquiB/Vg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/string": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.9.tgz", + "integrity": "sha512-kzP/M/mbQxODlmOt4bIQZ2SBVUWUSqMLXooXixnX7noche8WHaQcA+nwFN1K2KCF/cp+LDUhcJsCicwkvhD1pg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { @@ -2524,16 +2879,16 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", - "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { @@ -2554,28 +2909,37 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.1.tgz", + "integrity": "sha512-KjZdi8Q1wh89gsVmghvbrMgWl6ZWmRmHV6wjB7/g4Zf0dyO+hH3neZUtuDNPO00qq5YE5RITVWvrIZKRaAmzGQ==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" + "@tybys/wasm-util": "^0.10.3" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3" } }, "node_modules/@next/env": { - "version": "15.5.19", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.19.tgz", - "integrity": "sha512-sWWluFvcv5v3Fxznmf2ZfjyoVQt/64oCnYqS90inQWGzMPK1VjvekPiz3OPHKmFT30EnHrjlbyaHLt3M0vWabw==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.12.tgz", + "integrity": "sha512-d0Z5Bc13Fa4nR8pFAKx2jay2yhJM16vlfHbTzYnUQAxlNb6B6lmn4hjt69lYNt4kRtyYP6gEM49lPRHNbIyneg==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.5.11", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.5.11.tgz", - "integrity": "sha512-tS/HYQOjIoX9ZNDQitba/baS8sTvo3ekY6Vgdx5lmhN4jov082bdApIChXr94qhMZHvEciz9DZglFFnhguQp/A==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.2.12.tgz", + "integrity": "sha512-uF2z/qAK2q7B5/6CpnFcBRX6jOq5iCO+Uqh1UkJhXljX1JwLarLYhhoJadO6dPb6moTprOKewMXheBcbIoSbug==", "dev": true, "license": "MIT", "dependencies": { @@ -2583,9 +2947,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.5.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.19.tgz", - "integrity": "sha512-jx9wWlTKueHKPvVOndyr7WuaevWCkuYqsQ8gC0TMPKAVWG3MhcdMrjfo9tvIZNXd0QOUYXXvAcZ325y8Uq7uzg==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.12.tgz", + "integrity": "sha512-0W1R0teHWJrqKX0FH20IzzIWAOuGtBxPGuObrxy1lE8hQvCFj49KE8a3WUg0D7sq6rn6zkM4c7YGUnhudBS6oA==", "cpu": [ "arm64" ], @@ -2599,9 +2963,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.5.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.19.tgz", - "integrity": "sha512-291KFcsIQ3OenRdiUDFOR6W3wezzH4auENXm1gbm1Bjd4ANMMRgxPrWTUztQN43BnVoVuMnHCrLeECIMwgFKbA==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.12.tgz", + "integrity": "sha512-Hy5Ls099+aFUmOLmIgPfLqNi6iCwhL3uQCssz5rWk+5Nkc6TUKCE83DY5BbNylfm3+mfwcSFnLRfrZDJhVxdtw==", "cpu": [ "x64" ], @@ -2615,9 +2979,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.5.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.19.tgz", - "integrity": "sha512-WeH+nelQyyMeE2f8FxBRZNrGipya5zHZV2vjzfCOAYyiI6am+NbnWAAldOBFQBB2w0DjJcsvrKqoFT2b7+5YoA==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.12.tgz", + "integrity": "sha512-+YqU2h1cQkHsGfvjAsrSmst8UIFBibBGm5x3Xgel8NLMiDQtNOM4sM2GOEMvG5YiOBNeN/Ykk8cQC2S0Xrqljg==", "cpu": [ "arm64" ], @@ -2634,9 +2998,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.5.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.19.tgz", - "integrity": "sha512-5xTOE0lDlDCSSfp+BAif7j17VRRCjWp//ZPZy6NI0QpdrhxtQnsZguSx0xAAZ0c9XZLrLLwCe/XVe5YPrRilKw==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.12.tgz", + "integrity": "sha512-0qjhiYBaKAqF63LA1ZWAAnKTzFUguAaZiRa5etMLGGPj/B6uEVjtIZldIzFEp3wHlB0koK6aTzqPtSdplTCjoA==", "cpu": [ "arm64" ], @@ -2653,9 +3017,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.5.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.19.tgz", - "integrity": "sha512-LTxRmMgqqMv05Had879W00Fm53quiJd3Zuz8h1JSNJ3nGSlbZ/7Tjs1tKyScgN3Au3t3MyPsjPlq60fMmSHLsg==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.12.tgz", + "integrity": "sha512-7A3q26W+h7gnA15uqBToNuDqBEFZZcqh0mW2mn4AJh/G5pdg2RVE3n4slzLEliASZFG3NmsbEzng/x2Sh09mBg==", "cpu": [ "x64" ], @@ -2672,9 +3036,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.5.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.19.tgz", - "integrity": "sha512-eoNQSpA5PQfB9wBO4RA47MTDXWz1fizy9Y3Z6e4DetYIF3dvjuu8sj7aIGn/bFCU6lnFzTK34NtCaffP4NsQ7Q==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.12.tgz", + "integrity": "sha512-qSjL/uppm+cbh21s72Ss8gkiOhQ4dExWHNGOWy6eZV7STj5WsKehgxT61beSsOj+YYQuTplL376lOCdMQU5T8w==", "cpu": [ "x64" ], @@ -2691,9 +3055,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.5.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.19.tgz", - "integrity": "sha512-6UNt2dFuCHOe446sm/Kp69nUe8/wIhnh9bm6Xcqw4qEWCOppLMOvhTBVgvM7invVUNr4SPpP6NOQsACtn2IN9Q==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.12.tgz", + "integrity": "sha512-X6hzsOUJac/e7AWSbn9gQ9nzHld1xWP5iyjHpYWvud8pufB679O1xg4JDyKr8Xd69Jvd+kM2Der6uftiZCmjYA==", "cpu": [ "arm64" ], @@ -2707,9 +3071,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.5.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.19.tgz", - "integrity": "sha512-PhmojAHyqMne56HBLGu9dhDnHPuFmEjrXSQMM/nW0J6j849lk3ESrVtqNJcCk8CKOV7brpTTbaYAjwKPzKM69w==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.12.tgz", + "integrity": "sha512-F6fakeHuFTLOPt0bslQJdf+xtT+WIP9DVn/m4y1w1mRnVPyh3D/cNvzlRkxM444xfm+IvvYNSOrKiA2CDJ0Uxw==", "cpu": [ "x64" ], @@ -2780,16 +3144,16 @@ } }, "node_modules/@parcel/watcher": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", - "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", "hasInstallScript": true, "license": "MIT", "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", "node-addon-api": "^7.0.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">= 10.0.0" @@ -2799,25 +3163,24 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.6", - "@parcel/watcher-darwin-arm64": "2.5.6", - "@parcel/watcher-darwin-x64": "2.5.6", - "@parcel/watcher-freebsd-x64": "2.5.6", - "@parcel/watcher-linux-arm-glibc": "2.5.6", - "@parcel/watcher-linux-arm-musl": "2.5.6", - "@parcel/watcher-linux-arm64-glibc": "2.5.6", - "@parcel/watcher-linux-arm64-musl": "2.5.6", - "@parcel/watcher-linux-x64-glibc": "2.5.6", - "@parcel/watcher-linux-x64-musl": "2.5.6", - "@parcel/watcher-win32-arm64": "2.5.6", - "@parcel/watcher-win32-ia32": "2.5.6", - "@parcel/watcher-win32-x64": "2.5.6" + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" } }, "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", - "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", "cpu": [ "arm64" ], @@ -2835,9 +3198,9 @@ } }, "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", - "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", "cpu": [ "arm64" ], @@ -2855,9 +3218,9 @@ } }, "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", - "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", "cpu": [ "x64" ], @@ -2875,9 +3238,9 @@ } }, "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", - "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", "cpu": [ "x64" ], @@ -2895,12 +3258,15 @@ } }, "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", - "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", "cpu": [ "arm" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -2915,12 +3281,15 @@ } }, "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", - "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", "cpu": [ "arm" ], + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -2935,12 +3304,15 @@ } }, "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", - "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", "cpu": [ "arm64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -2955,12 +3327,15 @@ } }, "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", - "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", "cpu": [ "arm64" ], + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -2975,12 +3350,15 @@ } }, "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", - "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", "cpu": [ "x64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -2995,12 +3373,15 @@ } }, "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", - "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", "cpu": [ "x64" ], + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -3015,9 +3396,9 @@ } }, "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", - "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", "cpu": [ "arm64" ], @@ -3034,30 +3415,10 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", - "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", - "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", "cpu": [ "x64" ], @@ -3074,18 +3435,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/watcher/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -3097,24 +3446,35 @@ } }, "node_modules/@react-aria/ssr": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.10.tgz", - "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.10.1.tgz", + "integrity": "sha512-jn038/ZYmu6DpfXJ6r2U9zFFppjbc9wnApPJSCxao2RZVEqep4YyoniHSy8qv6V21/xyS4IV7W9a+X2jOjSuag==", "license": "Apache-2.0", "dependencies": { - "@swc/helpers": "^0.5.0" + "@swc/helpers": "^0.5.0", + "react-aria": "^3.48.0" }, "engines": { "node": ">= 12" }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/shared": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.36.0.tgz", + "integrity": "sha512-DkP/H0C2YjjS7gZWKNqOmU8a16qHPjQNdzMwmTq9SzplM6Iw0kVMTZ0OIoe6FOgGqa+FwMsE2QbPjh/n3g/jXQ==", + "license": "Apache-2.0", "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "node_modules/@repeaterjs/repeater": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz", - "integrity": "sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.1.0.tgz", + "integrity": "sha512-TaoVksZRSx2KWYYpyLQtMQXXeS98VsgZImzW65xmiVgbYhXLk+aEsmzPLirqVuE4/XuUapH2iMtxUzaBNDzdSQ==", "dev": true, "license": "MIT" }, @@ -3151,6 +3511,15 @@ "react-dom": ">=16.14.0" } }, + "node_modules/@restart/ui/node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@restart/ui/node_modules/@restart/hooks": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.5.1.tgz", @@ -3179,13 +3548,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.12.0.tgz", - "integrity": "sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==", - "dev": true, - "license": "MIT" - }, "node_modules/@schummar/icu-type-parser": { "version": "1.21.5", "resolved": "https://registry.npmjs.org/@schummar/icu-type-parser/-/icu-type-parser-1.21.5.tgz", @@ -3193,9 +3555,9 @@ "license": "MIT" }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.41.tgz", - "integrity": "sha512-kREh6J5paQFvP3i7f/4FbqRNOJREutVFVOkder4GVyCBQ39YmER55cW/y1NNjwrchzFqgYswFn0mMDCqbqKzrw==", + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.47.tgz", + "integrity": "sha512-GsoMtan3ojGGMGFbl31mmRu5ctZ56re8grGE8mO/OHJ8O+JRkzod02fe7X6ZQ8JvamA3imkEkx/h3u+vsOgPgA==", "cpu": [ "arm64" ], @@ -3209,9 +3571,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.41.tgz", - "integrity": "sha512-N8B56ESFazZAWZyIkecADSPCwlLEinW7QLMEeotCpv4J7VXwfH+OLkmRL8o96UZ+1355fwHxDTS6/wK7yucvkA==", + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.47.tgz", + "integrity": "sha512-leTi7Rx3KF4zcC637iqWgk9SoV8VXAD8ppQYXsep63px5A/UftOcxLN1pmr8Z1si/YvX90ompP/rHgpYkgwXWg==", "cpu": [ "x64" ], @@ -3225,9 +3587,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.41.tgz", - "integrity": "sha512-6XrId2fyle0mS5xxON8rU84mPd2Cq1kDJRj+4BnQKTd7u+2kSA6Ww+JkOP0iTNqOqt9OXhPOEAjBHAuonWcdCg==", + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.47.tgz", + "integrity": "sha512-hBqHuoWKKIsKmDBn9qVeWqj5GWZhtlcczVaqQmNRXsDfq+voR5CxKRfamA367QjJXtceYuliLFfEL8QsskRM2g==", "cpu": [ "arm" ], @@ -3241,9 +3603,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.41.tgz", - "integrity": "sha512-ynLIarxlkVnqHn1D0fKOVht6mNU5ks6lrH+MY3kkS+XFaGGgDxFZVjWKJlkYTKm3RCvBTfA8Ng5fLufXheMRKQ==", + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.47.tgz", + "integrity": "sha512-TBxvRz+B4K205TWHHZxWVxkC2RFNP/Mz3PNcECBos5PsKwxjg3QSJzdoebr0VCf0Bfh8HOPldKxAP/8XkFe9gA==", "cpu": [ "arm64" ], @@ -3260,9 +3622,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.41.tgz", - "integrity": "sha512-dXu/5vd4gh8symyhRF+4G7gOPkjmb4pONhh7sl+6GSiW0LOKZlfu5kXmyFbTz9smOT7jgr002qY9b1nujjXt2A==", + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.47.tgz", + "integrity": "sha512-3Yu3Uq/VgytqsPjTMbkPU1ExADytbdWbruJYhA584E9jrpE2Ki+R6VVPoZCeAVk1Cb7QxcRTgblw6bSa6a/R+w==", "cpu": [ "arm64" ], @@ -3279,9 +3641,9 @@ } }, "node_modules/@swc/core-linux-ppc64-gnu": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.41.tgz", - "integrity": "sha512-XGO6zVPXoPE0gf/XnI4jBbafNT13AYgoh6ns0JCSdOetI/kqVf0vhpz7NuNgAzZrMVCsmieqjPoTwViDgh4mOQ==", + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.47.tgz", + "integrity": "sha512-wfdMi5IaOaNtmh2/6geRoxIdNfqylUZFdtzTKS655y1axWfIWyx7As74vv0wVdjeCIZ3WmCI9odDd4rUttXOSQ==", "cpu": [ "ppc64" ], @@ -3298,9 +3660,9 @@ } }, "node_modules/@swc/core-linux-s390x-gnu": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.41.tgz", - "integrity": "sha512-0WUglRwyZtW+iMi7J3iFdrCxreZZIKf4egTwEQfIYRsqFax69A0OrFj+NIoFSE03xBT/IFRrg+S8K6f9Ky+4hA==", + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.47.tgz", + "integrity": "sha512-3hHYBY0yx8Ez7GMRrkhXHQzMdR5IZA6Wq5Ee4svlgwvSECLpnAJ9+0AimEGUFDvuLwE7nV/2+PYe8+Nm4rvNcQ==", "cpu": [ "s390x" ], @@ -3317,9 +3679,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.41.tgz", - "integrity": "sha512-VxkuQK59c0tHm6uJZCUrS3cyA2JhGGfdU6e41SZz0x/JS+4Sm7C1mIc97In14vkZJopEt7yXA2TouCqZDSygEA==", + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.47.tgz", + "integrity": "sha512-TjfhjgP/jGCfFHYC3JQPhJA1HwErbIJ9JfREDc1KNkvY6P0LodCgKVIlQ5deeTbkG7ih3bF5PHJLuLpaZjdRyQ==", "cpu": [ "x64" ], @@ -3336,9 +3698,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.41.tgz", - "integrity": "sha512-/0qXIu1ZxggLuovLb22vFfKHq2AA4n6Whw5UwmVCHk4pkw7KWnPIQpMCEqUMPsNkFJig7PPp/TSYFu8ZEb2rtQ==", + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.47.tgz", + "integrity": "sha512-CQpS8Ge/avfjZd0UEwG/sds83Uu32deQXcV1Jo3jD0mmvQQqtYAjpsDZXugmheeAwmt+YIuoVtVHro8LMYHqsQ==", "cpu": [ "x64" ], @@ -3355,9 +3717,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.41.tgz", - "integrity": "sha512-Y481sMNZM6rECh9VO4+y26N1lWEDAyxnBZskUf37fl90uHE946VHfmiVQWT0uMFOhyJJFovGTRuF4W82dwewUg==", + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.47.tgz", + "integrity": "sha512-0W8IKHsUTYiT7G2RqtOoVWk+89yzZikIiDUb/sCK6BmQDBhN91hQSfyUtW12jhEWLzYgcfmisfsZrmZE+84U1A==", "cpu": [ "arm64" ], @@ -3371,9 +3733,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.41.tgz", - "integrity": "sha512-BAchBD5qeUzy3hiPSLJtaaoSm4blCLyYffOF1bGE4ETcV+OisqjUAwDQMJj++4bTpvMCDzwC+Bj3PmQyBCtscw==", + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.47.tgz", + "integrity": "sha512-ZIp49d2Z4/ka2jO9otOg4hDvTdPmp86kVOgS2M5FCPI7eKKZ1W0boxWn+8XeZrfERtFGW0AlMRm4JhlJa7l3NA==", "cpu": [ "ia32" ], @@ -3387,9 +3749,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.41.tgz", - "integrity": "sha512-WOkA+fJ/ViVBQDsSV9JC52NACTe5PhlurA6viASDZGb7HR3KS01ZG7RZ+Bg6SVQFIoq3gSbTsskQVe6EbHFAYw==", + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.47.tgz", + "integrity": "sha512-2h8Iek95vnixkBRCo+H8p09+Q5ll2NgSMFrWTy0iKt7+/t+8/T5mBpiT6c0ZxSS7wcWjwZ9sGZkK70tTSYHdDw==", "cpu": [ "x64" ], @@ -3418,46 +3780,18 @@ } }, "node_modules/@swc/types": { - "version": "0.1.26", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.26.tgz", - "integrity": "sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==", + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.27.tgz", + "integrity": "sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==", "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" } }, - "node_modules/@tabby_ai/hijri-converter": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@tabby_ai/hijri-converter/-/hijri-converter-1.0.5.tgz", - "integrity": "sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==", - "license": "MIT", - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@theguild/federation-composition": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@theguild/federation-composition/-/federation-composition-0.19.1.tgz", - "integrity": "sha512-E4kllHSRYh+FsY0VR+fwl0rmWhDV8xUgWawLZTXmy15nCWQwj0BDsoEpdEXjPh7xes+75cRaeJcSbZ4jkBuSdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "constant-case": "^3.0.4", - "debug": "4.4.1", - "json5": "^2.2.3", - "lodash.sortby": "^4.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "graphql": "^16.0.0" - } - }, "node_modules/@tybys/wasm-util": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", - "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", "dev": true, "license": "MIT", "optional": true, @@ -3475,9 +3809,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "license": "MIT" }, "node_modules/@types/estree-jsx": { @@ -3498,13 +3832,6 @@ "@types/unist": "*" } }, - "node_modules/@types/js-yaml": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", - "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -3535,13 +3862,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.19.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.7.tgz", - "integrity": "sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==", + "version": "26.1.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz", + "integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~8.3.0" } }, "node_modules/@types/prismjs": { @@ -3557,21 +3884,21 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.1.16", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.16.tgz", - "integrity": "sha512-WBM/nDbEZmDUORKnh5i1bTnAz6vTohUf9b8esSMu+b24+srbaxa04UbJgWx78CVfNXA20sNu0odEIluZDFdCog==", + "version": "19.2.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", + "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", "license": "MIT", "dependencies": { - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/react-dom": { - "version": "19.1.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.9.tgz", - "integrity": "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "license": "MIT", "peerDependencies": { - "@types/react": "^19.0.0" + "@types/react": "^19.2.0" } }, "node_modules/@types/react-transition-group": { @@ -3590,9 +3917,9 @@ "license": "MIT" }, "node_modules/@types/warning": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", - "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.4.tgz", + "integrity": "sha512-CqN8MnISMwQbLJXO3doBAV4Yw9hx9/Pyr2rZ78+NfaCnhyRA/nKrpyk6E7mKw17ZOaQdLpK9GiUjrqLzBlN3sg==", "license": "MIT" }, "node_modules/@types/ws": { @@ -3606,21 +3933,20 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.0.tgz", - "integrity": "sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz", + "integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/type-utils": "8.39.0", - "@typescript-eslint/utils": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/type-utils": "8.65.0", + "@typescript-eslint/utils": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3630,15 +3956,15 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.39.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "@typescript-eslint/parser": "^8.65.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", "dev": true, "license": "MIT", "engines": { @@ -3646,17 +3972,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.0.tgz", - "integrity": "sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz", + "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3666,20 +3992,20 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.39.0.tgz", - "integrity": "sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz", + "integrity": "sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.39.0", - "@typescript-eslint/types": "^8.39.0", - "debug": "^4.3.4" + "@typescript-eslint/tsconfig-utils": "^8.65.0", + "@typescript-eslint/types": "^8.65.0", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3689,18 +4015,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz", - "integrity": "sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz", + "integrity": "sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0" + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3711,9 +4037,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.0.tgz", - "integrity": "sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz", + "integrity": "sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==", "dev": true, "license": "MIT", "engines": { @@ -3724,21 +4050,21 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.0.tgz", - "integrity": "sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.65.0.tgz", + "integrity": "sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0", - "@typescript-eslint/utils": "8.39.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/utils": "8.65.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3748,14 +4074,14 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz", - "integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz", + "integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==", "dev": true, "license": "MIT", "engines": { @@ -3767,22 +4093,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz", - "integrity": "sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz", + "integrity": "sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.39.0", - "@typescript-eslint/tsconfig-utils": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/project-service": "8.65.0", + "@typescript-eslint/tsconfig-utils": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3792,69 +4117,52 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", - "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, "engines": { - "node": ">=8.6.0" + "node": "18 || 20 || >=22" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "balanced-match": "^4.0.2" }, "engines": { - "node": ">= 6" + "node": "20 || >=22" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.2" + "brace-expansion": "^5.0.8" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "license": "ISC", "bin": { @@ -3865,16 +4173,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.0.tgz", - "integrity": "sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.65.0.tgz", + "integrity": "sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3884,19 +4192,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz", - "integrity": "sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz", + "integrity": "sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.65.0", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3943,6 +4251,15 @@ "react-dom": ">=16.8.0" } }, + "node_modules/@uiw/react-markdown-preview/node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@uiw/react-md-editor": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/@uiw/react-md-editor/-/react-md-editor-4.1.1.tgz", @@ -3962,6 +4279,15 @@ "react-dom": ">=16.8.0" } }, + "node_modules/@uiw/react-md-editor/node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", @@ -3969,9 +4295,9 @@ "license": "ISC" }, "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz", + "integrity": "sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==", "cpu": [ "arm" ], @@ -3983,9 +4309,9 @@ ] }, "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.12.2.tgz", + "integrity": "sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==", "cpu": [ "arm64" ], @@ -3997,9 +4323,9 @@ ] }, "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", - "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.12.2.tgz", + "integrity": "sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==", "cpu": [ "arm64" ], @@ -4011,9 +4337,9 @@ ] }, "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.12.2.tgz", + "integrity": "sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==", "cpu": [ "x64" ], @@ -4025,9 +4351,9 @@ ] }, "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.12.2.tgz", + "integrity": "sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==", "cpu": [ "x64" ], @@ -4039,9 +4365,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.12.2.tgz", + "integrity": "sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==", "cpu": [ "arm" ], @@ -4053,9 +4379,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.12.2.tgz", + "integrity": "sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==", "cpu": [ "arm" ], @@ -4067,27 +4393,67 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.12.2.tgz", + "integrity": "sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.12.2.tgz", + "integrity": "sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-loong64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-gnu/-/resolver-binding-linux-loong64-gnu-1.12.2.tgz", + "integrity": "sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ "linux" ] }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "node_modules/@unrs/resolver-binding-linux-loong64-musl": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-musl/-/resolver-binding-linux-loong64-musl-1.12.2.tgz", + "integrity": "sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==", "cpu": [ - "arm64" + "loong64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -4095,13 +4461,16 @@ ] }, "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.12.2.tgz", + "integrity": "sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==", "cpu": [ "ppc64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -4109,13 +4478,16 @@ ] }, "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.12.2.tgz", + "integrity": "sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==", "cpu": [ "riscv64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -4123,13 +4495,16 @@ ] }, "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.12.2.tgz", + "integrity": "sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==", "cpu": [ "riscv64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -4137,13 +4512,16 @@ ] }, "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.12.2.tgz", + "integrity": "sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==", "cpu": [ "s390x" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -4151,13 +4529,16 @@ ] }, "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz", + "integrity": "sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -4165,23 +4546,40 @@ ] }, "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.12.2.tgz", + "integrity": "sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ "linux" ] }, + "node_modules/@unrs/resolver-binding-openharmony-arm64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-openharmony-arm64/-/resolver-binding-openharmony-arm64-1.12.2.tgz", + "integrity": "sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.12.2.tgz", + "integrity": "sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==", "cpu": [ "wasm32" ], @@ -4189,16 +4587,29 @@ "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" }, "engines": { "node": ">=14.0.0" } }, + "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz", + "integrity": "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==", "cpu": [ "arm64" ], @@ -4210,9 +4621,9 @@ ] }, "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz", + "integrity": "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==", "cpu": [ "ia32" ], @@ -4224,9 +4635,9 @@ ] }, "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz", + "integrity": "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==", "cpu": [ "x64" ], @@ -4252,13 +4663,13 @@ } }, "node_modules/@whatwg-node/fetch": { - "version": "0.10.10", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.10.tgz", - "integrity": "sha512-watz4i/Vv4HpoJ+GranJ7HH75Pf+OkPQ63NoVmru6Srgc8VezTArB00i/oQlnn0KWh14gM42F22Qcc9SU9mo/w==", + "version": "0.10.13", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.13.tgz", + "integrity": "sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q==", "dev": true, "license": "MIT", "dependencies": { - "@whatwg-node/node-fetch": "^0.7.25", + "@whatwg-node/node-fetch": "^0.8.3", "urlpattern-polyfill": "^10.0.0" }, "engines": { @@ -4266,9 +4677,9 @@ } }, "node_modules/@whatwg-node/node-fetch": { - "version": "0.7.25", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.7.25.tgz", - "integrity": "sha512-szCTESNJV+Xd56zU6ShOi/JWROxE9IwCic8o5D9z5QECZloas6Ez5tUuKqXTAdu6fHFx1t6C+5gwj8smzOLjtg==", + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.8.6.tgz", + "integrity": "sha512-BDMdYFcerLQkwA2RTldxOqRCs6ZQD1S7UgP3pUdGUkcbgTrP/V5ko77ZkCww9DHmC4lpoYuwigGfQYj285gMvA==", "dev": true, "license": "MIT", "dependencies": { @@ -4343,9 +4754,9 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", "dev": true, "license": "MIT", "bin": { @@ -4365,30 +4776,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ajv": { "version": "6.15.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", @@ -4407,42 +4794,42 @@ } }, "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "environment": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" @@ -4455,6 +4842,18 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/aria-query": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", @@ -4635,13 +5034,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, "node_modules/ast-types-flow": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", @@ -4649,16 +5041,6 @@ "dev": true, "license": "MIT" }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", @@ -4670,13 +5052,13 @@ } }, "node_modules/auto-bind": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz", - "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-5.0.1.tgz", + "integrity": "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4699,9 +5081,9 @@ } }, "node_modules/axe-core": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", - "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.12.1.tgz", + "integrity": "sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==", "dev": true, "license": "MPL-2.0", "engines": { @@ -4735,32 +5117,10 @@ "dev": true, "license": "MIT" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/baseline-browser-mapping": { - "version": "2.10.37", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.37.tgz", - "integrity": "sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==", - "dev": true, + "version": "2.11.7", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.7.tgz", + "integrity": "sha512-APw5YuIQAg6L9w4sHDI6j26DGFJI6RpYOhnkMPdC9lWbkKvsyPHzDsve1yd73lk21yz7Y09Kci8B2Pp9FonzWA==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -4779,18 +5139,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -4816,17 +5164,6 @@ "@popperjs/core": "^2.11.8" } }, - "node_modules/brace-expansion": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", - "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -4841,9 +5178,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", - "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "version": "4.28.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.7.tgz", + "integrity": "sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==", "dev": true, "funding": [ { @@ -4861,10 +5198,10 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.10.12", - "caniuse-lite": "^1.0.30001782", - "electron-to-chromium": "^1.5.328", - "node-releases": "^2.0.36", + "baseline-browser-mapping": "^2.10.44", + "caniuse-lite": "^1.0.30001806", + "electron-to-chromium": "^1.5.393", + "node-releases": "^2.0.51", "update-browserslist-db": "^1.2.3" }, "bin": { @@ -4874,51 +5211,16 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" }, "engines": { @@ -4969,21 +5271,10 @@ "node": ">=6" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001799", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz", - "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==", + "version": "1.0.30001806", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz", + "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==", "funding": [ { "type": "opencollective", @@ -5000,18 +5291,6 @@ ], "license": "CC-BY-4.0" }, - "node_modules/capital-case": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, "node_modules/ccount": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", @@ -5023,60 +5302,36 @@ } }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/change-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" - } + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true, + "license": "MIT" }, "node_modules/change-case-all": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.15.tgz", - "integrity": "sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-2.1.0.tgz", + "integrity": "sha512-v6b0WWWkZUMHVuYk82l+WROgkUm4qEN2w5hKRNWtEOYwWqUGoi8C6xH0l1RLF1EoWqDFK6MFclmN3od6ws3/uw==", "dev": true, "license": "MIT", "dependencies": { - "change-case": "^4.1.2", - "is-lower-case": "^2.0.2", - "is-upper-case": "^2.0.2", - "lower-case": "^2.0.2", - "lower-case-first": "^2.0.2", - "sponge-case": "^1.0.1", - "swap-case": "^2.0.2", - "title-case": "^3.0.3", - "upper-case": "^2.0.2", - "upper-case-first": "^2.0.2" + "change-case": "^5.2.0", + "sponge-case": "^2.0.2", + "swap-case": "^3.0.2", + "title-case": "^3.0.3" } }, "node_modules/character-entities": { @@ -5120,23 +5375,23 @@ } }, "node_modules/chardet": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", - "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz", + "integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==", "dev": true, "license": "MIT" }, "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", "devOptional": true, "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "readdirp": "^5.0.0" }, "engines": { - "node": ">= 14.16.0" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -5148,67 +5403,47 @@ "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", "license": "MIT" }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", "dev": true, "license": "MIT", "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" }, "engines": { - "node": ">=8" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "dev": true, "license": "ISC", "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/client-only": { @@ -5218,67 +5453,70 @@ "license": "MIT" }, "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=12" + "node": ">=20" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, "engines": { - "node": ">=0.8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "license": "MIT", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, "engines": { - "node": ">=12.5.0" + "node": ">=6" } }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -5287,28 +5525,10 @@ "node": ">=7.0.0" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", - "optional": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, @@ -5340,56 +5560,77 @@ "license": "MIT" }, "node_modules/concurrently": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", - "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-10.0.4.tgz", + "integrity": "sha512-trZql+7l/0+WRAsAnEdctr4+iiOS6ZrViI6H8QWcCF9MFS/LT0dKpe8vluB1to6it+OxSI4VospFTIFMW8DJRw==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "4.1.2", + "chalk": "5.6.2", "rxjs": "7.8.2", - "shell-quote": "1.8.3", - "supports-color": "8.1.1", + "shell-quote": "1.9.0", + "supports-color": "10.2.2", "tree-kill": "1.2.2", - "yargs": "17.7.2" + "yargs": "18.0.0" }, "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" + "conc": "dist/bin/index.js", + "concurrently": "dist/bin/index.js" }, "engines": { - "node": ">=18" + "node": ">=22" }, "funding": { "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/concurrently/node_modules/shell-quote": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.9.0.tgz", + "integrity": "sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/concurrently/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/constant-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", + "node_modules/concurrently/node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", "dev": true, "license": "MIT", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/convert-source-map": { @@ -5409,16 +5650,16 @@ } }, "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.2.tgz", + "integrity": "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==", "dev": true, "license": "MIT", "dependencies": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" @@ -5435,16 +5676,6 @@ } } }, - "node_modules/cross-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", - "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "node-fetch": "^2.7.0" - } - }, "node_modules/cross-inspect": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.1.tgz", @@ -5490,9 +5721,9 @@ "license": "MIT" }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, "node_modules/damerau-levenshtein": { @@ -5574,32 +5805,32 @@ "license": "MIT" }, "node_modules/date-fns": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", - "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.4.0.tgz", + "integrity": "sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" } }, - "node_modules/date-fns-jalali": { - "version": "4.1.0-0", - "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", - "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==", - "license": "MIT" - }, "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-3.0.0.tgz", + "integrity": "sha512-64byRbF0/AirwbuHqB3/ZpMG9/nckDa6ZA0yd6UnaQNwbbemCOwvz2sL5sjXLHhZHADyiwLm0M5qMhltUUx+TA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -5633,19 +5864,6 @@ "dev": true, "license": "MIT" }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -5683,13 +5901,13 @@ } }, "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", + "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6.0" + "node": ">=4" } }, "node_modules/dequal": { @@ -5702,13 +5920,16 @@ } }, "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.2.tgz", + "integrity": "sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/detect-libc": { @@ -5782,38 +6003,13 @@ "csstype": "^3.0.2" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dset": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", - "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", - "dev": true, + "node_modules/dom-helpers/node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, "node_modules/dunder-proto": { @@ -5832,16 +6028,16 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.372", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.372.tgz", - "integrity": "sha512-M3yhbAlilnwqC8D21t28UCDGHyitShTmmLRU/H+b74P6Ski16Nb9HONYEaVpMj/pwC7BEo5B95FpjODLCWbtfA==", + "version": "1.5.398", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.398.tgz", + "integrity": "sha512-AsvhAxopJGh6museTDMIjn6JpDYOfgu4RLlygomt87MUwBUqTfd/1EiPtx10/LZE8xpTvkP2E9Gafq7lkLtodQ==", "dev": true, "license": "ISC" }, "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, "license": "MIT" }, @@ -5857,10 +6053,33 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5868,9 +6087,9 @@ } }, "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", "dev": true, "license": "MIT", "dependencies": { @@ -5936,6 +6155,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-abstract-get": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz", + "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.2", + "is-callable": "^1.2.7", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -5957,37 +6195,37 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.4.0.tgz", + "integrity": "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", + "es-abstract": "^1.24.2", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", + "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", + "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" + "iterator.prototype": "^1.1.5", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "dev": true, "license": "MIT", "dependencies": { @@ -6027,15 +6265,18 @@ } }, "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.4.tgz", + "integrity": "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==", "dev": true, "license": "MIT", "dependencies": { + "es-abstract-get": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" + "is-date-object": "^1.1.0", + "is-symbol": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -6109,26 +6350,25 @@ } }, "node_modules/eslint": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz", - "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz", + "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.33.0", - "@eslint/plugin-kit": "^0.3.5", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.6", + "@eslint/js": "9.39.5", + "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", + "ajv": "^6.14.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", @@ -6147,7 +6387,7 @@ "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^3.1.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, @@ -6170,25 +6410,24 @@ } }, "node_modules/eslint-config-next": { - "version": "15.5.11", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.5.11.tgz", - "integrity": "sha512-RQNY69VUv0BzXkLEKDh/OPUzA+krFOnYRxO0JA3UsW429ovLa2nXx8kZuXCl18P27PyJBdS3qgJJkIhi9H8SuQ==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.2.12.tgz", + "integrity": "sha512-iaaf4vvKo5h2LBdGt0JuRv7t0Ysqr9FMCiFxbptDg8LqOE//mIKR80DdpOnSVM7qjLH3jT8P0aFiwXxBEGZRXw==", "dev": true, "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.5.11", - "@rushstack/eslint-patch": "^1.10.3", - "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@next/eslint-plugin-next": "16.2.12", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.31.0", + "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", - "eslint-plugin-react-hooks": "^5.0.0" + "eslint-plugin-react-hooks": "^7.0.0", + "globals": "16.4.0", + "typescript-eslint": "^8.46.0" }, "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "eslint": ">=9.0.0", "typescript": ">=3.3.1" }, "peerDependenciesMeta": { @@ -6197,45 +6436,14 @@ } } }, - "node_modules/eslint-config-prettier": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", - "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "funding": { - "url": "https://opencollective.com/eslint-config-prettier" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/eslint-config-next/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } + "license": "MIT" }, - "node_modules/eslint-import-resolver-typescript": { + "node_modules/eslint-config-next/node_modules/eslint-import-resolver-typescript": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", @@ -6270,35 +6478,7 @@ } } }, - "node_modules/eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { + "node_modules/eslint-config-next/node_modules/eslint-plugin-import": { "version": "2.32.0", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", @@ -6332,7 +6512,7 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { + "node_modules/eslint-config-next/node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", @@ -6342,7 +6522,7 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-jsx-a11y": { + "node_modules/eslint-config-next/node_modules/eslint-plugin-jsx-a11y": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", @@ -6372,7 +6552,7 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, - "node_modules/eslint-plugin-react": { + "node_modules/eslint-config-next/node_modules/eslint-plugin-react": { "version": "7.37.5", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", @@ -6401,39 +6581,107 @@ "engines": { "node": ">=4" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-config-next/node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", + "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.16.1", + "resolve": "^2.0.0-next.6" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.14.0.tgz", + "integrity": "sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" } }, "node_modules/eslint-scope": { @@ -6454,6 +6702,52 @@ } }, "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", @@ -6466,6 +6760,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", @@ -6484,10 +6791,23 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6540,6 +6860,13 @@ "node": ">=0.10.0" } }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -6597,48 +6924,60 @@ "dev": true, "license": "MIT" }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "dev": true, + "license": "MIT", "dependencies": { - "reusify": "^1.0.4" + "fast-string-truncated-width": "^3.0.2" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "bser": "2.1.1" + "fast-string-width": "^3.0.2" } }, - "node_modules/fbjs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", - "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^1.0.35" + "reusify": "^1.0.4" } }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } }, "node_modules/fetch-blob": { "version": "3.2.0", @@ -6664,32 +7003,6 @@ "node": "^12.20 || >= 14.13" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -6748,9 +7061,9 @@ } }, "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", "dev": true, "license": "ISC" }, @@ -6784,13 +7097,13 @@ } }, "node_modules/framer-motion": { - "version": "12.29.2", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.29.2.tgz", - "integrity": "sha512-lSNRzBJk4wuIy0emYQ/nfZ7eWhqud2umPKw2QAQki6uKhZPKm2hRQHeQoHTG9MIvfobb+A/LbEWPJU794ZUKrg==", + "version": "12.43.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.43.0.tgz", + "integrity": "sha512-1eaL3RvR/kAlbG7UYcpMptEyzPoENO0c6w7ZnB3/hh2vSAz/6uGAFn6fdoqTBguNstf3MsFhJHsD/0DHiclG+g==", "license": "MIT", "dependencies": { - "motion-dom": "^12.29.2", - "motion-utils": "^12.29.2", + "motion-dom": "^12.43.0", + "motion-utils": "^12.39.0", "tslib": "^2.4.0" }, "peerDependencies": { @@ -6835,18 +7148,21 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz", + "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" + "has-property-descriptors": "^1.0.2", + "hasown": "^2.0.4", + "is-callable": "^1.2.7", + "is-document.all": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6865,6 +7181,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -6885,6 +7211,19 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -6943,9 +7282,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", - "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", "dev": true, "license": "MIT", "dependencies": { @@ -7038,17 +7377,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/graphql": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz", - "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==", + "version": "16.14.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.14.2.tgz", + "integrity": "sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==", "license": "MIT", "peer": true, "engines": { @@ -7056,9 +7388,9 @@ } }, "node_modules/graphql-config": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-5.1.5.tgz", - "integrity": "sha512-mG2LL1HccpU8qg5ajLROgdsBzx/o2M6kgI3uAmoaXiSH9PCUbtIyLomLqUtCFaAeG2YCFsl0M5cfQ9rKmDoMVA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-5.1.6.tgz", + "integrity": "sha512-fCkYnm4Kdq3un0YIM4BCZHVR5xl0UeLP6syxxO7KAstdY7QVyVvTHP0kRPDYEP1v08uwtJVgis5sj3IOTLOniQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7066,11 +7398,11 @@ "@graphql-tools/json-file-loader": "^8.0.0", "@graphql-tools/load": "^8.1.0", "@graphql-tools/merge": "^9.0.0", - "@graphql-tools/url-loader": "^8.0.0", - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/url-loader": "^9.0.0", + "@graphql-tools/utils": "^11.0.0", "cosmiconfig": "^8.1.0", "jiti": "^2.0.0", - "minimatch": "^9.0.5", + "minimatch": "^10.0.0", "string-env-interpolation": "^1.0.1", "tslib": "^2.4.0" }, @@ -7087,60 +7419,76 @@ } } }, - "node_modules/graphql-config/node_modules/brace-expansion": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", - "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "node_modules/graphql-config/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": "18 || 20 || >=22" } }, - "node_modules/graphql-config/node_modules/jiti": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", - "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", + "node_modules/graphql-config/node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", "dev": true, "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" } }, - "node_modules/graphql-config/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "node_modules/graphql-config/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.2" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/graphql-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-6.1.0.tgz", - "integrity": "sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==", + "node_modules/graphql-config/node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "@graphql-typed-document-node/core": "^3.2.0", - "cross-fetch": "^3.1.5" + "brace-expansion": "^5.0.8" }, - "peerDependencies": { - "graphql": "14 - 16" + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/graphql-tag": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "version": "2.12.7", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.7.tgz", + "integrity": "sha512-xnE/NFzy+0eIesvAsREJZ284zTl/wYuBAvpsFSDhRGRdRHdnE90M21Q3xAWyYInb0J756c6x0pIQ62+vtvOs1Q==", "license": "MIT", "dependencies": { "tslib": "^2.1.0" @@ -7149,13 +7497,13 @@ "node": ">=10" }, "peerDependencies": { - "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/graphql-ws": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-6.0.6.tgz", - "integrity": "sha512-zgfER9s+ftkGKUZgc0xbx8T7/HMO4AV5/YuYiFc+AtgcO5T0v8AxYYNQ+ltzuzDZgNkYJaFspm5MMYLjQzrkmw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-6.2.0.tgz", + "integrity": "sha512-A0kH9R7JZNh4AKKHykmJdOb5IgRya07uCrhYOXm1UDyxCwc/6jEi5+UMUhoBVj/hsowJHRK7Y3LllMdlNJR+HA==", "devOptional": true, "license": "MIT", "engines": { @@ -7164,8 +7512,7 @@ "peerDependencies": { "@fastify/websocket": "^10 || ^11", "crossws": "~0.3", - "graphql": "^15.10.1 || ^16", - "uWebSockets.js": "^20", + "graphql": "^15.10.1 || ^16 || ^17", "ws": "^8" }, "peerDependenciesMeta": { @@ -7175,9 +7522,6 @@ "crossws": { "optional": true }, - "uWebSockets.js": { - "optional": true - }, "ws": { "optional": true } @@ -7265,9 +7609,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, "license": "MIT", "dependencies": { @@ -7531,24 +7875,21 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/header-case": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", - "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", "dev": true, - "license": "MIT", - "dependencies": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" - } + "license": "MIT" }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", "dependencies": { - "react-is": "^16.7.0" + "hermes-estree": "0.25.1" } }, "node_modules/html-url-attributes": { @@ -7571,38 +7912,10 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7610,12 +7923,16 @@ }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/icu-minify": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/icu-minify/-/icu-minify-4.13.0.tgz", - "integrity": "sha512-SIFMeUHZJjzS5RvIGvybKvWoHjDm9cGVEs2EpJ8PmywOdJLWyblPm7TdPLLoUtkJtwQD7iGhl2WMptZ+N0on+w==", + "version": "4.13.4", + "resolved": "https://registry.npmjs.org/icu-minify/-/icu-minify-4.13.4.tgz", + "integrity": "sha512-yK6HyPLGlQjqm8fTKtnBpM77z7vl7JdDBN2EXLvmgAu/b7XaOHWZb73M3ISl9ahBTehBv7RYeqqWSHfk1v2YcA==", "funding": [ { "type": "individual", @@ -7627,27 +7944,6 @@ "@formatjs/icu-messageformat-parser": "^3.4.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -7659,9 +7955,9 @@ } }, "node_modules/immutable": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.6.tgz", - "integrity": "sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", "devOptional": true, "license": "MIT" }, @@ -7715,56 +8011,12 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, "node_modules/inline-style-parser": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", "license": "MIT" }, - "node_modules/inquirer": { - "version": "8.2.7", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", - "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/external-editor": "^1.0.0", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", @@ -7781,13 +8033,13 @@ } }, "node_modules/intl-messageformat": { - "version": "11.2.8", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-11.2.8.tgz", - "integrity": "sha512-l323RCl3qJDVQ8U9j74ut/hVMdg3VPsOHpVMDvFfz9qiq4dPO5ooVYFNVUzzrpgG39a+RLzcXyJb8VFgIU+tUA==", + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-11.2.12.tgz", + "integrity": "sha512-KW70Xxfcvy7vV3qODfvShWkFDPMqKDAa4N+hSyVBWGNtVhTUFYaqlD/l88DaYPKiVcPP4rPQ3qnH7i5K82Mg7g==", "license": "BSD-3-Clause", "dependencies": { - "@formatjs/fast-memoize": "3.1.6", - "@formatjs/icu-messageformat-parser": "3.5.11" + "@formatjs/fast-memoize": "3.1.7", + "@formatjs/icu-messageformat-parser": "3.5.15" } }, "node_modules/invariant": { @@ -7926,9 +8178,9 @@ } }, "node_modules/is-bun-module/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "license": "ISC", "bin": { @@ -7952,13 +8204,13 @@ } }, "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "hasown": "^2.0.3" }, "engines": { "node": ">= 0.4" @@ -8012,6 +8264,22 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-document.all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz", + "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -8038,24 +8306,31 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" }, @@ -8088,26 +8363,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-2.0.2.tgz", - "integrity": "sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -8299,28 +8554,18 @@ } }, "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-upper-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-2.0.2.tgz", - "integrity": "sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -8401,6 +8646,22 @@ "ws": "*" } }, + "node_modules/isows": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz", + "integrity": "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, "node_modules/iterator.prototype": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", @@ -8420,20 +8681,19 @@ } }, "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", "dev": true, "license": "MIT", "bin": { - "jiti": "bin/jiti.js" + "jiti": "lib/jiti-cli.mjs" } }, "node_modules/jose": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", - "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", - "dev": true, + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" @@ -8446,9 +8706,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", - "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", "dev": true, "funding": [ { @@ -8610,49 +8870,20 @@ "license": "MIT" }, "node_modules/listr2": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-10.2.2.tgz", + "integrity": "sha512-JtNtbZj8q5BnDMR7trpwvwk3RIrANtIVzEUm8w7amp6xelLgyuq+4WZoTH913XaQAoH/cNdYhaNzBPA2U3xbDw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "cli-truncate": "^5.2.0", + "eventemitter3": "^5.0.4", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^10.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=22.13.0" } }, "node_modules/locate-path": { @@ -8671,13 +8902,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -8693,59 +8917,95 @@ "license": "MIT" }, "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", @@ -8768,26 +9028,6 @@ "loose-envify": "cli.js" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lower-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-2.0.2.tgz", - "integrity": "sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -9121,9 +9361,9 @@ } }, "node_modules/meros": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.1.tgz", - "integrity": "sha512-eV7dRObfTrckdmAz4/n7pT1njIsIJXRIZkgCiX43xEsPNy4gjXQzOYYxmGcolAMtF7HyfqRuDBh3Lgs4hmhVEw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.2.tgz", + "integrity": "sha512-Q3mobPbvEx7XbwhnC1J1r60+5H6EZyNccdzSz0eGexJRwouUtTZxPVRGdqKtxlpD84ScK4+tIGldkqDtCKdI0A==", "dev": true, "license": "MIT", "engines": { @@ -9715,14 +9955,30 @@ "node": ">=8.6" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/minimatch": { @@ -9738,6 +9994,17 @@ "node": "*" } }, + "node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", @@ -9749,12 +10016,12 @@ } }, "node_modules/motion": { - "version": "12.29.2", - "resolved": "https://registry.npmjs.org/motion/-/motion-12.29.2.tgz", - "integrity": "sha512-jMpHdAzEDF1QQ055cB+1lOBLdJ6ialVWl6QQzpJI2OvmHequ7zFVHM2mx0HNAy+Tu4omUlApfC+4vnkX0geEOg==", + "version": "12.43.0", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.43.0.tgz", + "integrity": "sha512-BQgQbSa9Hn3/mtbib0MK53y6JSANa+YKUKlaYnWzAVDH424RYQ5LVpV3pNiWH00BA2z4ojsSdMzqT7g2FQwjuQ==", "license": "MIT", "dependencies": { - "framer-motion": "^12.29.2", + "framer-motion": "^12.43.0", "tslib": "^2.4.0" }, "peerDependencies": { @@ -9775,18 +10042,18 @@ } }, "node_modules/motion-dom": { - "version": "12.29.2", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.29.2.tgz", - "integrity": "sha512-/k+NuycVV8pykxyiTCoFzIVLA95Nb1BFIVvfSu9L50/6K6qNeAYtkxXILy/LRutt7AzaYDc2myj0wkCVVYAPPA==", + "version": "12.43.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.43.0.tgz", + "integrity": "sha512-azKON4d9S65PEoFUiQTMTgPheEmzf2QngdRc50AKfJp9Q9mmcBVw22c8eMq9k8kxOFHdL7+WZY7N/5F/lwiDag==", "license": "MIT", "dependencies": { - "motion-utils": "^12.29.2" + "motion-utils": "^12.39.0" } }, "node_modules/motion-utils": { - "version": "12.29.2", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.29.2.tgz", - "integrity": "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==", + "version": "12.39.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.39.0.tgz", + "integrity": "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==", "license": "MIT" }, "node_modules/ms": { @@ -9796,16 +10063,19 @@ "license": "MIT" }, "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", + "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", "funding": [ { "type": "github", @@ -9821,9 +10091,9 @@ } }, "node_modules/napi-postinstall": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.2.tgz", - "integrity": "sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", "dev": true, "license": "MIT", "bin": { @@ -9853,13 +10123,14 @@ } }, "node_modules/next": { - "version": "15.5.19", - "resolved": "https://registry.npmjs.org/next/-/next-15.5.19.tgz", - "integrity": "sha512-xNOW6tYshGX1/Oi3F8uuk4gpDeWsSUE/1Z0G5uUMekIxaQ0xc03UXd9II0VQHYMWviMeA0OHpJFAKsHf8bTYVg==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/next/-/next-16.2.12.tgz", + "integrity": "sha512-iD59eYQWmbFcEbX7v/acG5DRym9iw1DdaPoD0WTA920naWsE25wShzJW4+UvAs8MK9EC2kBfIH6vtto1H1PHGw==", "license": "MIT", "dependencies": { - "@next/env": "15.5.19", + "@next/env": "16.2.12", "@swc/helpers": "0.5.15", + "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" @@ -9868,18 +10139,18 @@ "next": "dist/bin/next" }, "engines": { - "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + "node": ">=20.9.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.5.19", - "@next/swc-darwin-x64": "15.5.19", - "@next/swc-linux-arm64-gnu": "15.5.19", - "@next/swc-linux-arm64-musl": "15.5.19", - "@next/swc-linux-x64-gnu": "15.5.19", - "@next/swc-linux-x64-musl": "15.5.19", - "@next/swc-win32-arm64-msvc": "15.5.19", - "@next/swc-win32-x64-msvc": "15.5.19", - "sharp": "^0.34.3" + "@next/swc-darwin-arm64": "16.2.12", + "@next/swc-darwin-x64": "16.2.12", + "@next/swc-linux-arm64-gnu": "16.2.12", + "@next/swc-linux-arm64-musl": "16.2.12", + "@next/swc-linux-x64-gnu": "16.2.12", + "@next/swc-linux-x64-musl": "16.2.12", + "@next/swc-win32-arm64-msvc": "16.2.12", + "@next/swc-win32-x64-msvc": "16.2.12", + "sharp": "^0.34.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -9905,9 +10176,9 @@ } }, "node_modules/next-auth": { - "version": "4.24.14", - "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.24.14.tgz", - "integrity": "sha512-YRz6xFDXKUwiXSMMChbrBEWyFktZ1qZXEgeSHQQ3nsy08B4c/xLk6REeutRsIFwkjY/1+ShHnu07DN3JeJguig==", + "version": "4.24.15", + "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.24.15.tgz", + "integrity": "sha512-NnjYtjrSOAx/TIVFGTX4IfI/9yHnNpi4B7FuLUwuV20v2Zxgr2OGP/YN0ynJuI7y8QOnTBPitfOdEXZrVvhIuA==", "license": "ISC", "dependencies": { "@babel/runtime": "^7.20.13", @@ -9918,7 +10189,7 @@ "openid-client": "^5.4.0", "preact": "^10.6.3", "preact-render-to-string": "^5.1.19", - "uuid": "^8.3.2" + "uuid": "^11.1.1" }, "peerDependencies": { "@auth/core": "0.34.3", @@ -9936,28 +10207,32 @@ } } }, - "node_modules/next-auth/node_modules/jose": { - "version": "4.15.9", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", - "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "node_modules/next-auth/node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" + "engines": { + "node": ">=6.9.0" } }, "node_modules/next-auth/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.1.tgz", + "integrity": "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/next-intl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.13.0.tgz", - "integrity": "sha512-OvNq2v5XLx4EkQOsAhVE9g+6zdb83XHusADCXXtIW4LILYnjEVaeINdr1lkVWKSjzwNUiMSlH5N4K0OQTRiv6A==", + "version": "4.13.4", + "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.13.4.tgz", + "integrity": "sha512-jhPAT0u0lahIK6E4gVdZAehugWCosBhLG8sV7xMzgSVoJpxHObP+Fiu+z2FfkEW0XPPtr7uEXoUlLEfhxhNMTg==", "funding": [ { "type": "individual", @@ -9969,11 +10244,11 @@ "@formatjs/intl-localematcher": "^0.8.1", "@parcel/watcher": "^2.4.1", "@swc/core": "^1.15.2", - "icu-minify": "^4.13.0", + "icu-minify": "^4.13.4", "negotiator": "^1.0.0", - "next-intl-swc-plugin-extractor": "^4.13.0", + "next-intl-swc-plugin-extractor": "^4.13.4", "po-parser": "^2.1.1", - "use-intl": "^4.13.0" + "use-intl": "^4.13.4" }, "peerDependencies": { "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", @@ -9986,20 +10261,20 @@ } }, "node_modules/next-intl-swc-plugin-extractor": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/next-intl-swc-plugin-extractor/-/next-intl-swc-plugin-extractor-4.13.0.tgz", - "integrity": "sha512-6S/fJI0KXvLCL8nhBo9P8eGaJPzmwJBTCzX0NaUIj0VyU8U89d//T+vjMLdNIXl5MlLaYH7B9MbAjb8Mvu+tqQ==", + "version": "4.13.4", + "resolved": "https://registry.npmjs.org/next-intl-swc-plugin-extractor/-/next-intl-swc-plugin-extractor-4.13.4.tgz", + "integrity": "sha512-uN1+NMUYbG6YkO3q+rjc2bvAPX9nQ23owemvHJAyW0pRbQjVDwvNhmrV5qaak0oQc/9okbK17KLT49AoMGhVEQ==", "license": "MIT" }, "node_modules/next-intl/node_modules/@swc/core": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.41.tgz", - "integrity": "sha512-03nQq/082QRJJiOvp3FGbgxTGyyxMxohPTjhk/W9bD2J0tk4ukITI7goOhOO2WbaHn/lsPmo/zf8+DIXhwpgYQ==", + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.47.tgz", + "integrity": "sha512-FbsO5JcfOjfH38W/rohBRBweJeERsAuIP4f377lmkmxTcq9exjtx4SkRuZY5CdfhR2CBVwDIJegBpJDffwNsOg==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.26" + "@swc/types": "^0.1.27" }, "engines": { "node": ">=10" @@ -10009,18 +10284,18 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.15.41", - "@swc/core-darwin-x64": "1.15.41", - "@swc/core-linux-arm-gnueabihf": "1.15.41", - "@swc/core-linux-arm64-gnu": "1.15.41", - "@swc/core-linux-arm64-musl": "1.15.41", - "@swc/core-linux-ppc64-gnu": "1.15.41", - "@swc/core-linux-s390x-gnu": "1.15.41", - "@swc/core-linux-x64-gnu": "1.15.41", - "@swc/core-linux-x64-musl": "1.15.41", - "@swc/core-win32-arm64-msvc": "1.15.41", - "@swc/core-win32-ia32-msvc": "1.15.41", - "@swc/core-win32-x64-msvc": "1.15.41" + "@swc/core-darwin-arm64": "1.15.47", + "@swc/core-darwin-x64": "1.15.47", + "@swc/core-linux-arm-gnueabihf": "1.15.47", + "@swc/core-linux-arm64-gnu": "1.15.47", + "@swc/core-linux-arm64-musl": "1.15.47", + "@swc/core-linux-ppc64-gnu": "1.15.47", + "@swc/core-linux-s390x-gnu": "1.15.47", + "@swc/core-linux-x64-gnu": "1.15.47", + "@swc/core-linux-x64-musl": "1.15.47", + "@swc/core-win32-arm64-msvc": "1.15.47", + "@swc/core-win32-ia32-msvc": "1.15.47", + "@swc/core-win32-x64-msvc": "1.15.47" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -10031,17 +10306,6 @@ } } }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, "node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", @@ -10069,38 +10333,48 @@ "node": ">=10.5.0" } }, + "node_modules/node-exports-info": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.2.tgz", + "integrity": "sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "dev": true, "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true, - "license": "MIT" - }, "node_modules/node-releases": { - "version": "2.0.47", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", - "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", "dev": true, "license": "MIT", "engines": { @@ -10132,13 +10406,6 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "dev": true, - "license": "MIT" - }, "node_modules/oauth": { "version": "0.9.15", "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", @@ -10277,25 +10544,25 @@ } }, "node_modules/oidc-token-hash": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.1.1.tgz", - "integrity": "sha512-D7EmwxJV6DsEB6vOFLrBM2OzsVgQzgPWyHlV2OOAVj772n+WTXpudC9e9u5BVKQnYwaD30Ivhi9b+4UeBcGu9g==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.2.0.tgz", + "integrity": "sha512-6gj2m8cJZ+iSW8bm0FXdGF0YhIQbKrfP4yWTNzxc31U6MOjfEmB1rHvlYvxI1B7t7BCi1F2vYTT6YhtQRG4hxw==", "license": "MIT", "engines": { "node": "^10.13.0 || >=12.0.0" } }, "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "mimic-function": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10316,15 +10583,6 @@ "url": "https://github.com/sponsors/panva" } }, - "node_modules/openid-client/node_modules/jose": { - "version": "4.15.9", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", - "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/openid-client/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -10373,38 +10631,15 @@ "node": ">= 0.8.0" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", + "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.6", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" }, @@ -10447,33 +10682,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -10564,28 +10772,6 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", - "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -10653,13 +10839,12 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -10682,9 +10867,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.5.25", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", + "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", "funding": [ { "type": "opencollective", @@ -10701,22 +10886,30 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/preact": { - "version": "10.28.2", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.28.2.tgz", - "integrity": "sha512-lbteaWGzGHdlIuiJ0l2Jq454m6kcpI1zNje6d8MlGAFlYvP2GO4ibnat7P74Esfz4sPTdM6UxtTwh/d3pwM9JA==", + "version": "10.29.7", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.7.tgz", + "integrity": "sha512-DCHYrK/B10yUD3ZjLfhZ3WIE/9Vf9VFUODcRE2dRomTYDpJk6z6L9wecSfhfE6M9ZTHUdyQkoC46arIDhEV84Q==", "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" + }, + "peerDependencies": { + "preact-render-to-string": ">=5" + }, + "peerDependenciesMeta": { + "preact-render-to-string": { + "optional": true + } } }, "node_modules/preact-render-to-string": { @@ -10742,9 +10935,9 @@ } }, "node_modules/prettier": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", + "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", "dev": true, "license": "MIT", "bin": { @@ -10763,16 +10956,6 @@ "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==", "license": "MIT" }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -10839,14 +11022,35 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.2.1", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz", - "integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==", + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", + "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/react-aria": { + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.50.0.tgz", + "integrity": "sha512-S0Os6QZk33fzUAKu1QLT9afoUaCBt1ZNdoiq0n2YMVgKIdNIQS8zxiZ8O9hYE6QyDkHKjD6q39LQZ+qaSAIgjw==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.12.2", + "@internationalized/number": "^3.6.7", + "@internationalized/string": "^3.2.9", + "@react-types/shared": "^3.36.0", + "@swc/helpers": "^0.5.0", + "aria-hidden": "^1.2.3", + "clsx": "^2.0.0", + "react-stately": "3.48.0", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, "node_modules/react-bootstrap": { "version": "2.10.10", "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.10.tgz", @@ -10878,16 +11082,23 @@ } } }, + "node_modules/react-bootstrap/node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/react-day-picker": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.14.0.tgz", - "integrity": "sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-10.0.1.tgz", + "integrity": "sha512-eNh6BlwcYInWaJtRv18mXQ06Ys/H6rdTZAnTaSdOYJuTpwP1JMCHNd1FDRadA+gbeinq+psdULN5Xnowy9mV8w==", "license": "MIT", "dependencies": { "@date-fns/tz": "^1.4.1", - "@tabby_ai/hijri-converter": "1.0.5", - "date-fns": "^4.1.0", - "date-fns-jalali": "4.1.0-0" + "date-fns": "^4.1.0" }, "engines": { "node": ">=18" @@ -10897,19 +11108,25 @@ "url": "https://github.com/sponsors/gpbl" }, "peerDependencies": { + "@types/react": ">=16.8.0", "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/react-dom": { - "version": "19.2.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz", - "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz", + "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.1" + "react": "^19.2.8" } }, "node_modules/react-is": { @@ -10951,6 +11168,23 @@ "react": ">=18" } }, + "node_modules/react-stately": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.48.0.tgz", + "integrity": "sha512-ImicSAG+lTotAe5izcs1fz49Zk48w7pDusqYg04WaPhCoej8BJ24soMu3iLXIrsi273s4P1gZrYGrqReMfgEEA==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.12.2", + "@internationalized/number": "^3.6.7", + "@internationalized/string": "^3.2.9", + "@react-types/shared": "^3.36.0", + "@swc/helpers": "^0.5.0", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -10967,29 +11201,23 @@ "react-dom": ">=16.6.0" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "node_modules/react-transition-group/node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, "engines": { - "node": ">= 6" + "node": ">=6.9.0" } }, "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", "devOptional": true, "license": "MIT", "engines": { - "node": ">= 14.18.0" + "node": ">= 20.19.0" }, "funding": { "type": "individual", @@ -11056,24 +11284,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rehackt": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.1.0.tgz", - "integrity": "sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - } - } - }, "node_modules/rehype": { "version": "13.0.2", "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", @@ -11249,18 +11459,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/relay-runtime": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/relay-runtime/-/relay-runtime-12.0.0.tgz", - "integrity": "sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.0.0", - "fbjs": "^3.0.0", - "invariant": "^2.2.4" - } - }, "node_modules/remark-gfm": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", @@ -11366,24 +11564,17 @@ "dev": true, "license": "MIT" }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "2.0.0-next.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", + "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.2", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -11418,17 +11609,20 @@ } }, "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/reusify": { @@ -11449,16 +11643,6 @@ "dev": true, "license": "MIT" }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -11487,22 +11671,21 @@ "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, @@ -11513,27 +11696,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", @@ -11577,21 +11739,21 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.90.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz", - "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.102.0.tgz", + "integrity": "sha512-NSOyTnaQF7rTAEOtI2fwb386vL+akyiQLBZu8Na7hXCb+umJy0GAqlcMIaqACZ6Z1VgTBS4K9PG6B3IdjHGJsw==", "devOptional": true, "license": "MIT", "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", + "chokidar": "^5.0.0", + "immutable": "^5.1.5", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { "sass": "sass.js" }, "engines": { - "node": ">=14.0.0" + "node": ">=20.19.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" @@ -11603,13 +11765,6 @@ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, - "node_modules/scuid": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/scuid/-/scuid-1.1.0.tgz", - "integrity": "sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==", - "dev": true, - "license": "MIT" - }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -11620,18 +11775,6 @@ "semver": "bin/semver.js" } }, - "node_modules/sentence-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", - "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -11681,60 +11824,60 @@ "node": ">= 0.4" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true, - "license": "MIT" - }, "node_modules/sharp": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.3.tgz", - "integrity": "sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==", - "hasInstallScript": true, + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.3.tgz", + "integrity": "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==", "license": "Apache-2.0", "optional": true, "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.4", - "semver": "^7.7.2" + "@img/colour": "^1.1.0", + "detect-libc": "^2.1.2", + "semver": "^7.8.5" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.3", - "@img/sharp-darwin-x64": "0.34.3", - "@img/sharp-libvips-darwin-arm64": "1.2.0", - "@img/sharp-libvips-darwin-x64": "1.2.0", - "@img/sharp-libvips-linux-arm": "1.2.0", - "@img/sharp-libvips-linux-arm64": "1.2.0", - "@img/sharp-libvips-linux-ppc64": "1.2.0", - "@img/sharp-libvips-linux-s390x": "1.2.0", - "@img/sharp-libvips-linux-x64": "1.2.0", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.0", - "@img/sharp-libvips-linuxmusl-x64": "1.2.0", - "@img/sharp-linux-arm": "0.34.3", - "@img/sharp-linux-arm64": "0.34.3", - "@img/sharp-linux-ppc64": "0.34.3", - "@img/sharp-linux-s390x": "0.34.3", - "@img/sharp-linux-x64": "0.34.3", - "@img/sharp-linuxmusl-arm64": "0.34.3", - "@img/sharp-linuxmusl-x64": "0.34.3", - "@img/sharp-wasm32": "0.34.3", - "@img/sharp-win32-arm64": "0.34.3", - "@img/sharp-win32-ia32": "0.34.3", - "@img/sharp-win32-x64": "0.34.3" + "@img/sharp-darwin-arm64": "0.35.3", + "@img/sharp-darwin-x64": "0.35.3", + "@img/sharp-freebsd-wasm32": "0.35.3", + "@img/sharp-libvips-darwin-arm64": "1.3.2", + "@img/sharp-libvips-darwin-x64": "1.3.2", + "@img/sharp-libvips-linux-arm": "1.3.2", + "@img/sharp-libvips-linux-arm64": "1.3.2", + "@img/sharp-libvips-linux-ppc64": "1.3.2", + "@img/sharp-libvips-linux-riscv64": "1.3.2", + "@img/sharp-libvips-linux-s390x": "1.3.2", + "@img/sharp-libvips-linux-x64": "1.3.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.2", + "@img/sharp-libvips-linuxmusl-x64": "1.3.2", + "@img/sharp-linux-arm": "0.35.3", + "@img/sharp-linux-arm64": "0.35.3", + "@img/sharp-linux-ppc64": "0.35.3", + "@img/sharp-linux-riscv64": "0.35.3", + "@img/sharp-linux-s390x": "0.35.3", + "@img/sharp-linux-x64": "0.35.3", + "@img/sharp-linuxmusl-arm64": "0.35.3", + "@img/sharp-linuxmusl-x64": "0.35.3", + "@img/sharp-webcontainers-wasm32": "0.35.3", + "@img/sharp-win32-arm64": "0.35.3", + "@img/sharp-win32-ia32": "0.35.3", + "@img/sharp-win32-x64": "0.35.3" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/sharp/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", "optional": true, "bin": { @@ -11768,9 +11911,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.10.0.tgz", + "integrity": "sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==", "dev": true, "license": "MIT", "engines": { @@ -11781,15 +11924,15 @@ } }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -11801,14 +11944,14 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -11857,70 +12000,43 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/signedsource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/signedsource/-/signedsource-1.0.0.tgz", - "integrity": "sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", - "optional": true, - "dependencies": { - "is-arrayish": "^0.3.1" + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT", - "optional": true - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "node_modules/slice-ansi": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", "dev": true, "license": "MIT", "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/source-map-js": { @@ -11943,14 +12059,11 @@ } }, "node_modules/sponge-case": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sponge-case/-/sponge-case-1.0.1.tgz", - "integrity": "sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sponge-case/-/sponge-case-2.0.3.tgz", + "integrity": "sha512-i4h9ZGRfxV6Xw3mpZSFOfbXjf0cQcYmssGWutgNIfFZ2VM+YIWfD71N/kjjwK6X/AAHzBr+rciEcn/L34S8TGw==", "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } + "license": "MIT" }, "node_modules/stable-hash": { "version": "0.0.5", @@ -11973,16 +12086,6 @@ "node": ">= 0.4" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/string-env-interpolation": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz", @@ -11991,27 +12094,22 @@ "license": "MIT" }, "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=8" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, "node_modules/string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", @@ -12067,19 +12165,20 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", + "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "has-property-descriptors": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -12089,16 +12188,16 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", + "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "es-object-atoms": "^1.1.2" }, "engines": { "node": ">= 0.4" @@ -12140,16 +12239,19 @@ } }, "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^6.2.2" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/strip-bom": { @@ -12217,16 +12319,16 @@ } }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -12243,28 +12345,16 @@ } }, "node_modules/swap-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-2.0.2.tgz", - "integrity": "sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-3.0.3.tgz", + "integrity": "sha512-6p4op8wE9CQv7uDFzulI6YXUw4lD9n4oQierdbFThEKVWVQcbQcUjdP27W8XE7V4QnWmnq9jueSHceyyQnqQVA==", "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } + "license": "MIT" }, "node_modules/sync-fetch": { - "version": "0.6.0-2", - "resolved": "https://registry.npmjs.org/sync-fetch/-/sync-fetch-0.6.0-2.tgz", - "integrity": "sha512-c7AfkZ9udatCuAy9RSfiGPpeOKKUAUK5e1cXadLOGUjasdxqYqAK0jTNkM/FSEyJ3a5Ra27j/tw/PS0qLmaF/A==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/sync-fetch/-/sync-fetch-0.6.0.tgz", + "integrity": "sha512-IELLEvzHuCfc1uTsshPK58ViSdNqXxlml1U+fmwJIKLYKOr/rAtBrorE2RYm5IHaMpDNlmC0fr1LAvdXvyheEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12276,32 +12366,6 @@ "node": ">=18" } }, - "node_modules/sync-fetch/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, "node_modules/timeout-signal": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/timeout-signal/-/timeout-signal-2.0.0.tgz", @@ -12313,14 +12377,14 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -12329,34 +12393,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/title-case": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", @@ -12380,13 +12416,6 @@ "node": ">=8.0" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" - }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -12418,9 +12447,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", "dev": true, "license": "MIT", "engines": { @@ -12430,25 +12459,17 @@ "typescript": ">=4.8.4" } }, - "node_modules/ts-invariant": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", - "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", + "node_modules/ts-log": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/ts-log/-/ts-log-3.0.2.tgz", + "integrity": "sha512-esq6hx2lM66sQV1YcFkIYTqrWWabmqBqobKHyn1CswdI5FgfQhkmiKiRWVGBNlIbdjBxEIkNvMIwLKKPgRYZLQ==", + "dev": true, "license": "MIT", - "dependencies": { - "tslib": "^2.1.0" - }, "engines": { - "node": ">=8" + "node": ">=20", + "npm": ">=10" } }, - "node_modules/ts-log": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/ts-log/-/ts-log-2.2.7.tgz", - "integrity": "sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==", - "dev": true, - "license": "MIT" - }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -12482,9 +12503,9 @@ "license": "0BSD" }, "node_modules/tsx": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.22.4.tgz", - "integrity": "sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.1.tgz", + "integrity": "sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==", "license": "MIT", "dependencies": { "esbuild": "~0.28.0" @@ -12512,19 +12533,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -12583,18 +12591,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", + "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "possible-typed-array-names": "^1.1.0", + "reflect.getprototypeof": "^1.0.10" }, "engines": { "node": ">= 0.4" @@ -12617,31 +12625,28 @@ "node": ">=14.17" } }, - "node_modules/ua-parser-js": { - "version": "1.0.40", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz", - "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==", + "node_modules/typescript-eslint": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.65.0.tgz", + "integrity": "sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], "license": "MIT", - "bin": { - "ua-parser-js": "script/cli.js" + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.65.0", + "@typescript-eslint/parser": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/utils": "8.65.0" }, "engines": { - "node": "*" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/unbox-primitive": { @@ -12688,10 +12693,19 @@ "react": ">=15.0.0" } }, + "node_modules/uncontrollable/node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", "dev": true, "license": "MIT" }, @@ -12807,38 +12821,41 @@ } }, "node_modules/unrs-resolver": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", - "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.12.2.tgz", + "integrity": "sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "napi-postinstall": "^0.3.0" + "napi-postinstall": "^0.3.4" }, "funding": { "url": "https://opencollective.com/unrs-resolver" }, "optionalDependencies": { - "@unrs/resolver-binding-android-arm-eabi": "1.11.1", - "@unrs/resolver-binding-android-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-x64": "1.11.1", - "@unrs/resolver-binding-freebsd-x64": "1.11.1", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", - "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-musl": "1.11.1", - "@unrs/resolver-binding-wasm32-wasi": "1.11.1", - "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", - "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", - "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + "@unrs/resolver-binding-android-arm-eabi": "1.12.2", + "@unrs/resolver-binding-android-arm64": "1.12.2", + "@unrs/resolver-binding-darwin-arm64": "1.12.2", + "@unrs/resolver-binding-darwin-x64": "1.12.2", + "@unrs/resolver-binding-freebsd-x64": "1.12.2", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.12.2", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.12.2", + "@unrs/resolver-binding-linux-arm64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-arm64-musl": "1.12.2", + "@unrs/resolver-binding-linux-loong64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-loong64-musl": "1.12.2", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-riscv64-musl": "1.12.2", + "@unrs/resolver-binding-linux-s390x-gnu": "1.12.2", + "@unrs/resolver-binding-linux-x64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-x64-musl": "1.12.2", + "@unrs/resolver-binding-openharmony-arm64": "1.12.2", + "@unrs/resolver-binding-wasm32-wasi": "1.12.2", + "@unrs/resolver-binding-win32-arm64-msvc": "1.12.2", + "@unrs/resolver-binding-win32-ia32-msvc": "1.12.2", + "@unrs/resolver-binding-win32-x64-msvc": "1.12.2" } }, "node_modules/update-browserslist-db": { @@ -12872,26 +12889,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/upper-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", - "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/upper-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -12910,9 +12907,9 @@ "license": "MIT" }, "node_modules/use-intl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.13.0.tgz", - "integrity": "sha512-fAFDrWaASxlhXOipcOyb5VDD+YONqj6+8O8EcG/J7RBoOUF3A8YahRWLN+mBxYMrlMQB8N6Voqk5X+YC+HSL0A==", + "version": "4.13.4", + "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.13.4.tgz", + "integrity": "sha512-wRhU5zyPNgu845++EJ8ckQsi89b22QUop7NlGxNXpsnKSwEJr7WErAkdAYeVQgFTmDWsa8e2NI1e14XbWz9Ecw==", "funding": [ { "type": "individual", @@ -12923,31 +12920,33 @@ "dependencies": { "@formatjs/fast-memoize": "^3.1.0", "@schummar/icu-type-parser": "1.21.5", - "icu-minify": "^4.13.0", + "icu-minify": "^4.13.4", "intl-messageformat": "^11.1.0" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } }, "node_modules/uuid": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.1.tgz", - "integrity": "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz", + "integrity": "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "license": "MIT", "bin": { - "uuid": "dist/esm/bin/uuid" + "uuid": "dist-node/bin/uuid" } }, "node_modules/vfile": { @@ -13001,16 +13000,6 @@ "loose-envify": "^1.0.0" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/web-namespaces": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", @@ -13031,13 +13020,6 @@ "node": ">= 8" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" - }, "node_modules/whatwg-mimetype": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", @@ -13048,17 +13030,6 @@ "node": ">=18" } }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -13143,14 +13114,14 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", + "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", + "call-bind": "^1.0.9", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", @@ -13175,24 +13146,27 @@ } }, "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz", + "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=8" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/ws": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", - "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", + "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", "devOptional": true, "license": "MIT", "engines": { @@ -13244,40 +13218,32 @@ "url": "https://github.com/sponsors/eemeli" } }, - "node_modules/yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", + "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^8.0.1", + "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^8.2.1", "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "yargs-parser": "^22.0.0" }, "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", "dev": true, "license": "ISC", "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/yocto-queue": { @@ -13293,19 +13259,40 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/zen-observable": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", - "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==", - "license": "MIT" + "node_modules/yoctocolors": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz", + "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/zen-observable-ts": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz", - "integrity": "sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==", + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "dev": true, "license": "MIT", - "dependencies": { - "zen-observable": "0.8.15" + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" } }, "node_modules/zwitch": { diff --git a/kompassi-v2-frontend/package.json b/kompassi-v2-frontend/package.json index 7f59e27f7..56d762ae4 100644 --- a/kompassi-v2-frontend/package.json +++ b/kompassi-v2-frontend/package.json @@ -8,51 +8,53 @@ "format": "prettier --write .", "k8s:dev": "npm run k8s:generate && skaffold dev", "k8s:generate": "cd kubernetes && tsx manifest.ts", - "lint": "next lint", - "lint:fix": "next lint --fix", + "lint": "eslint .", + "lint:fix": "eslint . --fix", "start": "node .next/standalone/server.js", "test": "npm run lint && npm run test:format", "test:format": "prettier --check ." }, "dependencies": { - "@apollo/client": "^3.13.8", - "@apollo/client-integration-nextjs": "^0.12.2", + "@apollo/client": "^4.2.8", + "@apollo/client-integration-nextjs": "^0.14.5", "@graphql-typed-document-node/core": "^3.2.0", "@js-temporal/polyfill": "^0.5.1", "@uiw/react-markdown-preview": "^5.2.1", "@uiw/react-md-editor": "^4.1.1", "bootstrap": "^5.3.5", - "motion": "^12.0.0", - "next": "^15.5.7", - "next-auth": "^4.24.11", - "next-intl": "^4.3.4", - "react": "^19.2.1", + "motion": "^12.43.0", + "next": "^16.2.12", + "next-auth": "^4.24.15", + "next-intl": "^4.13.4", + "react": "^19.2.8", "react-bootstrap": "^2.10.10", - "react-day-picker": "^9.14.0", - "react-dom": "^19.2.1", - "tsx": "^4.19.4", - "uuid": "^11.1.0" + "react-day-picker": "^10.0.1", + "react-dom": "^19.2.8", + "tsx": "^4.23.1", + "uuid": "^14.0.1" }, "license": "MIT", "devDependencies": { - "@eslint/eslintrc": "^3", - "@graphql-codegen/cli": "^5.0.0", - "@graphql-codegen/client-preset": "^4.1.0", - "@parcel/watcher": "^2.5.1", - "@types/node": "^22.0.0", - "@types/react": "19.1.16", - "@types/react-dom": "19.1.9", - "concurrently": "^9.0.0", - "eslint": "^9", - "eslint-config-next": "15.5.11", + "@graphql-codegen/cli": "^7.2.0", + "@graphql-codegen/client-preset": "^6.1.0", + "@parcel/watcher": "^2.6.0", + "@types/node": "^26.1.2", + "@types/react": "19.2.17", + "@types/react-dom": "19.2.3", + "concurrently": "^10.0.4", + "eslint": "^9.39.5", + "eslint-config-next": "16.2.12", "eslint-config-prettier": "^10.1.8", - "prettier": "^3.6.2", - "sass": "^1.69.5", - "typescript": "^5.2.2" + "prettier": "^3.9.6", + "sass": "^1.102.0", + "typescript": "^5.9.3", + "typescript-eslint": "^8.65.0" }, "prettier": {}, "overrides": { - "@types/react": "19.1.16", - "@types/react-dom": "19.1.9" + "@types/react": "19.2.17", + "@types/react-dom": "19.2.3", + "postcss": "^8.5.25", + "sharp": "^0.35.3" } } diff --git a/kompassi-v2-frontend/src/__generated__/gql.ts b/kompassi-v2-frontend/src/__generated__/gql.ts index 6e2159b60..42049f8ce 100644 --- a/kompassi-v2-frontend/src/__generated__/gql.ts +++ b/kompassi-v2-frontend/src/__generated__/gql.ts @@ -33,7 +33,7 @@ type Documents = { "\n mutation UpdateOrder($input: UpdateOrderInput!) {\n updateOrder(input: $input) {\n order {\n id\n }\n }\n }\n": typeof types.UpdateOrderDocument, "\n mutation CancelAndRefundOrder($input: CancelAndRefundOrderInput!) {\n cancelAndRefundOrder(input: $input) {\n order {\n id\n }\n }\n }\n": typeof types.CancelAndRefundOrderDocument, "\n mutation MarkOrderAsPaid($input: MarkOrderAsPaidInput!) {\n markOrderAsPaid(input: $input) {\n order {\n id\n }\n }\n }\n": typeof types.MarkOrderAsPaidDocument, - "\n fragment AdminOrderPaymentStamp on LimitedPaymentStampType {\n id\n createdAt\n correlationId\n provider\n type\n status\n data\n }\n": typeof types.AdminOrderPaymentStampFragmentDoc, + "\n fragment AdminOrderPaymentStamp on LimitedPaymentStampType {\n __typename\n id\n createdAt\n correlationId\n provider\n type\n status\n data\n }\n": typeof types.AdminOrderPaymentStampFragmentDoc, "\n fragment AdminOrderReceipt on LimitedReceiptType {\n correlationId\n createdAt\n email\n type\n status\n }\n": typeof types.AdminOrderReceiptFragmentDoc, "\n fragment AdminOrderCode on LimitedCodeType {\n code\n literateCode\n status\n usedOn\n productText\n }\n": typeof types.AdminOrderCodeFragmentDoc, "\n query AdminOrderDetail($eventSlug: String!, $orderId: String!) {\n event(slug: $eventSlug) {\n slug\n name\n\n tickets {\n order(id: $orderId) {\n id\n formattedOrderNumber\n createdAt\n totalPrice\n status\n eticketsLink\n firstName\n lastName\n email\n phone\n canRefund\n canRefundManually\n canMarkAsPaid\n products {\n title\n quantity\n price\n vatPercentage\n }\n paymentStamps {\n ...AdminOrderPaymentStamp\n }\n receipts {\n ...AdminOrderReceipt\n }\n codes {\n ...AdminOrderCode\n }\n }\n }\n }\n }\n": typeof types.AdminOrderDetailDocument, @@ -253,7 +253,7 @@ const documents: Documents = { "\n mutation UpdateOrder($input: UpdateOrderInput!) {\n updateOrder(input: $input) {\n order {\n id\n }\n }\n }\n": types.UpdateOrderDocument, "\n mutation CancelAndRefundOrder($input: CancelAndRefundOrderInput!) {\n cancelAndRefundOrder(input: $input) {\n order {\n id\n }\n }\n }\n": types.CancelAndRefundOrderDocument, "\n mutation MarkOrderAsPaid($input: MarkOrderAsPaidInput!) {\n markOrderAsPaid(input: $input) {\n order {\n id\n }\n }\n }\n": types.MarkOrderAsPaidDocument, - "\n fragment AdminOrderPaymentStamp on LimitedPaymentStampType {\n id\n createdAt\n correlationId\n provider\n type\n status\n data\n }\n": types.AdminOrderPaymentStampFragmentDoc, + "\n fragment AdminOrderPaymentStamp on LimitedPaymentStampType {\n __typename\n id\n createdAt\n correlationId\n provider\n type\n status\n data\n }\n": types.AdminOrderPaymentStampFragmentDoc, "\n fragment AdminOrderReceipt on LimitedReceiptType {\n correlationId\n createdAt\n email\n type\n status\n }\n": types.AdminOrderReceiptFragmentDoc, "\n fragment AdminOrderCode on LimitedCodeType {\n code\n literateCode\n status\n usedOn\n productText\n }\n": types.AdminOrderCodeFragmentDoc, "\n query AdminOrderDetail($eventSlug: String!, $orderId: String!) {\n event(slug: $eventSlug) {\n slug\n name\n\n tickets {\n order(id: $orderId) {\n id\n formattedOrderNumber\n createdAt\n totalPrice\n status\n eticketsLink\n firstName\n lastName\n email\n phone\n canRefund\n canRefundManually\n canMarkAsPaid\n products {\n title\n quantity\n price\n vatPercentage\n }\n paymentStamps {\n ...AdminOrderPaymentStamp\n }\n receipts {\n ...AdminOrderReceipt\n }\n codes {\n ...AdminOrderCode\n }\n }\n }\n }\n }\n": types.AdminOrderDetailDocument, @@ -547,7 +547,7 @@ export function graphql(source: "\n mutation MarkOrderAsPaid($input: MarkOrderA /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n fragment AdminOrderPaymentStamp on LimitedPaymentStampType {\n id\n createdAt\n correlationId\n provider\n type\n status\n data\n }\n"): (typeof documents)["\n fragment AdminOrderPaymentStamp on LimitedPaymentStampType {\n id\n createdAt\n correlationId\n provider\n type\n status\n data\n }\n"]; +export function graphql(source: "\n fragment AdminOrderPaymentStamp on LimitedPaymentStampType {\n __typename\n id\n createdAt\n correlationId\n provider\n type\n status\n data\n }\n"): (typeof documents)["\n fragment AdminOrderPaymentStamp on LimitedPaymentStampType {\n __typename\n id\n createdAt\n correlationId\n provider\n type\n status\n data\n }\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/kompassi-v2-frontend/src/__generated__/graphql.ts b/kompassi-v2-frontend/src/__generated__/graphql.ts index 394555df6..d3e8ddb14 100644 --- a/kompassi-v2-frontend/src/__generated__/graphql.ts +++ b/kompassi-v2-frontend/src/__generated__/graphql.ts @@ -1,68 +1,20 @@ /* eslint-disable */ -import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'; -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { [K in keyof T]: T[K] }; -export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; -export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; -export type MakeEmpty = { [_ in K]?: never }; +/** Internal type. DO NOT USE DIRECTLY. */ +type Exact = { [K in keyof T]: T[K] }; +/** Internal type. DO NOT USE DIRECTLY. */ export type Incremental = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never }; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: { input: string; output: string; } - String: { input: string; output: string; } - Boolean: { input: boolean; output: boolean; } - Int: { input: number; output: number; } - Float: { input: number; output: number; } - /** - * The `DateTime` scalar type represents a DateTime - * value as specified by - * [iso8601](https://en.wikipedia.org/wiki/ISO_8601). - */ - DateTime: { input: string; output: string; } - /** The `Decimal` scalar type represents a python Decimal. */ - Decimal: { input: any; output: any; } - /** - * The `GenericScalar` scalar type represents a generic - * GraphQL scalar value that could be: - * String, Boolean, Int, Float, List or Object. - */ - GenericScalar: { input: unknown; output: unknown; } - /** - * Allows use of a JSON String for input / output from the GraphQL schema. - * - * Use of this type is *not recommended* as you lose the benefits of having a defined, static - * schema (one of the key benefits of GraphQL). - */ - JSONString: { input: string; output: string; } - /** - * Leverages the internal Python implementation of UUID (uuid.UUID) to provide native UUID objects - * in fields, resolvers and input. - */ - UUID: { input: string; output: string; } -}; - -export type AcceptInvitation = { - __typename?: 'AcceptInvitation'; - involvement?: Maybe; -}; - +import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'; export type AcceptInvitationInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - invitationId: Scalars['String']['input']; - locale: Scalars['String']['input']; -}; - -export type AcceptProgramOffer = { - __typename?: 'AcceptProgramOffer'; - program: FullProgramType; + eventSlug: string; + formData: unknown; + invitationId: string; + locale: string; }; export type AcceptProgramOfferInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - responseId: Scalars['UUID']['input']; + eventSlug: string; + formData: unknown; + responseId: string; }; /** An enumeration. */ @@ -73,30 +25,6 @@ export enum AnnotationDataType { String = 'STRING' } -export type AnnotationType = { - __typename?: 'AnnotationType'; - description: Scalars['String']['output']; - isApplicableToProgramItems: Scalars['Boolean']['output']; - isApplicableToScheduleItems: Scalars['Boolean']['output']; - isComputed: Scalars['Boolean']['output']; - isInternal: Scalars['Boolean']['output']; - isPublic: Scalars['Boolean']['output']; - isShownInDetail: Scalars['Boolean']['output']; - slug: Scalars['String']['output']; - title: Scalars['String']['output']; - type: AnnotationDataType; -}; - - -export type AnnotationTypeDescriptionArgs = { - lang?: InputMaybe; -}; - - -export type AnnotationTypeTitleArgs = { - lang?: InputMaybe; -}; - /** An enumeration. */ export enum Anonymity { FullProfile = 'FULL_PROFILE', @@ -105,56 +33,27 @@ export enum Anonymity { Soft = 'SOFT' } -export type BareQuotaType = { - __typename?: 'BareQuotaType'; - countTotal: Scalars['Int']['output']; - id: Scalars['ID']['output']; - name: Scalars['String']['output']; -}; - -export type CancelAndRefundOrder = { - __typename?: 'CancelAndRefundOrder'; - order?: Maybe; -}; - export type CancelAndRefundOrderInput = { - eventSlug: Scalars['String']['input']; - orderId: Scalars['String']['input']; + eventSlug: string; + orderId: string; refundType: RefundType; }; -export type CancelOwnUnpaidOrder = { - __typename?: 'CancelOwnUnpaidOrder'; - order?: Maybe; -}; - export type CancelOwnUnpaidOrderInput = { - eventSlug: Scalars['String']['input']; - orderId: Scalars['String']['input']; -}; - -export type CancelProgram = { - __typename?: 'CancelProgram'; - programSlug: Scalars['String']['output']; - /** If the program item was created from a program offer, this is the offer ID. */ - responseId?: Maybe; + eventSlug: string; + orderId: string; }; export type CancelProgramInput = { - eventSlug: Scalars['String']['input']; - programSlug: Scalars['String']['input']; + eventSlug: string; + programSlug: string; resolution: ProgramItemResolution; }; -export type CancelProgramOffer = { - __typename?: 'CancelProgramOffer'; - responseId: Scalars['UUID']['output']; -}; - export type CancelProgramOfferInput = { - eventSlug: Scalars['String']['input']; + eventSlug: string; resolution: ProgramOfferResolution; - responseId: Scalars['UUID']['input']; + responseId: string; }; /** An enumeration. */ @@ -165,338 +64,161 @@ export enum CodeStatus { Used = 'USED' } -export type ColumnType = { - __typename?: 'ColumnType'; - slug: Scalars['String']['output']; - title: Scalars['String']['output']; - totalBy: TotalBy; - type: TypeOfColumn; -}; - - -export type ColumnTypeTitleArgs = { - lang?: InputMaybe; -}; - -export type ConfirmEmail = { - __typename?: 'ConfirmEmail'; - user?: Maybe; -}; - export type ConfirmEmailInput = { - locale: Scalars['String']['input']; -}; - -/** - * Customer self-service cancellation, step 2 of 2: consume the one-time code - * from the confirmation email and cancel the order, initiating an automated - * refund via the payment provider if money was paid. - * - * May be called without authentication: the one-time code proves control of - * the email address of the order. - * - * Returns success=False if the order was cancelled but the provider rejected - * the refund request (order left in REFUND_FAILED for ticket sales to resolve - * with the existing admin refund tooling). - * - * NOTE: Must not return any PII (the caller may be anonymous). - */ -export type ConfirmOrderCancellation = { - __typename?: 'ConfirmOrderCancellation'; - success: Scalars['Boolean']['output']; + locale: string; }; export type ConfirmOrderCancellationInput = { - code: Scalars['String']['input']; - eventSlug: Scalars['String']['input']; - orderId: Scalars['String']['input']; -}; - -/** - * Creates a new Message with the given content. Called only when the compose view - * for a not-yet-existing message ("new") is first saved - until then, the draft only - * exists in the browser, never in the database. - */ -export type CreateMessage = { - __typename?: 'CreateMessage'; - message?: Maybe; + code: string; + eventSlug: string; + orderId: string; }; export type CreateMessageInput = { - body: Scalars['String']['input']; + body: string; dispatch: MessageDispatch; - eventSlug: Scalars['String']['input']; - recipientFilters: Scalars['GenericScalar']['input']; - replyToId?: InputMaybe; - subject: Scalars['String']['input']; -}; - -export type CreateMessageReplyTo = { - __typename?: 'CreateMessageReplyTo'; - replyTo?: Maybe; + eventSlug: string; + recipientFilters: unknown; + replyToId?: string | null | undefined; + subject: string; }; export type CreateMessageReplyToInput = { - email: Scalars['String']['input']; - eventSlug: Scalars['String']['input']; - name: Scalars['String']['input']; -}; - -export type CreateOrder = { - __typename?: 'CreateOrder'; - order?: Maybe; + email: string; + eventSlug: string; + name: string; }; export type CreateOrderInput = { customer: CustomerInput; - eventSlug: Scalars['String']['input']; - language?: InputMaybe; + eventSlug: string; + language?: string | null | undefined; products: Array; }; -export type CreateProduct = { - __typename?: 'CreateProduct'; - product?: Maybe; -}; - export type CreateProductInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; -}; - -export type CreateProgram = { - __typename?: 'CreateProgram'; - program?: Maybe; -}; - -export type CreateProgramFeedback = { - __typename?: 'CreateProgramFeedback'; - success: Scalars['Boolean']['output']; -}; - -export type CreateProgramForm = { - __typename?: 'CreateProgramForm'; - survey?: Maybe; + eventSlug: string; + formData: unknown; }; export type CreateProgramFormInput = { - copyFrom?: InputMaybe; - eventSlug: Scalars['String']['input']; - purpose?: InputMaybe; - surveySlug: Scalars['String']['input']; + copyFrom?: string | null | undefined; + eventSlug: string; + purpose?: SurveyPurpose | null | undefined; + surveySlug: string; }; export type CreateProgramInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; -}; - -export type CreateQuota = { - __typename?: 'CreateQuota'; - quota?: Maybe; + eventSlug: string; + formData: unknown; }; export type CreateQuotaInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; -}; - -export type CreateSurvey = { - __typename?: 'CreateSurvey'; - survey?: Maybe; + eventSlug: string; + formData: unknown; }; export type CreateSurveyInput = { anonymity: Anonymity; - copyFrom?: InputMaybe; - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; -}; - -export type CreateSurveyLanguage = { - __typename?: 'CreateSurveyLanguage'; - form?: Maybe; + copyFrom?: string | null | undefined; + eventSlug: string; + surveySlug: string; }; export type CreateSurveyLanguageInput = { - copyFrom?: InputMaybe; - eventSlug: Scalars['String']['input']; - language: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; -}; - -export type CreateSurveyResponse = { - __typename?: 'CreateSurveyResponse'; - response?: Maybe; + copyFrom?: string | null | undefined; + eventSlug: string; + language: string; + surveySlug: string; }; export type CreateSurveyResponseInput = { - editResponseId?: InputMaybe; - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - locale?: InputMaybe; - surveySlug: Scalars['String']['input']; + editResponseId?: string | null | undefined; + eventSlug: string; + formData: unknown; + locale?: string | null | undefined; + surveySlug: string; }; export type CustomerInput = { - email: Scalars['String']['input']; - firstName: Scalars['String']['input']; - lastName: Scalars['String']['input']; - phone?: InputMaybe; -}; - -export type DeleteDimension = { - __typename?: 'DeleteDimension'; - slug?: Maybe; + email: string; + firstName: string; + lastName: string; + phone?: string | null | undefined; }; export type DeleteDimensionInput = { - dimensionSlug: Scalars['String']['input']; - scopeSlug: Scalars['String']['input']; - universeSlug: Scalars['String']['input']; -}; - -export type DeleteDimensionValue = { - __typename?: 'DeleteDimensionValue'; - slug?: Maybe; + dimensionSlug: string; + scopeSlug: string; + universeSlug: string; }; export type DeleteDimensionValueInput = { - dimensionSlug: Scalars['String']['input']; - scopeSlug: Scalars['String']['input']; - universeSlug: Scalars['String']['input']; - valueSlug: Scalars['String']['input']; -}; - -export type DeleteInvitation = { - __typename?: 'DeleteInvitation'; - invitation?: Maybe; + dimensionSlug: string; + scopeSlug: string; + universeSlug: string; + valueSlug: string; }; export type DeleteInvitationInput = { - eventSlug: Scalars['String']['input']; - invitationId: Scalars['String']['input']; -}; - -/** - * Deletes a Message draft. Only drafts can be deleted - once sent, a Message is kept - * (possibly expired) so its MessageRecipients remain visible in recipients' profiles. - */ -export type DeleteMessage = { - __typename?: 'DeleteMessage'; - messageId?: Maybe; + eventSlug: string; + invitationId: string; }; export type DeleteMessageInput = { - eventSlug: Scalars['String']['input']; - messageId: Scalars['String']['input']; -}; - -/** - * Deletes a reply-to option. Messages that reference it fall back to the event's - * default plain contact email (Message.reply_to is SET_NULL on delete). - */ -export type DeleteMessageReplyTo = { - __typename?: 'DeleteMessageReplyTo'; - replyToId?: Maybe; + eventSlug: string; + messageId: string; }; export type DeleteMessageReplyToInput = { - eventSlug: Scalars['String']['input']; - replyToId: Scalars['String']['input']; -}; - -export type DeleteProduct = { - __typename?: 'DeleteProduct'; - id: Scalars['String']['output']; + eventSlug: string; + replyToId: string; }; export type DeleteProductInput = { - eventSlug: Scalars['String']['input']; - productId: Scalars['String']['input']; -}; - -export type DeleteProgramHost = { - __typename?: 'DeleteProgramHost'; - program: FullProgramType; + eventSlug: string; + productId: string; }; export type DeleteProgramHostInput = { - eventSlug: Scalars['String']['input']; - involvementId: Scalars['String']['input']; - programSlug: Scalars['String']['input']; -}; - -export type DeleteProgramOffers = { - __typename?: 'DeleteProgramOffers'; - countDeleted: Scalars['Int']['output']; + eventSlug: string; + involvementId: string; + programSlug: string; }; export type DeleteProgramOffersInput = { - eventSlug: Scalars['String']['input']; - programOfferIds?: InputMaybe>>; -}; - -export type DeleteQuota = { - __typename?: 'DeleteQuota'; - id: Scalars['String']['output']; + eventSlug: string; + programOfferIds?: Array | null | undefined; }; export type DeleteQuotaInput = { - eventSlug: Scalars['String']['input']; - quotaId: Scalars['String']['input']; -}; - -export type DeleteScheduleItem = { - __typename?: 'DeleteScheduleItem'; - slug?: Maybe; + eventSlug: string; + quotaId: string; }; export type DeleteScheduleItemInput = { - eventSlug: Scalars['String']['input']; - programSlug: Scalars['String']['input']; - scheduleItemSlug: Scalars['String']['input']; -}; - -export type DeleteSurvey = { - __typename?: 'DeleteSurvey'; - slug?: Maybe; + eventSlug: string; + programSlug: string; + scheduleItemSlug: string; }; export type DeleteSurveyInput = { - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; -}; - -export type DeleteSurveyLanguage = { - __typename?: 'DeleteSurveyLanguage'; - language?: Maybe; + eventSlug: string; + surveySlug: string; }; export type DeleteSurveyLanguageInput = { - eventSlug: Scalars['String']['input']; - language: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; -}; - -export type DeleteSurveyResponses = { - __typename?: 'DeleteSurveyResponses'; - countDeleted: Scalars['Int']['output']; + eventSlug: string; + language: string; + surveySlug: string; }; export type DeleteSurveyResponsesInput = { - eventSlug: Scalars['String']['input']; - responseIds?: InputMaybe>>; - surveySlug: Scalars['String']['input']; + eventSlug: string; + responseIds?: Array | null | undefined; + surveySlug: string; }; -/** An enumeration. */ -export enum DimensionApp { - Forms = 'FORMS', - Involvement = 'INVOLVEMENT', - ProgramV2 = 'PROGRAM_V2' -} - /** * Used to construct dimension filters in GraphQL queries. * When a list of these is present, the semantics are AND. @@ -504,29 +226,8 @@ export enum DimensionApp { * The absence of the values list, or the special value "*" in the values list, means that the dimension must exist. */ export type DimensionFilterInput = { - dimension: Scalars['String']['input']; - values?: InputMaybe>; -}; - -export type DimensionValueType = { - __typename?: 'DimensionValueType'; - canEdit: Scalars['Boolean']['output']; - canRemove: Scalars['Boolean']['output']; - color: Scalars['String']['output']; - /** If set, subjects this value is assigned to can no longer be edited by whomever submitted them. */ - isSubjectLocked: Scalars['Boolean']['output']; - /** Technical values cannot be edited in the UI. They are used for internal purposes and have some assumptions about them. */ - isTechnical: Scalars['Boolean']['output']; - slug: Scalars['String']['output']; - title?: Maybe; - titleEn: Scalars['String']['output']; - titleFi: Scalars['String']['output']; - titleSv: Scalars['String']['output']; -}; - - -export type DimensionValueTypeTitleArgs = { - lang?: InputMaybe; + dimension: string; + values?: Array | null | undefined; }; /** An enumeration. */ @@ -539,72 +240,14 @@ export enum DimensionsDimensionValueOrderingChoices { Title = 'TITLE' } -/** An enumeration. */ -export enum EditMode { - Admin = 'ADMIN', - Owner = 'OWNER' -} - -/** - * Expires an active Message: it stops being sent to new/auto-matching recipients. - * People who already received it are unaffected. - */ -export type ExpireMessage = { - __typename?: 'ExpireMessage'; - message?: Maybe; -}; - export type ExpireMessageInput = { - eventSlug: Scalars['String']['input']; - messageId: Scalars['String']['input']; -}; - -export type FavoriteInput = { - eventSlug: Scalars['String']['input']; - programSlug: Scalars['String']['input']; + eventSlug: string; + messageId: string; }; export type FavoriteScheduleItemInput = { - eventSlug: Scalars['String']['input']; - scheduleItemSlug: Scalars['String']['input']; -}; - -export type FormType = { - __typename?: 'FormType'; - /** A form can be removed if it has no responses. */ - canRemove: Scalars['Boolean']['output']; - description: Scalars['String']['output']; - event: LimitedEventType; - fields?: Maybe; - language: FormsFormLanguageChoices; - survey: FullSurveyType; - thankYouMessage: Scalars['String']['output']; - title: Scalars['String']['output']; -}; - - -export type FormTypeFieldsArgs = { - enrich?: InputMaybe; -}; - -export type FormsEventMetaType = { - __typename?: 'FormsEventMetaType'; - survey?: Maybe; - surveys: Array; -}; - - -export type FormsEventMetaTypeSurveyArgs = { - app?: InputMaybe; - purpose?: InputMaybe; - slug: Scalars['String']['input']; -}; - - -export type FormsEventMetaTypeSurveysArgs = { - app: DimensionApp; - includeInactive?: InputMaybe; - purpose?: InputMaybe>; + eventSlug: string; + scheduleItemSlug: string; }; /** An enumeration. */ @@ -617,2410 +260,232 @@ export enum FormsFormLanguageChoices { Sv = 'SV' } -export type FormsProfileMetaType = { - __typename?: 'FormsProfileMetaType'; - /** Returns a single response submitted by the current user. */ - response?: Maybe; - /** Returns all responses submitted by the current user. */ - responses: Array; - /** Returns all surveys accessible by the current user. To limit to surveys subscribed to, specify `relation: SUBSCRIBED`. To limit by event, specify `eventSlug: $eventSlug`. */ - surveys: Array; +export type InitFileUploadInput = { + fileType: string; + filename: string; }; - -export type FormsProfileMetaTypeResponseArgs = { - id: Scalars['String']['input']; +export type InviteProgramHostInput = { + eventSlug: string; + formData: unknown; + programSlug: string; }; +/** An enumeration. */ +export enum InvolvementType { + CombinedPerks = 'COMBINED_PERKS', + LegacySignup = 'LEGACY_SIGNUP', + ProgramHost = 'PROGRAM_HOST', + ProgramOffer = 'PROGRAM_OFFER', + SurveyResponse = 'SURVEY_RESPONSE' +} -export type FormsProfileMetaTypeSurveysArgs = { - eventSlug?: InputMaybe; - relation?: InputMaybe; +export type MarkOrderAsPaidInput = { + eventSlug: string; + orderId: string; }; -export type FullDimensionType = { - __typename?: 'FullDimensionType'; - canAddValues: Scalars['Boolean']['output']; - canRemove: Scalars['Boolean']['output']; - /** Key dimensions are shown lists of atoms. */ - isKeyDimension: Scalars['Boolean']['output']; - /** Suggests to UI that this dimension should be shown as a list filter. */ - isListFilter: Scalars['Boolean']['output']; - /** Multi-value dimensions allow multiple values to be selected. NOTE: In the database, all dimensions are multi-value, so this is just a UI hint. */ - isMultiValue: Scalars['Boolean']['output']; - /** Suggests to UI that when this dimension is not being filtered on, all values should be selected. Intended for use cases when the user is expected to rather exclude certain values than only include some. One such use case is accessibility and content warnings. NOTE: Does not make sense without `is_multi_value`. */ - isNegativeSelection: Scalars['Boolean']['output']; - /** Public dimensions are returned to non-admin users. */ - isPublic: Scalars['Boolean']['output']; - /** Suggests to UI that this dimension should be shown in detail view. */ - isShownInDetail: Scalars['Boolean']['output']; - isShownToSubject: Scalars['Boolean']['output']; - /** Technical dimensions are not editable in the UI. They are used for internal purposes have some assumptions about them (eg. their existence and that of certain values). */ - isTechnical: Scalars['Boolean']['output']; - slug: Scalars['String']['output']; - title?: Maybe; - titleEn: Scalars['String']['output']; - titleFi: Scalars['String']['output']; - titleSv: Scalars['String']['output']; - /** In which order are the values of this dimension returned in the GraphQL API. NOTE: When using Alphabetical (localized title), the language needs to be provided to `values` and `values.title` fields separately. */ - valueOrdering: DimensionsDimensionValueOrderingChoices; - values: Array; -}; +/** An enumeration. */ +export enum MessageDispatch { + PerInvolvement = 'PER_INVOLVEMENT', + PerPerson = 'PER_PERSON' +} +/** An enumeration. */ +export enum MessageState { + Active = 'ACTIVE', + Draft = 'DRAFT', + Expired = 'EXPIRED' +} -export type FullDimensionTypeTitleArgs = { - lang?: InputMaybe; +export type OrderProductInput = { + productId: number; + quantity: number; }; +/** An enumeration. */ +export enum PaymentProvider { + None = 'NONE', + Paytrail = 'PAYTRAIL', + Stripe = 'STRIPE' +} -export type FullDimensionTypeValuesArgs = { - lang?: InputMaybe; -}; - -export type FullEventType = { - __typename?: 'FullEventType'; - endTime?: Maybe; - forms?: Maybe; - involvement?: Maybe; - name: Scalars['String']['output']; - organization: LimitedOrganizationType; - program?: Maybe; - /** Tekninen nimi eli "slug" näkyy URL-osoitteissa. Sallittuja merkkejä ovat pienet kirjaimet, numerot ja väliviiva. Teknistä nimeä ei voi muuttaa luomisen jälkeen. */ - slug: Scalars['String']['output']; - startTime?: Maybe; - tickets?: Maybe; - timezone: Scalars['String']['output']; - timezoneName: Scalars['String']['output']; -}; +/** An enumeration. */ +export enum PaymentStampType { + CancelWithoutRefund = 'CANCEL_WITHOUT_REFUND', + CreatePaymentFailure = 'CREATE_PAYMENT_FAILURE', + CreatePaymentRequest = 'CREATE_PAYMENT_REQUEST', + CreatePaymentSuccess = 'CREATE_PAYMENT_SUCCESS', + CreateRefundFailure = 'CREATE_REFUND_FAILURE', + CreateRefundRequest = 'CREATE_REFUND_REQUEST', + CreateRefundSuccess = 'CREATE_REFUND_SUCCESS', + ManualRefund = 'MANUAL_REFUND', + PaymentCallback = 'PAYMENT_CALLBACK', + PaymentRedirect = 'PAYMENT_REDIRECT', + RefundCallback = 'REFUND_CALLBACK', + ZeroPrice = 'ZERO_PRICE' +} -export type FullInvitationType = { - __typename?: 'FullInvitationType'; - cachedDimensions?: Maybe; - createdAt: Scalars['DateTime']['output']; - createdBy?: Maybe; - email: Scalars['String']['output']; - id: Scalars['UUID']['output']; - isUsed: Scalars['Boolean']['output']; - /** The language of the invitation. This is used to send the invitation in the correct language. */ - language: InvolvementInvitationLanguageChoices; - program?: Maybe; - survey?: Maybe; - usedAt?: Maybe; -}; +/** An enumeration. */ +export enum PaymentStatus { + Cancelled = 'CANCELLED', + Failed = 'FAILED', + NotStarted = 'NOT_STARTED', + Paid = 'PAID', + Pending = 'PENDING', + Refunded = 'REFUNDED', + RefundFailed = 'REFUND_FAILED', + RefundRequested = 'REFUND_REQUESTED' +} -export type FullOrderType = { - __typename?: 'FullOrderType'; - /** Returns whether the order can be marked as paid. */ - canMarkAsPaid: Scalars['Boolean']['output']; - canPay: Scalars['Boolean']['output']; - /** Returns whether a provider refund can be initiated for this order. */ - canRefund: Scalars['Boolean']['output']; - /** Returns whether the order can be refunded manually. */ - canRefundManually: Scalars['Boolean']['output']; - /** Electronic ticket codes related to this order. */ - codes: Array; - createdAt: Scalars['DateTime']['output']; - displayName: Scalars['String']['output']; - email: Scalars['String']['output']; - /** Returns a link at which the admin can view their electronic tickets. Returns null if the order does not contain electronic tickets. */ - eticketsLink?: Maybe; - event: LimitedEventType; - firstName: Scalars['String']['output']; - formattedOrderNumber: Scalars['String']['output']; - id: Scalars['UUID']['output']; - language: TicketsV2OrderLanguageChoices; - lastName: Scalars['String']['output']; - /** Order number used in contexts where UUID cannot be used. Such places include generating reference numbers and the customer reading the order number aloud to an event rep. Prefer id (UUID) for everything else (eg. URLs). */ - orderNumber: Scalars['Int']['output']; - /** Payment stamps related to this order. */ - paymentStamps: Array; - phone: Scalars['String']['output']; - /** Contents of the order (product x quantity). */ - products: Array; - /** Receipts related to this order. */ - receipts: Array; - status: PaymentStatus; - totalPrice: Scalars['Decimal']['output']; +export type ProgramFeedbackInput = { + eventSlug: string; + feedback: string; + kissa: string; + programSlug: string; }; -export type FullProductType = { - __typename?: 'FullProductType'; - availableFrom?: Maybe; - availableUntil?: Maybe; - /** Returns true if the product can be deleted. A product can be deleted if it has not been sold at all. */ - canDelete: Scalars['Boolean']['output']; - /** Computes the amount of available units of this product. Other versions of this product are grouped together. Null if the product has no quotas. */ - countAvailable?: Maybe; - /** Computes the amount of paid units of this product. Other versions of this product are grouped together. */ - countPaid: Scalars['Int']['output']; - /** Computes the amount of reserved units of this product. Other versions of this product are grouped together. */ - countReserved: Scalars['Int']['output']; - createdAt: Scalars['DateTime']['output']; - description: Scalars['String']['output']; - eticketsPerProduct: Scalars['Int']['output']; - id: Scalars['Int']['output']; - /** Returns true if the product can currently be sold; that is, if it has not been superseded and it is within its availability window. This does not take into account if the product has been sold out; for that, consult `count_available`. */ - isAvailable: Scalars['Boolean']['output']; - maxPerOrder: Scalars['Int']['output']; - /** Old versions of this product. */ - oldVersions: Array; - price: Scalars['Decimal']['output']; - quotas: Array; - /** The product superseding this product, if any. */ - supersededBy?: Maybe; - title: Scalars['String']['output']; - /** VAT percentage applied to this product. Prices are inclusive of VAT. */ - vatPercentage: Scalars['Decimal']['output']; -}; +/** An enumeration. */ +export enum ProgramHostRole { + Invited = 'INVITED', + Offerer = 'OFFERER' +} -/** - * Represents a Program Host with access to Person and all their Programs in an Event. - * This is different from Involvement in that an Involvement is related to a single Program - * whereas FullProgramHostType groups all Programs for a Person in an Event. - */ -export type FullProgramHostType = { - __typename?: 'FullProgramHostType'; - person: LimitedProfileType; - programs: Array; -}; +/** An enumeration. */ +export enum ProgramItemResolution { + Cancel = 'CANCEL', + CancelAndHide = 'CANCEL_AND_HIDE', + Delete = 'DELETE' +} -export type FullProgramType = { - __typename?: 'FullProgramType'; - /** Program annotation values with schema attached to them. Only public annotations are returned. NOTE: If querying a lot of program items, consider using cachedAnnotations instead for SPEED. */ - annotations: Array; - /** A mapping of program annotation slug to annotation value. */ - cachedAnnotations: Scalars['GenericScalar']['output']; - /** Returns a mapping of dimension slugs to lists of value slugs. Using `cachedDimensions` is faster than `dimensions` as it requires less joins and database queries. The difference is negligible for a single program or schedule item, but when using the plural resolvers like `programs` or `scheduleItems`, the performance difference can be significant. By default, returns both dimensions set on the program itself and those set on its schedule items. If `own_only` is True, only returns dimensions set on this item itself. By default, returns both public and internal dimensions. This will change in near future to only return public dimensions by default and require `publicOnly: false` to get internal dimensions. At that time, the default will change to `publicOnly: true`, and setting `publicOnly: false` will require authentication. To limit the returned dimensions to key dimensions, set `keyDimensionsOnly: true` (default is `false`). To limit the returned dimensions to list filters, set `listFiltersOnly: true` (default is `false`). */ - cachedDimensions?: Maybe; - /** The earliest start time of any schedule item of this program. NOTE: This is not the same as the program's start time. The intended purpose of this field is to exclude programs that have not yet started. Always use `scheduleItems` for the purpose of displaying program times. */ - cachedEarliestStartTime?: Maybe; - cachedHosts: Scalars['String']['output']; - /** The latest end time of any schedule item of this program. NOTE: This is not the same as the program's start end. The intended purpose of this field is to exclude programs that have already ended. Always use `scheduleItems` for the purpose of displaying program times. */ - cachedLatestEndTime?: Maybe; - canCancel: Scalars['Boolean']['output']; - canDelete: Scalars['Boolean']['output']; - canInviteProgramHost: Scalars['Boolean']['output']; - canRestore: Scalars['Boolean']['output']; - color: Scalars['String']['output']; - createdAt: Scalars['DateTime']['output']; - description: Scalars['String']['output']; - /** `is_list_filter` - only return dimensions that are shown in the list filter. `is_shown_in_detail` - only return dimensions that are shown in the detail view. If you supply both, you only get their intersection. */ - dimensions: Array; - event: LimitedEventType; - invitations: Array; - isAcceptingFeedback: Scalars['Boolean']['output']; - isCancelled: Scalars['Boolean']['output']; - /** Get the links associated with the program. If types are not specified, all links are returned. */ - links: Array; - /** Deprecated. Use `scheduleItem.location` instead. */ - location?: Maybe; - programHosts: Array; - programOffer?: Maybe; - scheduleItems: Array; - slug: Scalars['String']['output']; - title: Scalars['String']['output']; - updatedAt: Scalars['DateTime']['output']; -}; +export enum ProgramLinkType { + Calendar = 'CALENDAR', + Feedback = 'FEEDBACK', + GuideV2Embedded = 'GUIDE_V2_EMBEDDED', + GuideV2Light = 'GUIDE_V2_LIGHT', + Material = 'MATERIAL', + Other = 'OTHER', + Recording = 'RECORDING', + Remote = 'REMOTE', + Reservation = 'RESERVATION', + Signup = 'SIGNUP', + Tickets = 'TICKETS' +} +/** An enumeration. */ +export enum ProgramOfferResolution { + Cancel = 'CANCEL', + Delete = 'DELETE', + Reject = 'REJECT' +} -export type FullProgramTypeAnnotationsArgs = { - isShownInDetail?: InputMaybe; - publicOnly?: InputMaybe; +export type PromoteFieldToDimensionInput = { + eventSlug: string; + fieldSlug: string; + surveySlug: string; }; - -export type FullProgramTypeCachedAnnotationsArgs = { - isShownInDetail?: InputMaybe; - publicOnly?: InputMaybe; - slug?: InputMaybe>; +export type PutDimensionInput = { + dimensionSlug: string; + formData: unknown; + scopeSlug: string; + universeSlug: string; }; - -export type FullProgramTypeCachedDimensionsArgs = { - keyDimensionsOnly?: InputMaybe; - listFiltersOnly?: InputMaybe; - ownOnly?: InputMaybe; - publicOnly?: InputMaybe; +export type PutDimensionValueInput = { + dimensionSlug: string; + formData: unknown; + scopeSlug: string; + universeSlug: string; + valueSlug: string; }; - -export type FullProgramTypeDimensionsArgs = { - isListFilter?: InputMaybe; - isShownInDetail?: InputMaybe; - keyDimensionsOnly?: InputMaybe; - publicOnly?: InputMaybe; +export type PutScheduleItemInput = { + eventSlug: string; + programSlug: string; + scheduleItem: ScheduleItemInput; }; +/** An enumeration. */ +export enum PutUniverseAnnotationAction { + SaveAndRefresh = 'SAVE_AND_REFRESH', + SaveWithoutRefresh = 'SAVE_WITHOUT_REFRESH' +} -export type FullProgramTypeLinksArgs = { - includeExpired?: InputMaybe; - lang?: InputMaybe; - types?: InputMaybe>>; +export type PutUniverseAnnotationInput = { + action?: PutUniverseAnnotationAction | null | undefined; + annotationSlug: string; + formFields: Array; + isActive: boolean; + scopeSlug: string; + universeSlug: string; }; +/** An enumeration. */ +export enum ReceiptStatus { + Failure = 'FAILURE', + Processing = 'PROCESSING', + Requested = 'REQUESTED', + Success = 'SUCCESS' +} -export type FullProgramTypeLocationArgs = { - lang?: InputMaybe; -}; +/** An enumeration. */ +export enum ReceiptType { + Cancelled = 'CANCELLED', + Paid = 'PAID', + Refunded = 'REFUNDED' +} +/** An enumeration. */ +export enum RefundType { + Manual = 'MANUAL', + None = 'NONE', + Provider = 'PROVIDER' +} -export type FullProgramTypeProgramHostsArgs = { - includeInactive?: InputMaybe; +export type ReorderProductsInput = { + eventSlug: string; + productIds: Array; }; -export type FullQuotaType = { - __typename?: 'FullQuotaType'; - /** Returns true if the product can be deleted. A product can be deleted if it has not been sold at all. */ - canDelete: Scalars['Boolean']['output']; - countAvailable: Scalars['Int']['output']; - countPaid: Scalars['Int']['output']; - countReserved: Scalars['Int']['output']; - countTotal: Scalars['Int']['output']; - id: Scalars['ID']['output']; - name: Scalars['String']['output']; - products: Array; +export type RequestOrderCancellationInput = { + eventSlug: string; + orderId: string; }; -export type FullResponseType = { - __typename?: 'FullResponseType'; - /** Returns a mapping of dimension slugs to lists of value slugs. Using `cachedDimensions` is faster than `dimensions` as it requires less joins and database queries. The difference is negligible for a response, but when operating on the plural resolver `responses`, the performance difference can be significant. By default, returns only public dimensions. If `publicOnly` is set to `false`, both public and internal dimensions will be returned. In this case, authentication is required. To limit the returned dimensions to key dimensions, set `keyDimensionsOnly: true` (default is `false`). To limit the returned dimensions to list filters, set `listFiltersOnly: true` (default is `false`). */ - cachedDimensions?: Maybe; - /** Returns whether the response can be accepted by the user as an administrator. Not all survey workflows have the notion of accepting a response, in which case this field will always return False. */ - canAccept: Scalars['Boolean']['output']; - /** Returns whether the response can be cancelled by the user. Not all survey workflows have the notion of cancelling a response, in which case this field will always return False. */ - canCancel: Scalars['Boolean']['output']; - /** Whether the response can be deleted by the user. */ - canDelete: Scalars['Boolean']['output']; - /** Returns whether the response can be edited by the user in the given edit mode. The edit mode can be either ADMIN (default) or OWN. ADMIN determines CBAC edit permissions, while OWN determines if the user is the owner of the response and editing it is allowed by the survey. */ - canEdit: Scalars['Boolean']['output']; - dimensions: Array; - form: FormType; - formData: Scalars['JSONString']['output']; - id: Scalars['UUID']['output']; - /** Language code of the form used to submit this response. */ - language: Scalars['String']['output']; - oldVersions: Array; - /** The date and time when the response was originally created. */ - originalCreatedAt: Scalars['DateTime']['output']; - /** - * - * Returns the user who originally submitted this response. - * If response is to an anonymous survey, this information will not be available. - * - */ - originalCreatedBy?: Maybe; - /** If this response is a program offer, this field returns the program items created from this program offer. If this response is not to a program offer form, this will always be empty. */ - programs: Array; - revisionCreatedAt: Scalars['DateTime']['output']; - /** - * - * Returns the user who submitted this version of the response. - * If response is to an anonymous survey, this information will not be available. - * - */ - revisionCreatedBy?: Maybe; - /** Sequence number of this response within the use case (eg. survey). */ - sequenceNumber: Scalars['Int']['output']; - supersededBy?: Maybe; - values?: Maybe; -}; - - -export type FullResponseTypeCachedDimensionsArgs = { - keyDimensionsOnly?: InputMaybe; - listFiltersOnly?: InputMaybe; - publicOnly?: InputMaybe; -}; - - -export type FullResponseTypeCanEditArgs = { - mode?: InputMaybe; -}; - - -export type FullResponseTypeDimensionsArgs = { - keyDimensionsOnly?: InputMaybe; -}; - - -export type FullResponseTypeValuesArgs = { - keyFieldsOnly?: InputMaybe; -}; - -export type FullScheduleItemType = { - __typename?: 'FullScheduleItemType'; - /** A mapping of program annotation slug to annotation value. */ - cachedAnnotations: Scalars['GenericScalar']['output']; - /** Returns a mapping of dimension slugs to lists of value slugs. Using `cachedDimensions` is faster than `dimensions` as it requires less joins and database queries. The difference is negligible for a single program or schedule item, but when using the plural resolvers like `programs` or `scheduleItems`, the performance difference can be significant. By default, returns both dimensions set on the program itself and those set on its schedule items. If `own_only` is True, only returns dimensions set on this item itself. By default, returns both public and internal dimensions. This will change in near future to only return public dimensions by default and require `publicOnly: false` to get internal dimensions. At that time, the default will change to `publicOnly: true`, and setting `publicOnly: false` will require authentication. To limit the returned dimensions to key dimensions, set `keyDimensionsOnly: true` (default is `false`). To limit the returned dimensions to list filters, set `listFiltersOnly: true` (default is `false`). */ - cachedDimensions?: Maybe; - createdAt: Scalars['DateTime']['output']; - durationMinutes: Scalars['Int']['output']; - endTime: Scalars['DateTime']['output']; - endTimeUnixSeconds: Scalars['Int']['output']; - /** Convenience helper to get the freeform location of the schedule item. NOTE: You should usually display `location` to users instead. */ - freeformLocation: Scalars['String']['output']; - isCancelled: Scalars['Boolean']['output']; - /** Deprecated alias for `duration_minutes`. */ - lengthMinutes: Scalars['Int']['output']; - /** Get the links associated with the schedule item. If types are not specified, all links are returned. With `ownOnly`, only links set directly on the schedule item are returned; otherwise links inherited from the program are included as well. */ - links: Array; - location?: Maybe; - program: LimitedProgramType; - reservationsExcelExportLink: Scalars['String']['output']; - /** Convenience helper to get the value slug of the `room` dimension. NOTE: You should usually display `location` to users instead. */ - room: Scalars['String']['output']; - /** NOTE: Slug must be unique within Event. It does not suffice to be unique within Program. */ - slug: Scalars['String']['output']; - startTime: Scalars['DateTime']['output']; - startTimeUnixSeconds: Scalars['Int']['output']; - /** Convenience helper to get the subtitle of the schedule item. NOTE: You should usually display `title` to users instead. */ - subtitle: Scalars['String']['output']; - /** Returns the title of the program, with subtitle if it exists, in the format "Program title – Schedule item subtitle". */ - title: Scalars['String']['output']; - updatedAt: Scalars['DateTime']['output']; -}; - - -export type FullScheduleItemTypeCachedAnnotationsArgs = { - isShownInDetail?: InputMaybe; - publicOnly?: InputMaybe; - slug?: InputMaybe>; -}; - - -export type FullScheduleItemTypeCachedDimensionsArgs = { - keyDimensionsOnly?: InputMaybe; - listFiltersOnly?: InputMaybe; - ownOnly?: InputMaybe; - publicOnly?: InputMaybe; -}; - - -export type FullScheduleItemTypeLinksArgs = { - includeExpired?: InputMaybe; - lang?: InputMaybe; - ownOnly?: InputMaybe; - types?: InputMaybe>>; -}; - - -export type FullScheduleItemTypeLocationArgs = { - lang?: InputMaybe; -}; - -export type FullSurveyType = { - __typename?: 'FullSurveyType'; - /** The form will be available from this date onwards. If not set, the form will not be available. */ - activeFrom?: Maybe; - /** The form will be available until this date. If not set, the form will be available indefinitely provided that active_from is set and has passed. */ - activeUntil?: Maybe; - anonymity: Anonymity; - /** Default dimension values that will be set on involvements based on responses. */ - cachedDefaultInvolvementDimensions?: Maybe; - /** Default dimension values that will be set on new responses. */ - cachedDefaultResponseDimensions?: Maybe; - /** Surveys that have language versions cannot be removed. Having language versions is also a prerequisite for a survey to have responses. */ - canRemove: Scalars['Boolean']['output']; - /** Checks that the user has permission to remove responses to this survey. This requires proper CBAC permission and that `survey.protect_responses` is false. */ - canRemoveResponses: Scalars['Boolean']['output']; - /** Returns the number of responses to this survey regardless of language version used. Authorization required. */ - countResponses: Scalars['Int']['output']; - /** Returns the number of responses to this survey by the current user. */ - countResponsesByCurrentUser: Scalars['Int']['output']; - /** `is_list_filter` - only return dimensions that are shown in the list filter. `is_shown_in_detail` - only return dimensions that are shown in the detail view. If you supply both, you only get their intersection. */ - dimensions: Array; - event: LimitedEventType; - /** A survey's language versions may have differing fields. This field presents them combined as a single list of fields. If a language is specified, that language is used as the base for the combined fields. Order of fields not present in the base language is not guaranteed. */ - fields?: Maybe; - /** Will attempt to give the form in the requested language, falling back to another language if that language is not available. */ - form?: Maybe; - isActive: Scalars['Boolean']['output']; - /** The slugs of the fields that are designated as key fields (isKeyField). Key fields are shown in the response list. */ - keyFields: Array; - languages: Array; - loginRequired: Scalars['Boolean']['output']; - /** Maximum number of responses per user. 0 = unlimited. Note that if login_required is not set, this only takes effect for logged in users.Has no effect if the survey is hard anonymous. */ - maxResponsesPerUser: Scalars['Int']['output']; - profileFieldSelector: ProfileFieldSelectorType; - /** If enabled, responses cannot be deleted from the UI without disabling this first. */ - protectResponses: Scalars['Boolean']['output']; - purpose: SurveyPurpose; - registry?: Maybe; - response?: Maybe; - /** Returns the responses to this survey regardless of language version used. Authorization required. */ - responses?: Maybe>; - /** If set, responses to this survey can be edited by whomever sent them until this date, provided that the response is not locked by a dimension value that is set to lock subjects. If unset, responses cannnot be edited at all. */ - responsesEditableUntil?: Maybe; - /** Tekninen nimi eli "slug" näkyy URL-osoitteissa. Sallittuja merkkejä ovat pienet kirjaimet, numerot ja väliviiva. Teknistä nimeä ei voi muuttaa luomisen jälkeen. */ - slug: Scalars['String']['output']; - /** Returns a summary of responses to this survey. If a language is specified, that language is used as the base for the combined fields. Order of fields not present in the base language is not guaranteed. Authorization required. */ - summary?: Maybe; - title?: Maybe; -}; - - -export type FullSurveyTypeCountResponsesArgs = { - filters?: InputMaybe>>; -}; - - -export type FullSurveyTypeDimensionsArgs = { - isListFilter?: InputMaybe; - isShownInDetail?: InputMaybe; - keyDimensionsOnly?: InputMaybe; - publicOnly?: InputMaybe; -}; - - -export type FullSurveyTypeFieldsArgs = { - keyFieldsOnly?: InputMaybe; - lang?: InputMaybe; -}; - - -export type FullSurveyTypeFormArgs = { - lang?: InputMaybe; -}; - - -export type FullSurveyTypeResponseArgs = { - id: Scalars['String']['input']; -}; - - -export type FullSurveyTypeResponsesArgs = { - filters?: InputMaybe>>; -}; - - -export type FullSurveyTypeSummaryArgs = { - filters?: InputMaybe>>; - lang?: InputMaybe; -}; - - -export type FullSurveyTypeTitleArgs = { - lang?: InputMaybe; -}; - -export type GenerateKeyPair = { - __typename?: 'GenerateKeyPair'; - id: Scalars['String']['output']; -}; - -export type InitFileUploadInput = { - fileType: Scalars['String']['input']; - filename: Scalars['String']['input']; -}; - -export type InitFileUploadResponse = { - __typename?: 'InitFileUploadResponse'; - fileUrl?: Maybe; - uploadUrl?: Maybe; -}; - -export type InviteProgramHost = { - __typename?: 'InviteProgramHost'; - invitation: FullInvitationType; -}; - -export type InviteProgramHostInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - programSlug: Scalars['String']['input']; -}; - -/** An enumeration. */ -export enum InvolvementApp { - Forms = 'FORMS', - Involvement = 'INVOLVEMENT', - Program = 'PROGRAM', - Volunteers = 'VOLUNTEERS' -} - -export type InvolvementEventMetaType = { - __typename?: 'InvolvementEventMetaType'; - annotations: Array; - defaultRegistry?: Maybe; - /** `is_list_filter` - only return dimensions that are shown in the list filter. `is_shown_in_detail` - only return dimensions that are shown in the detail view. If you supply both, you only get their intersection. */ - dimensions: Array; - event: FullEventType; - id: Scalars['ID']['output']; - invitation?: Maybe; - /** List of people involved in the event, filtered by dimensions. */ - people: Array; - person?: Maybe; - reports: Array; - /** When shirts were ordered, the shirt sizes in COMBINED_PERKS involvements are frozen. After this timestamp, only changing to ShirtSize.NONE is allowed. */ - shirtsFrozenAt?: Maybe; -}; - - -export type InvolvementEventMetaTypeAnnotationsArgs = { - perksOnly?: InputMaybe; - publicOnly?: InputMaybe; -}; - - -export type InvolvementEventMetaTypeDimensionsArgs = { - isListFilter?: InputMaybe; - isShownInDetail?: InputMaybe; - keyDimensionsOnly?: InputMaybe; - publicOnly?: InputMaybe; -}; - - -export type InvolvementEventMetaTypeInvitationArgs = { - invitationId: Scalars['String']['input']; -}; - - -export type InvolvementEventMetaTypePeopleArgs = { - filters?: InputMaybe>>; - returnNone?: InputMaybe; - search?: InputMaybe; -}; - - -export type InvolvementEventMetaTypePersonArgs = { - id: Scalars['Int']['input']; -}; - - -export type InvolvementEventMetaTypeReportsArgs = { - lang?: InputMaybe; -}; - -/** An enumeration. */ -export enum InvolvementInvitationLanguageChoices { - /** English */ - En = 'EN', - /** Finnish */ - Fi = 'FI', - /** Swedish */ - Sv = 'SV' -} - -/** An enumeration. */ -export enum InvolvementType { - CombinedPerks = 'COMBINED_PERKS', - LegacySignup = 'LEGACY_SIGNUP', - ProgramHost = 'PROGRAM_HOST', - ProgramOffer = 'PROGRAM_OFFER', - SurveyResponse = 'SURVEY_RESPONSE' -} - -export type KeyPairType = { - __typename?: 'KeyPairType'; - createdAt: Scalars['DateTime']['output']; - id: Scalars['UUID']['output']; - publicKey: Scalars['JSONString']['output']; -}; - -export type LimitedCodeType = { - __typename?: 'LimitedCodeType'; - code: Scalars['String']['output']; - id: Scalars['ID']['output']; - literateCode: Scalars['String']['output']; - productText: Scalars['String']['output']; - /** Status of the code. Kompassi uses the MIR state to indicate cancelled orders or otherwise revoked codes. */ - status: CodeStatus; - usedOn?: Maybe; -}; - -export type LimitedEventType = { - __typename?: 'LimitedEventType'; - endTime?: Maybe; - name: Scalars['String']['output']; - organization: LimitedOrganizationType; - /** Tekninen nimi eli "slug" näkyy URL-osoitteissa. Sallittuja merkkejä ovat pienet kirjaimet, numerot ja väliviiva. Teknistä nimeä ei voi muuttaa luomisen jälkeen. */ - slug: Scalars['String']['output']; - startTime?: Maybe; - timezone: Scalars['String']['output']; -}; - -export type LimitedInvitationType = { - __typename?: 'LimitedInvitationType'; - cachedDimensions?: Maybe; - createdAt: Scalars['DateTime']['output']; - email: Scalars['String']['output']; - id: Scalars['UUID']['output']; - isUsed: Scalars['Boolean']['output']; - /** The language of the invitation. This is used to send the invitation in the correct language. */ - language: InvolvementInvitationLanguageChoices; - survey?: Maybe; -}; - -/** Represent Involvement (and the Person involved) without a way to traverse back to Person. */ -export type LimitedInvolvementType = { - __typename?: 'LimitedInvolvementType'; - adminLink?: Maybe; - app: InvolvementApp; - cachedAnnotations: Scalars['GenericScalar']['output']; - cachedDimensions: Scalars['GenericScalar']['output']; - createdAt: Scalars['DateTime']['output']; - id: Scalars['ID']['output']; - isActive: Scalars['Boolean']['output']; - program?: Maybe; - programOffer?: Maybe; - response?: Maybe; - title: Scalars['String']['output']; - type: InvolvementType; - updatedAt: Scalars['DateTime']['output']; -}; - -/** - * A message as seen by its recipient in their profile: the immutable rendered - * snapshot from MessageRecipient, not the (possibly since-edited) Message. Carries no - * sender identity. - */ -export type LimitedMessageType = { - __typename?: 'LimitedMessageType'; - bodyHtml: Scalars['String']['output']; - cachedDimensions: Scalars['GenericScalar']['output']; - event: LimitedEventType; - id: Scalars['ID']['output']; - sentAt: Scalars['DateTime']['output']; - subject: Scalars['String']['output']; -}; - -export type LimitedOrderType = { - __typename?: 'LimitedOrderType'; - canPay: Scalars['Boolean']['output']; - createdAt: Scalars['DateTime']['output']; - displayName: Scalars['String']['output']; - email: Scalars['String']['output']; - firstName: Scalars['String']['output']; - formattedOrderNumber: Scalars['String']['output']; - id: Scalars['UUID']['output']; - language: TicketsV2OrderLanguageChoices; - lastName: Scalars['String']['output']; - /** Order number used in contexts where UUID cannot be used. Such places include generating reference numbers and the customer reading the order number aloud to an event rep. Prefer id (UUID) for everything else (eg. URLs). */ - orderNumber: Scalars['Int']['output']; - phone: Scalars['String']['output']; - status: PaymentStatus; - totalPrice: Scalars['Decimal']['output']; -}; - -export type LimitedOrganizationType = { - __typename?: 'LimitedOrganizationType'; - /** Finnish business ID (Y-tunnus), eg. 1234567-8. */ - businessId: Scalars['String']['output']; - name: Scalars['String']['output']; - /** Tekninen nimi eli "slug" näkyy URL-osoitteissa. Sallittuja merkkejä ovat pienet kirjaimet, numerot ja väliviiva. Teknistä nimeä ei voi muuttaa luomisen jälkeen. */ - slug: Scalars['String']['output']; - timezone: Scalars['String']['output']; -}; - -export type LimitedPaymentStampType = { - __typename?: 'LimitedPaymentStampType'; - /** The correlation ID ties together the payment stamps related to the same payment attempt. For Paytrail, this is what they call 'stamp'. */ - correlationId: Scalars['UUID']['output']; - createdAt: Scalars['DateTime']['output']; - data: Scalars['GenericScalar']['output']; - id: Scalars['UUID']['output']; - provider: PaymentProvider; - status: PaymentStatus; - type: PaymentStampType; -}; - -export type LimitedProductType = { - __typename?: 'LimitedProductType'; - availableFrom?: Maybe; - availableUntil?: Maybe; - /** Returns true if the product can be deleted. A product can be deleted if it has not been sold at all. */ - canDelete: Scalars['Boolean']['output']; - /** Computes the amount of available units of this product. Other versions of this product are grouped together. Null if the product has no quotas. */ - countAvailable?: Maybe; - /** Computes the amount of paid units of this product. Other versions of this product are grouped together. */ - countPaid: Scalars['Int']['output']; - /** Computes the amount of reserved units of this product. Other versions of this product are grouped together. */ - countReserved: Scalars['Int']['output']; - createdAt: Scalars['DateTime']['output']; - description: Scalars['String']['output']; - eticketsPerProduct: Scalars['Int']['output']; - id: Scalars['Int']['output']; - maxPerOrder: Scalars['Int']['output']; - price: Scalars['Decimal']['output']; - quotas: Array>; - title: Scalars['String']['output']; - /** VAT percentage applied to this product. Prices are inclusive of VAT. */ - vatPercentage: Scalars['Decimal']['output']; -}; - -/** Represent Person without a way to traverse back to Event. */ -export type LimitedProfileType = { - __typename?: 'LimitedProfileType'; - /** Your Discord username (NOTE: not display name). Events may use this to give you roles based on your participation. */ - discordHandle: Scalars['String']['output']; - displayName: Scalars['String']['output']; - /** Email is the primary means of contact for event-related matters. */ - email: Scalars['String']['output']; - firstName: Scalars['String']['output']; - fullName: Scalars['String']['output']; - id: Scalars['ID']['output']; - lastName: Scalars['String']['output']; - /** If you go by a nick name or handle that you want printed in your badge and programme details, enter it here. */ - nick: Scalars['String']['output']; - phoneNumber: Scalars['String']['output']; -}; - -export type LimitedProgramHostType = { - __typename?: 'LimitedProgramHostType'; - cachedDimensions: Scalars['GenericScalar']['output']; - createdAt: Scalars['DateTime']['output']; - id: Scalars['ID']['output']; - isActive: Scalars['Boolean']['output']; - person: LimitedProfileType; - programHostRole?: Maybe; - updatedAt: Scalars['DateTime']['output']; -}; - -/** - * "Limited" program items are returned when queried through ScheduleItem.program so as to - * limit DoS via deep nesting. It lacks access to `scheduleItems` which might be used to - * cause a rapid expansion of the response via deep nesting, and also lacks access to - * some fields that may be expensive to compute such as `dimensions`; however, - * `cachedDimensions` is still provided. - */ -export type LimitedProgramType = { - __typename?: 'LimitedProgramType'; - /** A mapping of program annotation slug to annotation value. */ - cachedAnnotations: Scalars['GenericScalar']['output']; - /** Returns a mapping of dimension slugs to lists of value slugs. Using `cachedDimensions` is faster than `dimensions` as it requires less joins and database queries. The difference is negligible for a single program or schedule item, but when using the plural resolvers like `programs` or `scheduleItems`, the performance difference can be significant. By default, returns both dimensions set on the program itself and those set on its schedule items. If `own_only` is True, only returns dimensions set on this item itself. By default, returns both public and internal dimensions. This will change in near future to only return public dimensions by default and require `publicOnly: false` to get internal dimensions. At that time, the default will change to `publicOnly: true`, and setting `publicOnly: false` will require authentication. To limit the returned dimensions to key dimensions, set `keyDimensionsOnly: true` (default is `false`). To limit the returned dimensions to list filters, set `listFiltersOnly: true` (default is `false`). */ - cachedDimensions?: Maybe; - /** The earliest start time of any schedule item of this program. NOTE: This is not the same as the program's start time. The intended purpose of this field is to exclude programs that have not yet started. Always use `scheduleItems` for the purpose of displaying program times. */ - cachedEarliestStartTime?: Maybe; - cachedHosts: Scalars['String']['output']; - /** The latest end time of any schedule item of this program. NOTE: This is not the same as the program's start end. The intended purpose of this field is to exclude programs that have already ended. Always use `scheduleItems` for the purpose of displaying program times. */ - cachedLatestEndTime?: Maybe; - canCancel: Scalars['Boolean']['output']; - canDelete: Scalars['Boolean']['output']; - canInviteProgramHost: Scalars['Boolean']['output']; - canRestore: Scalars['Boolean']['output']; - color: Scalars['String']['output']; - createdAt: Scalars['DateTime']['output']; - description: Scalars['String']['output']; - isAcceptingFeedback: Scalars['Boolean']['output']; - isCancelled: Scalars['Boolean']['output']; - /** Get the links associated with the program. If types are not specified, all links are returned. */ - links: Array; - /** Deprecated. Use `scheduleItem.location` instead. */ - location?: Maybe; - slug: Scalars['String']['output']; - title: Scalars['String']['output']; - updatedAt: Scalars['DateTime']['output']; -}; - - -/** - * "Limited" program items are returned when queried through ScheduleItem.program so as to - * limit DoS via deep nesting. It lacks access to `scheduleItems` which might be used to - * cause a rapid expansion of the response via deep nesting, and also lacks access to - * some fields that may be expensive to compute such as `dimensions`; however, - * `cachedDimensions` is still provided. - */ -export type LimitedProgramTypeCachedAnnotationsArgs = { - isShownInDetail?: InputMaybe; - publicOnly?: InputMaybe; - slug?: InputMaybe>; -}; - - -/** - * "Limited" program items are returned when queried through ScheduleItem.program so as to - * limit DoS via deep nesting. It lacks access to `scheduleItems` which might be used to - * cause a rapid expansion of the response via deep nesting, and also lacks access to - * some fields that may be expensive to compute such as `dimensions`; however, - * `cachedDimensions` is still provided. - */ -export type LimitedProgramTypeCachedDimensionsArgs = { - keyDimensionsOnly?: InputMaybe; - listFiltersOnly?: InputMaybe; - ownOnly?: InputMaybe; - publicOnly?: InputMaybe; -}; - - -/** - * "Limited" program items are returned when queried through ScheduleItem.program so as to - * limit DoS via deep nesting. It lacks access to `scheduleItems` which might be used to - * cause a rapid expansion of the response via deep nesting, and also lacks access to - * some fields that may be expensive to compute such as `dimensions`; however, - * `cachedDimensions` is still provided. - */ -export type LimitedProgramTypeLinksArgs = { - includeExpired?: InputMaybe; - lang?: InputMaybe; - types?: InputMaybe>>; -}; - - -/** - * "Limited" program items are returned when queried through ScheduleItem.program so as to - * limit DoS via deep nesting. It lacks access to `scheduleItems` which might be used to - * cause a rapid expansion of the response via deep nesting, and also lacks access to - * some fields that may be expensive to compute such as `dimensions`; however, - * `cachedDimensions` is still provided. - */ -export type LimitedProgramTypeLocationArgs = { - lang?: InputMaybe; -}; - -export type LimitedQuotaType = { - __typename?: 'LimitedQuotaType'; - /** Returns true if the product can be deleted. A product can be deleted if it has not been sold at all. */ - canDelete: Scalars['Boolean']['output']; - countAvailable: Scalars['Int']['output']; - countPaid: Scalars['Int']['output']; - countReserved: Scalars['Int']['output']; - countTotal: Scalars['Int']['output']; - id: Scalars['ID']['output']; - name: Scalars['String']['output']; -}; - -export type LimitedReceiptType = { - __typename?: 'LimitedReceiptType'; - /** The correlation ID ties together the receipt stamps related to the same receipt attempt. Usually you would use the correlation ID of the payment stamp that you used to determine this order is paid. */ - correlationId: Scalars['UUID']['output']; - createdAt: Scalars['DateTime']['output']; - /** The email address to which the receipt was sent. */ - email: Scalars['String']['output']; - status: ReceiptStatus; - type: ReceiptType; -}; - -export type LimitedRegistryType = { - __typename?: 'LimitedRegistryType'; - createdAt: Scalars['DateTime']['output']; - organization: LimitedOrganizationType; - policyUrl: Scalars['String']['output']; - slug: Scalars['String']['output']; - title: Scalars['String']['output']; - updatedAt: Scalars['DateTime']['output']; -}; - - -export type LimitedRegistryTypePolicyUrlArgs = { - lang?: InputMaybe; -}; - - -export type LimitedRegistryTypeTitleArgs = { - lang?: InputMaybe; -}; - -export type LimitedResponseType = { - __typename?: 'LimitedResponseType'; - /** Returns a mapping of dimension slugs to lists of value slugs. Using `cachedDimensions` is faster than `dimensions` as it requires less joins and database queries. The difference is negligible for a response, but when operating on the plural resolver `responses`, the performance difference can be significant. By default, returns only public dimensions. If `publicOnly` is set to `false`, both public and internal dimensions will be returned. In this case, authentication is required. To limit the returned dimensions to key dimensions, set `keyDimensionsOnly: true` (default is `false`). To limit the returned dimensions to list filters, set `listFiltersOnly: true` (default is `false`). */ - cachedDimensions?: Maybe; - /** Returns whether the response can be accepted by the user as an administrator. Not all survey workflows have the notion of accepting a response, in which case this field will always return False. */ - canAccept: Scalars['Boolean']['output']; - /** Returns whether the response can be cancelled by the user. Not all survey workflows have the notion of cancelling a response, in which case this field will always return False. */ - canCancel: Scalars['Boolean']['output']; - /** Whether the response can be deleted by the user. */ - canDelete: Scalars['Boolean']['output']; - /** Returns whether the response can be edited by the user in the given edit mode. The edit mode can be either ADMIN (default) or OWN. ADMIN determines CBAC edit permissions, while OWN determines if the user is the owner of the response and editing it is allowed by the survey. */ - canEdit: Scalars['Boolean']['output']; - formData: Scalars['JSONString']['output']; - id: Scalars['UUID']['output']; - /** Language code of the form used to submit this response. */ - language: Scalars['String']['output']; - /** The date and time when the response was originally created. */ - originalCreatedAt: Scalars['DateTime']['output']; - /** - * - * Returns the user who originally submitted this response. - * If response is to an anonymous survey, this information will not be available. - * - */ - originalCreatedBy?: Maybe; - revisionCreatedAt: Scalars['DateTime']['output']; - /** - * - * Returns the user who submitted this version of the response. - * If response is to an anonymous survey, this information will not be available. - * - */ - revisionCreatedBy?: Maybe; - /** Sequence number of this response within the use case (eg. survey). */ - sequenceNumber: Scalars['Int']['output']; - values?: Maybe; -}; - - -export type LimitedResponseTypeCachedDimensionsArgs = { - keyDimensionsOnly?: InputMaybe; - listFiltersOnly?: InputMaybe; - publicOnly?: InputMaybe; -}; - - -export type LimitedResponseTypeCanEditArgs = { - mode?: InputMaybe; -}; - - -export type LimitedResponseTypeValuesArgs = { - keyFieldsOnly?: InputMaybe; -}; - -export type LimitedScheduleItemType = { - __typename?: 'LimitedScheduleItemType'; - /** A mapping of program annotation slug to annotation value. */ - cachedAnnotations: Scalars['GenericScalar']['output']; - /** Returns a mapping of dimension slugs to lists of value slugs. Using `cachedDimensions` is faster than `dimensions` as it requires less joins and database queries. The difference is negligible for a single program or schedule item, but when using the plural resolvers like `programs` or `scheduleItems`, the performance difference can be significant. By default, returns both dimensions set on the program itself and those set on its schedule items. If `own_only` is True, only returns dimensions set on this item itself. By default, returns both public and internal dimensions. This will change in near future to only return public dimensions by default and require `publicOnly: false` to get internal dimensions. At that time, the default will change to `publicOnly: true`, and setting `publicOnly: false` will require authentication. To limit the returned dimensions to key dimensions, set `keyDimensionsOnly: true` (default is `false`). To limit the returned dimensions to list filters, set `listFiltersOnly: true` (default is `false`). */ - cachedDimensions?: Maybe; - createdAt: Scalars['DateTime']['output']; - durationMinutes: Scalars['Int']['output']; - endTime: Scalars['DateTime']['output']; - endTimeUnixSeconds: Scalars['Int']['output']; - /** Convenience helper to get the freeform location of the schedule item. NOTE: You should usually display `location` to users instead. */ - freeformLocation: Scalars['String']['output']; - isCancelled: Scalars['Boolean']['output']; - isPublic: Scalars['Boolean']['output']; - /** Deprecated alias for `duration_minutes`. */ - lengthMinutes: Scalars['Int']['output']; - /** Get the links associated with the schedule item. If types are not specified, all links are returned. With `ownOnly`, only links set directly on the schedule item are returned; otherwise links inherited from the program are included as well. */ - links: Array; - location?: Maybe; - reservationsExcelExportLink: Scalars['String']['output']; - /** Convenience helper to get the value slug of the `room` dimension. NOTE: You should usually display `location` to users instead. */ - room: Scalars['String']['output']; - /** NOTE: Slug must be unique within Event. It does not suffice to be unique within Program. */ - slug: Scalars['String']['output']; - startTime: Scalars['DateTime']['output']; - startTimeUnixSeconds: Scalars['Int']['output']; - /** Convenience helper to get the subtitle of the schedule item. NOTE: You should usually display `title` to users instead. */ - subtitle: Scalars['String']['output']; - /** Returns the title of the program, with subtitle if it exists, in the format "Program title – Schedule item subtitle". */ - title: Scalars['String']['output']; - updatedAt: Scalars['DateTime']['output']; -}; - - -export type LimitedScheduleItemTypeCachedAnnotationsArgs = { - isShownInDetail?: InputMaybe; - publicOnly?: InputMaybe; - slug?: InputMaybe>; -}; - - -export type LimitedScheduleItemTypeCachedDimensionsArgs = { - keyDimensionsOnly?: InputMaybe; - listFiltersOnly?: InputMaybe; - ownOnly?: InputMaybe; - publicOnly?: InputMaybe; -}; - - -export type LimitedScheduleItemTypeLinksArgs = { - includeExpired?: InputMaybe; - lang?: InputMaybe; - ownOnly?: InputMaybe; - types?: InputMaybe>>; -}; - - -export type LimitedScheduleItemTypeLocationArgs = { - lang?: InputMaybe; -}; - -export type LimitedSurveyType = { - __typename?: 'LimitedSurveyType'; - /** The form will be available from this date onwards. If not set, the form will not be available. */ - activeFrom?: Maybe; - /** The form will be available until this date. If not set, the form will be available indefinitely provided that active_from is set and has passed. */ - activeUntil?: Maybe; - anonymity: Anonymity; - /** Default dimension values that will be set on involvements based on responses. */ - cachedDefaultInvolvementDimensions?: Maybe; - /** Default dimension values that will be set on new responses. */ - cachedDefaultResponseDimensions?: Maybe; - isActive: Scalars['Boolean']['output']; - loginRequired: Scalars['Boolean']['output']; - /** Maximum number of responses per user. 0 = unlimited. Note that if login_required is not set, this only takes effect for logged in users.Has no effect if the survey is hard anonymous. */ - maxResponsesPerUser: Scalars['Int']['output']; - profileFieldSelector: ProfileFieldSelectorType; - /** If enabled, responses cannot be deleted from the UI without disabling this first. */ - protectResponses: Scalars['Boolean']['output']; - purpose: SurveyPurpose; - registry?: Maybe; - /** If set, responses to this survey can be edited by whomever sent them until this date, provided that the response is not locked by a dimension value that is set to lock subjects. If unset, responses cannnot be edited at all. */ - responsesEditableUntil?: Maybe; - /** Tekninen nimi eli "slug" näkyy URL-osoitteissa. Sallittuja merkkejä ovat pienet kirjaimet, numerot ja väliviiva. Teknistä nimeä ei voi muuttaa luomisen jälkeen. */ - slug: Scalars['String']['output']; - title?: Maybe; -}; - - -export type LimitedSurveyTypeTitleArgs = { - lang?: InputMaybe; -}; - -export type LimitedUniverseAnnotationType = { - __typename?: 'LimitedUniverseAnnotationType'; - annotation: AnnotationType; - formFields?: Maybe; - isActive: Scalars['Boolean']['output']; -}; - -/** Deprecated. Use ProfileType instead. */ -export type LimitedUserType = { - __typename?: 'LimitedUserType'; - /** User's full name. */ - displayName: Scalars['String']['output']; - email: Scalars['String']['output']; - firstName: Scalars['String']['output']; - lastName: Scalars['String']['output']; -}; - -export type MarkOrderAsPaid = { - __typename?: 'MarkOrderAsPaid'; - order?: Maybe; -}; - -export type MarkOrderAsPaidInput = { - eventSlug: Scalars['String']['input']; - orderId: Scalars['String']['input']; -}; - -/** Deprecated. Use MarkScheduleItemAsFavorite instead. */ -export type MarkProgramAsFavorite = { - __typename?: 'MarkProgramAsFavorite'; - success: Scalars['Boolean']['output']; -}; - -export type MarkScheduleItemAsFavorite = { - __typename?: 'MarkScheduleItemAsFavorite'; - success: Scalars['Boolean']['output']; -}; - -/** - * - * Records which product owns a Message. Only PROGRAM is used for now; - * the enum reserves room for forms/involvement/volunteers to reuse Messages V2 later. - * - */ -export enum MessageApp { - Program = 'PROGRAM' -} - -/** An enumeration. */ -export enum MessageDispatch { - PerInvolvement = 'PER_INVOLVEMENT', - PerPerson = 'PER_PERSON' -} - -export type MessageReplyToType = { - __typename?: 'MessageReplyToType'; - app: MessageApp; - email: Scalars['String']['output']; - id: Scalars['ID']['output']; - name: Scalars['String']['output']; -}; - -/** An enumeration. */ -export enum MessageState { - Active = 'ACTIVE', - Draft = 'DRAFT', - Expired = 'EXPIRED' -} - -/** - * Admin-facing representation of a Message, used by the Program V2 admin compose/list - * views. Never exposed to recipients - see LimitedMessageType for the profile view. - */ -export type MessageType = { - __typename?: 'MessageType'; - app: MessageApp; - body: Scalars['String']['output']; - createdAt: Scalars['DateTime']['output']; - dispatch: MessageDispatch; - expiredAt?: Maybe; - id: Scalars['UUID']['output']; - /** - * Number of distinct recipients (people for PER_PERSON, involvements for - * PER_INVOLVEMENT) currently matching this message's recipient filters. - */ - recipientCount: Scalars['Int']['output']; - recipientFilters: Scalars['GenericScalar']['output']; - replyTo?: Maybe; - sentAt?: Maybe; - state: MessageState; - subject: Scalars['String']['output']; - updatedAt: Scalars['DateTime']['output']; -}; - -export type Mutation = { - __typename?: 'Mutation'; - acceptInvitation?: Maybe; - acceptProgramOffer?: Maybe; - cancelAndRefundOrder?: Maybe; - cancelOwnUnpaidOrder?: Maybe; - cancelProgram?: Maybe; - cancelProgramOffer?: Maybe; - confirmEmail?: Maybe; - /** - * Customer self-service cancellation, step 2 of 2: consume the one-time code - * from the confirmation email and cancel the order, initiating an automated - * refund via the payment provider if money was paid. - * - * May be called without authentication: the one-time code proves control of - * the email address of the order. - * - * Returns success=False if the order was cancelled but the provider rejected - * the refund request (order left in REFUND_FAILED for ticket sales to resolve - * with the existing admin refund tooling). - * - * NOTE: Must not return any PII (the caller may be anonymous). - */ - confirmOrderCancellation?: Maybe; - /** - * Creates a new Message with the given content. Called only when the compose view - * for a not-yet-existing message ("new") is first saved - until then, the draft only - * exists in the browser, never in the database. - */ - createMessage?: Maybe; - createMessageReplyTo?: Maybe; - createOrder?: Maybe; - createProduct?: Maybe; - createProgram?: Maybe; - createProgramFeedback?: Maybe; - createProgramForm?: Maybe; - createQuota?: Maybe; - createSurvey?: Maybe; - createSurveyLanguage?: Maybe; - createSurveyResponse?: Maybe; - deleteDimension?: Maybe; - deleteDimensionValue?: Maybe; - deleteInvitation?: Maybe; - /** - * Deletes a Message draft. Only drafts can be deleted - once sent, a Message is kept - * (possibly expired) so its MessageRecipients remain visible in recipients' profiles. - */ - deleteMessage?: Maybe; - /** - * Deletes a reply-to option. Messages that reference it fall back to the event's - * default plain contact email (Message.reply_to is SET_NULL on delete). - */ - deleteMessageReplyTo?: Maybe; - deleteProduct?: Maybe; - deleteProgramHost?: Maybe; - deleteProgramOffers?: Maybe; - deleteQuota?: Maybe; - deleteScheduleItem?: Maybe; - deleteSurvey?: Maybe; - deleteSurveyLanguage?: Maybe; - deleteSurveyResponses?: Maybe; - /** - * Expires an active Message: it stops being sent to new/auto-matching recipients. - * People who already received it are unaffected. - */ - expireMessage?: Maybe; - generateKeyPair?: Maybe; - initFileUpload?: Maybe; - inviteProgramHost?: Maybe; - markOrderAsPaid?: Maybe; - /** Deprecated. Use MarkScheduleItemAsFavorite instead. */ - markProgramAsFavorite?: Maybe; - markScheduleItemAsFavorite?: Maybe; - /** - * Promotes a Single Select or Multiple Select field to a dimension. - * - * This is used when a field is created as a Single Select or Multiple Select - * and later discovered that it should be a dimension. - */ - promoteFieldToDimension?: Maybe; - putDimension?: Maybe; - putDimensionValue?: Maybe; - putScheduleItem?: Maybe; - putUniverseAnnotation?: Maybe; - reorderProducts?: Maybe; - /** - * Customer self-service cancellation, step 1 of 2: send a confirmation link - * to the email address of the order. - * - * May be called without authentication: possession of the order UUID is considered - * sufficient proof of being party to the order (same trust model as the anonymous - * order page), and the confirmation email closes the loop. - * - * NOTE: Must not return any PII (the caller may be anonymous). - */ - requestOrderCancellation?: Maybe; - resendInvitation?: Maybe; - resendOrderConfirmation?: Maybe; - /** Restore a program item that was previously cancelled. */ - restoreProgram?: Maybe; - revokeKeyPair?: Maybe; - /** - * Sends a Message: on a draft, transitions it to ACTIVE and dispatches sending to all - * currently matching recipients. On an already ACTIVE message, this re-sends to any - * currently matching recipients who have not yet received it (MessageRecipient's - * uniqueness constraints make this idempotent for everyone else). - */ - sendMessage?: Maybe; - subscribeToSurveyResponses?: Maybe; - /** Deprecated. Use UnmarkScheduleItemAsFavorite instead. */ - unmarkProgramAsFavorite?: Maybe; - unmarkScheduleItemAsFavorite?: Maybe; - unsubscribeFromSurveyResponses?: Maybe; - updateForm?: Maybe; - updateFormFields?: Maybe; - updateInvolvementDimensions?: Maybe; - /** - * Manually override the automatically computed perks of a person's COMBINED_PERKS - * involvement, then recompute the non-overridden perks. - * - * ``form_data`` is ``{ overrides: string[], dimensions: {slug: string[]}, annotations: {slug: value} }`` - * where ``overrides`` is the set of ticked override keys (``d-`` / ``a-``), - * and ``dimensions``/``annotations`` carry the manually set values for the overridden perks. - */ - updateInvolvementPerks?: Maybe; - updateInvolvementPreferences?: Maybe; - /** - * Updates a Message's subject/body/dispatch/reply-to/recipient filters. Works on a - * Message in any state, including ACTIVE (already sent) - edits are not retroactive: - * existing MessageRecipient rows keep their immutable rendered snapshot, and the - * updated content only applies to recipients who receive it from now on (subsequent - * explicit re-sends and the auto-send hook for newly-matching involvements). - */ - updateMessage?: Maybe; - updateMessageReplyTo?: Maybe; - updateOrder?: Maybe; - updateProduct?: Maybe; - updateProgram?: Maybe; - updateProgramAnnotations?: Maybe; - updateProgramDimensions?: Maybe; - updateProgramForm?: Maybe; - updateProgramPreferences?: Maybe; - updateQuota?: Maybe; - updateResponseDimensions?: Maybe; - updateSurvey?: Maybe; - updateSurveyDefaultDimensions?: Maybe; - /** - * Updates the tickets settings that are exposed to event admins. - * Fields omitted from the input are left unchanged (clear with an empty value). - * NOTE: provider_id is deliberately not settable here (super admin only). - */ - updateTicketsPreferences?: Maybe; -}; - - -export type MutationAcceptInvitationArgs = { - input: AcceptInvitationInput; -}; - - -export type MutationAcceptProgramOfferArgs = { - input: AcceptProgramOfferInput; -}; - - -export type MutationCancelAndRefundOrderArgs = { - input: CancelAndRefundOrderInput; -}; - - -export type MutationCancelOwnUnpaidOrderArgs = { - input: CancelOwnUnpaidOrderInput; -}; - - -export type MutationCancelProgramArgs = { - input: CancelProgramInput; -}; - - -export type MutationCancelProgramOfferArgs = { - input: CancelProgramOfferInput; -}; - - -export type MutationConfirmEmailArgs = { - input: ConfirmEmailInput; -}; - - -export type MutationConfirmOrderCancellationArgs = { - input: ConfirmOrderCancellationInput; -}; - - -export type MutationCreateMessageArgs = { - input: CreateMessageInput; -}; - - -export type MutationCreateMessageReplyToArgs = { - input: CreateMessageReplyToInput; -}; - - -export type MutationCreateOrderArgs = { - input: CreateOrderInput; -}; - - -export type MutationCreateProductArgs = { - input: CreateProductInput; -}; - - -export type MutationCreateProgramArgs = { - input: CreateProgramInput; -}; - - -export type MutationCreateProgramFeedbackArgs = { - input: ProgramFeedbackInput; -}; - - -export type MutationCreateProgramFormArgs = { - input: CreateProgramFormInput; -}; - - -export type MutationCreateQuotaArgs = { - input: CreateQuotaInput; -}; - - -export type MutationCreateSurveyArgs = { - input: CreateSurveyInput; -}; - - -export type MutationCreateSurveyLanguageArgs = { - input: CreateSurveyLanguageInput; -}; - - -export type MutationCreateSurveyResponseArgs = { - input: CreateSurveyResponseInput; -}; - - -export type MutationDeleteDimensionArgs = { - input: DeleteDimensionInput; -}; - - -export type MutationDeleteDimensionValueArgs = { - input: DeleteDimensionValueInput; -}; - - -export type MutationDeleteInvitationArgs = { - input: DeleteInvitationInput; -}; - - -export type MutationDeleteMessageArgs = { - input: DeleteMessageInput; -}; - - -export type MutationDeleteMessageReplyToArgs = { - input: DeleteMessageReplyToInput; -}; - - -export type MutationDeleteProductArgs = { - input: DeleteProductInput; -}; - - -export type MutationDeleteProgramHostArgs = { - input: DeleteProgramHostInput; -}; - - -export type MutationDeleteProgramOffersArgs = { - input: DeleteProgramOffersInput; -}; - - -export type MutationDeleteQuotaArgs = { - input: DeleteQuotaInput; -}; - - -export type MutationDeleteScheduleItemArgs = { - input: DeleteScheduleItemInput; -}; - - -export type MutationDeleteSurveyArgs = { - input: DeleteSurveyInput; -}; - - -export type MutationDeleteSurveyLanguageArgs = { - input: DeleteSurveyLanguageInput; -}; - - -export type MutationDeleteSurveyResponsesArgs = { - input: DeleteSurveyResponsesInput; -}; - - -export type MutationExpireMessageArgs = { - input: ExpireMessageInput; -}; - - -export type MutationGenerateKeyPairArgs = { - password: Scalars['String']['input']; -}; - - -export type MutationInitFileUploadArgs = { - input: InitFileUploadInput; -}; - - -export type MutationInviteProgramHostArgs = { - input: InviteProgramHostInput; -}; - - -export type MutationMarkOrderAsPaidArgs = { - input: MarkOrderAsPaidInput; -}; - - -export type MutationMarkProgramAsFavoriteArgs = { - input: FavoriteInput; -}; - - -export type MutationMarkScheduleItemAsFavoriteArgs = { - input: FavoriteScheduleItemInput; -}; - - -export type MutationPromoteFieldToDimensionArgs = { - input: PromoteFieldToDimensionInput; -}; - - -export type MutationPutDimensionArgs = { - input: PutDimensionInput; -}; - - -export type MutationPutDimensionValueArgs = { - input: PutDimensionValueInput; -}; - - -export type MutationPutScheduleItemArgs = { - input: PutScheduleItemInput; -}; - - -export type MutationPutUniverseAnnotationArgs = { - input: PutUniverseAnnotationInput; -}; - - -export type MutationReorderProductsArgs = { - input: ReorderProductsInput; -}; - - -export type MutationRequestOrderCancellationArgs = { - input: RequestOrderCancellationInput; -}; - - -export type MutationResendInvitationArgs = { - input: ResendInvitationInput; -}; - - -export type MutationResendOrderConfirmationArgs = { - input: ResendOrderConfirmationInput; -}; - - -export type MutationRestoreProgramArgs = { - input: RestoreProgramInput; -}; - - -export type MutationRevokeKeyPairArgs = { - id: Scalars['String']['input']; -}; - - -export type MutationSendMessageArgs = { - input: SendMessageInput; -}; - - -export type MutationSubscribeToSurveyResponsesArgs = { - input: SubscriptionInput; -}; - - -export type MutationUnmarkProgramAsFavoriteArgs = { - input: FavoriteInput; -}; - - -export type MutationUnmarkScheduleItemAsFavoriteArgs = { - input: FavoriteScheduleItemInput; -}; - - -export type MutationUnsubscribeFromSurveyResponsesArgs = { - input: SubscriptionInput; -}; - - -export type MutationUpdateFormArgs = { - input: UpdateFormInput; -}; - - -export type MutationUpdateFormFieldsArgs = { - input: UpdateFormFieldsInput; -}; - - -export type MutationUpdateInvolvementDimensionsArgs = { - input: UpdateInvolvementDimensionsInput; -}; - - -export type MutationUpdateInvolvementPerksArgs = { - input: UpdateInvolvementPerksInput; -}; - - -export type MutationUpdateInvolvementPreferencesArgs = { - input: UpdateInvolvementPreferencesInput; -}; - - -export type MutationUpdateMessageArgs = { - input: UpdateMessageInput; -}; - - -export type MutationUpdateMessageReplyToArgs = { - input: UpdateMessageReplyToInput; -}; - - -export type MutationUpdateOrderArgs = { - input: UpdateOrderInput; -}; - - -export type MutationUpdateProductArgs = { - input: UpdateProductInput; -}; - - -export type MutationUpdateProgramArgs = { - input: UpdateProgramInput; -}; - - -export type MutationUpdateProgramAnnotationsArgs = { - input: UpdateProgramAnnotationsInput; -}; - - -export type MutationUpdateProgramDimensionsArgs = { - input: UpdateProgramDimensionsInput; -}; - - -export type MutationUpdateProgramFormArgs = { - input: UpdateSurveyInput; -}; - - -export type MutationUpdateProgramPreferencesArgs = { - input: UpdateProgramPreferencesInput; -}; - - -export type MutationUpdateQuotaArgs = { - input: UpdateQuotaInput; -}; - - -export type MutationUpdateResponseDimensionsArgs = { - input: UpdateResponseDimensionsInput; -}; - - -export type MutationUpdateSurveyArgs = { - input: UpdateSurveyInput; -}; - - -export type MutationUpdateSurveyDefaultDimensionsArgs = { - input: UpdateSurveyDefaultDimensionsInput; -}; - - -export type MutationUpdateTicketsPreferencesArgs = { - input: UpdateTicketsPreferencesInput; -}; - -export type OrderProductInput = { - productId: Scalars['Int']['input']; - quantity: Scalars['Int']['input']; -}; - -export type OrderProductType = { - __typename?: 'OrderProductType'; - price: Scalars['Decimal']['output']; - quantity: Scalars['Int']['output']; - title: Scalars['String']['output']; - vatPercentage: Scalars['Decimal']['output']; -}; - -export type OwnProfileType = { - __typename?: 'OwnProfileType'; - /** Your Discord username (NOTE: not display name). Events may use this to give you roles based on your participation. */ - discordHandle: Scalars['String']['output']; - displayName: Scalars['String']['output']; - /** Email is the primary means of contact for event-related matters. */ - email: Scalars['String']['output']; - firstName: Scalars['String']['output']; - /** Namespace for queries related to forms and the current user. */ - forms: FormsProfileMetaType; - fullName: Scalars['String']['output']; - id: Scalars['ID']['output']; - keypairs?: Maybe>; - lastName: Scalars['String']['output']; - /** Messages V2: messages sent to the current user, most recent first. */ - messages: Array; - /** If you go by a nick name or handle that you want printed in your badge and programme details, enter it here. */ - nick: Scalars['String']['output']; - phoneNumber: Scalars['String']['output']; - /** Namespace for queries related to programs and the current user. */ - program: ProgramV2ProfileMetaType; - /** Namespace for queries related to tickets and the current user. */ - tickets: TicketsV2ProfileMetaType; -}; - -/** An enumeration. */ -export enum PaymentProvider { - None = 'NONE', - Paytrail = 'PAYTRAIL', - Stripe = 'STRIPE' -} - -/** An enumeration. */ -export enum PaymentStampType { - CancelWithoutRefund = 'CANCEL_WITHOUT_REFUND', - CreatePaymentFailure = 'CREATE_PAYMENT_FAILURE', - CreatePaymentRequest = 'CREATE_PAYMENT_REQUEST', - CreatePaymentSuccess = 'CREATE_PAYMENT_SUCCESS', - CreateRefundFailure = 'CREATE_REFUND_FAILURE', - CreateRefundRequest = 'CREATE_REFUND_REQUEST', - CreateRefundSuccess = 'CREATE_REFUND_SUCCESS', - ManualRefund = 'MANUAL_REFUND', - PaymentCallback = 'PAYMENT_CALLBACK', - PaymentRedirect = 'PAYMENT_REDIRECT', - RefundCallback = 'REFUND_CALLBACK', - ZeroPrice = 'ZERO_PRICE' -} - -/** An enumeration. */ -export enum PaymentStatus { - Cancelled = 'CANCELLED', - Failed = 'FAILED', - NotStarted = 'NOT_STARTED', - Paid = 'PAID', - Pending = 'PENDING', - Refunded = 'REFUNDED', - RefundFailed = 'REFUND_FAILED', - RefundRequested = 'REFUND_REQUESTED' -} - -/** - * Used to determine which profile fields are transferred from registry to another. - * NOTE: Must match ProfileFieldSelector in frontend/src/components/involvement/models.ts. - * - * For "no fields selected", use the default constructor. - * For "all fields selected", use `ProfileFieldSelector.all_fields()`. - */ -export type ProfileFieldSelectorType = { - __typename?: 'ProfileFieldSelectorType'; - discordHandle: Scalars['Boolean']['output']; - email: Scalars['Boolean']['output']; - firstName: Scalars['Boolean']['output']; - id: Scalars['Boolean']['output']; - lastName: Scalars['Boolean']['output']; - nick: Scalars['Boolean']['output']; - phoneNumber: Scalars['Boolean']['output']; -}; - -export type ProfileOrderType = { - __typename?: 'ProfileOrderType'; - canCancel: Scalars['Boolean']['output']; - canPay: Scalars['Boolean']['output']; - /** Returns true if the customer can cancel this order themselves via the email confirmed cancellation flow. */ - canRequestCancellation: Scalars['Boolean']['output']; - /** The customer may cancel their order themselves until this deadline. Null if customer self-service cancellation is not enabled for the event. */ - cancellationDeadline?: Maybe; - createdAt: Scalars['DateTime']['output']; - displayName: Scalars['String']['output']; - email: Scalars['String']['output']; - /** Returns a link at which the user can view their electronic tickets. They need to be the owner of the order (or an admin) to access that link. Returns null if the order does not contain electronic tickets. */ - eticketsLink?: Maybe; - event: LimitedEventType; - firstName: Scalars['String']['output']; - formattedOrderNumber: Scalars['String']['output']; - id: Scalars['UUID']['output']; - language: TicketsV2OrderLanguageChoices; - lastName: Scalars['String']['output']; - /** Order number used in contexts where UUID cannot be used. Such places include generating reference numbers and the customer reading the order number aloud to an event rep. Prefer id (UUID) for everything else (eg. URLs). */ - orderNumber: Scalars['Int']['output']; - phone: Scalars['String']['output']; - /** Returns a link at which the user can view their electronic tickets. They need to be the owner of the order (or an admin) to access that link. Returns null if the order does not contain electronic tickets. */ - products: Array; - status: PaymentStatus; - /** Contact email for the ticket seller (from the event's tickets meta). Plain email address without the display name. */ - ticketsContactEmail: Scalars['String']['output']; - totalPrice: Scalars['Decimal']['output']; -}; - -export type ProfileResponseType = { - __typename?: 'ProfileResponseType'; - /** Returns the dimensions of the response as a dict of dimension slug -> list of dimension value slugs. If the response is not related to a survey, there will be no dimensions and an empty dict will always be returned. Using this field is more efficient than querying the dimensions field on the response, as the dimensions are cached on the response object. The respondent will only see values of dimensions that are designated as being shown to the respondent. */ - cachedDimensions?: Maybe; - /** Returns whether the response can be accepted by the user as an administrator. Not all survey workflows have the notion of accepting a response, in which case this field will always return False. */ - canAccept: Scalars['Boolean']['output']; - /** Returns whether the response can be cancelled by the user. Not all survey workflows have the notion of cancelling a response, in which case this field will always return False. */ - canCancel: Scalars['Boolean']['output']; - /** Whether the response can be deleted by the user. */ - canDelete: Scalars['Boolean']['output']; - /** Returns whether the response can be edited by the user in the given edit mode. The edit mode can be either ADMIN (default) or OWN. ADMIN determines CBAC edit permissions, while OWN determines if the user is the owner of the response and editing it is allowed by the survey. */ - canEdit: Scalars['Boolean']['output']; - dimensions: Array; - /** True if the current version of this response was created by someone other than the original creator (eg. an admin edited a response on behalf of the respondent). The response is still listed for the original creator, but this flag allows the UI to indicate that it was last edited by someone else. */ - editedByAnother: Scalars['Boolean']['output']; - form: FormType; - formData: Scalars['JSONString']['output']; - id: Scalars['UUID']['output']; - /** Language code of the form used to submit this response. */ - language: Scalars['String']['output']; - oldVersions: Array; - /** The date and time when the response was originally created. */ - originalCreatedAt: Scalars['DateTime']['output']; - /** - * - * Returns the user who originally submitted this response. - * If response is to an anonymous survey, this information will not be available. - * - */ - originalCreatedBy?: Maybe; - revisionCreatedAt: Scalars['DateTime']['output']; - /** - * - * Returns the user who submitted this version of the response. - * If response is to an anonymous survey, this information will not be available. - * - */ - revisionCreatedBy?: Maybe; - /** If this response is an old version, this field will point to the current version. */ - supersededBy?: Maybe; - values?: Maybe; -}; - - -export type ProfileResponseTypeCachedDimensionsArgs = { - keyDimensionsOnly?: InputMaybe; -}; - - -export type ProfileResponseTypeCanEditArgs = { - mode?: InputMaybe; -}; - - -export type ProfileResponseTypeDimensionsArgs = { - keyDimensionsOnly?: InputMaybe; -}; - - -export type ProfileResponseTypeValuesArgs = { - keyFieldsOnly?: InputMaybe; -}; - -/** - * Represents a user profile with fields describing the involvement - * of the user with an event. - */ -export type ProfileWithInvolvementType = { - __typename?: 'ProfileWithInvolvementType'; - discordHandle: Scalars['String']['output']; - /** The display name generally follows the format Firstname "Nickname" Lastname. If some parts are missing or the user has requested not to display them, we will adjust the format accordingly. */ - displayName: Scalars['String']['output']; - email: Scalars['String']['output']; - firstName: Scalars['String']['output']; - /** The full name is similar to display name, but includes the last name if it is available. The full name generally should not be displayed to the public (use display name instead), but is used internally for identification purposes. */ - fullName: Scalars['String']['output']; - id?: Maybe; - involvements: Array; - /** Returns True if the user has at least one active involvement in the event. */ - isActive: Scalars['Boolean']['output']; - lastName: Scalars['String']['output']; - nick: Scalars['String']['output']; - phoneNumber: Scalars['String']['output']; - profileFieldSelector: ProfileFieldSelectorType; -}; - -export type ProgramAnnotationType = { - __typename?: 'ProgramAnnotationType'; - annotation: AnnotationType; - value?: Maybe; -}; - - -export type ProgramAnnotationTypeValueArgs = { - lang?: InputMaybe; -}; - -export type ProgramDimensionValueType = { - __typename?: 'ProgramDimensionValueType'; - dimension: FullDimensionType; - value: DimensionValueType; -}; - -export type ProgramFeedbackInput = { - eventSlug: Scalars['String']['input']; - feedback: Scalars['String']['input']; - kissa: Scalars['String']['input']; - programSlug: Scalars['String']['input']; -}; - -/** An enumeration. */ -export enum ProgramHostRole { - Invited = 'INVITED', - Offerer = 'OFFERER' -} - -/** An enumeration. */ -export enum ProgramItemResolution { - Cancel = 'CANCEL', - CancelAndHide = 'CANCEL_AND_HIDE', - Delete = 'DELETE' -} - -export type ProgramLink = { - __typename?: 'ProgramLink'; - href: Scalars['String']['output']; - title: Scalars['String']['output']; - type: ProgramLinkType; -}; - -export enum ProgramLinkType { - Calendar = 'CALENDAR', - Feedback = 'FEEDBACK', - GuideV2Embedded = 'GUIDE_V2_EMBEDDED', - GuideV2Light = 'GUIDE_V2_LIGHT', - Material = 'MATERIAL', - Other = 'OTHER', - Recording = 'RECORDING', - Remote = 'REMOTE', - Reservation = 'RESERVATION', - Signup = 'SIGNUP', - Tickets = 'TICKETS' -} - -/** An enumeration. */ -export enum ProgramOfferResolution { - Cancel = 'CANCEL', - Delete = 'DELETE', - Reject = 'REJECT' -} - -/** An enumeration. */ -export enum ProgramUserRelation { - Favorited = 'FAVORITED', - Hosting = 'HOSTING' -} - -/** - * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. - * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. - */ -export type ProgramV2EventMetaType = { - __typename?: 'ProgramV2EventMetaType'; - annotations: Array; - /** Returns a link to the calendar export view for the event. The calendar export view accepts the following GET parameters, all optional: `favorited` - set to a truthy value to receive only favorites, `slug` - include only these programmes (can be multi-valued or separated by commas), `language` - the language to use when resolving dimensions. Further GET parameters are used to filter by dimensions. */ - calendarExportLink: Scalars['String']['output']; - canDeleteProgramOffers: Scalars['Boolean']['output']; - /** Returns the total number of program offers (not taking into account filters). */ - countProgramOffers: Scalars['Int']['output']; - /** `is_list_filter` - only return dimensions that are shown in the list filter. `is_shown_in_detail` - only return dimensions that are shown in the detail view. If you supply both, you only get their intersection. */ - dimensions: Array; - /** Used for admin purposes changing settings of annotations in events. Usually you should use `event.program.annotations` instead. */ - eventAnnotations: Array; - invitations: Array; - /** Like `dimensions` but returns dimensions from the Involvement universe. Differs from `event.involvement.dimensions` in that permissions are checked based on the Program V2 application privileges, not Involvement. `is_list_filter` - only return dimensions that are shown in the list filter. `is_shown_in_detail` - only return dimensions that are shown in the detail view. If you supply both, you only get their intersection. */ - involvementDimensions: Array; - isSchedulePublic: Scalars['Boolean']['output']; - message?: Maybe; - /** Messages V2: messages of this event's involvement universe. */ - messages: Array; - program?: Maybe; - programHosts: Array; - programHostsExcelExportLink: Scalars['String']['output']; - /** Returns a single program offer. Also old versions of program offers can be retrieved by their ID. */ - programOffer?: Maybe; - /** Returns all responses to all program offer forms of this event. */ - programOffers: Array; - /** Returns a link to the the program offers Excel export view for the event. The program offers Excel export view returns all or filtered program offers in an Excel file, grouped into worksheets by the program form. `favorited` - set to a truthy value to receive only favorites, `slug` - include only these programmes (can be multi-valued or separated by commas), `language` - the language to use when resolving dimensions. Further GET parameters are used to filter by dimensions. */ - programOffersExcelExportLink: Scalars['String']['output']; - programs: Array; - /** The program schedule becomes publicly visible at this point in time. Leave unset to keep the schedule private. */ - publicFrom?: Maybe; - /** Messages V2: involvement dimensions (including the technical type/state dimensions) available for building a message's recipient filters. */ - recipientDimensions: Array; - /** Messages V2: reply-to addresses configured for this event, offered in the compose view and managed on the Program V2 admin preferences page. */ - replyToAddresses: Array; - reports: Array; - scheduleItem?: Maybe; - scheduleItems: Array; - scheduleItemsExcelExportLink: Scalars['String']['output']; - /** Returns the state dimension of the event, if there is one. */ - stateDimension?: Maybe; -}; - - -/** - * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. - * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. - */ -export type ProgramV2EventMetaTypeAnnotationsArgs = { - publicOnly?: InputMaybe; - slug?: InputMaybe>; -}; - - -/** - * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. - * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. - */ -export type ProgramV2EventMetaTypeDimensionsArgs = { - isListFilter?: InputMaybe; - isShownInDetail?: InputMaybe; - keyDimensionsOnly?: InputMaybe; - publicOnly?: InputMaybe; -}; - - -/** - * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. - * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. - */ -export type ProgramV2EventMetaTypeInvolvementDimensionsArgs = { - isListFilter?: InputMaybe; - isShownInDetail?: InputMaybe; - keyDimensionsOnly?: InputMaybe; - publicOnly?: InputMaybe; -}; - - -/** - * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. - * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. - */ -export type ProgramV2EventMetaTypeMessageArgs = { - id: Scalars['String']['input']; -}; - - -/** - * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. - * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. - */ -export type ProgramV2EventMetaTypeMessagesArgs = { - includeDrafts?: InputMaybe; -}; - - -/** - * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. - * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. - */ -export type ProgramV2EventMetaTypeProgramArgs = { - slug: Scalars['String']['input']; -}; - - -/** - * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. - * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. - */ -export type ProgramV2EventMetaTypeProgramHostsArgs = { - programFilters?: InputMaybe>>; -}; - - -/** - * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. - * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. - */ -export type ProgramV2EventMetaTypeProgramOfferArgs = { - id: Scalars['String']['input']; -}; - - -/** - * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. - * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. - */ -export type ProgramV2EventMetaTypeProgramOffersArgs = { - filters?: InputMaybe>>; -}; - - -/** - * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. - * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. - */ -export type ProgramV2EventMetaTypeProgramsArgs = { - favoritesOnly?: InputMaybe; - filters?: InputMaybe>>; - hidePast?: InputMaybe; - publicOnly?: InputMaybe; - updatedAfter?: InputMaybe; -}; - - -/** - * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. - * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. - */ -export type ProgramV2EventMetaTypeReportsArgs = { - lang?: InputMaybe; -}; - - -/** - * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. - * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. - */ -export type ProgramV2EventMetaTypeScheduleItemArgs = { - slug: Scalars['String']['input']; -}; - - -/** - * NOTE: There is no `programForms` because a program form is a Survey with `app: PROGRAM_V2`. - * Use `event.forms.surveys(app: PROGRAM_V2)` for that instead. - */ -export type ProgramV2EventMetaTypeScheduleItemsArgs = { - favoritesOnly?: InputMaybe; - filters?: InputMaybe>>; - hidePast?: InputMaybe; - publicOnly?: InputMaybe; - updatedAfter?: InputMaybe; -}; - -export type ProgramV2ProfileMetaType = { - __typename?: 'ProgramV2ProfileMetaType'; - /** Returns all current responses to all program offer forms of this event. */ - programOffers: Array; - /** Get programs that relate to this user in some way. Currently only favorites are implemented, but in the future also signed up and hosting. Dimension filter may only be specified when event_slug is given. */ - programs?: Maybe>; - /** Get programs that relate to this user in some way. Currently only favorites are implemented, but in the future also signed up and hosting. Dimension filter may only be specified when event_slug is given. */ - scheduleItems?: Maybe>; -}; - - -export type ProgramV2ProfileMetaTypeProgramOffersArgs = { - filters?: InputMaybe>>; -}; - - -export type ProgramV2ProfileMetaTypeProgramsArgs = { - eventSlug?: InputMaybe; - filters?: InputMaybe>>; - hidePast?: InputMaybe; - userRelation?: InputMaybe; -}; - - -export type ProgramV2ProfileMetaTypeScheduleItemsArgs = { - eventSlug?: InputMaybe; - filters?: InputMaybe>>; - hidePast?: InputMaybe; - userRelation?: InputMaybe; -}; - -/** - * Promotes a Single Select or Multiple Select field to a dimension. - * - * This is used when a field is created as a Single Select or Multiple Select - * and later discovered that it should be a dimension. - */ -export type PromoteFieldToDimension = { - __typename?: 'PromoteFieldToDimension'; - survey?: Maybe; -}; - -export type PromoteFieldToDimensionInput = { - eventSlug: Scalars['String']['input']; - fieldSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; -}; - -export type PutDimension = { - __typename?: 'PutDimension'; - dimension?: Maybe; -}; - -export type PutDimensionInput = { - dimensionSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - scopeSlug: Scalars['String']['input']; - universeSlug: Scalars['String']['input']; -}; - -export type PutDimensionValue = { - __typename?: 'PutDimensionValue'; - value?: Maybe; -}; - -export type PutDimensionValueInput = { - dimensionSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - scopeSlug: Scalars['String']['input']; - universeSlug: Scalars['String']['input']; - valueSlug: Scalars['String']['input']; -}; - -export type PutScheduleItem = { - __typename?: 'PutScheduleItem'; - scheduleItem?: Maybe; -}; - -export type PutScheduleItemInput = { - eventSlug: Scalars['String']['input']; - programSlug: Scalars['String']['input']; - scheduleItem: ScheduleItemInput; -}; - -export type PutUniverseAnnotation = { - __typename?: 'PutUniverseAnnotation'; - universeAnnotation?: Maybe; -}; - -/** An enumeration. */ -export enum PutUniverseAnnotationAction { - SaveAndRefresh = 'SAVE_AND_REFRESH', - SaveWithoutRefresh = 'SAVE_WITHOUT_REFRESH' -} - -export type PutUniverseAnnotationInput = { - action?: InputMaybe; - annotationSlug: Scalars['String']['input']; - formFields: Array; - isActive: Scalars['Boolean']['input']; - scopeSlug: Scalars['String']['input']; - universeSlug: Scalars['String']['input']; -}; - -export type Query = { - __typename?: 'Query'; - event?: Maybe; - profile?: Maybe; - /** Returns the registry that hosts the personal data of all users of Kompassi. */ - userRegistry: LimitedRegistryType; -}; - - -export type QueryEventArgs = { - slug: Scalars['String']['input']; -}; - -/** An enumeration. */ -export enum ReceiptStatus { - Failure = 'FAILURE', - Processing = 'PROCESSING', - Requested = 'REQUESTED', - Success = 'SUCCESS' -} - -/** An enumeration. */ -export enum ReceiptType { - Cancelled = 'CANCELLED', - Paid = 'PAID', - Refunded = 'REFUNDED' -} - -/** An enumeration. */ -export enum RefundType { - Manual = 'MANUAL', - None = 'NONE', - Provider = 'PROVIDER' -} - -export type ReorderProducts = { - __typename?: 'ReorderProducts'; - products: Array; -}; - -export type ReorderProductsInput = { - eventSlug: Scalars['String']['input']; - productIds: Array; -}; - -export type ReportType = { - __typename?: 'ReportType'; - columns: Array; - footer: Scalars['String']['output']; - hasTotalRow: Scalars['Boolean']['output']; - lang: Scalars['String']['output']; - rows: Array>>; - slug: Scalars['String']['output']; - title: Scalars['String']['output']; - totalRow?: Maybe>>; -}; - - -export type ReportTypeFooterArgs = { - lang?: InputMaybe; -}; - - -export type ReportTypeTitleArgs = { - lang?: InputMaybe; -}; - -/** - * Customer self-service cancellation, step 1 of 2: send a confirmation link - * to the email address of the order. - * - * May be called without authentication: possession of the order UUID is considered - * sufficient proof of being party to the order (same trust model as the anonymous - * order page), and the confirmation email closes the loop. - * - * NOTE: Must not return any PII (the caller may be anonymous). - */ -export type RequestOrderCancellation = { - __typename?: 'RequestOrderCancellation'; - success: Scalars['Boolean']['output']; -}; - -export type RequestOrderCancellationInput = { - eventSlug: Scalars['String']['input']; - orderId: Scalars['String']['input']; -}; - -export type ResendInvitation = { - __typename?: 'ResendInvitation'; - invitation?: Maybe; -}; - -export type ResendInvitationInput = { - eventSlug: Scalars['String']['input']; - invitationId: Scalars['String']['input']; -}; - -export type ResendOrderConfirmation = { - __typename?: 'ResendOrderConfirmation'; - order?: Maybe; - receipt?: Maybe; +export type ResendInvitationInput = { + eventSlug: string; + invitationId: string; }; export type ResendOrderConfirmationInput = { - eventSlug: Scalars['String']['input']; - orderId: Scalars['String']['input']; -}; - -export type ResponseDimensionValueType = { - __typename?: 'ResponseDimensionValueType'; - dimension: FullDimensionType; - value: DimensionValueType; -}; - -/** Restore a program item that was previously cancelled. */ -export type RestoreProgram = { - __typename?: 'RestoreProgram'; - programSlug: Scalars['String']['output']; + eventSlug: string; + orderId: string; }; export type RestoreProgramInput = { - eventSlug: Scalars['String']['input']; - programSlug: Scalars['String']['input']; -}; - -export type RevokeKeyPair = { - __typename?: 'RevokeKeyPair'; - id: Scalars['String']['output']; + eventSlug: string; + programSlug: string; }; export type ScheduleItemInput = { - durationMinutes: Scalars['Int']['input']; - freeformLocation?: InputMaybe; - isPublic?: InputMaybe; - room?: InputMaybe; - slug: Scalars['String']['input']; - startTime: Scalars['DateTime']['input']; - subtitle: Scalars['String']['input']; -}; - -/** - * Represents a user profile with fields that can be selected for transfer. - * NOTE: Must match Profile in frontend/src/components/involvement/models.ts. - */ -export type SelectedProfileType = { - __typename?: 'SelectedProfileType'; - discordHandle: Scalars['String']['output']; - /** The display name generally follows the format Firstname "Nickname" Lastname. If some parts are missing or the user has requested not to display them, we will adjust the format accordingly. */ - displayName: Scalars['String']['output']; - email: Scalars['String']['output']; - firstName: Scalars['String']['output']; - /** The full name is similar to display name, but includes the last name if it is available. The full name generally should not be displayed to the public (use display name instead), but is used internally for identification purposes. */ - fullName: Scalars['String']['output']; - id?: Maybe; - lastName: Scalars['String']['output']; - nick: Scalars['String']['output']; - phoneNumber: Scalars['String']['output']; - profileFieldSelector: ProfileFieldSelectorType; -}; - -/** - * Sends a Message: on a draft, transitions it to ACTIVE and dispatches sending to all - * currently matching recipients. On an already ACTIVE message, this re-sends to any - * currently matching recipients who have not yet received it (MessageRecipient's - * uniqueness constraints make this idempotent for everyone else). - */ -export type SendMessage = { - __typename?: 'SendMessage'; - message?: Maybe; + durationMinutes: number; + freeformLocation?: string | null | undefined; + isPublic?: boolean | null | undefined; + room?: string | null | undefined; + slug: string; + startTime: string; + subtitle: string; }; export type SendMessageInput = { - eventSlug: Scalars['String']['input']; - messageId: Scalars['String']['input']; -}; - -export type SubscribeToSurveyResponses = { - __typename?: 'SubscribeToSurveyResponses'; - success: Scalars['Boolean']['output']; + eventSlug: string; + messageId: string; }; export type SubscriptionInput = { - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; + eventSlug: string; + surveySlug: string; }; /** An enumeration. */ @@ -3035,116 +500,6 @@ export enum SurveyPurpose { Invite = 'INVITE' } -/** An enumeration. */ -export enum SurveyRelation { - Accessible = 'ACCESSIBLE', - Subscribed = 'SUBSCRIBED' -} - -export type TicketsV2EventMetaType = { - __typename?: 'TicketsV2EventMetaType'; - /** Number of days from order creation during which the customer can cancel a paid order themselves. The period is further capped at event start. 0 = customer self-service cancellation disabled. */ - cancellationPeriodDays: Scalars['Int']['output']; - /** Ticket sales contact email in the Name Surname format. Admin oriented view; customers get the plain seller email via the order API. */ - contactEmail: Scalars['String']['output']; - /** Returns the total number of orders made to this event. Admin oriented view; customers will access order information through `profile.tickets`. */ - countTotalOrders: Scalars['Int']['output']; - /** Returns orders made to this event. Admin oriented view; customers will access order information through `profile.tickets`. */ - order?: Maybe; - /** Returns orders made to this event. Admin oriented view; customers will access order information through `profile.tickets`. */ - orders: Array; - /** Returns a product defined for this event. Admin oriented view; customers will access product information through /api/tickets-v2. */ - product: FullProductType; - /** Returns products defined for this event. Admin oriented view; customers will access product information through /api/tickets-v2. */ - products: Array; - providerId: TicketsV2TicketsV2EventMetaProviderIdChoices; - /** Returns a quota defined for this event. Admin oriented view; customers will access product information through /api/tickets-v2. */ - quota: FullQuotaType; - quotas: Array; - /** Get single report. For available reports, see `getReports.slug`. */ - report?: Maybe; - /** Get all the reports. */ - reports: Array; - termsAndConditionsUrlEn: Scalars['String']['output']; - termsAndConditionsUrlFi: Scalars['String']['output']; - termsAndConditionsUrlSv: Scalars['String']['output']; -}; - - -export type TicketsV2EventMetaTypeOrderArgs = { - id: Scalars['String']['input']; -}; - - -export type TicketsV2EventMetaTypeOrdersArgs = { - filters?: InputMaybe>>; - returnNone?: InputMaybe; - search?: InputMaybe; -}; - - -export type TicketsV2EventMetaTypeProductArgs = { - id: Scalars['String']['input']; -}; - - -export type TicketsV2EventMetaTypeQuotaArgs = { - id: Scalars['Int']['input']; -}; - - -export type TicketsV2EventMetaTypeReportArgs = { - lang?: InputMaybe; - slug: Scalars['String']['input']; -}; - - -export type TicketsV2EventMetaTypeReportsArgs = { - lang?: InputMaybe; -}; - -/** An enumeration. */ -export enum TicketsV2OrderLanguageChoices { - /** English */ - En = 'EN', - /** Finnish */ - Fi = 'FI', - /** Swedish */ - Sv = 'SV' -} - -export type TicketsV2ProfileMetaType = { - __typename?: 'TicketsV2ProfileMetaType'; - /** Returns true if the user has unlinked orders made with the same email address. These orders can be linked to the user account by verifying the email address again. */ - haveUnlinkedOrders: Scalars['Boolean']['output']; - order?: Maybe; - /** Returns the orders of the current user. Note that unlinked orders made with the same email address are not returned. They need to be linked first (ie. their email confirmed again). */ - orders: Array; -}; - - -export type TicketsV2ProfileMetaTypeOrderArgs = { - eventSlug: Scalars['String']['input']; - id: Scalars['String']['input']; -}; - -/** An enumeration. */ -export enum TicketsV2TicketsV2EventMetaProviderIdChoices { - /** NONE */ - A_0 = 'A_0', - /** PAYTRAIL */ - A_1 = 'A_1', - /** STRIPE */ - A_2 = 'A_2' -} - -/** An enumeration. */ -export enum TotalBy { - Average = 'AVERAGE', - None = 'NONE', - Sum = 'SUM' -} - /** An enumeration. */ export enum TypeOfColumn { Currency = 'CURRENCY', @@ -3154,253 +509,122 @@ export enum TypeOfColumn { String = 'STRING' } -/** Deprecated. Use UnmarkScheduleItemAsFavorite instead. */ -export type UnmarkProgramAsFavorite = { - __typename?: 'UnmarkProgramAsFavorite'; - success: Scalars['Boolean']['output']; -}; - -export type UnmarkScheduleItemAsFavorite = { - __typename?: 'UnmarkScheduleItemAsFavorite'; - success: Scalars['Boolean']['output']; -}; - -export type UnsubscribeFromSurveyResponses = { - __typename?: 'UnsubscribeFromSurveyResponses'; - success: Scalars['Boolean']['output']; -}; - -export type UpdateForm = { - __typename?: 'UpdateForm'; - survey?: Maybe; -}; - -export type UpdateFormFields = { - __typename?: 'UpdateFormFields'; - survey?: Maybe; -}; - export type UpdateFormFieldsInput = { - eventSlug: Scalars['String']['input']; - fields: Scalars['GenericScalar']['input']; - language: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; + eventSlug: string; + fields: unknown; + language: string; + surveySlug: string; }; export type UpdateFormInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - language: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; -}; - -export type UpdateInvolvementDimensions = { - __typename?: 'UpdateInvolvementDimensions'; - involvement?: Maybe; + eventSlug: string; + formData: unknown; + language: string; + surveySlug: string; }; export type UpdateInvolvementDimensionsInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - involvementId: Scalars['String']['input']; -}; - -/** - * Manually override the automatically computed perks of a person's COMBINED_PERKS - * involvement, then recompute the non-overridden perks. - * - * ``form_data`` is ``{ overrides: string[], dimensions: {slug: string[]}, annotations: {slug: value} }`` - * where ``overrides`` is the set of ticked override keys (``d-`` / ``a-``), - * and ``dimensions``/``annotations`` carry the manually set values for the overridden perks. - */ -export type UpdateInvolvementPerks = { - __typename?: 'UpdateInvolvementPerks'; - involvement?: Maybe; + eventSlug: string; + formData: unknown; + involvementId: string; }; export type UpdateInvolvementPerksInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - involvementId: Scalars['String']['input']; -}; - -export type UpdateInvolvementPreferences = { - __typename?: 'UpdateInvolvementPreferences'; - preferences?: Maybe; + eventSlug: string; + formData: unknown; + involvementId: string; }; export type UpdateInvolvementPreferencesInput = { - eventSlug: Scalars['String']['input']; - shirtsFrozenAt?: InputMaybe; -}; - -/** - * Updates a Message's subject/body/dispatch/reply-to/recipient filters. Works on a - * Message in any state, including ACTIVE (already sent) - edits are not retroactive: - * existing MessageRecipient rows keep their immutable rendered snapshot, and the - * updated content only applies to recipients who receive it from now on (subsequent - * explicit re-sends and the auto-send hook for newly-matching involvements). - */ -export type UpdateMessage = { - __typename?: 'UpdateMessage'; - message?: Maybe; + eventSlug: string; + shirtsFrozenAt?: string | null | undefined; }; export type UpdateMessageInput = { - body: Scalars['String']['input']; + body: string; dispatch: MessageDispatch; - eventSlug: Scalars['String']['input']; - messageId: Scalars['String']['input']; - recipientFilters: Scalars['GenericScalar']['input']; - replyToId?: InputMaybe; - subject: Scalars['String']['input']; -}; - -export type UpdateMessageReplyTo = { - __typename?: 'UpdateMessageReplyTo'; - replyTo?: Maybe; + eventSlug: string; + messageId: string; + recipientFilters: unknown; + replyToId?: string | null | undefined; + subject: string; }; export type UpdateMessageReplyToInput = { - email: Scalars['String']['input']; - eventSlug: Scalars['String']['input']; - name: Scalars['String']['input']; - replyToId: Scalars['String']['input']; -}; - -export type UpdateOrder = { - __typename?: 'UpdateOrder'; - order?: Maybe; + email: string; + eventSlug: string; + name: string; + replyToId: string; }; export type UpdateOrderInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - orderId: Scalars['String']['input']; -}; - -export type UpdateProduct = { - __typename?: 'UpdateProduct'; - product?: Maybe; + eventSlug: string; + formData: unknown; + orderId: string; }; export type UpdateProductInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - productId: Scalars['Int']['input']; -}; - -export type UpdateProgram = { - __typename?: 'UpdateProgram'; - program?: Maybe; -}; - -export type UpdateProgramAnnotations = { - __typename?: 'UpdateProgramAnnotations'; - program?: Maybe; + eventSlug: string; + formData: unknown; + productId: number; }; export type UpdateProgramAnnotationsInput = { - annotations: Scalars['GenericScalar']['input']; - eventSlug: Scalars['String']['input']; - programSlug: Scalars['String']['input']; -}; - -export type UpdateProgramDimensions = { - __typename?: 'UpdateProgramDimensions'; - program?: Maybe; + annotations: unknown; + eventSlug: string; + programSlug: string; }; export type UpdateProgramDimensionsInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - programSlug: Scalars['String']['input']; -}; - -export type UpdateProgramForm = { - __typename?: 'UpdateProgramForm'; - survey?: Maybe; + eventSlug: string; + formData: unknown; + programSlug: string; }; export type UpdateProgramInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - programSlug: Scalars['String']['input']; -}; - -export type UpdateProgramPreferences = { - __typename?: 'UpdateProgramPreferences'; - preferences?: Maybe; + eventSlug: string; + formData: unknown; + programSlug: string; }; export type UpdateProgramPreferencesInput = { - eventSlug: Scalars['String']['input']; - publicFrom?: InputMaybe; -}; - -export type UpdateQuota = { - __typename?: 'UpdateQuota'; - quota?: Maybe; + eventSlug: string; + publicFrom?: string | null | undefined; }; export type UpdateQuotaInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - quotaId: Scalars['String']['input']; -}; - -export type UpdateResponseDimensions = { - __typename?: 'UpdateResponseDimensions'; - response?: Maybe; + eventSlug: string; + formData: unknown; + quotaId: string; }; export type UpdateResponseDimensionsInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - responseId: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; -}; - -export type UpdateSurvey = { - __typename?: 'UpdateSurvey'; - survey?: Maybe; -}; - -export type UpdateSurveyDefaultDimensions = { - __typename?: 'UpdateSurveyDefaultDimensions'; - survey?: Maybe; + eventSlug: string; + formData: unknown; + responseId: string; + surveySlug: string; }; export type UpdateSurveyDefaultDimensionsInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - surveySlug: Scalars['String']['input']; + eventSlug: string; + formData: unknown; + surveySlug: string; universe: SurveyDefaultDimensionsUniverse; }; export type UpdateSurveyInput = { - eventSlug: Scalars['String']['input']; - formData: Scalars['GenericScalar']['input']; - surveySlug: Scalars['String']['input']; -}; - -/** - * Updates the tickets settings that are exposed to event admins. - * Fields omitted from the input are left unchanged (clear with an empty value). - * NOTE: provider_id is deliberately not settable here (super admin only). - */ -export type UpdateTicketsPreferences = { - __typename?: 'UpdateTicketsPreferences'; - preferences?: Maybe; + eventSlug: string; + formData: unknown; + surveySlug: string; }; export type UpdateTicketsPreferencesInput = { - cancellationPeriodDays?: InputMaybe; - contactEmail?: InputMaybe; - eventSlug: Scalars['String']['input']; - termsAndConditionsUrlEn?: InputMaybe; - termsAndConditionsUrlFi?: InputMaybe; - termsAndConditionsUrlSv?: InputMaybe; + cancellationPeriodDays?: number | null | undefined; + contactEmail?: string | null | undefined; + eventSlug: string; + termsAndConditionsUrlEn?: string | null | undefined; + termsAndConditionsUrlFi?: string | null | undefined; + termsAndConditionsUrlSv?: string | null | undefined; }; export type CreateSurveyResponseMutationVariables = Exact<{ @@ -3408,1277 +632,1277 @@ export type CreateSurveyResponseMutationVariables = Exact<{ }>; -export type CreateSurveyResponseMutation = { __typename?: 'Mutation', createSurveyResponse?: { __typename?: 'CreateSurveyResponse', response?: { __typename?: 'ProfileResponseType', id: string } | null } | null }; +export type CreateSurveyResponseMutation = { createSurveyResponse: { response: { id: string } | null } | null }; export type InitFileUploadMutationMutationVariables = Exact<{ input: InitFileUploadInput; }>; -export type InitFileUploadMutationMutation = { __typename?: 'Mutation', initFileUpload?: { __typename?: 'InitFileUploadResponse', uploadUrl?: string | null, fileUrl?: string | null } | null }; +export type InitFileUploadMutationMutation = { initFileUpload: { uploadUrl: string | null, fileUrl: string | null } | null }; export type SurveyPageQueryQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + surveySlug: string; + locale?: string | null | undefined; }>; -export type SurveyPageQueryQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, userRegistry: { __typename?: 'LimitedRegistryType', slug: string, title: string, policyUrl: string, organization: { __typename?: 'LimitedOrganizationType', slug: string, name: string } }, event?: { __typename?: 'FullEventType', slug: string, name: string, timezone: string, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', loginRequired: boolean, anonymity: Anonymity, maxResponsesPerUser: number, countResponsesByCurrentUser: number, isActive: boolean, purpose: SurveyPurpose, profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean }, registry?: { __typename?: 'LimitedRegistryType', slug: string, title: string, policyUrl: string, organization: { __typename?: 'LimitedOrganizationType', slug: string, name: string } } | null, form?: { __typename?: 'FormType', language: FormsFormLanguageChoices, title: string, description: string, fields?: unknown | null } | null, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }> } | null } | null } | null }; +export type SurveyPageQueryQuery = { profile: { firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, userRegistry: { slug: string, title: string, policyUrl: string, organization: { slug: string, name: string } }, event: { slug: string, name: string, timezone: string, forms: { survey: { loginRequired: boolean, anonymity: Anonymity, maxResponsesPerUser: number, countResponsesByCurrentUser: number, isActive: boolean, purpose: SurveyPurpose, profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean }, registry: { slug: string, title: string, policyUrl: string, organization: { slug: string, name: string } } | null, form: { language: FormsFormLanguageChoices, title: string, description: string, fields: unknown } | null, languages: Array<{ language: FormsFormLanguageChoices }> } | null } | null } | null }; export type SurveyThankYouPageQueryQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + surveySlug: string; + locale?: string | null | undefined; }>; -export type SurveyThankYouPageQueryQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', form?: { __typename?: 'FormType', title: string, thankYouMessage: string } | null } | null } | null } | null }; +export type SurveyThankYouPageQueryQuery = { event: { name: string, forms: { survey: { form: { title: string, thankYouMessage: string } | null } | null } | null } | null }; export type AcceptInvitationMutationVariables = Exact<{ input: AcceptInvitationInput; }>; -export type AcceptInvitationMutation = { __typename?: 'Mutation', acceptInvitation?: { __typename?: 'AcceptInvitation', involvement?: { __typename?: 'LimitedInvolvementType', program?: { __typename?: 'LimitedProgramType', slug: string } | null } | null } | null }; +export type AcceptInvitationMutation = { acceptInvitation: { involvement: { program: { slug: string } | null } | null } | null }; -export type TransferConsentFormRegistryFragment = { __typename?: 'LimitedRegistryType', slug: string, title: string, policyUrl: string, organization: { __typename?: 'LimitedOrganizationType', slug: string, name: string } }; +export type TransferConsentFormRegistryFragment = { slug: string, title: string, policyUrl: string, organization: { slug: string, name: string } }; export type AcceptInvitationPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - invitationId: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + invitationId: string; + locale?: string | null | undefined; }>; -export type AcceptInvitationPageQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, userRegistry: { __typename?: 'LimitedRegistryType', slug: string, title: string, policyUrl: string, organization: { __typename?: 'LimitedOrganizationType', slug: string, name: string } }, event?: { __typename?: 'FullEventType', slug: string, name: string, timezone: string, involvement?: { __typename?: 'InvolvementEventMetaType', invitation?: { __typename?: 'FullInvitationType', isUsed: boolean, program?: { __typename?: 'LimitedProgramType', slug: string, title: string, description: string } | null, survey?: { __typename?: 'FullSurveyType', slug: string, isActive: boolean, purpose: SurveyPurpose, profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean }, registry?: { __typename?: 'LimitedRegistryType', slug: string, title: string, policyUrl: string, organization: { __typename?: 'LimitedOrganizationType', slug: string, name: string } } | null, form?: { __typename?: 'FormType', language: FormsFormLanguageChoices, title: string, description: string, fields?: unknown | null } | null, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }> } | null } | null } | null } | null }; +export type AcceptInvitationPageQuery = { profile: { firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, userRegistry: { slug: string, title: string, policyUrl: string, organization: { slug: string, name: string } }, event: { slug: string, name: string, timezone: string, involvement: { invitation: { isUsed: boolean, program: { slug: string, title: string, description: string } | null, survey: { slug: string, isActive: boolean, purpose: SurveyPurpose, profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean }, registry: { slug: string, title: string, policyUrl: string, organization: { slug: string, name: string } } | null, form: { language: FormsFormLanguageChoices, title: string, description: string, fields: unknown } | null, languages: Array<{ language: FormsFormLanguageChoices }> } | null } | null } | null } | null }; export type PutInvolvementDimensionMutationVariables = Exact<{ input: PutDimensionInput; }>; -export type PutInvolvementDimensionMutation = { __typename?: 'Mutation', putDimension?: { __typename?: 'PutDimension', dimension?: { __typename?: 'FullDimensionType', slug: string } | null } | null }; +export type PutInvolvementDimensionMutation = { putDimension: { dimension: { slug: string } | null } | null }; export type DeleteInvolvementDimensionMutationVariables = Exact<{ input: DeleteDimensionInput; }>; -export type DeleteInvolvementDimensionMutation = { __typename?: 'Mutation', deleteDimension?: { __typename?: 'DeleteDimension', slug?: string | null } | null }; +export type DeleteInvolvementDimensionMutation = { deleteDimension: { slug: string | null } | null }; export type PutInvolvementDimensionValueMutationVariables = Exact<{ input: PutDimensionValueInput; }>; -export type PutInvolvementDimensionValueMutation = { __typename?: 'Mutation', putDimensionValue?: { __typename?: 'PutDimensionValue', value?: { __typename?: 'DimensionValueType', slug: string } | null } | null }; +export type PutInvolvementDimensionValueMutation = { putDimensionValue: { value: { slug: string } | null } | null }; export type DeleteInvolvementDimensionValueMutationVariables = Exact<{ input: DeleteDimensionValueInput; }>; -export type DeleteInvolvementDimensionValueMutation = { __typename?: 'Mutation', deleteDimensionValue?: { __typename?: 'DeleteDimensionValue', slug?: string | null } | null }; +export type DeleteInvolvementDimensionValueMutation = { deleteDimensionValue: { slug: string | null } | null }; export type InvolvementDimensionsListQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - locale: Scalars['String']['input']; + eventSlug: string; + locale: string; }>; -export type InvolvementDimensionsListQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, involvement?: { __typename?: 'InvolvementEventMetaType', dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, canRemove: boolean, canAddValues: boolean, title?: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ __typename?: 'DimensionValueType', slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title?: string | null, titleFi: string, titleEn: string, titleSv: string }> }> } | null } | null }; +export type InvolvementDimensionsListQuery = { event: { name: string, slug: string, involvement: { dimensions: Array<{ slug: string, canRemove: boolean, canAddValues: boolean, title: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title: string | null, titleFi: string, titleEn: string, titleSv: string }> }> } | null } | null }; export type UpdateInvolvementPreferencesMutationVariables = Exact<{ input: UpdateInvolvementPreferencesInput; }>; -export type UpdateInvolvementPreferencesMutation = { __typename?: 'Mutation', updateInvolvementPreferences?: { __typename?: 'UpdateInvolvementPreferences', preferences?: { __typename?: 'InvolvementEventMetaType', shirtsFrozenAt?: string | null } | null } | null }; +export type UpdateInvolvementPreferencesMutation = { updateInvolvementPreferences: { preferences: { shirtsFrozenAt: string | null } | null } | null }; export type InvolvementPreferencesQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; + eventSlug: string; }>; -export type InvolvementPreferencesQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, involvement?: { __typename?: 'InvolvementEventMetaType', shirtsFrozenAt?: string | null } | null } | null }; +export type InvolvementPreferencesQuery = { event: { name: string, slug: string, involvement: { shirtsFrozenAt: string | null } | null } | null }; export type InvolvementAdminReportsPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + locale?: string | null | undefined; }>; -export type InvolvementAdminReportsPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, involvement?: { __typename?: 'InvolvementEventMetaType', reports: Array<{ __typename?: 'ReportType', slug: string, title: string, footer: string, rows: Array>, totalRow?: Array | null, columns: Array<{ __typename?: 'ColumnType', slug: string, title: string, type: TypeOfColumn }> }> } | null } | null }; +export type InvolvementAdminReportsPageQuery = { event: { name: string, slug: string, timezone: string, involvement: { reports: Array<{ slug: string, title: string, footer: string, rows: Array>, totalRow: Array | null, columns: Array<{ slug: string, title: string, type: TypeOfColumn }> }> } | null } | null }; export type ResendOrderConfirmationMutationVariables = Exact<{ input: ResendOrderConfirmationInput; }>; -export type ResendOrderConfirmationMutation = { __typename?: 'Mutation', resendOrderConfirmation?: { __typename?: 'ResendOrderConfirmation', order?: { __typename?: 'LimitedOrderType', id: string } | null } | null }; +export type ResendOrderConfirmationMutation = { resendOrderConfirmation: { order: { id: string } | null } | null }; export type UpdateOrderMutationVariables = Exact<{ input: UpdateOrderInput; }>; -export type UpdateOrderMutation = { __typename?: 'Mutation', updateOrder?: { __typename?: 'UpdateOrder', order?: { __typename?: 'LimitedOrderType', id: string } | null } | null }; +export type UpdateOrderMutation = { updateOrder: { order: { id: string } | null } | null }; export type CancelAndRefundOrderMutationVariables = Exact<{ input: CancelAndRefundOrderInput; }>; -export type CancelAndRefundOrderMutation = { __typename?: 'Mutation', cancelAndRefundOrder?: { __typename?: 'CancelAndRefundOrder', order?: { __typename?: 'LimitedOrderType', id: string } | null } | null }; +export type CancelAndRefundOrderMutation = { cancelAndRefundOrder: { order: { id: string } | null } | null }; export type MarkOrderAsPaidMutationVariables = Exact<{ input: MarkOrderAsPaidInput; }>; -export type MarkOrderAsPaidMutation = { __typename?: 'Mutation', markOrderAsPaid?: { __typename?: 'MarkOrderAsPaid', order?: { __typename?: 'LimitedOrderType', id: string } | null } | null }; +export type MarkOrderAsPaidMutation = { markOrderAsPaid: { order: { id: string } | null } | null }; -export type AdminOrderPaymentStampFragment = { __typename?: 'LimitedPaymentStampType', id: string, createdAt: string, correlationId: string, provider: PaymentProvider, type: PaymentStampType, status: PaymentStatus, data: unknown }; +export type AdminOrderPaymentStampFragment = { __typename: 'LimitedPaymentStampType', id: string, createdAt: string, correlationId: string, provider: PaymentProvider, type: PaymentStampType, status: PaymentStatus, data: unknown }; -export type AdminOrderReceiptFragment = { __typename?: 'LimitedReceiptType', correlationId: string, createdAt: string, email: string, type: ReceiptType, status: ReceiptStatus }; +export type AdminOrderReceiptFragment = { correlationId: string, createdAt: string, email: string, type: ReceiptType, status: ReceiptStatus }; -export type AdminOrderCodeFragment = { __typename?: 'LimitedCodeType', code: string, literateCode: string, status: CodeStatus, usedOn?: string | null, productText: string }; +export type AdminOrderCodeFragment = { code: string, literateCode: string, status: CodeStatus, usedOn: string | null, productText: string }; export type AdminOrderDetailQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - orderId: Scalars['String']['input']; + eventSlug: string; + orderId: string; }>; -export type AdminOrderDetailQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', slug: string, name: string, tickets?: { __typename?: 'TicketsV2EventMetaType', order?: { __typename?: 'FullOrderType', id: string, formattedOrderNumber: string, createdAt: string, totalPrice: any, status: PaymentStatus, eticketsLink?: string | null, firstName: string, lastName: string, email: string, phone: string, canRefund: boolean, canRefundManually: boolean, canMarkAsPaid: boolean, products: Array<{ __typename?: 'OrderProductType', title: string, quantity: number, price: any, vatPercentage: any }>, paymentStamps: Array<{ __typename?: 'LimitedPaymentStampType', id: string, createdAt: string, correlationId: string, provider: PaymentProvider, type: PaymentStampType, status: PaymentStatus, data: unknown }>, receipts: Array<{ __typename?: 'LimitedReceiptType', correlationId: string, createdAt: string, email: string, type: ReceiptType, status: ReceiptStatus }>, codes: Array<{ __typename?: 'LimitedCodeType', code: string, literateCode: string, status: CodeStatus, usedOn?: string | null, productText: string }> } | null } | null } | null }; +export type AdminOrderDetailQuery = { event: { slug: string, name: string, tickets: { order: { id: string, formattedOrderNumber: string, createdAt: string, totalPrice: string, status: PaymentStatus, eticketsLink: string | null, firstName: string, lastName: string, email: string, phone: string, canRefund: boolean, canRefundManually: boolean, canMarkAsPaid: boolean, products: Array<{ title: string, quantity: number, price: string, vatPercentage: string }>, paymentStamps: Array<{ __typename: 'LimitedPaymentStampType', id: string, createdAt: string, correlationId: string, provider: PaymentProvider, type: PaymentStampType, status: PaymentStatus, data: unknown }>, receipts: Array<{ correlationId: string, createdAt: string, email: string, type: ReceiptType, status: ReceiptStatus }>, codes: Array<{ code: string, literateCode: string, status: CodeStatus, usedOn: string | null, productText: string }> } | null } | null } | null }; export type AdminCreateOrderMutationVariables = Exact<{ input: CreateOrderInput; }>; -export type AdminCreateOrderMutation = { __typename?: 'Mutation', createOrder?: { __typename?: 'CreateOrder', order?: { __typename?: 'FullOrderType', id: string, event: { __typename?: 'LimitedEventType', slug: string } } | null } | null }; +export type AdminCreateOrderMutation = { createOrder: { order: { id: string, event: { slug: string } } | null } | null }; -export type NewOrderProductFragment = { __typename?: 'FullProductType', id: number, title: string, description: string, price: any, vatPercentage: any, isAvailable: boolean, availableFrom?: string | null, availableUntil?: string | null, countPaid: number, countReserved: number, countAvailable?: number | null, maxPerOrder: number }; +export type NewOrderProductFragment = { id: number, title: string, description: string, price: string, vatPercentage: string, isAvailable: boolean, availableFrom: string | null, availableUntil: string | null, countPaid: number, countReserved: number, countAvailable: number | null, maxPerOrder: number }; export type NewOrderPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; + eventSlug: string; }>; -export type NewOrderPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, tickets?: { __typename?: 'TicketsV2EventMetaType', products: Array<{ __typename?: 'FullProductType', id: number, title: string, description: string, price: any, vatPercentage: any, isAvailable: boolean, availableFrom?: string | null, availableUntil?: string | null, countPaid: number, countReserved: number, countAvailable?: number | null, maxPerOrder: number }> } | null } | null }; +export type NewOrderPageQuery = { event: { name: string, slug: string, tickets: { products: Array<{ id: number, title: string, description: string, price: string, vatPercentage: string, isAvailable: boolean, availableFrom: string | null, availableUntil: string | null, countPaid: number, countReserved: number, countAvailable: number | null, maxPerOrder: number }> } | null } | null }; -export type OrderListFragment = { __typename?: 'FullOrderType', id: string, formattedOrderNumber: string, displayName: string, email: string, createdAt: string, totalPrice: any, status: PaymentStatus }; +export type OrderListFragment = { id: string, formattedOrderNumber: string, displayName: string, email: string, createdAt: string, totalPrice: string, status: PaymentStatus }; -export type ProductChoiceFragment = { __typename?: 'FullProductType', id: number, title: string }; +export type ProductChoiceFragment = { id: number, title: string }; export type AdminOrderListWithOrdersQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - filters?: InputMaybe | DimensionFilterInput>; - search?: InputMaybe; - returnNone?: InputMaybe; + eventSlug: string; + filters?: Array | DimensionFilterInput | null | undefined; + search?: string | null | undefined; + returnNone?: boolean | null | undefined; }>; -export type AdminOrderListWithOrdersQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, tickets?: { __typename?: 'TicketsV2EventMetaType', countTotalOrders: number, products: Array<{ __typename?: 'FullProductType', id: number, title: string }>, orders: Array<{ __typename?: 'FullOrderType', id: string, formattedOrderNumber: string, displayName: string, email: string, createdAt: string, totalPrice: any, status: PaymentStatus }> } | null } | null }; +export type AdminOrderListWithOrdersQuery = { event: { name: string, slug: string, tickets: { countTotalOrders: number, products: Array<{ id: number, title: string }>, orders: Array<{ id: string, formattedOrderNumber: string, displayName: string, email: string, createdAt: string, totalPrice: string, status: PaymentStatus }> } | null } | null }; export type CancelOwnOrderMutationVariables = Exact<{ input: CancelOwnUnpaidOrderInput; }>; -export type CancelOwnOrderMutation = { __typename?: 'Mutation', cancelOwnUnpaidOrder?: { __typename?: 'CancelOwnUnpaidOrder', order?: { __typename?: 'LimitedOrderType', id: string } | null } | null }; +export type CancelOwnOrderMutation = { cancelOwnUnpaidOrder: { order: { id: string } | null } | null }; export type RequestOrderCancellationMutationVariables = Exact<{ input: RequestOrderCancellationInput; }>; -export type RequestOrderCancellationMutation = { __typename?: 'Mutation', requestOrderCancellation?: { __typename?: 'RequestOrderCancellation', success: boolean } | null }; +export type RequestOrderCancellationMutation = { requestOrderCancellation: { success: boolean } | null }; export type ConfirmOrderCancellationMutationVariables = Exact<{ input: ConfirmOrderCancellationInput; }>; -export type ConfirmOrderCancellationMutation = { __typename?: 'Mutation', confirmOrderCancellation?: { __typename?: 'ConfirmOrderCancellation', success: boolean } | null }; +export type ConfirmOrderCancellationMutation = { confirmOrderCancellation: { success: boolean } | null }; export type UpdateInvolvementPerksMutationVariables = Exact<{ input: UpdateInvolvementPerksInput; }>; -export type UpdateInvolvementPerksMutation = { __typename?: 'Mutation', updateInvolvementPerks?: { __typename?: 'UpdateInvolvementPerks', involvement?: { __typename?: 'LimitedInvolvementType', id: string } | null } | null }; +export type UpdateInvolvementPerksMutation = { updateInvolvementPerks: { involvement: { id: string } | null } | null }; -export type InvolvedPersonDetailInvolvementFragment = { __typename?: 'LimitedInvolvementType', id: string, type: InvolvementType, title: string, adminLink?: string | null, isActive: boolean, cachedDimensions: unknown, cachedAnnotations: unknown }; +export type InvolvedPersonDetailInvolvementFragment = { id: string, type: InvolvementType, title: string, adminLink: string | null, isActive: boolean, cachedDimensions: unknown, cachedAnnotations: unknown }; -export type InvolvedPersonDetailFragment = { __typename?: 'ProfileWithInvolvementType', id?: number | null, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string, fullName: string, isActive: boolean, profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean }, involvements: Array<{ __typename?: 'LimitedInvolvementType', id: string, type: InvolvementType, title: string, adminLink?: string | null, isActive: boolean, cachedDimensions: unknown, cachedAnnotations: unknown }> }; +export type InvolvedPersonDetailFragment = { id: number | null, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string, fullName: string, isActive: boolean, profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean }, involvements: Array<{ id: string, type: InvolvementType, title: string, adminLink: string | null, isActive: boolean, cachedDimensions: unknown, cachedAnnotations: unknown }> }; export type PersonPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - locale?: InputMaybe; - personId: Scalars['Int']['input']; + eventSlug: string; + locale?: string | null | undefined; + personId: number; }>; -export type PersonPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', slug: string, name: string, timezone: string, involvement?: { __typename?: 'InvolvementEventMetaType', dimensions: Array<{ __typename?: 'FullDimensionType', isKeyDimension: boolean, isShownInDetail: boolean, slug: string, title?: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string }> }>, annotations: Array<{ __typename?: 'AnnotationType', slug: string, type: AnnotationDataType, title: string, description: string, isComputed: boolean }>, person?: { __typename?: 'ProfileWithInvolvementType', id?: number | null, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string, fullName: string, isActive: boolean, profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean }, involvements: Array<{ __typename?: 'LimitedInvolvementType', id: string, type: InvolvementType, title: string, adminLink?: string | null, isActive: boolean, cachedDimensions: unknown, cachedAnnotations: unknown }> } | null } | null } | null }; +export type PersonPageQuery = { event: { slug: string, name: string, timezone: string, involvement: { dimensions: Array<{ isKeyDimension: boolean, isShownInDetail: boolean, slug: string, title: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ slug: string, title: string | null, color: string }> }>, annotations: Array<{ slug: string, type: AnnotationDataType, title: string, description: string, isComputed: boolean }>, person: { id: number | null, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string, fullName: string, isActive: boolean, profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean }, involvements: Array<{ id: string, type: InvolvementType, title: string, adminLink: string | null, isActive: boolean, cachedDimensions: unknown, cachedAnnotations: unknown }> } | null } | null } | null }; -export type InvolvedPersonInvolvementFragment = { __typename?: 'LimitedInvolvementType', id: string, type: InvolvementType, title: string, adminLink?: string | null, isActive: boolean, cachedDimensions: unknown, cachedAnnotations: unknown }; +export type InvolvedPersonInvolvementFragment = { id: string, type: InvolvementType, title: string, adminLink: string | null, isActive: boolean, cachedDimensions: unknown, cachedAnnotations: unknown }; -export type InvolvedPersonFragment = { __typename?: 'ProfileWithInvolvementType', firstName: string, lastName: string, nick: string, isActive: boolean, involvements: Array<{ __typename?: 'LimitedInvolvementType', id: string, type: InvolvementType, title: string, adminLink?: string | null, isActive: boolean, cachedDimensions: unknown, cachedAnnotations: unknown }> }; +export type InvolvedPersonFragment = { firstName: string, lastName: string, nick: string, isActive: boolean, involvements: Array<{ id: string, type: InvolvementType, title: string, adminLink: string | null, isActive: boolean, cachedDimensions: unknown, cachedAnnotations: unknown }> }; export type PeoplePageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - filters?: InputMaybe | DimensionFilterInput>; - locale?: InputMaybe; - search?: InputMaybe; - returnNone?: InputMaybe; + eventSlug: string; + filters?: Array | DimensionFilterInput | null | undefined; + locale?: string | null | undefined; + search?: string | null | undefined; + returnNone?: boolean | null | undefined; }>; -export type PeoplePageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', slug: string, name: string, timezone: string, involvement?: { __typename?: 'InvolvementEventMetaType', dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, isTechnical: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string }> }>, people: Array<{ __typename?: 'ProfileWithInvolvementType', firstName: string, lastName: string, nick: string, isActive: boolean, involvements: Array<{ __typename?: 'LimitedInvolvementType', id: string, type: InvolvementType, title: string, adminLink?: string | null, isActive: boolean, cachedDimensions: unknown, cachedAnnotations: unknown }> }> } | null } | null }; +export type PeoplePageQuery = { event: { slug: string, name: string, timezone: string, involvement: { dimensions: Array<{ slug: string, title: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, isTechnical: boolean, values: Array<{ slug: string, title: string | null, color: string }> }>, people: Array<{ firstName: string, lastName: string, nick: string, isActive: boolean, involvements: Array<{ id: string, type: InvolvementType, title: string, adminLink: string | null, isActive: boolean, cachedDimensions: unknown, cachedAnnotations: unknown }> }> } | null } | null }; export type UpdateProductMutationVariables = Exact<{ input: UpdateProductInput; }>; -export type UpdateProductMutation = { __typename?: 'Mutation', updateProduct?: { __typename?: 'UpdateProduct', product?: { __typename?: 'LimitedProductType', id: number } | null } | null }; +export type UpdateProductMutation = { updateProduct: { product: { id: number } | null } | null }; export type DeleteProductMutationVariables = Exact<{ input: DeleteProductInput; }>; -export type DeleteProductMutation = { __typename?: 'Mutation', deleteProduct?: { __typename?: 'DeleteProduct', id: string } | null }; +export type DeleteProductMutation = { deleteProduct: { id: string } | null }; -export type AdminProductOldVersionFragment = { __typename?: 'LimitedProductType', createdAt: string, title: string, description: string, price: any, vatPercentage: any, eticketsPerProduct: number, maxPerOrder: number }; +export type AdminProductOldVersionFragment = { createdAt: string, title: string, description: string, price: string, vatPercentage: string, eticketsPerProduct: number, maxPerOrder: number }; -export type AdminProductDetailFragment = { __typename?: 'FullProductType', id: number, createdAt: string, title: string, description: string, price: any, vatPercentage: any, eticketsPerProduct: number, maxPerOrder: number, availableFrom?: string | null, availableUntil?: string | null, canDelete: boolean, quotas: Array<{ __typename?: 'LimitedQuotaType', id: string }>, supersededBy?: { __typename?: 'LimitedProductType', id: number } | null, oldVersions: Array<{ __typename?: 'LimitedProductType', createdAt: string, title: string, description: string, price: any, vatPercentage: any, eticketsPerProduct: number, maxPerOrder: number }> }; +export type AdminProductDetailFragment = { id: number, createdAt: string, title: string, description: string, price: string, vatPercentage: string, eticketsPerProduct: number, maxPerOrder: number, availableFrom: string | null, availableUntil: string | null, canDelete: boolean, quotas: Array<{ id: string }>, supersededBy: { id: number } | null, oldVersions: Array<{ createdAt: string, title: string, description: string, price: string, vatPercentage: string, eticketsPerProduct: number, maxPerOrder: number }> }; export type AdminProductDetailPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - productId: Scalars['String']['input']; + eventSlug: string; + productId: string; }>; -export type AdminProductDetailPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, tickets?: { __typename?: 'TicketsV2EventMetaType', quotas: Array<{ __typename?: 'FullQuotaType', id: string, name: string, countTotal: number }>, product: { __typename?: 'FullProductType', id: number, createdAt: string, title: string, description: string, price: any, vatPercentage: any, eticketsPerProduct: number, maxPerOrder: number, availableFrom?: string | null, availableUntil?: string | null, canDelete: boolean, quotas: Array<{ __typename?: 'LimitedQuotaType', id: string }>, supersededBy?: { __typename?: 'LimitedProductType', id: number } | null, oldVersions: Array<{ __typename?: 'LimitedProductType', createdAt: string, title: string, description: string, price: any, vatPercentage: any, eticketsPerProduct: number, maxPerOrder: number }> } } | null } | null }; +export type AdminProductDetailPageQuery = { event: { name: string, slug: string, tickets: { quotas: Array<{ id: string, name: string, countTotal: number }>, product: { id: number, createdAt: string, title: string, description: string, price: string, vatPercentage: string, eticketsPerProduct: number, maxPerOrder: number, availableFrom: string | null, availableUntil: string | null, canDelete: boolean, quotas: Array<{ id: string }>, supersededBy: { id: number } | null, oldVersions: Array<{ createdAt: string, title: string, description: string, price: string, vatPercentage: string, eticketsPerProduct: number, maxPerOrder: number }> } } | null } | null }; export type CreateProductMutationVariables = Exact<{ input: CreateProductInput; }>; -export type CreateProductMutation = { __typename?: 'Mutation', createProduct?: { __typename?: 'CreateProduct', product?: { __typename?: 'LimitedProductType', id: number } | null } | null }; +export type CreateProductMutation = { createProduct: { product: { id: number } | null } | null }; export type ReorderProductsMutationVariables = Exact<{ input: ReorderProductsInput; }>; -export type ReorderProductsMutation = { __typename?: 'Mutation', reorderProducts?: { __typename?: 'ReorderProducts', products: Array<{ __typename?: 'LimitedProductType', id: number }> } | null }; +export type ReorderProductsMutation = { reorderProducts: { products: Array<{ id: number }> } | null }; -export type ProductListFragment = { __typename?: 'FullProductType', id: number, title: string, description: string, price: any, isAvailable: boolean, availableFrom?: string | null, availableUntil?: string | null, countPaid: number, countReserved: number, countAvailable?: number | null }; +export type ProductListFragment = { id: number, title: string, description: string, price: string, isAvailable: boolean, availableFrom: string | null, availableUntil: string | null, countPaid: number, countReserved: number, countAvailable: number | null }; export type ProductListQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; + eventSlug: string; }>; -export type ProductListQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, tickets?: { __typename?: 'TicketsV2EventMetaType', products: Array<{ __typename?: 'FullProductType', id: number, title: string, description: string, price: any, isAvailable: boolean, availableFrom?: string | null, availableUntil?: string | null, countPaid: number, countReserved: number, countAvailable?: number | null }> } | null } | null }; +export type ProductListQuery = { event: { name: string, slug: string, tickets: { products: Array<{ id: number, title: string, description: string, price: string, isAvailable: boolean, availableFrom: string | null, availableUntil: string | null, countPaid: number, countReserved: number, countAvailable: number | null }> } | null } | null }; export type UpdateProgramBasicInfoMutationVariables = Exact<{ input: UpdateProgramInput; }>; -export type UpdateProgramBasicInfoMutation = { __typename?: 'Mutation', updateProgram?: { __typename?: 'UpdateProgram', program?: { __typename?: 'FullProgramType', slug: string } | null } | null }; +export type UpdateProgramBasicInfoMutation = { updateProgram: { program: { slug: string } | null } | null }; export type CancelProgramItemMutationVariables = Exact<{ input: CancelProgramInput; }>; -export type CancelProgramItemMutation = { __typename?: 'Mutation', cancelProgram?: { __typename?: 'CancelProgram', responseId?: string | null } | null }; +export type CancelProgramItemMutation = { cancelProgram: { responseId: string | null } | null }; export type RestoreProgramItemMutationVariables = Exact<{ input: RestoreProgramInput; }>; -export type RestoreProgramItemMutation = { __typename?: 'Mutation', restoreProgram?: { __typename?: 'RestoreProgram', programSlug: string } | null }; +export type RestoreProgramItemMutation = { restoreProgram: { programSlug: string } | null }; export type ProgramAdminDetailAnnotationsQueryQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - programSlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + programSlug: string; + locale?: string | null | undefined; }>; -export type ProgramAdminDetailAnnotationsQueryQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', slug: string, name: string, program?: { __typename?: 'ProgramV2EventMetaType', annotations: Array<{ __typename?: 'AnnotationType', isApplicableToProgramItems: boolean, slug: string, type: AnnotationDataType, title: string, description: string, isComputed: boolean }>, program?: { __typename?: 'FullProgramType', slug: string, title: string, cachedAnnotations: unknown, dimensions: Array<{ __typename?: 'ProgramDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string } }> } | null } | null } | null }; +export type ProgramAdminDetailAnnotationsQueryQuery = { event: { slug: string, name: string, program: { annotations: Array<{ isApplicableToProgramItems: boolean, slug: string, type: AnnotationDataType, title: string, description: string, isComputed: boolean }>, program: { slug: string, title: string, cachedAnnotations: unknown, dimensions: Array<{ dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null, color: string } }> } | null } | null } | null }; export type UpdateProgramDimensionsMutationVariables = Exact<{ input: UpdateProgramDimensionsInput; }>; -export type UpdateProgramDimensionsMutation = { __typename?: 'Mutation', updateProgramDimensions?: { __typename?: 'UpdateProgramDimensions', program?: { __typename?: 'FullProgramType', slug: string } | null } | null }; +export type UpdateProgramDimensionsMutation = { updateProgramDimensions: { program: { slug: string } | null } | null }; export type ProgramAdminDetailDimensionsQueryQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - programSlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + programSlug: string; + locale?: string | null | undefined; }>; -export type ProgramAdminDetailDimensionsQueryQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', slug: string, name: string, program?: { __typename?: 'ProgramV2EventMetaType', dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, canRemove: boolean, canAddValues: boolean, title?: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ __typename?: 'DimensionValueType', slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title?: string | null, titleFi: string, titleEn: string, titleSv: string }> }>, program?: { __typename?: 'FullProgramType', slug: string, title: string, cachedDimensions?: unknown | null, dimensions: Array<{ __typename?: 'ProgramDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string } }> } | null } | null } | null }; +export type ProgramAdminDetailDimensionsQueryQuery = { event: { slug: string, name: string, program: { dimensions: Array<{ slug: string, canRemove: boolean, canAddValues: boolean, title: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title: string | null, titleFi: string, titleEn: string, titleSv: string }> }>, program: { slug: string, title: string, cachedDimensions: unknown, dimensions: Array<{ dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null, color: string } }> } | null } | null } | null }; export type InviteProgramHostMutationVariables = Exact<{ input: InviteProgramHostInput; }>; -export type InviteProgramHostMutation = { __typename?: 'Mutation', inviteProgramHost?: { __typename?: 'InviteProgramHost', invitation: { __typename?: 'FullInvitationType', id: string } } | null }; +export type InviteProgramHostMutation = { inviteProgramHost: { invitation: { id: string } } | null }; export type DeleteProgramHostMutationVariables = Exact<{ input: DeleteProgramHostInput; }>; -export type DeleteProgramHostMutation = { __typename?: 'Mutation', deleteProgramHost?: { __typename?: 'DeleteProgramHost', program: { __typename?: 'FullProgramType', slug: string } } | null }; +export type DeleteProgramHostMutation = { deleteProgramHost: { program: { slug: string } } | null }; export type UpdateProgramHostDimensionsMutationVariables = Exact<{ input: UpdateInvolvementDimensionsInput; }>; -export type UpdateProgramHostDimensionsMutation = { __typename?: 'Mutation', updateInvolvementDimensions?: { __typename?: 'UpdateInvolvementDimensions', involvement?: { __typename?: 'LimitedInvolvementType', program?: { __typename?: 'LimitedProgramType', slug: string } | null } | null } | null }; +export type UpdateProgramHostDimensionsMutation = { updateInvolvementDimensions: { involvement: { program: { slug: string } | null } | null } | null }; export type DeleteInvitationMutationVariables = Exact<{ input: DeleteInvitationInput; }>; -export type DeleteInvitationMutation = { __typename?: 'Mutation', deleteInvitation?: { __typename?: 'DeleteInvitation', invitation?: { __typename?: 'LimitedInvitationType', id: string } | null } | null }; +export type DeleteInvitationMutation = { deleteInvitation: { invitation: { id: string } | null } | null }; export type ResendInvitationMutationVariables = Exact<{ input: ResendInvitationInput; }>; -export type ResendInvitationMutation = { __typename?: 'Mutation', resendInvitation?: { __typename?: 'ResendInvitation', invitation?: { __typename?: 'LimitedInvitationType', id: string } | null } | null }; +export type ResendInvitationMutation = { resendInvitation: { invitation: { id: string } | null } | null }; -export type ProgramAdminDetailHostFragment = { __typename?: 'LimitedProgramHostType', id: string, cachedDimensions: unknown, programHostRole?: ProgramHostRole | null, person: { __typename?: 'LimitedProfileType', fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } }; +export type ProgramAdminDetailHostFragment = { id: string, cachedDimensions: unknown, programHostRole: ProgramHostRole | null, person: { fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } }; -export type ProgramAdminDetailInvitationFragment = { __typename?: 'LimitedInvitationType', id: string, email: string, createdAt: string, cachedDimensions?: unknown | null }; +export type ProgramAdminDetailInvitationFragment = { id: string, email: string, createdAt: string, cachedDimensions: unknown }; export type ProgramAdminDetailHostsQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - programSlug: Scalars['String']['input']; - annotationSlugs: Array | Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + programSlug: string; + annotationSlugs: Array | string; + locale?: string | null | undefined; }>; -export type ProgramAdminDetailHostsQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, forms?: { __typename?: 'FormsEventMetaType', inviteForms: Array<{ __typename?: 'FullSurveyType', slug: string, title?: string | null, cachedDefaultInvolvementDimensions?: unknown | null }> } | null, program?: { __typename?: 'ProgramV2EventMetaType', involvementDimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isKeyDimension: boolean, isTechnical: boolean, isMultiValue: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string }> }>, annotations: Array<{ __typename?: 'AnnotationType', slug: string, type: AnnotationDataType, title: string, description: string, isComputed: boolean }>, program?: { __typename?: 'FullProgramType', slug: string, title: string, canInviteProgramHost: boolean, cachedAnnotations: unknown, dimensions: Array<{ __typename?: 'ProgramDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string } }>, programHosts: Array<{ __typename?: 'LimitedProgramHostType', id: string, cachedDimensions: unknown, programHostRole?: ProgramHostRole | null, person: { __typename?: 'LimitedProfileType', fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } }>, invitations: Array<{ __typename?: 'LimitedInvitationType', id: string, email: string, createdAt: string, cachedDimensions?: unknown | null }> } | null } | null } | null }; +export type ProgramAdminDetailHostsQuery = { event: { name: string, slug: string, timezone: string, forms: { inviteForms: Array<{ slug: string, title: string | null, cachedDefaultInvolvementDimensions: unknown }> } | null, program: { involvementDimensions: Array<{ slug: string, title: string | null, isKeyDimension: boolean, isTechnical: boolean, isMultiValue: boolean, values: Array<{ slug: string, title: string | null, color: string }> }>, annotations: Array<{ slug: string, type: AnnotationDataType, title: string, description: string, isComputed: boolean }>, program: { slug: string, title: string, canInviteProgramHost: boolean, cachedAnnotations: unknown, dimensions: Array<{ dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null, color: string } }>, programHosts: Array<{ id: string, cachedDimensions: unknown, programHostRole: ProgramHostRole | null, person: { fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } }>, invitations: Array<{ id: string, email: string, createdAt: string, cachedDimensions: unknown }> } | null } | null } | null }; export type ProgramAdminDetailQueryQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - programSlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + programSlug: string; + locale?: string | null | undefined; }>; -export type ProgramAdminDetailQueryQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, program?: { __typename?: 'ProgramV2EventMetaType', calendarExportLink: string, program?: { __typename?: 'FullProgramType', slug: string, title: string, description: string, cachedHosts: string, canCancel: boolean, canDelete: boolean, canRestore: boolean, programOffer?: { __typename?: 'LimitedResponseType', id: string, values?: unknown | null } | null, links: Array<{ __typename?: 'ProgramLink', type: ProgramLinkType, href: string, title: string }>, annotations: Array<{ __typename?: 'ProgramAnnotationType', value?: unknown | null, annotation: { __typename?: 'AnnotationType', slug: string, type: AnnotationDataType, title: string } }>, dimensions: Array<{ __typename?: 'ProgramDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string } }>, scheduleItems: Array<{ __typename?: 'LimitedScheduleItemType', slug: string, subtitle: string, location?: string | null, startTime: string, endTime: string }> } | null } | null } | null }; +export type ProgramAdminDetailQueryQuery = { event: { name: string, slug: string, timezone: string, program: { calendarExportLink: string, program: { slug: string, title: string, description: string, cachedHosts: string, canCancel: boolean, canDelete: boolean, canRestore: boolean, programOffer: { id: string, values: unknown } | null, links: Array<{ type: ProgramLinkType, href: string, title: string }>, annotations: Array<{ value: unknown, annotation: { slug: string, type: AnnotationDataType, title: string } }>, dimensions: Array<{ dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null, color: string } }>, scheduleItems: Array<{ slug: string, subtitle: string, location: string | null, startTime: string, endTime: string }> } | null } | null } | null }; export type PutScheduleItemMutationVariables = Exact<{ input: PutScheduleItemInput; }>; -export type PutScheduleItemMutation = { __typename?: 'Mutation', putScheduleItem?: { __typename?: 'PutScheduleItem', scheduleItem?: { __typename?: 'FullScheduleItemType', slug: string } | null } | null }; +export type PutScheduleItemMutation = { putScheduleItem: { scheduleItem: { slug: string } | null } | null }; export type DeleteScheduleItemMutationVariables = Exact<{ input: DeleteScheduleItemInput; }>; -export type DeleteScheduleItemMutation = { __typename?: 'Mutation', deleteScheduleItem?: { __typename?: 'DeleteScheduleItem', slug?: string | null } | null }; +export type DeleteScheduleItemMutation = { deleteScheduleItem: { slug: string | null } | null }; -export type ProgramAdminDetailScheduleItemFragment = { __typename?: 'LimitedScheduleItemType', slug: string, title: string, subtitle: string, location?: string | null, startTime: string, durationMinutes: number, room: string, freeformLocation: string, isPublic: boolean }; +export type ProgramAdminDetailScheduleItemFragment = { slug: string, title: string, subtitle: string, location: string | null, startTime: string, durationMinutes: number, room: string, freeformLocation: string, isPublic: boolean }; export type ProgramAdminDetailScheduleQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - programSlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + programSlug: string; + locale?: string | null | undefined; }>; -export type ProgramAdminDetailScheduleQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, startTime?: string | null, endTime?: string | null, program?: { __typename?: 'ProgramV2EventMetaType', dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }>, program?: { __typename?: 'FullProgramType', slug: string, title: string, dimensions: Array<{ __typename?: 'ProgramDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string } }>, scheduleItems: Array<{ __typename?: 'LimitedScheduleItemType', slug: string, title: string, subtitle: string, location?: string | null, startTime: string, durationMinutes: number, room: string, freeformLocation: string, isPublic: boolean }> } | null } | null } | null }; +export type ProgramAdminDetailScheduleQuery = { event: { name: string, slug: string, timezone: string, startTime: string | null, endTime: string | null, program: { dimensions: Array<{ slug: string, title: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ slug: string, title: string | null }> }>, program: { slug: string, title: string, dimensions: Array<{ dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null, color: string } }>, scheduleItems: Array<{ slug: string, title: string, subtitle: string, location: string | null, startTime: string, durationMinutes: number, room: string, freeformLocation: string, isPublic: boolean }> } | null } | null } | null }; export type CreateProgramMutationVariables = Exact<{ input: CreateProgramInput; }>; -export type CreateProgramMutation = { __typename?: 'Mutation', createProgram?: { __typename?: 'CreateProgram', program?: { __typename?: 'FullProgramType', slug: string } | null } | null }; +export type CreateProgramMutation = { createProgram: { program: { slug: string } | null } | null }; -export type ProgramAdminFragment = { __typename?: 'FullProgramType', slug: string, title: string, cachedDimensions?: unknown | null, scheduleItems: Array<{ __typename?: 'LimitedScheduleItemType', startTime: string }> }; +export type ProgramAdminFragment = { slug: string, title: string, cachedDimensions: unknown, scheduleItems: Array<{ startTime: string }> }; export type ProgramAdminListQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - locale?: InputMaybe; - filters?: InputMaybe | DimensionFilterInput>; + eventSlug: string; + locale?: string | null | undefined; + filters?: Array | DimensionFilterInput | null | undefined; }>; -export type ProgramAdminListQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', slug: string, name: string, program?: { __typename?: 'ProgramV2EventMetaType', scheduleItemsExcelExportLink: string, dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isTechnical: boolean, isMultiValue: boolean, isKeyDimension: boolean, isListFilter: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string }> }>, programs: Array<{ __typename?: 'FullProgramType', slug: string, title: string, cachedDimensions?: unknown | null, scheduleItems: Array<{ __typename?: 'LimitedScheduleItemType', startTime: string }> }> } | null } | null }; +export type ProgramAdminListQuery = { event: { slug: string, name: string, program: { scheduleItemsExcelExportLink: string, dimensions: Array<{ slug: string, title: string | null, isTechnical: boolean, isMultiValue: boolean, isKeyDimension: boolean, isListFilter: boolean, values: Array<{ slug: string, title: string | null, color: string }> }>, programs: Array<{ slug: string, title: string, cachedDimensions: unknown, scheduleItems: Array<{ startTime: string }> }> } | null } | null }; export type PutEventAnnotationMutationVariables = Exact<{ input: PutUniverseAnnotationInput; }>; -export type PutEventAnnotationMutation = { __typename?: 'Mutation', putUniverseAnnotation?: { __typename?: 'PutUniverseAnnotation', universeAnnotation?: { __typename?: 'LimitedUniverseAnnotationType', annotation: { __typename?: 'AnnotationType', slug: string } } | null } | null }; +export type PutEventAnnotationMutation = { putUniverseAnnotation: { universeAnnotation: { annotation: { slug: string } } | null } | null }; -export type ProgramAdminEventAnnotationFragment = { __typename?: 'LimitedUniverseAnnotationType', isActive: boolean, formFields?: unknown | null, annotation: { __typename?: 'AnnotationType', slug: string, title: string, description: string, type: AnnotationDataType, isComputed: boolean, isPublic: boolean, isShownInDetail: boolean, isInternal: boolean, isApplicableToProgramItems: boolean, isApplicableToScheduleItems: boolean } }; +export type ProgramAdminEventAnnotationFragment = { isActive: boolean, formFields: unknown, annotation: { slug: string, title: string, description: string, type: AnnotationDataType, isComputed: boolean, isPublic: boolean, isShownInDetail: boolean, isInternal: boolean, isApplicableToProgramItems: boolean, isApplicableToScheduleItems: boolean } }; export type ProgramAdminEventAnnotationsQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + locale?: string | null | undefined; }>; -export type ProgramAdminEventAnnotationsQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, program?: { __typename?: 'ProgramV2EventMetaType', eventAnnotations: Array<{ __typename?: 'LimitedUniverseAnnotationType', isActive: boolean, formFields?: unknown | null, annotation: { __typename?: 'AnnotationType', slug: string, title: string, description: string, type: AnnotationDataType, isComputed: boolean, isPublic: boolean, isShownInDetail: boolean, isInternal: boolean, isApplicableToProgramItems: boolean, isApplicableToScheduleItems: boolean } }> } | null } | null }; +export type ProgramAdminEventAnnotationsQuery = { event: { name: string, slug: string, timezone: string, program: { eventAnnotations: Array<{ isActive: boolean, formFields: unknown, annotation: { slug: string, title: string, description: string, type: AnnotationDataType, isComputed: boolean, isPublic: boolean, isShownInDetail: boolean, isInternal: boolean, isApplicableToProgramItems: boolean, isApplicableToScheduleItems: boolean } }> } | null } | null }; export type PutProgramDimensionMutationVariables = Exact<{ input: PutDimensionInput; }>; -export type PutProgramDimensionMutation = { __typename?: 'Mutation', putDimension?: { __typename?: 'PutDimension', dimension?: { __typename?: 'FullDimensionType', slug: string } | null } | null }; +export type PutProgramDimensionMutation = { putDimension: { dimension: { slug: string } | null } | null }; export type DeleteProgramDimensionMutationVariables = Exact<{ input: DeleteDimensionInput; }>; -export type DeleteProgramDimensionMutation = { __typename?: 'Mutation', deleteDimension?: { __typename?: 'DeleteDimension', slug?: string | null } | null }; +export type DeleteProgramDimensionMutation = { deleteDimension: { slug: string | null } | null }; export type PutProgramDimensionValueMutationVariables = Exact<{ input: PutDimensionValueInput; }>; -export type PutProgramDimensionValueMutation = { __typename?: 'Mutation', putDimensionValue?: { __typename?: 'PutDimensionValue', value?: { __typename?: 'DimensionValueType', slug: string } | null } | null }; +export type PutProgramDimensionValueMutation = { putDimensionValue: { value: { slug: string } | null } | null }; export type DeleteProgramDimensionValueMutationVariables = Exact<{ input: DeleteDimensionValueInput; }>; -export type DeleteProgramDimensionValueMutation = { __typename?: 'Mutation', deleteDimensionValue?: { __typename?: 'DeleteDimensionValue', slug?: string | null } | null }; +export type DeleteProgramDimensionValueMutation = { deleteDimensionValue: { slug: string | null } | null }; export type ProgramDimensionsListQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - locale: Scalars['String']['input']; + eventSlug: string; + locale: string; }>; -export type ProgramDimensionsListQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, program?: { __typename?: 'ProgramV2EventMetaType', dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, canRemove: boolean, canAddValues: boolean, title?: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ __typename?: 'DimensionValueType', slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title?: string | null, titleFi: string, titleEn: string, titleSv: string }> }> } | null } | null }; +export type ProgramDimensionsListQuery = { event: { name: string, slug: string, program: { dimensions: Array<{ slug: string, canRemove: boolean, canAddValues: boolean, title: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title: string | null, titleFi: string, titleEn: string, titleSv: string }> }> } | null } | null }; export type UpdateProgramFormDefaultDimensionsMutationVariables = Exact<{ input: UpdateSurveyDefaultDimensionsInput; }>; -export type UpdateProgramFormDefaultDimensionsMutation = { __typename?: 'Mutation', updateSurveyDefaultDimensions?: { __typename?: 'UpdateSurveyDefaultDimensions', survey?: { __typename?: 'FullSurveyType', slug: string } | null } | null }; +export type UpdateProgramFormDefaultDimensionsMutation = { updateSurveyDefaultDimensions: { survey: { slug: string } | null } | null }; export type DimensionDefaultsQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - locale: Scalars['String']['input']; + eventSlug: string; + surveySlug: string; + locale: string; }>; -export type DimensionDefaultsQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, program?: { __typename?: 'ProgramV2EventMetaType', involvementDimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }> } | null, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', slug: string, title?: string | null, canRemove: boolean, purpose: SurveyPurpose, cachedDefaultResponseDimensions?: unknown | null, cachedDefaultInvolvementDimensions?: unknown | null, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }>, dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }> } | null } | null } | null }; +export type DimensionDefaultsQuery = { event: { name: string, slug: string, program: { involvementDimensions: Array<{ slug: string, title: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ slug: string, title: string | null }> }> } | null, forms: { survey: { slug: string, title: string | null, canRemove: boolean, purpose: SurveyPurpose, cachedDefaultResponseDimensions: unknown, cachedDefaultInvolvementDimensions: unknown, languages: Array<{ language: FormsFormLanguageChoices }>, dimensions: Array<{ slug: string, title: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ slug: string, title: string | null }> }> } | null } | null } | null }; export type UpdateProgramFormLanguageMutationVariables = Exact<{ input: UpdateFormInput; }>; -export type UpdateProgramFormLanguageMutation = { __typename?: 'Mutation', updateForm?: { __typename?: 'UpdateForm', survey?: { __typename?: 'FullSurveyType', slug: string } | null } | null }; +export type UpdateProgramFormLanguageMutation = { updateForm: { survey: { slug: string } | null } | null }; export type DeleteProgramFormLanguageMutationVariables = Exact<{ input: DeleteSurveyLanguageInput; }>; -export type DeleteProgramFormLanguageMutation = { __typename?: 'Mutation', deleteSurveyLanguage?: { __typename?: 'DeleteSurveyLanguage', language?: string | null } | null }; +export type DeleteProgramFormLanguageMutation = { deleteSurveyLanguage: { language: string | null } | null }; export type UpdateFormFieldsMutationMutationVariables = Exact<{ input: UpdateFormFieldsInput; }>; -export type UpdateFormFieldsMutationMutation = { __typename?: 'Mutation', updateFormFields?: { __typename?: 'UpdateFormFields', survey?: { __typename?: 'FullSurveyType', slug: string } | null } | null }; +export type UpdateFormFieldsMutationMutation = { updateFormFields: { survey: { slug: string } | null } | null }; export type PromoteProgramFormFieldToDimensionMutationVariables = Exact<{ input: PromoteFieldToDimensionInput; }>; -export type PromoteProgramFormFieldToDimensionMutation = { __typename?: 'Mutation', promoteFieldToDimension?: { __typename?: 'PromoteFieldToDimension', survey?: { __typename?: 'FullSurveyType', slug: string } | null } | null }; +export type PromoteProgramFormFieldToDimensionMutation = { promoteFieldToDimension: { survey: { slug: string } | null } | null }; export type EditProgramFormFieldsPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - language: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + surveySlug: string; + language: string; + locale?: string | null | undefined; }>; -export type EditProgramFormFieldsPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', slug: string, title?: string | null, canRemove: boolean, purpose: SurveyPurpose, dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, canRemove: boolean, canAddValues: boolean, title?: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ __typename?: 'DimensionValueType', slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title?: string | null, titleFi: string, titleEn: string, titleSv: string }> }>, form?: { __typename?: 'FormType', title: string, language: FormsFormLanguageChoices, fields?: unknown | null, canRemove: boolean } | null, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }> } | null } | null } | null }; +export type EditProgramFormFieldsPageQuery = { event: { name: string, slug: string, forms: { survey: { slug: string, title: string | null, canRemove: boolean, purpose: SurveyPurpose, dimensions: Array<{ slug: string, canRemove: boolean, canAddValues: boolean, title: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title: string | null, titleFi: string, titleEn: string, titleSv: string }> }>, form: { title: string, language: FormsFormLanguageChoices, fields: unknown, canRemove: boolean } | null, languages: Array<{ language: FormsFormLanguageChoices }> } | null } | null } | null }; -export type EditProgramFormLanguageFragment = { __typename?: 'FullSurveyType', slug: string, title?: string | null, canRemove: boolean, purpose: SurveyPurpose, form?: { __typename?: 'FormType', title: string, language: FormsFormLanguageChoices, description: string, thankYouMessage: string, fields?: unknown | null, canRemove: boolean } | null, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }> }; +export type EditProgramFormLanguageFragment = { slug: string, title: string | null, canRemove: boolean, purpose: SurveyPurpose, form: { title: string, language: FormsFormLanguageChoices, description: string, thankYouMessage: string, fields: unknown, canRemove: boolean } | null, languages: Array<{ language: FormsFormLanguageChoices }> }; export type EditProgramFormLanguagePageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - language: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + surveySlug: string; + language: string; + locale?: string | null | undefined; }>; -export type EditProgramFormLanguagePageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', slug: string, title?: string | null, canRemove: boolean, purpose: SurveyPurpose, form?: { __typename?: 'FormType', title: string, language: FormsFormLanguageChoices, description: string, thankYouMessage: string, fields?: unknown | null, canRemove: boolean } | null, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }> } | null } | null } | null }; +export type EditProgramFormLanguagePageQuery = { event: { name: string, slug: string, forms: { survey: { slug: string, title: string | null, canRemove: boolean, purpose: SurveyPurpose, form: { title: string, language: FormsFormLanguageChoices, description: string, thankYouMessage: string, fields: unknown, canRemove: boolean } | null, languages: Array<{ language: FormsFormLanguageChoices }> } | null } | null } | null }; export type CreateProgramFormLanguageMutationVariables = Exact<{ input: CreateSurveyLanguageInput; }>; -export type CreateProgramFormLanguageMutation = { __typename?: 'Mutation', createSurveyLanguage?: { __typename?: 'CreateSurveyLanguage', form?: { __typename?: 'FormType', language: FormsFormLanguageChoices } | null } | null }; +export type CreateProgramFormLanguageMutation = { createSurveyLanguage: { form: { language: FormsFormLanguageChoices } | null } | null }; export type UpdateProgramFormMutationMutationVariables = Exact<{ input: UpdateSurveyInput; }>; -export type UpdateProgramFormMutationMutation = { __typename?: 'Mutation', updateProgramForm?: { __typename?: 'UpdateProgramForm', survey?: { __typename?: 'FullSurveyType', slug: string } | null } | null }; +export type UpdateProgramFormMutationMutation = { updateProgramForm: { survey: { slug: string } | null } | null }; export type DeleteProrgamFormMutationMutationVariables = Exact<{ input: DeleteSurveyInput; }>; -export type DeleteProrgamFormMutationMutation = { __typename?: 'Mutation', deleteSurvey?: { __typename?: 'DeleteSurvey', slug?: string | null } | null }; +export type DeleteProrgamFormMutationMutation = { deleteSurvey: { slug: string | null } | null }; -export type EditProgramFormFragment = { __typename?: 'FullSurveyType', slug: string, title?: string | null, activeFrom?: string | null, activeUntil?: string | null, canRemove: boolean, purpose: SurveyPurpose, languages: Array<{ __typename?: 'FormType', title: string, language: FormsFormLanguageChoices, canRemove: boolean }> }; +export type EditProgramFormFragment = { slug: string, title: string | null, activeFrom: string | null, activeUntil: string | null, canRemove: boolean, purpose: SurveyPurpose, languages: Array<{ title: string, language: FormsFormLanguageChoices, canRemove: boolean }> }; export type EditProgramFormPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + surveySlug: string; + locale?: string | null | undefined; }>; -export type EditProgramFormPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', slug: string, title?: string | null, activeFrom?: string | null, activeUntil?: string | null, canRemove: boolean, purpose: SurveyPurpose, languages: Array<{ __typename?: 'FormType', title: string, language: FormsFormLanguageChoices, canRemove: boolean }> } | null } | null } | null }; +export type EditProgramFormPageQuery = { event: { name: string, slug: string, forms: { survey: { slug: string, title: string | null, activeFrom: string | null, activeUntil: string | null, canRemove: boolean, purpose: SurveyPurpose, languages: Array<{ title: string, language: FormsFormLanguageChoices, canRemove: boolean }> } | null } | null } | null }; export type CreateProgramFormMutationVariables = Exact<{ input: CreateProgramFormInput; }>; -export type CreateProgramFormMutation = { __typename?: 'Mutation', createProgramForm?: { __typename?: 'CreateProgramForm', survey?: { __typename?: 'FullSurveyType', slug: string } | null } | null }; +export type CreateProgramFormMutation = { createProgramForm: { survey: { slug: string } | null } | null }; -export type OfferFormFragment = { __typename?: 'FullSurveyType', slug: string, title?: string | null, isActive: boolean, activeFrom?: string | null, activeUntil?: string | null, countResponses: number, purpose: SurveyPurpose, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }> }; +export type OfferFormFragment = { slug: string, title: string | null, isActive: boolean, activeFrom: string | null, activeUntil: string | null, countResponses: number, purpose: SurveyPurpose, languages: Array<{ language: FormsFormLanguageChoices }> }; export type ProgramFormsPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + locale?: string | null | undefined; }>; -export type ProgramFormsPageQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', forms: { __typename?: 'FormsProfileMetaType', surveys: Array<{ __typename?: 'FullSurveyType', slug: string, title?: string | null, event: { __typename?: 'LimitedEventType', slug: string, name: string } }> } } | null, event?: { __typename?: 'FullEventType', slug: string, name: string, forms?: { __typename?: 'FormsEventMetaType', surveys: Array<{ __typename?: 'FullSurveyType', slug: string, title?: string | null, isActive: boolean, activeFrom?: string | null, activeUntil?: string | null, countResponses: number, purpose: SurveyPurpose, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }> }> } | null } | null }; +export type ProgramFormsPageQuery = { profile: { forms: { surveys: Array<{ slug: string, title: string | null, event: { slug: string, name: string } }> } } | null, event: { slug: string, name: string, forms: { surveys: Array<{ slug: string, title: string | null, isActive: boolean, activeFrom: string | null, activeUntil: string | null, countResponses: number, purpose: SurveyPurpose, languages: Array<{ language: FormsFormLanguageChoices }> }> } | null } | null }; -export type ProgramAdminHostFragment = { __typename?: 'FullProgramHostType', person: { __typename?: 'LimitedProfileType', firstName: string, lastName: string, nick: string }, programs: Array<{ __typename?: 'LimitedProgramType', slug: string, title: string, cachedDimensions?: unknown | null }> }; +export type ProgramAdminHostFragment = { person: { firstName: string, lastName: string, nick: string }, programs: Array<{ slug: string, title: string, cachedDimensions: unknown }> }; export type ProgramAdminHostsQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - filters?: InputMaybe | DimensionFilterInput>; - locale?: InputMaybe; + eventSlug: string; + filters?: Array | DimensionFilterInput | null | undefined; + locale?: string | null | undefined; }>; -export type ProgramAdminHostsQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, program?: { __typename?: 'ProgramV2EventMetaType', programHostsExcelExportLink: string, dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }>, programHosts: Array<{ __typename?: 'FullProgramHostType', person: { __typename?: 'LimitedProfileType', firstName: string, lastName: string, nick: string }, programs: Array<{ __typename?: 'LimitedProgramType', slug: string, title: string, cachedDimensions?: unknown | null }> }> } | null } | null }; +export type ProgramAdminHostsQuery = { event: { name: string, slug: string, timezone: string, program: { programHostsExcelExportLink: string, dimensions: Array<{ slug: string, title: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, values: Array<{ slug: string, title: string | null }> }>, programHosts: Array<{ person: { firstName: string, lastName: string, nick: string }, programs: Array<{ slug: string, title: string, cachedDimensions: unknown }> }> } | null } | null }; -export type ProgramAdminInvitationFragment = { __typename?: 'FullInvitationType', id: string, email: string, createdAt: string, cachedDimensions?: unknown | null, program?: { __typename?: 'LimitedProgramType', slug: string, title: string } | null }; +export type ProgramAdminInvitationFragment = { id: string, email: string, createdAt: string, cachedDimensions: unknown, program: { slug: string, title: string } | null }; export type ProgramAdminInvitationsQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; + eventSlug: string; }>; -export type ProgramAdminInvitationsQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, program?: { __typename?: 'ProgramV2EventMetaType', invitations: Array<{ __typename?: 'FullInvitationType', id: string, email: string, createdAt: string, cachedDimensions?: unknown | null, program?: { __typename?: 'LimitedProgramType', slug: string, title: string } | null }> } | null } | null }; +export type ProgramAdminInvitationsQuery = { event: { name: string, slug: string, timezone: string, program: { invitations: Array<{ id: string, email: string, createdAt: string, cachedDimensions: unknown, program: { slug: string, title: string } | null }> } | null } | null }; export type UpdateMessageMutationVariables = Exact<{ input: UpdateMessageInput; }>; -export type UpdateMessageMutation = { __typename?: 'Mutation', updateMessage?: { __typename?: 'UpdateMessage', message?: { __typename?: 'MessageType', id: string } | null } | null }; +export type UpdateMessageMutation = { updateMessage: { message: { id: string } | null } | null }; export type SendMessageMutationVariables = Exact<{ input: SendMessageInput; }>; -export type SendMessageMutation = { __typename?: 'Mutation', sendMessage?: { __typename?: 'SendMessage', message?: { __typename?: 'MessageType', id: string } | null } | null }; +export type SendMessageMutation = { sendMessage: { message: { id: string } | null } | null }; export type ExpireMessageMutationVariables = Exact<{ input: ExpireMessageInput; }>; -export type ExpireMessageMutation = { __typename?: 'Mutation', expireMessage?: { __typename?: 'ExpireMessage', message?: { __typename?: 'MessageType', id: string } | null } | null }; +export type ExpireMessageMutation = { expireMessage: { message: { id: string } | null } | null }; export type DeleteMessageMutationVariables = Exact<{ input: DeleteMessageInput; }>; -export type DeleteMessageMutation = { __typename?: 'Mutation', deleteMessage?: { __typename?: 'DeleteMessage', messageId?: string | null } | null }; +export type DeleteMessageMutation = { deleteMessage: { messageId: string | null } | null }; -export type MessageComposeFragment = { __typename?: 'MessageType', id: string, subject: string, body: string, dispatch: MessageDispatch, state: MessageState, createdAt: string, sentAt?: string | null, expiredAt?: string | null, recipientFilters: unknown, recipientCount: number, replyTo?: { __typename?: 'MessageReplyToType', id: string } | null }; +export type MessageComposeFragment = { id: string, subject: string, body: string, dispatch: MessageDispatch, state: MessageState, createdAt: string, sentAt: string | null, expiredAt: string | null, recipientFilters: unknown, recipientCount: number, replyTo: { id: string } | null }; export type ProgramMessageComposePageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - messageId: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + messageId: string; + locale?: string | null | undefined; }>; -export type ProgramMessageComposePageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, program?: { __typename?: 'ProgramV2EventMetaType', message?: { __typename?: 'MessageType', id: string, subject: string, body: string, dispatch: MessageDispatch, state: MessageState, createdAt: string, sentAt?: string | null, expiredAt?: string | null, recipientFilters: unknown, recipientCount: number, replyTo?: { __typename?: 'MessageReplyToType', id: string } | null } | null, replyToAddresses: Array<{ __typename?: 'MessageReplyToType', id: string, name: string, email: string }>, recipientDimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }> } | null } | null }; +export type ProgramMessageComposePageQuery = { event: { name: string, slug: string, program: { message: { id: string, subject: string, body: string, dispatch: MessageDispatch, state: MessageState, createdAt: string, sentAt: string | null, expiredAt: string | null, recipientFilters: unknown, recipientCount: number, replyTo: { id: string } | null } | null, replyToAddresses: Array<{ id: string, name: string, email: string }>, recipientDimensions: Array<{ slug: string, title: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ slug: string, title: string | null }> }> } | null } | null }; export type CreateMessageMutationVariables = Exact<{ input: CreateMessageInput; }>; -export type CreateMessageMutation = { __typename?: 'Mutation', createMessage?: { __typename?: 'CreateMessage', message?: { __typename?: 'MessageType', id: string } | null } | null }; +export type CreateMessageMutation = { createMessage: { message: { id: string } | null } | null }; export type ProgramMessageNewPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + locale?: string | null | undefined; }>; -export type ProgramMessageNewPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, program?: { __typename?: 'ProgramV2EventMetaType', replyToAddresses: Array<{ __typename?: 'MessageReplyToType', id: string, name: string, email: string }>, recipientDimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }> } | null } | null }; +export type ProgramMessageNewPageQuery = { event: { name: string, slug: string, program: { replyToAddresses: Array<{ id: string, name: string, email: string }>, recipientDimensions: Array<{ slug: string, title: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ slug: string, title: string | null }> }> } | null } | null }; -export type ProgramMessageListRowFragment = { __typename?: 'MessageType', id: string, subject: string, state: MessageState, dispatch: MessageDispatch, createdAt: string, sentAt?: string | null, recipientCount: number }; +export type ProgramMessageListRowFragment = { id: string, subject: string, state: MessageState, dispatch: MessageDispatch, createdAt: string, sentAt: string | null, recipientCount: number }; export type ProgramMessagesPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; + eventSlug: string; }>; -export type ProgramMessagesPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, program?: { __typename?: 'ProgramV2EventMetaType', messages: Array<{ __typename?: 'MessageType', id: string, subject: string, state: MessageState, dispatch: MessageDispatch, createdAt: string, sentAt?: string | null, recipientCount: number }> } | null } | null }; +export type ProgramMessagesPageQuery = { event: { name: string, slug: string, program: { messages: Array<{ id: string, subject: string, state: MessageState, dispatch: MessageDispatch, createdAt: string, sentAt: string | null, recipientCount: number }> } | null } | null }; export type AcceptProgramOfferMutationVariables = Exact<{ input: AcceptProgramOfferInput; }>; -export type AcceptProgramOfferMutation = { __typename?: 'Mutation', acceptProgramOffer?: { __typename?: 'AcceptProgramOffer', program: { __typename?: 'FullProgramType', slug: string } } | null }; +export type AcceptProgramOfferMutation = { acceptProgramOffer: { program: { slug: string } } | null }; export type CancelProgramOfferMutationVariables = Exact<{ input: CancelProgramOfferInput; }>; -export type CancelProgramOfferMutation = { __typename?: 'Mutation', cancelProgramOffer?: { __typename?: 'CancelProgramOffer', responseId: string } | null }; +export type CancelProgramOfferMutation = { cancelProgramOffer: { responseId: string } | null }; export type EditProgramOfferMutationVariables = Exact<{ input: CreateSurveyResponseInput; }>; -export type EditProgramOfferMutation = { __typename?: 'Mutation', createSurveyResponse?: { __typename?: 'CreateSurveyResponse', response?: { __typename?: 'ProfileResponseType', id: string } | null } | null }; +export type EditProgramOfferMutation = { createSurveyResponse: { response: { id: string } | null } | null }; -export type ProgramOfferEditFragment = { __typename?: 'FullResponseType', id: string, revisionCreatedAt: string, language: string, values?: unknown | null, cachedDimensions?: unknown | null, canEdit: boolean, originalCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, form: { __typename?: 'FormType', title: string, description: string, fields?: unknown | null, survey: { __typename?: 'FullSurveyType', slug: string, cachedDefaultResponseDimensions?: unknown | null, profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, supersededBy?: { __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null } | null, oldVersions: Array<{ __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }> }; +export type ProgramOfferEditFragment = { id: string, revisionCreatedAt: string, language: string, values: unknown, cachedDimensions: unknown, canEdit: boolean, originalCreatedBy: { fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, form: { title: string, description: string, fields: unknown, survey: { slug: string, cachedDefaultResponseDimensions: unknown, profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, supersededBy: { id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null } | null, oldVersions: Array<{ id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null }> }; export type ProgramOfferEditPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - responseId: Scalars['String']['input']; + eventSlug: string; + responseId: string; }>; -export type ProgramOfferEditPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, program?: { __typename?: 'ProgramV2EventMetaType', programOffer?: { __typename?: 'FullResponseType', id: string, revisionCreatedAt: string, language: string, values?: unknown | null, cachedDimensions?: unknown | null, canEdit: boolean, originalCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, form: { __typename?: 'FormType', title: string, description: string, fields?: unknown | null, survey: { __typename?: 'FullSurveyType', slug: string, cachedDefaultResponseDimensions?: unknown | null, profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, supersededBy?: { __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null } | null, oldVersions: Array<{ __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }> } | null } | null } | null }; +export type ProgramOfferEditPageQuery = { event: { name: string, slug: string, timezone: string, program: { programOffer: { id: string, revisionCreatedAt: string, language: string, values: unknown, cachedDimensions: unknown, canEdit: boolean, originalCreatedBy: { fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, form: { title: string, description: string, fields: unknown, survey: { slug: string, cachedDefaultResponseDimensions: unknown, profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, supersededBy: { id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null } | null, oldVersions: Array<{ id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null }> } | null } | null } | null }; -export type ProgramOfferDetailFragment = { __typename?: 'FullResponseType', values?: unknown | null, cachedDimensions?: unknown | null, canEdit: boolean, canAccept: boolean, canCancel: boolean, canDelete: boolean, id: string, originalCreatedAt: string, revisionCreatedAt: string, language: string, form: { __typename?: 'FormType', description: string, fields?: unknown | null, survey: { __typename?: 'FullSurveyType', title?: string | null, slug: string, cachedDefaultResponseDimensions?: unknown | null, cachedDefaultInvolvementDimensions?: unknown | null, profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, programs: Array<{ __typename?: 'LimitedProgramType', slug: string, title: string, cachedDimensions?: unknown | null }>, dimensions: Array<{ __typename?: 'ResponseDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string } }>, originalCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, revisionCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string } | null, supersededBy?: { __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null } | null, oldVersions: Array<{ __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }> }; +export type ProgramOfferDetailFragment = { values: unknown, cachedDimensions: unknown, canEdit: boolean, canAccept: boolean, canCancel: boolean, canDelete: boolean, id: string, originalCreatedAt: string, revisionCreatedAt: string, language: string, form: { description: string, fields: unknown, survey: { title: string | null, slug: string, cachedDefaultResponseDimensions: unknown, cachedDefaultInvolvementDimensions: unknown, profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, programs: Array<{ slug: string, title: string, cachedDimensions: unknown }>, dimensions: Array<{ dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null, color: string } }>, originalCreatedBy: { fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, revisionCreatedBy: { fullName: string } | null, supersededBy: { id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null } | null, oldVersions: Array<{ id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null }> }; export type ProgramOfferPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - responseId: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + responseId: string; + locale?: string | null | undefined; }>; -export type ProgramOfferPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, program?: { __typename?: 'ProgramV2EventMetaType', involvementDimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }>, dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }>, programOffer?: { __typename?: 'FullResponseType', values?: unknown | null, cachedDimensions?: unknown | null, canEdit: boolean, canAccept: boolean, canCancel: boolean, canDelete: boolean, id: string, originalCreatedAt: string, revisionCreatedAt: string, language: string, form: { __typename?: 'FormType', description: string, fields?: unknown | null, survey: { __typename?: 'FullSurveyType', title?: string | null, slug: string, cachedDefaultResponseDimensions?: unknown | null, cachedDefaultInvolvementDimensions?: unknown | null, profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, programs: Array<{ __typename?: 'LimitedProgramType', slug: string, title: string, cachedDimensions?: unknown | null }>, dimensions: Array<{ __typename?: 'ResponseDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string } }>, originalCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, revisionCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string } | null, supersededBy?: { __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null } | null, oldVersions: Array<{ __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }> } | null } | null } | null }; +export type ProgramOfferPageQuery = { event: { name: string, slug: string, timezone: string, program: { involvementDimensions: Array<{ slug: string, title: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ slug: string, title: string | null }> }>, dimensions: Array<{ slug: string, title: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ slug: string, title: string | null }> }>, programOffer: { values: unknown, cachedDimensions: unknown, canEdit: boolean, canAccept: boolean, canCancel: boolean, canDelete: boolean, id: string, originalCreatedAt: string, revisionCreatedAt: string, language: string, form: { description: string, fields: unknown, survey: { title: string | null, slug: string, cachedDefaultResponseDimensions: unknown, cachedDefaultInvolvementDimensions: unknown, profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, programs: Array<{ slug: string, title: string, cachedDimensions: unknown }>, dimensions: Array<{ dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null, color: string } }>, originalCreatedBy: { fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, revisionCreatedBy: { fullName: string } | null, supersededBy: { id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null } | null, oldVersions: Array<{ id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null }> } | null } | null } | null }; export type DeleteProgramOffersMutationVariables = Exact<{ input: DeleteProgramOffersInput; }>; -export type DeleteProgramOffersMutation = { __typename?: 'Mutation', deleteProgramOffers?: { __typename?: 'DeleteProgramOffers', countDeleted: number } | null }; +export type DeleteProgramOffersMutation = { deleteProgramOffers: { countDeleted: number } | null }; -export type ProgramOfferFragment = { __typename?: 'FullResponseType', id: string, originalCreatedAt: string, sequenceNumber: number, values?: unknown | null, cachedDimensions?: unknown | null, originalCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string } | null, form: { __typename?: 'FormType', language: FormsFormLanguageChoices, survey: { __typename?: 'FullSurveyType', title?: string | null } }, programs: Array<{ __typename?: 'LimitedProgramType', slug: string, title: string }> }; +export type ProgramOfferFragment = { id: string, originalCreatedAt: string, sequenceNumber: number, values: unknown, cachedDimensions: unknown, originalCreatedBy: { fullName: string } | null, form: { language: FormsFormLanguageChoices, survey: { title: string | null } }, programs: Array<{ slug: string, title: string }> }; -export type ProgramOfferDimensionFragment = { __typename?: 'FullDimensionType', slug: string, title?: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, isTechnical: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string }> }; +export type ProgramOfferDimensionFragment = { slug: string, title: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, isTechnical: boolean, values: Array<{ slug: string, title: string | null, color: string }> }; export type ProgramOffersQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - locale?: InputMaybe; - filters?: InputMaybe | DimensionFilterInput>; + eventSlug: string; + locale?: string | null | undefined; + filters?: Array | DimensionFilterInput | null | undefined; }>; -export type ProgramOffersQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', slug: string, name: string, program?: { __typename?: 'ProgramV2EventMetaType', programOffersExcelExportLink: string, canDeleteProgramOffers: boolean, countProgramOffers: number, listFilters: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, isTechnical: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string }> }>, keyDimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, isTechnical: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string }> }>, stateDimension?: { __typename?: 'FullDimensionType', slug: string, title?: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, isTechnical: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string }> } | null, programOffers: Array<{ __typename?: 'FullResponseType', id: string, originalCreatedAt: string, sequenceNumber: number, values?: unknown | null, cachedDimensions?: unknown | null, originalCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string } | null, form: { __typename?: 'FormType', language: FormsFormLanguageChoices, survey: { __typename?: 'FullSurveyType', title?: string | null } }, programs: Array<{ __typename?: 'LimitedProgramType', slug: string, title: string }> }> } | null } | null }; +export type ProgramOffersQuery = { event: { slug: string, name: string, program: { programOffersExcelExportLink: string, canDeleteProgramOffers: boolean, countProgramOffers: number, listFilters: Array<{ slug: string, title: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, isTechnical: boolean, values: Array<{ slug: string, title: string | null, color: string }> }>, keyDimensions: Array<{ slug: string, title: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, isTechnical: boolean, values: Array<{ slug: string, title: string | null, color: string }> }>, stateDimension: { slug: string, title: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, isTechnical: boolean, values: Array<{ slug: string, title: string | null, color: string }> } | null, programOffers: Array<{ id: string, originalCreatedAt: string, sequenceNumber: number, values: unknown, cachedDimensions: unknown, originalCreatedBy: { fullName: string } | null, form: { language: FormsFormLanguageChoices, survey: { title: string | null } }, programs: Array<{ slug: string, title: string }> }> } | null } | null }; export type UpdateProgramPreferencesMutationVariables = Exact<{ input: UpdateProgramPreferencesInput; }>; -export type UpdateProgramPreferencesMutation = { __typename?: 'Mutation', updateProgramPreferences?: { __typename?: 'UpdateProgramPreferences', preferences?: { __typename?: 'ProgramV2EventMetaType', publicFrom?: string | null, isSchedulePublic: boolean } | null } | null }; +export type UpdateProgramPreferencesMutation = { updateProgramPreferences: { preferences: { publicFrom: string | null, isSchedulePublic: boolean } | null } | null }; export type CreateMessageReplyToMutationVariables = Exact<{ input: CreateMessageReplyToInput; }>; -export type CreateMessageReplyToMutation = { __typename?: 'Mutation', createMessageReplyTo?: { __typename?: 'CreateMessageReplyTo', replyTo?: { __typename?: 'MessageReplyToType', id: string } | null } | null }; +export type CreateMessageReplyToMutation = { createMessageReplyTo: { replyTo: { id: string } | null } | null }; export type UpdateMessageReplyToMutationVariables = Exact<{ input: UpdateMessageReplyToInput; }>; -export type UpdateMessageReplyToMutation = { __typename?: 'Mutation', updateMessageReplyTo?: { __typename?: 'UpdateMessageReplyTo', replyTo?: { __typename?: 'MessageReplyToType', id: string } | null } | null }; +export type UpdateMessageReplyToMutation = { updateMessageReplyTo: { replyTo: { id: string } | null } | null }; export type DeleteMessageReplyToMutationVariables = Exact<{ input: DeleteMessageReplyToInput; }>; -export type DeleteMessageReplyToMutation = { __typename?: 'Mutation', deleteMessageReplyTo?: { __typename?: 'DeleteMessageReplyTo', replyToId?: string | null } | null }; +export type DeleteMessageReplyToMutation = { deleteMessageReplyTo: { replyToId: string | null } | null }; -export type MessageReplyToRowFragment = { __typename?: 'MessageReplyToType', id: string, name: string, email: string }; +export type MessageReplyToRowFragment = { id: string, name: string, email: string }; export type ProgramPreferencesQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; + eventSlug: string; }>; -export type ProgramPreferencesQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, program?: { __typename?: 'ProgramV2EventMetaType', publicFrom?: string | null, isSchedulePublic: boolean, replyToAddresses: Array<{ __typename?: 'MessageReplyToType', id: string, name: string, email: string }> } | null } | null }; +export type ProgramPreferencesQuery = { event: { name: string, slug: string, program: { publicFrom: string | null, isSchedulePublic: boolean, replyToAddresses: Array<{ id: string, name: string, email: string }> } | null } | null }; export type ProgramAdminReportsPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + locale?: string | null | undefined; }>; -export type ProgramAdminReportsPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, program?: { __typename?: 'ProgramV2EventMetaType', reports: Array<{ __typename?: 'ReportType', slug: string, title: string, footer: string, rows: Array>, totalRow?: Array | null, columns: Array<{ __typename?: 'ColumnType', slug: string, title: string, type: TypeOfColumn }> }> } | null } | null }; +export type ProgramAdminReportsPageQuery = { event: { name: string, slug: string, timezone: string, program: { reports: Array<{ slug: string, title: string, footer: string, rows: Array>, totalRow: Array | null, columns: Array<{ slug: string, title: string, type: TypeOfColumn }> }> } | null } | null }; export type MarkScheduleItemAsFavoriteMutationVariables = Exact<{ input: FavoriteScheduleItemInput; }>; -export type MarkScheduleItemAsFavoriteMutation = { __typename?: 'Mutation', markScheduleItemAsFavorite?: { __typename?: 'MarkScheduleItemAsFavorite', success: boolean } | null }; +export type MarkScheduleItemAsFavoriteMutation = { markScheduleItemAsFavorite: { success: boolean } | null }; export type UnmarkScheduleItemAsFavoriteMutationVariables = Exact<{ input: FavoriteScheduleItemInput; }>; -export type UnmarkScheduleItemAsFavoriteMutation = { __typename?: 'Mutation', unmarkScheduleItemAsFavorite?: { __typename?: 'UnmarkScheduleItemAsFavorite', success: boolean } | null }; +export type UnmarkScheduleItemAsFavoriteMutation = { unmarkScheduleItemAsFavorite: { success: boolean } | null }; -export type ScheduleProgramFragment = { __typename?: 'LimitedProgramType', slug: string, title: string, cachedDimensions?: unknown | null, color: string, isCancelled: boolean }; +export type ScheduleProgramFragment = { slug: string, title: string, cachedDimensions: unknown, color: string, isCancelled: boolean }; -export type ScheduleItemListFragment = { __typename?: 'FullScheduleItemType', slug: string, location?: string | null, subtitle: string, startTime: string, endTime: string, program: { __typename?: 'LimitedProgramType', slug: string, title: string, cachedDimensions?: unknown | null, color: string, isCancelled: boolean } }; +export type ScheduleItemListFragment = { slug: string, location: string | null, subtitle: string, startTime: string, endTime: string, program: { slug: string, title: string, cachedDimensions: unknown, color: string, isCancelled: boolean } }; export type ProgramListQueryQueryVariables = Exact<{ - locale?: InputMaybe; - eventSlug: Scalars['String']['input']; - filters?: InputMaybe | DimensionFilterInput>; - hidePast?: InputMaybe; + locale?: string | null | undefined; + eventSlug: string; + filters?: Array | DimensionFilterInput | null | undefined; + hidePast?: boolean | null | undefined; }>; -export type ProgramListQueryQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', program: { __typename?: 'ProgramV2ProfileMetaType', scheduleItems?: Array<{ __typename?: 'FullScheduleItemType', slug: string, location?: string | null, subtitle: string, startTime: string, endTime: string, program: { __typename?: 'LimitedProgramType', slug: string, title: string, cachedDimensions?: unknown | null, color: string, isCancelled: boolean } }> | null } } | null, event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, program?: { __typename?: 'ProgramV2EventMetaType', calendarExportLink: string, isSchedulePublic: boolean, listFilters: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }>, scheduleItems: Array<{ __typename?: 'FullScheduleItemType', slug: string, location?: string | null, subtitle: string, startTime: string, endTime: string, program: { __typename?: 'LimitedProgramType', slug: string, title: string, cachedDimensions?: unknown | null, color: string, isCancelled: boolean } }> } | null } | null }; +export type ProgramListQueryQuery = { profile: { program: { scheduleItems: Array<{ slug: string, location: string | null, subtitle: string, startTime: string, endTime: string, program: { slug: string, title: string, cachedDimensions: unknown, color: string, isCancelled: boolean } }> | null } } | null, event: { name: string, slug: string, timezone: string, program: { calendarExportLink: string, isSchedulePublic: boolean, listFilters: Array<{ slug: string, title: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, values: Array<{ slug: string, title: string | null }> }>, scheduleItems: Array<{ slug: string, location: string | null, subtitle: string, startTime: string, endTime: string, program: { slug: string, title: string, cachedDimensions: unknown, color: string, isCancelled: boolean } }> } | null } | null }; export type CreateFeedbackMutationVariables = Exact<{ input: ProgramFeedbackInput; }>; -export type CreateFeedbackMutation = { __typename?: 'Mutation', createProgramFeedback?: { __typename?: 'CreateProgramFeedback', success: boolean } | null }; +export type CreateFeedbackMutation = { createProgramFeedback: { success: boolean } | null }; export type ProgramFeedbackQueryQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - programSlug: Scalars['String']['input']; + eventSlug: string; + programSlug: string; }>; -export type ProgramFeedbackQueryQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, program?: { __typename?: 'ProgramV2EventMetaType', program?: { __typename?: 'FullProgramType', title: string, isAcceptingFeedback: boolean } | null } | null } | null }; +export type ProgramFeedbackQueryQuery = { event: { name: string, program: { program: { title: string, isAcceptingFeedback: boolean } | null } | null } | null }; -export type ProgramDetailAnnotationFragment = { __typename?: 'ProgramAnnotationType', value?: unknown | null, annotation: { __typename?: 'AnnotationType', slug: string, type: AnnotationDataType, title: string } }; +export type ProgramDetailAnnotationFragment = { value: unknown, annotation: { slug: string, type: AnnotationDataType, title: string } }; export type ProgramDetailQueryQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - programSlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + programSlug: string; + locale?: string | null | undefined; }>; -export type ProgramDetailQueryQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', program: { __typename?: 'ProgramV2ProfileMetaType', scheduleItems?: Array<{ __typename?: 'FullScheduleItemType', slug: string }> | null } } | null, event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, program?: { __typename?: 'ProgramV2EventMetaType', calendarExportLink: string, program?: { __typename?: 'FullProgramType', title: string, description: string, cachedHosts: string, isCancelled: boolean, links: Array<{ __typename?: 'ProgramLink', type: ProgramLinkType, href: string, title: string }>, annotations: Array<{ __typename?: 'ProgramAnnotationType', value?: unknown | null, annotation: { __typename?: 'AnnotationType', slug: string, type: AnnotationDataType, title: string } }>, dimensions: Array<{ __typename?: 'ProgramDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null } }>, scheduleItems: Array<{ __typename?: 'LimitedScheduleItemType', slug: string, subtitle: string, location?: string | null, startTime: string, endTime: string, links: Array<{ __typename?: 'ProgramLink', type: ProgramLinkType, href: string, title: string }> }> } | null } | null } | null }; +export type ProgramDetailQueryQuery = { profile: { program: { scheduleItems: Array<{ slug: string }> | null } } | null, event: { name: string, slug: string, timezone: string, program: { calendarExportLink: string, program: { title: string, description: string, cachedHosts: string, isCancelled: boolean, links: Array<{ type: ProgramLinkType, href: string, title: string }>, annotations: Array<{ value: unknown, annotation: { slug: string, type: AnnotationDataType, title: string } }>, dimensions: Array<{ dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null } }>, scheduleItems: Array<{ slug: string, subtitle: string, location: string | null, startTime: string, endTime: string, links: Array<{ type: ProgramLinkType, href: string, title: string }> }> } | null } | null } | null }; export type UpdateQuotaMutationVariables = Exact<{ input: UpdateQuotaInput; }>; -export type UpdateQuotaMutation = { __typename?: 'Mutation', updateQuota?: { __typename?: 'UpdateQuota', quota?: { __typename?: 'LimitedQuotaType', id: string } | null } | null }; +export type UpdateQuotaMutation = { updateQuota: { quota: { id: string } | null } | null }; export type DeleteQuotaMutationVariables = Exact<{ input: DeleteQuotaInput; }>; -export type DeleteQuotaMutation = { __typename?: 'Mutation', deleteQuota?: { __typename?: 'DeleteQuota', id: string } | null }; +export type DeleteQuotaMutation = { deleteQuota: { id: string } | null }; -export type QuotaProductFragment = { __typename?: 'LimitedProductType', id: number, title: string, price: any, countReserved: number }; +export type QuotaProductFragment = { id: number, title: string, price: string, countReserved: number }; export type AdminQuotaDetailPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - quotaId: Scalars['Int']['input']; + eventSlug: string; + quotaId: number; }>; -export type AdminQuotaDetailPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, tickets?: { __typename?: 'TicketsV2EventMetaType', quota: { __typename?: 'FullQuotaType', id: string, name: string, countReserved: number, canDelete: boolean, quota: number, products: Array<{ __typename?: 'LimitedProductType', id: number, title: string, price: any, countReserved: number }> } } | null } | null }; +export type AdminQuotaDetailPageQuery = { event: { name: string, slug: string, tickets: { quota: { id: string, name: string, countReserved: number, canDelete: boolean, quota: number, products: Array<{ id: number, title: string, price: string, countReserved: number }> } } | null } | null }; export type CreateQuotaMutationVariables = Exact<{ input: CreateQuotaInput; }>; -export type CreateQuotaMutation = { __typename?: 'Mutation', createQuota?: { __typename?: 'CreateQuota', quota?: { __typename?: 'LimitedQuotaType', id: string } | null } | null }; +export type CreateQuotaMutation = { createQuota: { quota: { id: string } | null } | null }; -export type QuotaListFragment = { __typename?: 'FullQuotaType', id: string, countPaid: number, countReserved: number, countAvailable: number, countTotal: number, title: string }; +export type QuotaListFragment = { id: string, countPaid: number, countReserved: number, countAvailable: number, countTotal: number, title: string }; export type QuotaListQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; + eventSlug: string; }>; -export type QuotaListQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, tickets?: { __typename?: 'TicketsV2EventMetaType', quotas: Array<{ __typename?: 'FullQuotaType', id: string, countPaid: number, countReserved: number, countAvailable: number, countTotal: number, title: string }> } | null } | null }; +export type QuotaListQuery = { event: { name: string, slug: string, tickets: { quotas: Array<{ id: string, countPaid: number, countReserved: number, countAvailable: number, countTotal: number, title: string }> } | null } | null }; export type UpdateSurveyDefaultDimensionsMutationVariables = Exact<{ input: UpdateSurveyDefaultDimensionsInput; }>; -export type UpdateSurveyDefaultDimensionsMutation = { __typename?: 'Mutation', updateSurveyDefaultDimensions?: { __typename?: 'UpdateSurveyDefaultDimensions', survey?: { __typename?: 'FullSurveyType', slug: string } | null } | null }; +export type UpdateSurveyDefaultDimensionsMutation = { updateSurveyDefaultDimensions: { survey: { slug: string } | null } | null }; export type SurveyDimensionDefaultsQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - locale: Scalars['String']['input']; + eventSlug: string; + surveySlug: string; + locale: string; }>; -export type SurveyDimensionDefaultsQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', slug: string, title?: string | null, purpose: SurveyPurpose, canRemove: boolean, cachedDefaultResponseDimensions?: unknown | null, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }>, dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, canRemove: boolean, canAddValues: boolean, title?: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ __typename?: 'DimensionValueType', slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title?: string | null, titleFi: string, titleEn: string, titleSv: string }> }> } | null } | null } | null }; +export type SurveyDimensionDefaultsQuery = { event: { name: string, slug: string, forms: { survey: { slug: string, title: string | null, purpose: SurveyPurpose, canRemove: boolean, cachedDefaultResponseDimensions: unknown, languages: Array<{ language: FormsFormLanguageChoices }>, dimensions: Array<{ slug: string, canRemove: boolean, canAddValues: boolean, title: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title: string | null, titleFi: string, titleEn: string, titleSv: string }> }> } | null } | null } | null }; export type PutSurveyDimensionMutationVariables = Exact<{ input: PutDimensionInput; }>; -export type PutSurveyDimensionMutation = { __typename?: 'Mutation', putDimension?: { __typename?: 'PutDimension', dimension?: { __typename?: 'FullDimensionType', slug: string } | null } | null }; +export type PutSurveyDimensionMutation = { putDimension: { dimension: { slug: string } | null } | null }; export type DeleteSurveyDimensionMutationVariables = Exact<{ input: DeleteDimensionInput; }>; -export type DeleteSurveyDimensionMutation = { __typename?: 'Mutation', deleteDimension?: { __typename?: 'DeleteDimension', slug?: string | null } | null }; +export type DeleteSurveyDimensionMutation = { deleteDimension: { slug: string | null } | null }; export type PutSurveyDimensionValueMutationVariables = Exact<{ input: PutDimensionValueInput; }>; -export type PutSurveyDimensionValueMutation = { __typename?: 'Mutation', putDimensionValue?: { __typename?: 'PutDimensionValue', value?: { __typename?: 'DimensionValueType', slug: string } | null } | null }; +export type PutSurveyDimensionValueMutation = { putDimensionValue: { value: { slug: string } | null } | null }; export type DeleteSurveyDimensionValueMutationVariables = Exact<{ input: DeleteDimensionValueInput; }>; -export type DeleteSurveyDimensionValueMutation = { __typename?: 'Mutation', deleteDimensionValue?: { __typename?: 'DeleteDimensionValue', slug?: string | null } | null }; +export type DeleteSurveyDimensionValueMutation = { deleteDimensionValue: { slug: string | null } | null }; export type DimensionsListQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - locale: Scalars['String']['input']; + eventSlug: string; + surveySlug: string; + locale: string; }>; -export type DimensionsListQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', slug: string, title?: string | null, canRemove: boolean, purpose: SurveyPurpose, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }>, dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, canRemove: boolean, canAddValues: boolean, title?: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ __typename?: 'DimensionValueType', slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title?: string | null, titleFi: string, titleEn: string, titleSv: string }> }> } | null } | null } | null }; +export type DimensionsListQuery = { event: { name: string, forms: { survey: { slug: string, title: string | null, canRemove: boolean, purpose: SurveyPurpose, languages: Array<{ language: FormsFormLanguageChoices }>, dimensions: Array<{ slug: string, canRemove: boolean, canAddValues: boolean, title: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title: string | null, titleFi: string, titleEn: string, titleSv: string }> }> } | null } | null } | null }; export type UpdateFormMutationMutationVariables = Exact<{ input: UpdateFormInput; }>; -export type UpdateFormMutationMutation = { __typename?: 'Mutation', updateForm?: { __typename?: 'UpdateForm', survey?: { __typename?: 'FullSurveyType', slug: string } | null } | null }; +export type UpdateFormMutationMutation = { updateForm: { survey: { slug: string } | null } | null }; export type DeleteSurveyLanguageMutationVariables = Exact<{ input: DeleteSurveyLanguageInput; }>; -export type DeleteSurveyLanguageMutation = { __typename?: 'Mutation', deleteSurveyLanguage?: { __typename?: 'DeleteSurveyLanguage', language?: string | null } | null }; +export type DeleteSurveyLanguageMutation = { deleteSurveyLanguage: { language: string | null } | null }; export type PromoteSurveyFieldToDimensionMutationVariables = Exact<{ input: PromoteFieldToDimensionInput; }>; -export type PromoteSurveyFieldToDimensionMutation = { __typename?: 'Mutation', promoteFieldToDimension?: { __typename?: 'PromoteFieldToDimension', survey?: { __typename?: 'FullSurveyType', slug: string } | null } | null }; +export type PromoteSurveyFieldToDimensionMutation = { promoteFieldToDimension: { survey: { slug: string } | null } | null }; -export type EditSurveyFieldsPageFragment = { __typename?: 'FullSurveyType', slug: string, title?: string | null, canRemove: boolean, purpose: SurveyPurpose, dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, canRemove: boolean, canAddValues: boolean, title?: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ __typename?: 'DimensionValueType', slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title?: string | null, titleFi: string, titleEn: string, titleSv: string }> }>, form?: { __typename?: 'FormType', title: string, language: FormsFormLanguageChoices, fields?: unknown | null, canRemove: boolean } | null, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }> }; +export type EditSurveyFieldsPageFragment = { slug: string, title: string | null, canRemove: boolean, purpose: SurveyPurpose, dimensions: Array<{ slug: string, canRemove: boolean, canAddValues: boolean, title: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title: string | null, titleFi: string, titleEn: string, titleSv: string }> }>, form: { title: string, language: FormsFormLanguageChoices, fields: unknown, canRemove: boolean } | null, languages: Array<{ language: FormsFormLanguageChoices }> }; export type EditSurveyFieldsPageQueryQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - language: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + surveySlug: string; + language: string; + locale?: string | null | undefined; }>; -export type EditSurveyFieldsPageQueryQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', slug: string, title?: string | null, canRemove: boolean, purpose: SurveyPurpose, dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, canRemove: boolean, canAddValues: boolean, title?: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ __typename?: 'DimensionValueType', slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title?: string | null, titleFi: string, titleEn: string, titleSv: string }> }>, form?: { __typename?: 'FormType', title: string, language: FormsFormLanguageChoices, fields?: unknown | null, canRemove: boolean } | null, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }> } | null } | null } | null }; +export type EditSurveyFieldsPageQueryQuery = { event: { name: string, forms: { survey: { slug: string, title: string | null, canRemove: boolean, purpose: SurveyPurpose, dimensions: Array<{ slug: string, canRemove: boolean, canAddValues: boolean, title: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title: string | null, titleFi: string, titleEn: string, titleSv: string }> }>, form: { title: string, language: FormsFormLanguageChoices, fields: unknown, canRemove: boolean } | null, languages: Array<{ language: FormsFormLanguageChoices }> } | null } | null } | null }; -export type EditFormLanguagePageFragment = { __typename?: 'FullSurveyType', slug: string, title?: string | null, canRemove: boolean, purpose: SurveyPurpose, form?: { __typename?: 'FormType', title: string, language: FormsFormLanguageChoices, description: string, thankYouMessage: string, fields?: unknown | null, canRemove: boolean } | null, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }> }; +export type EditFormLanguagePageFragment = { slug: string, title: string | null, canRemove: boolean, purpose: SurveyPurpose, form: { title: string, language: FormsFormLanguageChoices, description: string, thankYouMessage: string, fields: unknown, canRemove: boolean } | null, languages: Array<{ language: FormsFormLanguageChoices }> }; export type EditFormLanguagePageQueryQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - language: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + surveySlug: string; + language: string; + locale?: string | null | undefined; }>; -export type EditFormLanguagePageQueryQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', slug: string, title?: string | null, canRemove: boolean, purpose: SurveyPurpose, form?: { __typename?: 'FormType', title: string, language: FormsFormLanguageChoices, description: string, thankYouMessage: string, fields?: unknown | null, canRemove: boolean } | null, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }> } | null } | null } | null }; +export type EditFormLanguagePageQueryQuery = { event: { name: string, forms: { survey: { slug: string, title: string | null, canRemove: boolean, purpose: SurveyPurpose, form: { title: string, language: FormsFormLanguageChoices, description: string, thankYouMessage: string, fields: unknown, canRemove: boolean } | null, languages: Array<{ language: FormsFormLanguageChoices }> } | null } | null } | null }; export type CreateSurveyLanguageMutationVariables = Exact<{ input: CreateSurveyLanguageInput; }>; -export type CreateSurveyLanguageMutation = { __typename?: 'Mutation', createSurveyLanguage?: { __typename?: 'CreateSurveyLanguage', form?: { __typename?: 'FormType', language: FormsFormLanguageChoices } | null } | null }; +export type CreateSurveyLanguageMutation = { createSurveyLanguage: { form: { language: FormsFormLanguageChoices } | null } | null }; export type UpdateSurveyMutationMutationVariables = Exact<{ input: UpdateSurveyInput; }>; -export type UpdateSurveyMutationMutation = { __typename?: 'Mutation', updateSurvey?: { __typename?: 'UpdateSurvey', survey?: { __typename?: 'FullSurveyType', slug: string } | null } | null }; +export type UpdateSurveyMutationMutation = { updateSurvey: { survey: { slug: string } | null } | null }; export type DeleteSurveyMutationMutationVariables = Exact<{ input: DeleteSurveyInput; }>; -export type DeleteSurveyMutationMutation = { __typename?: 'Mutation', deleteSurvey?: { __typename?: 'DeleteSurvey', slug?: string | null } | null }; +export type DeleteSurveyMutationMutation = { deleteSurvey: { slug: string | null } | null }; -export type EditSurveyPageFragment = { __typename?: 'FullSurveyType', slug: string, title?: string | null, loginRequired: boolean, anonymity: Anonymity, maxResponsesPerUser: number, countResponsesByCurrentUser: number, activeFrom?: string | null, activeUntil?: string | null, responsesEditableUntil?: string | null, canRemove: boolean, purpose: SurveyPurpose, protectResponses: boolean, languages: Array<{ __typename?: 'FormType', title: string, language: FormsFormLanguageChoices, canRemove: boolean }> }; +export type EditSurveyPageFragment = { slug: string, title: string | null, loginRequired: boolean, anonymity: Anonymity, maxResponsesPerUser: number, countResponsesByCurrentUser: number, activeFrom: string | null, activeUntil: string | null, responsesEditableUntil: string | null, canRemove: boolean, purpose: SurveyPurpose, protectResponses: boolean, languages: Array<{ title: string, language: FormsFormLanguageChoices, canRemove: boolean }> }; export type EditSurveyPageQueryQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + surveySlug: string; + locale?: string | null | undefined; }>; -export type EditSurveyPageQueryQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', slug: string, title?: string | null, loginRequired: boolean, anonymity: Anonymity, maxResponsesPerUser: number, countResponsesByCurrentUser: number, activeFrom?: string | null, activeUntil?: string | null, responsesEditableUntil?: string | null, canRemove: boolean, purpose: SurveyPurpose, protectResponses: boolean, languages: Array<{ __typename?: 'FormType', title: string, language: FormsFormLanguageChoices, canRemove: boolean }> } | null } | null } | null }; +export type EditSurveyPageQueryQuery = { event: { name: string, forms: { survey: { slug: string, title: string | null, loginRequired: boolean, anonymity: Anonymity, maxResponsesPerUser: number, countResponsesByCurrentUser: number, activeFrom: string | null, activeUntil: string | null, responsesEditableUntil: string | null, canRemove: boolean, purpose: SurveyPurpose, protectResponses: boolean, languages: Array<{ title: string, language: FormsFormLanguageChoices, canRemove: boolean }> } | null } | null } | null }; export type UpdateResponseDimensionsMutationVariables = Exact<{ input: UpdateResponseDimensionsInput; }>; -export type UpdateResponseDimensionsMutation = { __typename?: 'Mutation', updateResponseDimensions?: { __typename?: 'UpdateResponseDimensions', response?: { __typename?: 'FullResponseType', id: string } | null } | null }; +export type UpdateResponseDimensionsMutation = { updateResponseDimensions: { response: { id: string } | null } | null }; export type EditSurveyResponseMutationVariables = Exact<{ input: CreateSurveyResponseInput; }>; -export type EditSurveyResponseMutation = { __typename?: 'Mutation', createSurveyResponse?: { __typename?: 'CreateSurveyResponse', response?: { __typename?: 'ProfileResponseType', id: string } | null } | null }; +export type EditSurveyResponseMutation = { createSurveyResponse: { response: { id: string } | null } | null }; -export type EditSurveyResponsePageFragment = { __typename?: 'FullResponseType', id: string, language: string, values?: unknown | null, revisionCreatedAt: string, canEdit: boolean, originalCreatedAt: string, form: { __typename?: 'FormType', title: string, description: string, fields?: unknown | null, survey: { __typename?: 'FullSurveyType', slug: string, profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, originalCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string } | null, supersededBy?: { __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null } | null, oldVersions: Array<{ __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }> }; +export type EditSurveyResponsePageFragment = { id: string, language: string, values: unknown, revisionCreatedAt: string, canEdit: boolean, originalCreatedAt: string, form: { title: string, description: string, fields: unknown, survey: { slug: string, profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, originalCreatedBy: { fullName: string } | null, supersededBy: { id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null } | null, oldVersions: Array<{ id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null }> }; export type EditSurveyResponsePageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - responseId: Scalars['String']['input']; + eventSlug: string; + surveySlug: string; + responseId: string; }>; -export type EditSurveyResponsePageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', response?: { __typename?: 'FullResponseType', id: string, language: string, values?: unknown | null, revisionCreatedAt: string, canEdit: boolean, originalCreatedAt: string, form: { __typename?: 'FormType', title: string, description: string, fields?: unknown | null, survey: { __typename?: 'FullSurveyType', slug: string, profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, originalCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string } | null, supersededBy?: { __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null } | null, oldVersions: Array<{ __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }> } | null } | null } | null } | null }; +export type EditSurveyResponsePageQuery = { event: { name: string, slug: string, timezone: string, forms: { survey: { response: { id: string, language: string, values: unknown, revisionCreatedAt: string, canEdit: boolean, originalCreatedAt: string, form: { title: string, description: string, fields: unknown, survey: { slug: string, profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, originalCreatedBy: { fullName: string } | null, supersededBy: { id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null } | null, oldVersions: Array<{ id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null }> } | null } | null } | null } | null }; -export type SurveyResponseDetailFragment = { __typename?: 'FullResponseType', values?: unknown | null, cachedDimensions?: unknown | null, canEdit: boolean, canAccept: boolean, canCancel: boolean, canDelete: boolean, id: string, originalCreatedAt: string, revisionCreatedAt: string, language: string, form: { __typename?: 'FormType', description: string, fields?: unknown | null, survey: { __typename?: 'FullSurveyType', title?: string | null, slug: string, profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, originalCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, revisionCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string } | null, supersededBy?: { __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null } | null, oldVersions: Array<{ __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }> }; +export type SurveyResponseDetailFragment = { values: unknown, cachedDimensions: unknown, canEdit: boolean, canAccept: boolean, canCancel: boolean, canDelete: boolean, id: string, originalCreatedAt: string, revisionCreatedAt: string, language: string, form: { description: string, fields: unknown, survey: { title: string | null, slug: string, profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, originalCreatedBy: { fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, revisionCreatedBy: { fullName: string } | null, supersededBy: { id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null } | null, oldVersions: Array<{ id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null }> }; export type SurveyResponseDetailQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - responseId: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + surveySlug: string; + responseId: string; + locale?: string | null | undefined; }>; -export type SurveyResponseDetailQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', slug: string, name: string, timezone: string, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', title?: string | null, slug: string, anonymity: Anonymity, canRemoveResponses: boolean, protectResponses: boolean, dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }>, response?: { __typename?: 'FullResponseType', values?: unknown | null, cachedDimensions?: unknown | null, canEdit: boolean, canAccept: boolean, canCancel: boolean, canDelete: boolean, id: string, originalCreatedAt: string, revisionCreatedAt: string, language: string, form: { __typename?: 'FormType', description: string, fields?: unknown | null, survey: { __typename?: 'FullSurveyType', title?: string | null, slug: string, profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, originalCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, revisionCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string } | null, supersededBy?: { __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null } | null, oldVersions: Array<{ __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }> } | null } | null } | null } | null }; +export type SurveyResponseDetailQuery = { event: { slug: string, name: string, timezone: string, forms: { survey: { title: string | null, slug: string, anonymity: Anonymity, canRemoveResponses: boolean, protectResponses: boolean, dimensions: Array<{ slug: string, title: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ slug: string, title: string | null }> }>, response: { values: unknown, cachedDimensions: unknown, canEdit: boolean, canAccept: boolean, canCancel: boolean, canDelete: boolean, id: string, originalCreatedAt: string, revisionCreatedAt: string, language: string, form: { description: string, fields: unknown, survey: { title: string | null, slug: string, profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, originalCreatedBy: { fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, revisionCreatedBy: { fullName: string } | null, supersededBy: { id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null } | null, oldVersions: Array<{ id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null }> } | null } | null } | null } | null }; export type SubscribeToSurveyResponsesMutationVariables = Exact<{ input: SubscriptionInput; }>; -export type SubscribeToSurveyResponsesMutation = { __typename?: 'Mutation', subscribeToSurveyResponses?: { __typename?: 'SubscribeToSurveyResponses', success: boolean } | null }; +export type SubscribeToSurveyResponsesMutation = { subscribeToSurveyResponses: { success: boolean } | null }; export type UnsubscribeFromSurveyResponsesMutationVariables = Exact<{ input: SubscriptionInput; }>; -export type UnsubscribeFromSurveyResponsesMutation = { __typename?: 'Mutation', unsubscribeFromSurveyResponses?: { __typename?: 'UnsubscribeFromSurveyResponses', success: boolean } | null }; +export type UnsubscribeFromSurveyResponsesMutation = { unsubscribeFromSurveyResponses: { success: boolean } | null }; export type DeleteSurveyResponsesMutationVariables = Exact<{ input: DeleteSurveyResponsesInput; }>; -export type DeleteSurveyResponsesMutation = { __typename?: 'Mutation', deleteSurveyResponses?: { __typename?: 'DeleteSurveyResponses', countDeleted: number } | null }; +export type DeleteSurveyResponsesMutation = { deleteSurveyResponses: { countDeleted: number } | null }; -export type SurveyResponseFragment = { __typename?: 'LimitedResponseType', id: string, sequenceNumber: number, revisionCreatedAt: string, language: string, values?: unknown | null, cachedDimensions?: unknown | null, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }; +export type SurveyResponseFragment = { id: string, sequenceNumber: number, revisionCreatedAt: string, language: string, values: unknown, cachedDimensions: unknown, revisionCreatedBy: { displayName: string } | null }; export type FormResponsesQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - locale?: InputMaybe; - filters?: InputMaybe | DimensionFilterInput>; + eventSlug: string; + surveySlug: string; + locale?: string | null | undefined; + filters?: Array | DimensionFilterInput | null | undefined; }>; -export type FormResponsesQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', forms: { __typename?: 'FormsProfileMetaType', surveys: Array<{ __typename?: 'FullSurveyType', slug: string }> } } | null, event?: { __typename?: 'FullEventType', name: string, slug: string, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', slug: string, title?: string | null, anonymity: Anonymity, fields?: unknown | null, countResponses: number, canRemoveResponses: boolean, protectResponses: boolean, dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, isTechnical: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string }> }>, responses?: Array<{ __typename?: 'LimitedResponseType', id: string, sequenceNumber: number, revisionCreatedAt: string, language: string, values?: unknown | null, cachedDimensions?: unknown | null, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }> | null } | null } | null } | null }; +export type FormResponsesQuery = { profile: { forms: { surveys: Array<{ slug: string }> } } | null, event: { name: string, slug: string, forms: { survey: { slug: string, title: string | null, anonymity: Anonymity, fields: unknown, countResponses: number, canRemoveResponses: boolean, protectResponses: boolean, dimensions: Array<{ slug: string, title: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, isTechnical: boolean, values: Array<{ slug: string, title: string | null, color: string }> }>, responses: Array<{ id: string, sequenceNumber: number, revisionCreatedAt: string, language: string, values: unknown, cachedDimensions: unknown, revisionCreatedBy: { displayName: string } | null }> | null } | null } | null } | null }; export type SurveySummaryQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - surveySlug: Scalars['String']['input']; - locale?: InputMaybe; - filters?: InputMaybe | DimensionFilterInput>; + eventSlug: string; + surveySlug: string; + locale?: string | null | undefined; + filters?: Array | DimensionFilterInput | null | undefined; }>; -export type SurveySummaryQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, forms?: { __typename?: 'FormsEventMetaType', survey?: { __typename?: 'FullSurveyType', title?: string | null, fields?: unknown | null, summary?: unknown | null, countResponses: number, countFilteredResponses: number, dimensions: Array<{ __typename?: 'FullDimensionType', slug: string, title?: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }> } | null } | null } | null }; +export type SurveySummaryQuery = { event: { name: string, forms: { survey: { title: string | null, fields: unknown, summary: unknown, countResponses: number, countFilteredResponses: number, dimensions: Array<{ slug: string, title: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, values: Array<{ slug: string, title: string | null }> }> } | null } | null } | null }; export type CreateSurveyMutationVariables = Exact<{ input: CreateSurveyInput; }>; -export type CreateSurveyMutation = { __typename?: 'Mutation', createSurvey?: { __typename?: 'CreateSurvey', survey?: { __typename?: 'FullSurveyType', slug: string } | null } | null }; +export type CreateSurveyMutation = { createSurvey: { survey: { slug: string } | null } | null }; -export type SurveyFragment = { __typename?: 'FullSurveyType', slug: string, title?: string | null, isActive: boolean, activeFrom?: string | null, activeUntil?: string | null, countResponses: number, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }> }; +export type SurveyFragment = { slug: string, title: string | null, isActive: boolean, activeFrom: string | null, activeUntil: string | null, countResponses: number, languages: Array<{ language: FormsFormLanguageChoices }> }; -export type ProfileSurveyFragment = { __typename?: 'FullSurveyType', slug: string, title?: string | null, event: { __typename?: 'LimitedEventType', slug: string, name: string } }; +export type ProfileSurveyFragment = { slug: string, title: string | null, event: { slug: string, name: string } }; export type SurveysQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + locale?: string | null | undefined; }>; -export type SurveysQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', forms: { __typename?: 'FormsProfileMetaType', surveys: Array<{ __typename?: 'FullSurveyType', slug: string, title?: string | null, event: { __typename?: 'LimitedEventType', slug: string, name: string } }> } } | null, event?: { __typename?: 'FullEventType', name: string, forms?: { __typename?: 'FormsEventMetaType', surveys: Array<{ __typename?: 'FullSurveyType', slug: string, title?: string | null, isActive: boolean, activeFrom?: string | null, activeUntil?: string | null, countResponses: number, languages: Array<{ __typename?: 'FormType', language: FormsFormLanguageChoices }> }> } | null } | null }; +export type SurveysQuery = { profile: { forms: { surveys: Array<{ slug: string, title: string | null, event: { slug: string, name: string } }> } } | null, event: { name: string, forms: { surveys: Array<{ slug: string, title: string | null, isActive: boolean, activeFrom: string | null, activeUntil: string | null, countResponses: number, languages: Array<{ language: FormsFormLanguageChoices }> }> } | null } | null }; export type UpdateTicketsPreferencesMutationVariables = Exact<{ input: UpdateTicketsPreferencesInput; }>; -export type UpdateTicketsPreferencesMutation = { __typename?: 'Mutation', updateTicketsPreferences?: { __typename?: 'UpdateTicketsPreferences', preferences?: { __typename?: 'TicketsV2EventMetaType', contactEmail: string, termsAndConditionsUrlEn: string, termsAndConditionsUrlFi: string, termsAndConditionsUrlSv: string, cancellationPeriodDays: number } | null } | null }; +export type UpdateTicketsPreferencesMutation = { updateTicketsPreferences: { preferences: { contactEmail: string, termsAndConditionsUrlEn: string, termsAndConditionsUrlFi: string, termsAndConditionsUrlSv: string, cancellationPeriodDays: number } | null } | null }; export type TicketsPreferencesQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; + eventSlug: string; }>; -export type TicketsPreferencesQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, tickets?: { __typename?: 'TicketsV2EventMetaType', contactEmail: string, termsAndConditionsUrlEn: string, termsAndConditionsUrlFi: string, termsAndConditionsUrlSv: string, cancellationPeriodDays: number } | null } | null }; +export type TicketsPreferencesQuery = { event: { name: string, slug: string, tickets: { contactEmail: string, termsAndConditionsUrlEn: string, termsAndConditionsUrlFi: string, termsAndConditionsUrlSv: string, cancellationPeriodDays: number } | null } | null }; export type TicketsAdminReportsPageQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - locale?: InputMaybe; + eventSlug: string; + locale?: string | null | undefined; }>; -export type TicketsAdminReportsPageQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', name: string, slug: string, timezone: string, tickets?: { __typename?: 'TicketsV2EventMetaType', reports: Array<{ __typename?: 'ReportType', slug: string, title: string, footer: string, rows: Array>, totalRow?: Array | null, columns: Array<{ __typename?: 'ColumnType', slug: string, title: string, type: TypeOfColumn }> }> } | null } | null }; +export type TicketsAdminReportsPageQuery = { event: { name: string, slug: string, timezone: string, tickets: { reports: Array<{ slug: string, title: string, footer: string, rows: Array>, totalRow: Array | null, columns: Array<{ slug: string, title: string, type: TypeOfColumn }> }> } | null } | null }; export type GenerateKeyPairMutationVariables = Exact<{ - password: Scalars['String']['input']; + password: string; }>; -export type GenerateKeyPairMutation = { __typename?: 'Mutation', generateKeyPair?: { __typename?: 'GenerateKeyPair', id: string } | null }; +export type GenerateKeyPairMutation = { generateKeyPair: { id: string } | null }; export type RevokeKeyPairMutationVariables = Exact<{ - id: Scalars['String']['input']; + id: string; }>; -export type RevokeKeyPairMutation = { __typename?: 'Mutation', revokeKeyPair?: { __typename?: 'RevokeKeyPair', id: string } | null }; +export type RevokeKeyPairMutation = { revokeKeyPair: { id: string } | null }; -export type ProfileEncryptionKeysFragment = { __typename?: 'KeyPairType', id: string, createdAt: string }; +export type ProfileEncryptionKeysFragment = { id: string, createdAt: string }; export type ProfileEncryptionKeysQueryVariables = Exact<{ [key: string]: never; }>; -export type ProfileEncryptionKeysQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', keypairs?: Array<{ __typename?: 'KeyPairType', id: string, createdAt: string }> | null } | null }; +export type ProfileEncryptionKeysQuery = { profile: { keypairs: Array<{ id: string, createdAt: string }> | null } | null }; -export type ProfileMessageRowFragment = { __typename?: 'LimitedMessageType', id: string, subject: string, sentAt: string, bodyHtml: string, event: { __typename?: 'LimitedEventType', slug: string, name: string } }; +export type ProfileMessageRowFragment = { id: string, subject: string, sentAt: string, bodyHtml: string, event: { slug: string, name: string } }; export type ProfileMessagesQueryVariables = Exact<{ [key: string]: never; }>; -export type ProfileMessagesQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', messages: Array<{ __typename?: 'LimitedMessageType', id: string, subject: string, sentAt: string, bodyHtml: string, event: { __typename?: 'LimitedEventType', slug: string, name: string } }> } | null }; +export type ProfileMessagesQuery = { profile: { messages: Array<{ id: string, subject: string, sentAt: string, bodyHtml: string, event: { slug: string, name: string } }> } | null }; export type ProfileOrderDetailQueryVariables = Exact<{ - eventSlug: Scalars['String']['input']; - orderId: Scalars['String']['input']; + eventSlug: string; + orderId: string; }>; -export type ProfileOrderDetailQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', tickets: { __typename?: 'TicketsV2ProfileMetaType', order?: { __typename?: 'ProfileOrderType', id: string, formattedOrderNumber: string, createdAt: string, totalPrice: any, status: PaymentStatus, eticketsLink?: string | null, canPay: boolean, canCancel: boolean, canRequestCancellation: boolean, ticketsContactEmail: string, products: Array<{ __typename?: 'OrderProductType', title: string, quantity: number, price: any, vatPercentage: any }>, event: { __typename?: 'LimitedEventType', slug: string, name: string, organization: { __typename?: 'LimitedOrganizationType', name: string, businessId: string } } } | null } } | null }; +export type ProfileOrderDetailQuery = { profile: { tickets: { order: { id: string, formattedOrderNumber: string, createdAt: string, totalPrice: string, status: PaymentStatus, eticketsLink: string | null, canPay: boolean, canCancel: boolean, canRequestCancellation: boolean, ticketsContactEmail: string, products: Array<{ title: string, quantity: number, price: string, vatPercentage: string }>, event: { slug: string, name: string, organization: { name: string, businessId: string } } } | null } } | null }; export type ConfirmEmailMutationVariables = Exact<{ input: ConfirmEmailInput; }>; -export type ConfirmEmailMutation = { __typename?: 'Mutation', confirmEmail?: { __typename?: 'ConfirmEmail', user?: { __typename?: 'LimitedUserType', email: string } | null } | null }; +export type ConfirmEmailMutation = { confirmEmail: { user: { email: string } | null } | null }; -export type ProfileOrderFragment = { __typename?: 'ProfileOrderType', id: string, formattedOrderNumber: string, createdAt: string, totalPrice: any, status: PaymentStatus, eticketsLink?: string | null, canPay: boolean, canCancel: boolean, event: { __typename?: 'LimitedEventType', slug: string, name: string } }; +export type ProfileOrderFragment = { id: string, formattedOrderNumber: string, createdAt: string, totalPrice: string, status: PaymentStatus, eticketsLink: string | null, canPay: boolean, canCancel: boolean, event: { slug: string, name: string } }; export type ProfileOrdersQueryVariables = Exact<{ [key: string]: never; }>; -export type ProfileOrdersQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', tickets: { __typename?: 'TicketsV2ProfileMetaType', haveUnlinkedOrders: boolean, orders: Array<{ __typename?: 'ProfileOrderType', id: string, formattedOrderNumber: string, createdAt: string, totalPrice: any, status: PaymentStatus, eticketsLink?: string | null, canPay: boolean, canCancel: boolean, event: { __typename?: 'LimitedEventType', slug: string, name: string } }> } } | null }; +export type ProfileOrdersQuery = { profile: { tickets: { haveUnlinkedOrders: boolean, orders: Array<{ id: string, formattedOrderNumber: string, createdAt: string, totalPrice: string, status: PaymentStatus, eticketsLink: string | null, canPay: boolean, canCancel: boolean, event: { slug: string, name: string } }> } } | null }; -export type ProfileProgramItemFragment = { __typename?: 'FullProgramType', slug: string, title: string, event: { __typename?: 'LimitedEventType', slug: string, name: string, timezone: string }, scheduleItems: Array<{ __typename?: 'LimitedScheduleItemType', slug: string, startTime: string, endTime: string, durationMinutes: number, location?: string | null, subtitle: string }> }; +export type ProfileProgramItemFragment = { slug: string, title: string, event: { slug: string, name: string, timezone: string }, scheduleItems: Array<{ slug: string, startTime: string, endTime: string, durationMinutes: number, location: string | null, subtitle: string }> }; export type ProfileProgramItemListQueryVariables = Exact<{ - locale: Scalars['String']['input']; + locale: string; }>; -export type ProfileProgramItemListQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', program: { __typename?: 'ProgramV2ProfileMetaType', programs?: Array<{ __typename?: 'FullProgramType', slug: string, title: string, event: { __typename?: 'LimitedEventType', slug: string, name: string, timezone: string }, scheduleItems: Array<{ __typename?: 'LimitedScheduleItemType', slug: string, startTime: string, endTime: string, durationMinutes: number, location?: string | null, subtitle: string }> }> | null, programOffers: Array<{ __typename?: 'ProfileResponseType', id: string, revisionCreatedAt: string, editedByAnother: boolean, canEdit: boolean, values?: unknown | null, dimensions: Array<{ __typename?: 'ResponseDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string } }>, form: { __typename?: 'FormType', title: string, event: { __typename?: 'LimitedEventType', slug: string, name: string }, survey: { __typename?: 'FullSurveyType', slug: string } } }> } } | null }; +export type ProfileProgramItemListQuery = { profile: { program: { programs: Array<{ slug: string, title: string, event: { slug: string, name: string, timezone: string }, scheduleItems: Array<{ slug: string, startTime: string, endTime: string, durationMinutes: number, location: string | null, subtitle: string }> }> | null, programOffers: Array<{ id: string, revisionCreatedAt: string, editedByAnother: boolean, canEdit: boolean, values: unknown, dimensions: Array<{ dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null, color: string } }>, form: { title: string, event: { slug: string, name: string }, survey: { slug: string } } }> } } | null }; export type ProfileSurveyEditResponseQueryVariables = Exact<{ - locale: Scalars['String']['input']; - responseId: Scalars['String']['input']; + locale: string; + responseId: string; }>; -export type ProfileSurveyEditResponseQuery = { __typename?: 'Query', userRegistry: { __typename?: 'LimitedRegistryType', slug: string, title: string, policyUrl: string, organization: { __typename?: 'LimitedOrganizationType', slug: string, name: string } }, profile?: { __typename?: 'OwnProfileType', firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string, forms: { __typename?: 'FormsProfileMetaType', response?: { __typename?: 'ProfileResponseType', id: string, revisionCreatedAt: string, canEdit: boolean, values?: unknown | null, dimensions: Array<{ __typename?: 'ResponseDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string } }>, form: { __typename?: 'FormType', title: string, description: string, language: FormsFormLanguageChoices, fields?: unknown | null, event: { __typename?: 'LimitedEventType', slug: string, name: string, timezone: string }, survey: { __typename?: 'FullSurveyType', slug: string, registry?: { __typename?: 'LimitedRegistryType', slug: string, title: string, policyUrl: string, organization: { __typename?: 'LimitedOrganizationType', slug: string, name: string } } | null, profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } } } | null } } | null }; +export type ProfileSurveyEditResponseQuery = { userRegistry: { slug: string, title: string, policyUrl: string, organization: { slug: string, name: string } }, profile: { firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string, forms: { response: { id: string, revisionCreatedAt: string, canEdit: boolean, values: unknown, dimensions: Array<{ dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null, color: string } }>, form: { title: string, description: string, language: FormsFormLanguageChoices, fields: unknown, event: { slug: string, name: string, timezone: string }, survey: { slug: string, registry: { slug: string, title: string, policyUrl: string, organization: { slug: string, name: string } } | null, profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } } } | null } } | null }; export type ProfileSurveyResponsePageQueryVariables = Exact<{ - locale: Scalars['String']['input']; - responseId: Scalars['String']['input']; + locale: string; + responseId: string; }>; -export type ProfileSurveyResponsePageQuery = { __typename?: 'Query', userRegistry: { __typename?: 'LimitedRegistryType', slug: string, title: string, policyUrl: string, organization: { __typename?: 'LimitedOrganizationType', slug: string, name: string } }, profile?: { __typename?: 'OwnProfileType', firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string, forms: { __typename?: 'FormsProfileMetaType', response?: { __typename?: 'ProfileResponseType', id: string, revisionCreatedAt: string, canEdit: boolean, values?: unknown | null, originalCreatedAt: string, dimensions: Array<{ __typename?: 'ResponseDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string } }>, form: { __typename?: 'FormType', title: string, description: string, language: FormsFormLanguageChoices, fields?: unknown | null, event: { __typename?: 'LimitedEventType', slug: string, name: string, timezone: string }, survey: { __typename?: 'FullSurveyType', profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean }, registry?: { __typename?: 'LimitedRegistryType', slug: string, title: string, policyUrl: string, organization: { __typename?: 'LimitedOrganizationType', slug: string, name: string } } | null } }, supersededBy?: { __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null } | null, oldVersions: Array<{ __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }> } | null } } | null }; +export type ProfileSurveyResponsePageQuery = { userRegistry: { slug: string, title: string, policyUrl: string, organization: { slug: string, name: string } }, profile: { firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string, forms: { response: { id: string, revisionCreatedAt: string, canEdit: boolean, values: unknown, originalCreatedAt: string, dimensions: Array<{ dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null, color: string } }>, form: { title: string, description: string, language: FormsFormLanguageChoices, fields: unknown, event: { slug: string, name: string, timezone: string }, survey: { profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean }, registry: { slug: string, title: string, policyUrl: string, organization: { slug: string, name: string } } | null } }, supersededBy: { id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null } | null, oldVersions: Array<{ id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null }> } | null } } | null }; -export type ProfileResponsesTableRowFragment = { __typename?: 'ProfileResponseType', id: string, revisionCreatedAt: string, editedByAnother: boolean, canEdit: boolean, values?: unknown | null, dimensions: Array<{ __typename?: 'ResponseDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string } }>, form: { __typename?: 'FormType', title: string, event: { __typename?: 'LimitedEventType', slug: string, name: string }, survey: { __typename?: 'FullSurveyType', slug: string } } }; +export type ProfileResponsesTableRowFragment = { id: string, revisionCreatedAt: string, editedByAnother: boolean, canEdit: boolean, values: unknown, dimensions: Array<{ dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null, color: string } }>, form: { title: string, event: { slug: string, name: string }, survey: { slug: string } } }; export type OwnFormResponsesQueryVariables = Exact<{ - locale: Scalars['String']['input']; + locale: string; }>; -export type OwnFormResponsesQuery = { __typename?: 'Query', profile?: { __typename?: 'OwnProfileType', forms: { __typename?: 'FormsProfileMetaType', responses: Array<{ __typename?: 'ProfileResponseType', id: string, revisionCreatedAt: string, editedByAnother: boolean, canEdit: boolean, values?: unknown | null, dimensions: Array<{ __typename?: 'ResponseDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string } }>, form: { __typename?: 'FormType', title: string, event: { __typename?: 'LimitedEventType', slug: string, name: string }, survey: { __typename?: 'FullSurveyType', slug: string } } }> } } | null }; +export type OwnFormResponsesQuery = { profile: { forms: { responses: Array<{ id: string, revisionCreatedAt: string, editedByAnother: boolean, canEdit: boolean, values: unknown, dimensions: Array<{ dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null, color: string } }>, form: { title: string, event: { slug: string, name: string }, survey: { slug: string } } }> } } | null }; -export type AnnotationsFormAnnotationFragment = { __typename?: 'AnnotationType', slug: string, type: AnnotationDataType, title: string, description: string, isComputed: boolean }; +export type AnnotationsFormAnnotationFragment = { slug: string, type: AnnotationDataType, title: string, description: string, isComputed: boolean }; export type UpdateProgramAnnotationsMutationVariables = Exact<{ input: UpdateProgramAnnotationsInput; }>; -export type UpdateProgramAnnotationsMutation = { __typename?: 'Mutation', updateProgramAnnotations?: { __typename?: 'UpdateProgramAnnotations', program?: { __typename?: 'FullProgramType', slug: string, cachedAnnotations: unknown } | null } | null }; +export type UpdateProgramAnnotationsMutation = { updateProgramAnnotations: { program: { slug: string, cachedAnnotations: unknown } | null } | null }; export type GetProgramAnnotationSchemaQueryVariables = Exact<{ - locale: Scalars['String']['input']; - eventSlug: Scalars['String']['input']; - annotationSlugs?: InputMaybe | Scalars['String']['input']>; - publicOnly?: InputMaybe; + locale: string; + eventSlug: string; + annotationSlugs?: Array | string | null | undefined; + publicOnly?: boolean | null | undefined; }>; -export type GetProgramAnnotationSchemaQuery = { __typename?: 'Query', event?: { __typename?: 'FullEventType', program?: { __typename?: 'ProgramV2EventMetaType', annotations: Array<{ __typename?: 'AnnotationType', slug: string, type: AnnotationDataType, title: string, description: string, isComputed: boolean }> } | null } | null }; +export type GetProgramAnnotationSchemaQuery = { event: { program: { annotations: Array<{ slug: string, type: AnnotationDataType, title: string, description: string, isComputed: boolean }> } | null } | null }; -export type CachedDimensionsBadgesFragment = { __typename?: 'FullDimensionType', slug: string, title?: string | null, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string }> }; +export type CachedDimensionsBadgesFragment = { slug: string, title: string | null, values: Array<{ slug: string, title: string | null, color: string }> }; -export type ColoredDimensionTableCellFragment = { __typename?: 'FullDimensionType', slug: string, title?: string | null, isKeyDimension: boolean, isTechnical: boolean, isMultiValue: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string }> }; +export type ColoredDimensionTableCellFragment = { slug: string, title: string | null, isKeyDimension: boolean, isTechnical: boolean, isMultiValue: boolean, values: Array<{ slug: string, title: string | null, color: string }> }; -export type DimensionBadgeFragment = { __typename?: 'ResponseDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string } }; +export type DimensionBadgeFragment = { dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null, color: string } }; -export type DimensionEditorValueFragment = { __typename?: 'DimensionValueType', slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title?: string | null, titleFi: string, titleEn: string, titleSv: string }; +export type DimensionEditorValueFragment = { slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title: string | null, titleFi: string, titleEn: string, titleSv: string }; -export type DimensionEditorFragment = { __typename?: 'FullDimensionType', slug: string, canRemove: boolean, canAddValues: boolean, title?: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ __typename?: 'DimensionValueType', slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title?: string | null, titleFi: string, titleEn: string, titleSv: string }> }; +export type DimensionEditorFragment = { slug: string, canRemove: boolean, canAddValues: boolean, title: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title: string | null, titleFi: string, titleEn: string, titleSv: string }> }; -export type DimensionValueSelectFragment = { __typename?: 'FullDimensionType', slug: string, title?: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }; +export type DimensionValueSelectFragment = { slug: string, title: string | null, isTechnical: boolean, isMultiValue: boolean, values: Array<{ slug: string, title: string | null }> }; -export type DimensionFilterValueFragment = { __typename?: 'DimensionValueType', slug: string, title?: string | null }; +export type DimensionFilterValueFragment = { slug: string, title: string | null }; -export type DimensionFilterFragment = { __typename?: 'FullDimensionType', slug: string, title?: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, values: Array<{ __typename?: 'DimensionValueType', slug: string, title?: string | null }> }; +export type DimensionFilterFragment = { slug: string, title: string | null, isMultiValue: boolean, isListFilter: boolean, isKeyDimension: boolean, values: Array<{ slug: string, title: string | null }> }; -export type FullOwnProfileFragment = { __typename?: 'OwnProfileType', firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string }; +export type FullOwnProfileFragment = { firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string }; -export type FullSelectedProfileFragment = { __typename?: 'SelectedProfileType', firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string }; +export type FullSelectedProfileFragment = { firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string }; -export type FullLimitedProfileFragment = { __typename?: 'LimitedProfileType', firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string }; +export type FullLimitedProfileFragment = { firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string }; -export type FullProfileFieldSelectorFragment = { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean }; +export type FullProfileFieldSelectorFragment = { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean }; -export type ProgramDimensionBadgeFragment = { __typename?: 'ProgramDimensionValueType', dimension: { __typename?: 'FullDimensionType', slug: string, title?: string | null }, value: { __typename?: 'DimensionValueType', slug: string, title?: string | null, color: string } }; +export type ProgramDimensionBadgeFragment = { dimension: { slug: string, title: string | null }, value: { slug: string, title: string | null, color: string } }; -export type ReportFragment = { __typename?: 'ReportType', slug: string, title: string, footer: string, rows: Array>, totalRow?: Array | null, columns: Array<{ __typename?: 'ColumnType', slug: string, title: string, type: TypeOfColumn }> }; +export type ReportFragment = { slug: string, title: string, footer: string, rows: Array>, totalRow: Array | null, columns: Array<{ slug: string, title: string, type: TypeOfColumn }> }; -export type ResponseRevisionFragment = { __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }; +export type ResponseRevisionFragment = { id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null }; -export type ResponseHistoryBannerFragment = { __typename?: 'FullResponseType', id: string, originalCreatedAt: string, supersededBy?: { __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null } | null, oldVersions: Array<{ __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }> }; +export type ResponseHistoryBannerFragment = { id: string, originalCreatedAt: string, supersededBy: { id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null } | null, oldVersions: Array<{ id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null }> }; -export type ProfileResponseHistoryBannerFragment = { __typename?: 'ProfileResponseType', id: string, originalCreatedAt: string, supersededBy?: { __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null } | null, oldVersions: Array<{ __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }> }; +export type ProfileResponseHistoryBannerFragment = { id: string, originalCreatedAt: string, supersededBy: { id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null } | null, oldVersions: Array<{ id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null }> }; -export type ResponseHistorySidebarFragment = { __typename?: 'FullResponseType', id: string, originalCreatedAt: string, revisionCreatedAt: string, language: string, originalCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, revisionCreatedBy?: { __typename?: 'SelectedProfileType', fullName: string } | null, form: { __typename?: 'FormType', survey: { __typename?: 'FullSurveyType', profileFieldSelector: { __typename?: 'ProfileFieldSelectorType', firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, supersededBy?: { __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null } | null, oldVersions: Array<{ __typename?: 'LimitedResponseType', id: string, revisionCreatedAt: string, revisionCreatedBy?: { __typename?: 'SelectedProfileType', displayName: string } | null }> }; +export type ResponseHistorySidebarFragment = { id: string, originalCreatedAt: string, revisionCreatedAt: string, language: string, originalCreatedBy: { fullName: string, firstName: string, lastName: string, nick: string, email: string, phoneNumber: string, discordHandle: string } | null, revisionCreatedBy: { fullName: string } | null, form: { survey: { profileFieldSelector: { firstName: boolean, lastName: boolean, nick: boolean, email: boolean, phoneNumber: boolean, discordHandle: boolean } } }, supersededBy: { id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null } | null, oldVersions: Array<{ id: string, revisionCreatedAt: string, revisionCreatedBy: { displayName: string } | null }> }; export const TransferConsentFormRegistryFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"TransferConsentFormRegistry"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedRegistryType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"organization"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"policyUrl"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]}]}}]} as unknown as DocumentNode; -export const AdminOrderPaymentStampFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AdminOrderPaymentStamp"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedPaymentStampType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"correlationId"}},{"kind":"Field","name":{"kind":"Name","value":"provider"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"data"}}]}}]} as unknown as DocumentNode; +export const AdminOrderPaymentStampFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AdminOrderPaymentStamp"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedPaymentStampType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"correlationId"}},{"kind":"Field","name":{"kind":"Name","value":"provider"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"data"}}]}}]} as unknown as DocumentNode; export const AdminOrderReceiptFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AdminOrderReceipt"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedReceiptType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"correlationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]} as unknown as DocumentNode; export const AdminOrderCodeFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AdminOrderCode"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedCodeType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"code"}},{"kind":"Field","name":{"kind":"Name","value":"literateCode"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"usedOn"}},{"kind":"Field","name":{"kind":"Name","value":"productText"}}]}}]} as unknown as DocumentNode; export const NewOrderProductFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"NewOrderProduct"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullProductType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"vatPercentage"}},{"kind":"Field","name":{"kind":"Name","value":"isAvailable"}},{"kind":"Field","name":{"kind":"Name","value":"availableFrom"}},{"kind":"Field","name":{"kind":"Name","value":"availableUntil"}},{"kind":"Field","name":{"kind":"Name","value":"countPaid"}},{"kind":"Field","name":{"kind":"Name","value":"countReserved"}},{"kind":"Field","name":{"kind":"Name","value":"countAvailable"}},{"kind":"Field","name":{"kind":"Name","value":"maxPerOrder"}}]}}]} as unknown as DocumentNode; @@ -4763,7 +1987,7 @@ export const ResendOrderConfirmationDocument = {"kind":"Document","definitions": export const UpdateOrderDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateOrder"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateOrderInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateOrder"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"order"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; export const CancelAndRefundOrderDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CancelAndRefundOrder"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CancelAndRefundOrderInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"cancelAndRefundOrder"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"order"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; export const MarkOrderAsPaidDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"MarkOrderAsPaid"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"MarkOrderAsPaidInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"markOrderAsPaid"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"order"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; -export const AdminOrderDetailDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"AdminOrderDetail"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"orderId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"tickets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"order"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"orderId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"formattedOrderNumber"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"totalPrice"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"eticketsLink"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"phone"}},{"kind":"Field","name":{"kind":"Name","value":"canRefund"}},{"kind":"Field","name":{"kind":"Name","value":"canRefundManually"}},{"kind":"Field","name":{"kind":"Name","value":"canMarkAsPaid"}},{"kind":"Field","name":{"kind":"Name","value":"products"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}},{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"vatPercentage"}}]}},{"kind":"Field","name":{"kind":"Name","value":"paymentStamps"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AdminOrderPaymentStamp"}}]}},{"kind":"Field","name":{"kind":"Name","value":"receipts"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AdminOrderReceipt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"codes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AdminOrderCode"}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AdminOrderPaymentStamp"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedPaymentStampType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"correlationId"}},{"kind":"Field","name":{"kind":"Name","value":"provider"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"data"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AdminOrderReceipt"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedReceiptType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"correlationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AdminOrderCode"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedCodeType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"code"}},{"kind":"Field","name":{"kind":"Name","value":"literateCode"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"usedOn"}},{"kind":"Field","name":{"kind":"Name","value":"productText"}}]}}]} as unknown as DocumentNode; +export const AdminOrderDetailDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"AdminOrderDetail"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"orderId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"tickets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"order"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"orderId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"formattedOrderNumber"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"totalPrice"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"eticketsLink"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"phone"}},{"kind":"Field","name":{"kind":"Name","value":"canRefund"}},{"kind":"Field","name":{"kind":"Name","value":"canRefundManually"}},{"kind":"Field","name":{"kind":"Name","value":"canMarkAsPaid"}},{"kind":"Field","name":{"kind":"Name","value":"products"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}},{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"vatPercentage"}}]}},{"kind":"Field","name":{"kind":"Name","value":"paymentStamps"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AdminOrderPaymentStamp"}}]}},{"kind":"Field","name":{"kind":"Name","value":"receipts"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AdminOrderReceipt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"codes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AdminOrderCode"}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AdminOrderPaymentStamp"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedPaymentStampType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"correlationId"}},{"kind":"Field","name":{"kind":"Name","value":"provider"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"data"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AdminOrderReceipt"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedReceiptType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"correlationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AdminOrderCode"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedCodeType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"code"}},{"kind":"Field","name":{"kind":"Name","value":"literateCode"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"usedOn"}},{"kind":"Field","name":{"kind":"Name","value":"productText"}}]}}]} as unknown as DocumentNode; export const AdminCreateOrderDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"AdminCreateOrder"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateOrderInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOrder"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"order"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}},{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; export const NewOrderPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"NewOrderPage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"tickets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"NewOrderProduct"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"NewOrderProduct"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullProductType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"vatPercentage"}},{"kind":"Field","name":{"kind":"Name","value":"isAvailable"}},{"kind":"Field","name":{"kind":"Name","value":"availableFrom"}},{"kind":"Field","name":{"kind":"Name","value":"availableUntil"}},{"kind":"Field","name":{"kind":"Name","value":"countPaid"}},{"kind":"Field","name":{"kind":"Name","value":"countReserved"}},{"kind":"Field","name":{"kind":"Name","value":"countAvailable"}},{"kind":"Field","name":{"kind":"Name","value":"maxPerOrder"}}]}}]} as unknown as DocumentNode; export const AdminOrderListWithOrdersDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"AdminOrderListWithOrders"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filters"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"DimensionFilterInput"}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"search"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"returnNone"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}},"defaultValue":{"kind":"BooleanValue","value":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"tickets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ProductChoice"}}]}},{"kind":"Field","name":{"kind":"Name","value":"orders"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filters"}}},{"kind":"Argument","name":{"kind":"Name","value":"search"},"value":{"kind":"Variable","name":{"kind":"Name","value":"search"}}},{"kind":"Argument","name":{"kind":"Name","value":"returnNone"},"value":{"kind":"Variable","name":{"kind":"Name","value":"returnNone"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"OrderList"}}]}},{"kind":"Field","name":{"kind":"Name","value":"countTotalOrders"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ProductChoice"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullProductType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"OrderList"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullOrderType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"formattedOrderNumber"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"totalPrice"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]} as unknown as DocumentNode; diff --git a/kompassi-v2-frontend/src/apolloClient.ts b/kompassi-v2-frontend/src/apolloClient.ts index 3d720bd44..efc919520 100644 --- a/kompassi-v2-frontend/src/apolloClient.ts +++ b/kompassi-v2-frontend/src/apolloClient.ts @@ -1,6 +1,8 @@ -import { HttpLink } from "@apollo/client"; +import { HttpLink, CombinedGraphQLErrors } from "@apollo/client"; +import type { ApolloClient as ApolloClientNamespace } from "@apollo/client"; +import type { OperationVariables } from "@apollo/client"; import { setContext } from "@apollo/client/link/context"; -import { onError } from "@apollo/client/link/error"; +import { ErrorLink } from "@apollo/client/link/error"; import { registerApolloClient, ApolloClient, @@ -25,24 +27,65 @@ const authLink = setContext(async (_, context) => { return {}; }); -const errorLink = onError(({ graphQLErrors, networkError }) => { - if (graphQLErrors) - graphQLErrors.forEach(({ message, locations, path }) => +const errorLink = new ErrorLink(({ error }) => { + if (CombinedGraphQLErrors.is(error)) { + error.errors.forEach(({ message, locations, path }) => console.log( `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`, ), ); - - if (networkError) console.error(`[Network error]: ${networkError}`); + } else { + console.error(`[Network error]: ${error}`); + } }); const httpLink = new HttpLink({ uri: `${kompassiBaseUrl}/graphql`, }); -export const { getClient, query, PreloadQuery } = registerApolloClient(() => { +const { + getClient: getRawClient, + query, + PreloadQuery, +} = registerApolloClient(() => { return new ApolloClient({ cache: new InMemoryCache(), link: authLink.concat(errorLink).concat(httpLink), }); }); + +export { query, PreloadQuery }; + +/** + * `errorPolicy` defaults to "none" at runtime (GraphQL errors reject the + * promise), but Apollo Client 4's types only narrow `data` to non-undefined + * when `errorPolicy: "none"` is passed explicitly. This wrapper does that so + * call sites don't all need `data!` or null checks for a case that can't happen. + */ +export function getClient() { + const client = getRawClient(); + return { + query( + options: Omit< + ApolloClientNamespace.QueryOptions, + "errorPolicy" + >, + ): Promise<{ data: TData }> { + return client.query({ + ...options, + errorPolicy: "none", + } as any) as Promise<{ data: TData }>; + }, + mutate( + options: Omit< + ApolloClientNamespace.MutateOptions, + "errorPolicy" + >, + ): Promise<{ data: TData }> { + return client.mutate({ + ...options, + errorPolicy: "none", + } as any) as Promise<{ data: TData }>; + }, + }; +} diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/orders-admin/[orderId]/page.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/orders-admin/[orderId]/page.tsx index 72a775eed..2f817483c 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/orders-admin/[orderId]/page.tsx +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/orders-admin/[orderId]/page.tsx @@ -39,6 +39,7 @@ import { graphql(` fragment AdminOrderPaymentStamp on LimitedPaymentStampType { + __typename id createdAt correlationId diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/orders-admin/new/actions.ts b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/orders-admin/new/actions.ts index 89d855c57..4c8b2d264 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/orders-admin/new/actions.ts +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/orders-admin/new/actions.ts @@ -42,17 +42,12 @@ export async function adminCreateOrder( let orderId = ""; try { - const { data, errors } = await getClient().mutate({ + const { data } = await getClient().mutate({ mutation, variables: { input }, }); - if (errors) { - console.error("GraphQL errors while creating order", { errors }); - return void redirect( - `/${eventSlug}/orders-admin?error=failedToCreateOrder`, - ); - } else if (!data?.createOrder?.order?.id) { + if (!data?.createOrder?.order?.id) { console.error("No order id in GraphQL response", { input, data, diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/orders-admin/page.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/orders-admin/page.tsx index c89bb797f..18e7f0eee 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/orders-admin/page.tsx +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/orders-admin/page.tsx @@ -104,7 +104,10 @@ function getDimensions( isMultiValue: false, isListFilter: true, isKeyDimension: true, - values: products.map(({ id, title }) => ({ slug: "" + id, title })), + values: products.map(({ id, title }) => ({ + slug: "" + id, + title, + })), }, ]; } diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-admin/[programSlug]/actions.ts b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-admin/[programSlug]/actions.ts index 620fb401d..0f7a39926 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-admin/[programSlug]/actions.ts +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-admin/[programSlug]/actions.ts @@ -67,17 +67,13 @@ export async function cancelProgramItem( resolution, }; - const { data, errors } = await getClient().mutate({ + const { data } = await getClient().mutate({ mutation: cancelProgramItemMutation, variables: { input, }, }); - if (errors) { - throw new Error(errors[0].message); - } - revalidatePath(`/${locale}/${eventSlug}/program-admin`); const cancelledResponseId = data?.cancelProgram?.responseId; @@ -125,17 +121,13 @@ export async function restoreProgramItem( programSlug, }; - const { data, errors } = await getClient().mutate({ + const { data } = await getClient().mutate({ mutation: restoreProgramItemMutation, variables: { input, }, }); - if (errors) { - throw new Error(errors[0].message); - } - const restoredProgramSlug = data?.restoreProgram?.programSlug; if (!restoredProgramSlug) { throw new Error( diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-admin/actions.ts b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-admin/actions.ts index 0242b2a05..f0300c343 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-admin/actions.ts +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-admin/actions.ts @@ -23,7 +23,7 @@ export async function createProgram( let slug: string; try { - const { data, errors } = await getClient().mutate({ + const { data } = await getClient().mutate({ mutation, variables: { input: { @@ -33,8 +33,8 @@ export async function createProgram( }, }); - if (errors || !data?.createProgram?.program) { - console.error("GraphQL error creating program:", errors); + if (!data?.createProgram?.program) { + console.error("GraphQL mutation returned no program"); return void redirect( `/${eventSlug}/program-admin?error=failedToCreateProgram`, ); diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-annotations/page.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-annotations/page.tsx index 0fb4d6908..5a1128ee2 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-annotations/page.tsx +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-annotations/page.tsx @@ -14,7 +14,6 @@ import { getClient } from "@/apolloClient"; import { auth } from "@/auth"; import { mangleAnnotationSlug } from "@/components/annotations/models"; import { Column, DataTable } from "@/components/DataTable"; -import { buildDimensionFilters } from "@/components/dimensions/helpers"; import SignInRequired from "@/components/errors/SignInRequired"; import { Field } from "@/components/forms/models"; import { SchemaForm } from "@/components/forms/SchemaForm"; @@ -69,7 +68,6 @@ interface Props { export const revalidate = 0; export async function generateMetadata(props: Props) { - const searchParams = await props.searchParams; const params = await props.params; const { locale, eventSlug } = params; const translations = getTranslations(locale); @@ -79,10 +77,9 @@ export async function generateMetadata(props: Props) { return translations.SignInRequired.metadata; } - const filters = buildDimensionFilters(searchParams); const { data } = await getClient().query({ query, - variables: { eventSlug, locale, filters }, + variables: { eventSlug, locale }, }); const title = getPageTitle({ translations, diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-invitations/page.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-invitations/page.tsx index f9b8e6090..5a6948755 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-invitations/page.tsx +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-invitations/page.tsx @@ -6,7 +6,6 @@ import { ProgramAdminInvitationFragment } from "@/__generated__/graphql"; import { getClient } from "@/apolloClient"; import { auth } from "@/auth"; import { Column, DataTable } from "@/components/DataTable"; -import { buildDimensionFilters } from "@/components/dimensions/helpers"; import SignInRequired from "@/components/errors/SignInRequired"; import FormattedDateTime from "@/components/FormattedDateTime"; import ProgramAdminView from "@/components/program/ProgramAdminView"; @@ -54,14 +53,12 @@ interface Props { export const revalidate = 0; export async function generateMetadata(props: Props) { - const searchParams = await props.searchParams; const params = await props.params; const { locale, eventSlug } = params; const translations = getTranslations(locale); - const filters = buildDimensionFilters(searchParams); const { data } = await getClient().query({ query, - variables: { eventSlug, locale, filters }, + variables: { eventSlug }, }); const title = getPageTitle({ translations, @@ -88,7 +85,7 @@ export default async function ProgramAdminInvitationsPage(props: Props) { const { data } = await getClient().query({ query, - variables: { eventSlug, locale }, + variables: { eventSlug }, }); if (!data.event?.program?.invitations) { notFound(); diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-offers/[responseId]/actions.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-offers/[responseId]/actions.tsx index dd33015a3..c16afa349 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-offers/[responseId]/actions.tsx +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-offers/[responseId]/actions.tsx @@ -28,17 +28,13 @@ export async function acceptProgramOffer( formData: Object.fromEntries(formData.entries()), }; - const { data, errors } = await getClient().mutate({ + const { data } = await getClient().mutate({ mutation, variables: { input, }, }); - if (errors) { - throw new Error(errors[0].message); - } - const program = data?.acceptProgramOffer?.program; if (!program) { throw new Error("Program not found"); @@ -69,17 +65,13 @@ export async function cancelProgramOffer( resolution: formData.get("resolution") as ProgramOfferResolution, }; - const { data, errors } = await getClient().mutate({ + const { data } = await getClient().mutate({ mutation: cancelProgramOfferMutation, variables: { input, }, }); - if (errors) { - throw new Error(errors[0].message); - } - const cancelledResponseId = data?.cancelProgramOffer?.responseId; if (!cancelledResponseId) { throw new Error("Backend did not return a response ID"); diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-preferences/actions.ts b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-preferences/actions.ts index 804469066..d2608dda7 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-preferences/actions.ts +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-preferences/actions.ts @@ -60,7 +60,6 @@ export async function createMessageReplyTo( variables: { input: { eventSlug, - slug: String(formData.get("slug") ?? ""), name: String(formData.get("name") ?? ""), email: String(formData.get("email") ?? ""), }, diff --git a/kompassi-v2-frontend/src/app/[locale]/profile/messages/page.tsx b/kompassi-v2-frontend/src/app/[locale]/profile/messages/page.tsx index e1f010793..6e289fc13 100644 --- a/kompassi-v2-frontend/src/app/[locale]/profile/messages/page.tsx +++ b/kompassi-v2-frontend/src/app/[locale]/profile/messages/page.tsx @@ -74,7 +74,10 @@ export default async function ProfileMessagesPage(props: Props) { const eventChoicesBySlug = new Map( allMessages.map((message) => [ message.event.slug, - { slug: message.event.slug, title: message.event.name }, + { + slug: message.event.slug, + title: message.event.name, + }, ]), ); const eventFilter = { diff --git a/kompassi-v2-frontend/src/components/annotations/service.ts b/kompassi-v2-frontend/src/components/annotations/service.ts index 746d12661..e04341531 100644 --- a/kompassi-v2-frontend/src/components/annotations/service.ts +++ b/kompassi-v2-frontend/src/components/annotations/service.ts @@ -20,7 +20,7 @@ export async function updateProgramAnnotations( programSlug: string, annotations: Record, ) { - const { data, errors } = await getClient().mutate({ + const { data } = await getClient().mutate({ mutation: updateProgramAnnotationsMutation, variables: { input: { @@ -31,11 +31,6 @@ export async function updateProgramAnnotations( }, }); - if (errors) { - console.error(errors); - throw new Error(errors.map((e) => e.message).join(", ")); - } - if (!data?.updateProgramAnnotations?.program) { throw new Error("No program found"); } @@ -65,7 +60,7 @@ export async function getProgramAnnotationSchema( eventSlug: string, annotationSlugs?: string[], ) { - const { data, errors } = await getClient().query({ + const { data } = await getClient().query({ query: getProgramAnnotationSchemaQuery, variables: { locale, @@ -75,11 +70,6 @@ export async function getProgramAnnotationSchema( }, }); - if (errors) { - console.error(errors); - throw new Error(errors.map((e) => e.message).join(", ")); - } - const annotations = data?.event?.program?.annotations; if (!annotations) { throw new Error("No annotations found"); diff --git a/kompassi-v2-frontend/src/components/dimensions/DimensionFilters.tsx b/kompassi-v2-frontend/src/components/dimensions/DimensionFilters.tsx index 419357592..5c3a57dc6 100644 --- a/kompassi-v2-frontend/src/components/dimensions/DimensionFilters.tsx +++ b/kompassi-v2-frontend/src/components/dimensions/DimensionFilters.tsx @@ -43,7 +43,7 @@ type Props = PropsWithoutProgramFilters | PropsWithProgramFilters; export function DimensionFilters(props: Props) { const { dimensions, programFilters, search, messages } = props; const searchParams = useSearchParams(); - const searchTerm = search ? searchParams.get("search") ?? "" : ""; + const searchTerm = search ? (searchParams.get("search") ?? "") : ""; const { replace } = useRouter(); const onChange = useCallback( diff --git a/kompassi-v2-frontend/src/components/dimensions/DimensionValueSelectionForm.tsx b/kompassi-v2-frontend/src/components/dimensions/DimensionValueSelectionForm.tsx index 56c100da1..8e48d206d 100644 --- a/kompassi-v2-frontend/src/components/dimensions/DimensionValueSelectionForm.tsx +++ b/kompassi-v2-frontend/src/components/dimensions/DimensionValueSelectionForm.tsx @@ -55,7 +55,7 @@ export function buildDimensionField( type = "MultiSelect"; } - const value = type === "SingleSelect" ? valueList[0] ?? "" : valueList; + const value = type === "SingleSelect" ? (valueList[0] ?? "") : valueList; const readOnly = technicalDimensions === "readonly" && dimension.isTechnical; const title = dimension.title || dimension.slug; diff --git a/kompassi-v2-frontend/src/components/forms/LegacyModal.tsx b/kompassi-v2-frontend/src/components/forms/LegacyModal.tsx index 8a981b22c..7440e3b29 100644 --- a/kompassi-v2-frontend/src/components/forms/LegacyModal.tsx +++ b/kompassi-v2-frontend/src/components/forms/LegacyModal.tsx @@ -111,9 +111,11 @@ export function Modal(props: Props) { messages, } = props; - // XXX Hack - onSubmitRef.current = onSubmit ?? null; - onCloseRef.current = onClose ?? null; + // XXX Hack: keep the latest callbacks available to submit()/close() without stale closures + React.useEffect(() => { + onSubmitRef.current = onSubmit ?? null; + onCloseRef.current = onClose ?? null; + }); return ( diff --git a/kompassi-v2-frontend/src/components/forms/models.ts b/kompassi-v2-frontend/src/components/forms/models.ts index 3a295249f..890400da3 100644 --- a/kompassi-v2-frontend/src/components/forms/models.ts +++ b/kompassi-v2-frontend/src/components/forms/models.ts @@ -61,11 +61,7 @@ export const nonValueFieldTypes: FieldType[] = [ ]; export type HtmlType = - | "text" - | "email" - | "password" - | "datetime-local" - | "number"; + "text" | "email" | "password" | "datetime-local" | "number"; interface BaseField { type: FieldType; @@ -297,11 +293,7 @@ export function validateFields(fields: unknown): asserts fields is Field[] { } export type FieldSummaryType = - | "Text" - | "SingleCheckbox" - | "Select" - | "Matrix" - | "FileUpload"; + "Text" | "SingleCheckbox" | "Select" | "Matrix" | "FileUpload"; // NOTE: Keep in sync with backend/forms/utils/summarize_responses.py export interface BaseFieldSummary { diff --git a/kompassi-v2-frontend/src/components/involvement/PerksForm.tsx b/kompassi-v2-frontend/src/components/involvement/PerksForm.tsx index 35ef53779..0ac30fbe5 100644 --- a/kompassi-v2-frontend/src/components/involvement/PerksForm.tsx +++ b/kompassi-v2-frontend/src/components/involvement/PerksForm.tsx @@ -56,7 +56,7 @@ function initialDimensionValue( cachedDimensions: Record, ): PerkValue { const values = cachedDimensions[dimension.slug] ?? []; - return dimension.isMultiValue ? values : values[0] ?? ""; + return dimension.isMultiValue ? values : (values[0] ?? ""); } function initialAnnotationValue( diff --git a/kompassi-v2-frontend/src/components/navigation/NavigationMenus.tsx b/kompassi-v2-frontend/src/components/navigation/NavigationMenus.tsx index 3fa1ab8e7..ce5115146 100644 --- a/kompassi-v2-frontend/src/components/navigation/NavigationMenus.tsx +++ b/kompassi-v2-frontend/src/components/navigation/NavigationMenus.tsx @@ -64,10 +64,8 @@ export default function NavigationMenus({ session, locale, messages }: Props) { {Object.entries(supportedLanguages).map(([code, name]) => ( {name} diff --git a/kompassi-v2-frontend/src/components/program/ProgramAdminDetailTabs.tsx b/kompassi-v2-frontend/src/components/program/ProgramAdminDetailTabs.tsx index 82d030f6a..188559bcb 100644 --- a/kompassi-v2-frontend/src/components/program/ProgramAdminDetailTabs.tsx +++ b/kompassi-v2-frontend/src/components/program/ProgramAdminDetailTabs.tsx @@ -2,11 +2,7 @@ import Tabs, { Tab } from "@/components/ServerTabs"; import { Translations } from "@/translations/en"; export type ProgramAdminTab = - | "basicInfo" - | "scheduleItems" - | "programHosts" - | "dimensions" - | "annotations"; + "basicInfo" | "scheduleItems" | "programHosts" | "dimensions" | "annotations"; export interface ProgramAdminTabsProps { eventSlug: string; diff --git a/kompassi-v2-frontend/src/components/response/ResponseHistoryBanner.tsx b/kompassi-v2-frontend/src/components/response/ResponseHistoryBanner.tsx index 17aa9e5f9..08b6c87d2 100644 --- a/kompassi-v2-frontend/src/components/response/ResponseHistoryBanner.tsx +++ b/kompassi-v2-frontend/src/components/response/ResponseHistoryBanner.tsx @@ -50,8 +50,7 @@ graphql(` interface Props { basePath: string; response: - | ResponseHistoryBannerFragment - | ProfileResponseHistoryBannerFragment; + ResponseHistoryBannerFragment | ProfileResponseHistoryBannerFragment; messages: { ResponseHistory: Translations["Survey"]["ResponseHistory"]; OldVersionAlert: Translations["Survey"]["OldVersionAlert"]; diff --git a/kompassi-v2-frontend/src/middleware.ts b/kompassi-v2-frontend/src/proxy.ts similarity index 100% rename from kompassi-v2-frontend/src/middleware.ts rename to kompassi-v2-frontend/src/proxy.ts diff --git a/kompassi-v2-frontend/tsconfig.json b/kompassi-v2-frontend/tsconfig.json index 0a70170d8..f52670986 100644 --- a/kompassi-v2-frontend/tsconfig.json +++ b/kompassi-v2-frontend/tsconfig.json @@ -11,7 +11,7 @@ "moduleResolution": "bundler", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve", + "jsx": "react-jsx", "incremental": true, "plugins": [ { @@ -27,7 +27,8 @@ "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", - "src/app/[locale]/[eventSlug]/program-hosts/page.tsx-disabled" + "src/app/[locale]/[eventSlug]/program-hosts/page.tsx-disabled", + ".next/dev/types/**/*.ts" ], "exclude": ["node_modules"] } From fec17d2d6221156a4ef150e067eacbc77c4bf381 Mon Sep 17 00:00:00 2001 From: Luka Pajukanta Date: Thu, 30 Jul 2026 19:29:29 +0300 Subject: [PATCH 10/12] chore(program_v2): disable program messages tab in production for now --- .../src/components/program/ProgramAdminTabs.tsx | 4 ++++ kompassi-v2-frontend/src/config.ts | 1 + 2 files changed, 5 insertions(+) diff --git a/kompassi-v2-frontend/src/components/program/ProgramAdminTabs.tsx b/kompassi-v2-frontend/src/components/program/ProgramAdminTabs.tsx index 0a824d22e..1ce1610fb 100644 --- a/kompassi-v2-frontend/src/components/program/ProgramAdminTabs.tsx +++ b/kompassi-v2-frontend/src/components/program/ProgramAdminTabs.tsx @@ -1,4 +1,5 @@ import Tabs, { Tab } from "@/components/ServerTabs"; +import { isProduction } from "@/config"; import { Translations } from "@/translations/en"; export interface ProgramAdminTabsProps { @@ -78,6 +79,9 @@ export default function ProgramAdminTabs({ slug: "programMessages", title: t.Message.listTitle, href: `/${eventSlug}/program-messages${queryString}`, + + // discourage use as we perform extensive testing + disabled: isProduction, }, { slug: "reports", diff --git a/kompassi-v2-frontend/src/config.ts b/kompassi-v2-frontend/src/config.ts index 4d0b47038..81cd98841 100644 --- a/kompassi-v2-frontend/src/config.ts +++ b/kompassi-v2-frontend/src/config.ts @@ -21,5 +21,6 @@ export const kompassiOidc = { }; export const publicUrl = process.env.NEXTAUTH_URL || "http://localhost:3000"; +export const isProduction = publicUrl === "https://kompassi.eu"; export const timezone = process.env.KOMPASSI_TIMEZONE || "Europe/Helsinki"; From 1960baa887898468be3bb63bb1497abfc53d8e1f Mon Sep 17 00:00:00 2001 From: Luka Pajukanta Date: Thu, 30 Jul 2026 19:36:02 +0300 Subject: [PATCH 11/12] ci: ignore v1 for prettier --- .pre-commit-config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fde61a5a5..39a650460 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,6 +24,7 @@ repos: args: [--check, --ignore-unknown] language: node types_or: [javascript, jsx, ts, tsx] + files: ^kompassi-v2-frontend/ additional_dependencies: - prettier@3.9.6 # XXX somehow the typechecking still leaks to parts of the code that is not yet ready for pyrekt From dad35662d15fd99a88b7bf07630a08e3f3e6eb26 Mon Sep 17 00:00:00 2001 From: Luka Pajukanta Date: Thu, 30 Jul 2026 19:38:20 +0300 Subject: [PATCH 12/12] ci: disable prettier --- .pre-commit-config.yaml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 39a650460..b5a1578be 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -16,17 +16,17 @@ repos: - id: end-of-file-fixer exclude: .*__generated__.* - id: trailing-whitespace - - repo: local - hooks: - - id: prettier - name: prettier - entry: prettier - args: [--check, --ignore-unknown] - language: node - types_or: [javascript, jsx, ts, tsx] - files: ^kompassi-v2-frontend/ - additional_dependencies: - - prettier@3.9.6 + # - repo: local + # hooks: + # - id: prettier + # name: prettier + # entry: prettier + # args: [--check, --ignore-unknown] + # language: node + # types_or: [javascript, jsx, ts, tsx] + # files: ^kompassi-v2-frontend/ + # additional_dependencies: + # - prettier@3.9.6 # XXX somehow the typechecking still leaks to parts of the code that is not yet ready for pyrekt # - repo: https://github.com/RobertCraigie/pyright-python # rev: v1.1.367