From 6bf7e7d42ecf1d05b83cc7f2ae7e1b0b63a7ebec Mon Sep 17 00:00:00 2001 From: Vitex Tecnologia Date: Wed, 18 Mar 2026 01:07:27 -0300 Subject: [PATCH] Nova versao codex Parecer, atualizacao completa --- bun.lockb | Bin 201126 -> 212856 bytes components.json | 4 + package-lock.json | 1419 ++++++++++++++++- package.json | 6 +- src/components/Layout.tsx | 11 +- src/components/areas/AreasView.tsx | 498 ++++++ .../ParecerJuridicoDetailView.tsx | 705 ++++++++ .../ParecerJuridicoFormView.tsx | 291 ++++ .../ParecerJuridicoGeneratingScreen.tsx | 256 +++ .../parecer-juridico/ParecerJuridicoView.tsx | 312 ++++ .../prompts/PromptGeneratingScreen.tsx | 248 +++ src/components/prompts/PromptsFormView.tsx | 423 +++++ src/components/prompts/PromptsView.tsx | 368 +++++ src/components/ui/animated-beam.tsx | 183 +++ src/components/ui/animated-gradient-text.tsx | 37 + src/components/ui/animated-grid-pattern.tsx | 175 ++ src/components/ui/animated-shiny-text.tsx | 42 + src/components/ui/border-beam.tsx | 105 ++ src/components/ui/confetti.tsx | 145 ++ src/components/ui/dialog.tsx | 22 +- .../ui/interactive-hover-button.tsx | 30 + src/components/ui/neon-gradient-card.tsx | 146 ++ src/components/ui/rainbow-button.tsx | 61 + src/components/ui/ripple-button.tsx | 99 ++ src/components/ui/ripple.tsx | 58 + src/components/ui/shimmer-button.tsx | 96 ++ src/components/ui/sparkles-text.tsx | 148 ++ src/components/ui/terminal.tsx | 55 + src/components/ui/typing-animation.tsx | 234 +++ src/components/ui/warp-background.tsx | 150 ++ src/contexts/PromptsContext.tsx | 84 + src/index.css | 103 +- src/pages/Index.tsx | 117 +- src/services/agent.ts | 346 +--- src/services/api.ts | 92 +- src/services/areas.ts | 183 +++ src/services/asana.ts | 289 +--- src/services/assistentePrompts.ts | 54 + src/services/audioGeneration.ts | 359 ++--- src/services/chat.ts | 1027 +++--------- src/services/imageGeneration.ts | 371 +---- src/services/index.ts | 8 +- src/services/parecerApi.ts | 289 ++++ src/services/personalAgent.ts | 364 +---- src/services/promptsApi.ts | 176 ++ src/services/transcription.ts | 260 +-- src/services/types.ts | 13 - src/utils/sound.ts | 25 + tailwind.config.ts | 2 +- 49 files changed, 8003 insertions(+), 2486 deletions(-) create mode 100644 src/components/areas/AreasView.tsx create mode 100644 src/components/parecer-juridico/ParecerJuridicoDetailView.tsx create mode 100644 src/components/parecer-juridico/ParecerJuridicoFormView.tsx create mode 100644 src/components/parecer-juridico/ParecerJuridicoGeneratingScreen.tsx create mode 100644 src/components/parecer-juridico/ParecerJuridicoView.tsx create mode 100644 src/components/prompts/PromptGeneratingScreen.tsx create mode 100644 src/components/prompts/PromptsFormView.tsx create mode 100644 src/components/prompts/PromptsView.tsx create mode 100644 src/components/ui/animated-beam.tsx create mode 100644 src/components/ui/animated-gradient-text.tsx create mode 100644 src/components/ui/animated-grid-pattern.tsx create mode 100644 src/components/ui/animated-shiny-text.tsx create mode 100644 src/components/ui/border-beam.tsx create mode 100644 src/components/ui/confetti.tsx create mode 100644 src/components/ui/interactive-hover-button.tsx create mode 100644 src/components/ui/neon-gradient-card.tsx create mode 100644 src/components/ui/rainbow-button.tsx create mode 100644 src/components/ui/ripple-button.tsx create mode 100644 src/components/ui/ripple.tsx create mode 100644 src/components/ui/shimmer-button.tsx create mode 100644 src/components/ui/sparkles-text.tsx create mode 100644 src/components/ui/terminal.tsx create mode 100644 src/components/ui/typing-animation.tsx create mode 100644 src/components/ui/warp-background.tsx create mode 100644 src/contexts/PromptsContext.tsx create mode 100644 src/services/areas.ts create mode 100644 src/services/assistentePrompts.ts create mode 100644 src/services/parecerApi.ts create mode 100644 src/services/promptsApi.ts create mode 100644 src/utils/sound.ts diff --git a/bun.lockb b/bun.lockb index f41003f46ec30e09b6b5787170776b3b9fd487f4..2563ba1064f03bc7021129d16890af599d867d1a 100644 GIT binary patch delta 46185 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 z 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

d#B2|ccr|0R*6REYSi;M^WD=fzu!HzXi|ss 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 Dvu-vx delta 38922 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 diff --git a/components.json b/components.json index 62e1011..5bb43fc 100644 --- a/components.json +++ b/components.json @@ -10,11 +10,15 @@ "cssVariables": true, "prefix": "" }, + "iconLibrary": "lucide", "aliases": { "components": "@/components", "utils": "@/lib/utils", "ui": "@/components/ui", "lib": "@/lib", "hooks": "@/hooks" + }, + "registries": { + "@magicui": "https://magicui.design/r/{name}" } } diff --git a/package-lock.json b/package-lock.json index 6a27f24..a0e36f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "@radix-ui/react-select": "^2.2.5", "@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-slider": "^1.3.5", - "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-switch": "^1.2.5", "@radix-ui/react-tabs": "^1.1.12", "@radix-ui/react-toast": "^1.2.14", @@ -37,7 +37,9 @@ "@radix-ui/react-toggle-group": "^1.1.10", "@radix-ui/react-tooltip": "^1.2.7", "@tanstack/react-query": "^5.83.0", + "@types/canvas-confetti": "^1.9.0", "axios": "^1.12.2", + "canvas-confetti": "^1.9.4", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", @@ -46,11 +48,13 @@ "input-otp": "^1.4.2", "jwt-decode": "^4.0.0", "lucide-react": "^0.462.0", + "motion": "^12.36.0", "next-themes": "^0.3.0", "react": "^18.3.1", "react-day-picker": "^8.10.1", "react-dom": "^18.3.1", "react-hook-form": "^7.61.1", + "react-markdown": "^9.1.0", "react-resizable-panels": "^2.1.9", "react-router-dom": "^6.30.1", "recharts": "^2.15.4", @@ -1024,6 +1028,24 @@ } } }, + "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-arrow": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", @@ -1183,6 +1205,24 @@ } } }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-compose-refs": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", @@ -1277,6 +1317,24 @@ } } }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-direction": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", @@ -1500,6 +1558,24 @@ } } }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-menubar": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.15.tgz", @@ -1605,6 +1681,24 @@ } } }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-popper": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.7.tgz", @@ -1708,6 +1802,24 @@ } } }, + "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-progress": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.7.tgz", @@ -1869,6 +1981,24 @@ } } }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-separator": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz", @@ -1926,9 +2056,9 @@ } }, "node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" @@ -2124,6 +2254,24 @@ } } }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-use-callback-ref": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", @@ -2828,6 +2976,12 @@ "react": "^18 || ^19" } }, + "node_modules/@types/canvas-confetti": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@types/canvas-confetti/-/canvas-confetti-1.9.0.tgz", + "integrity": "sha512-aBGj/dULrimR1XDZLtG9JwxX1b4HPRF6CX9Yfwh3NvstZEm1ZL7RBnel4keCPSqs1ANRu1u2Aoz9R+VmtjYuTg==", + "license": "MIT" + }, "node_modules/@types/d3-array": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", @@ -2891,13 +3045,39 @@ "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", "license": "MIT" }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "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.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -2905,6 +3085,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.16.5", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.5.tgz", @@ -2919,14 +3114,12 @@ "version": "15.7.13", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", - "devOptional": true, "license": "MIT" }, "node_modules/@types/react": { "version": "18.3.23", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", - "devOptional": true, "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -2943,6 +3136,12 @@ "@types/react": "^18.0.0" } }, + "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/@typescript-eslint/eslint-plugin": { "version": "8.38.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", @@ -3201,6 +3400,12 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, "node_modules/@vitejs/plugin-react-swc": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.11.0.tgz", @@ -3381,6 +3586,16 @@ "proxy-from-env": "^1.1.0" } }, + "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", @@ -3508,6 +3723,26 @@ ], "license": "CC-BY-4.0" }, + "node_modules/canvas-confetti": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/canvas-confetti/-/canvas-confetti-1.9.4.tgz", + "integrity": "sha512-yxQbJkAVrFXWNbTUjPqjF7G+g6pDotOUHGbkZq2NELZUMDpiJ85rIEazVb8GTaAptNW2miJAXbs1BtioA251Pw==", + "license": "ISC", + "funding": { + "type": "donate", + "url": "https://www.paypal.me/kirilvatev" + } + }, + "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", @@ -3525,6 +3760,46 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "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/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -3627,6 +3902,16 @@ "node": ">= 0.8" } }, + "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/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -3809,7 +4094,6 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -3829,6 +4113,19 @@ "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", "license": "MIT" }, + "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", @@ -3845,12 +4142,34 @@ "node": ">=0.4.0" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", "license": "MIT" }, + "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/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -4209,6 +4528,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/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -4235,6 +4564,12 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "license": "MIT" }, + "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", @@ -4431,6 +4766,33 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/framer-motion": { + "version": "12.36.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.36.0.tgz", + "integrity": "sha512-4PqYHAT7gev0ke0wos+PyrcFxI0HScjm3asgU8nSYa8YzJFuwgIvdj3/s3ZaxLq0bUSboIn19A2WS/MHwLCvfw==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.36.0", + "motion-utils": "^12.36.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -4637,6 +4999,56 @@ "node": ">= 0.4" } }, + "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-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/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/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -4674,6 +5086,12 @@ "node": ">=0.8.19" } }, + "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/input-otp": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.2.tgz", @@ -4693,6 +5111,30 @@ "node": ">=12" } }, + "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-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -4720,6 +5162,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", @@ -4750,6 +5202,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-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4759,6 +5221,18 @@ "node": ">=0.12.0" } }, + "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/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4920,6 +5394,16 @@ "dev": true, "license": "MIT" }, + "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", @@ -5415,6 +5899,159 @@ "node": ">= 0.4" } }, + "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-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", @@ -5424,6 +6061,448 @@ "node": ">= 8" } }, + "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-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/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": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "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": { + "micromark-util-symbol": "^2.0.0" + } + }, + "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": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "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": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "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": { + "micromark-util-symbol": "^2.0.0" + } + }, + "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": { + "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/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", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "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", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "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", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "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", @@ -5480,11 +6559,51 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/motion": { + "version": "12.36.0", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.36.0.tgz", + "integrity": "sha512-5BMQuktYUX8aEByKWYx5tR4X3G08H2OMgp46wTxZ4o7CDDstyy4A0fe9RLNMjZiwvntCWGDvs16sC87/emz4Yw==", + "license": "MIT", + "dependencies": { + "framer-motion": "^12.36.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/motion-dom": { + "version": "12.36.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.36.0.tgz", + "integrity": "sha512-Ep1pq8P88rGJ75om8lTCA13zqd7ywPGwCqwuWwin6BKc0hMLkVfcS6qKlRqEo2+t0DwoUcgGJfXwaiFn4AOcQA==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.36.0" + } + }, + "node_modules/motion-utils": { + "version": "12.36.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.36.0.tgz", + "integrity": "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==", + "license": "MIT" + }, "node_modules/ms": { "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/mz": { @@ -5646,6 +6765,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/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5893,6 +7037,16 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -5990,6 +7144,33 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "license": "MIT" }, + "node_modules/react-markdown": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.1.0.tgz", + "integrity": "sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==", + "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-remove-scroll": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", @@ -6185,6 +7366,39 @@ "decimal.js-light": "^2.4.1" } }, + "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/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -6355,6 +7569,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/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -6414,6 +7638,20 @@ "node": ">=8" } }, + "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": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -6464,6 +7702,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/sucrase": { "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", @@ -6606,6 +7862,26 @@ "node": ">=8.0" } }, + "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", @@ -6689,6 +7965,93 @@ "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-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/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -6801,6 +8164,34 @@ "react-dom": "^16.8 || ^17.0 || ^18.0" } }, + "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-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/victory-vendor": { "version": "36.9.2", "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", @@ -7029,6 +8420,16 @@ "funding": { "url": "https://github.com/sponsors/colinhacks" } + }, + "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/package.json b/package.json index e7982a7..2a3d56c 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "@radix-ui/react-select": "^2.2.5", "@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-slider": "^1.3.5", - "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-switch": "^1.2.5", "@radix-ui/react-tabs": "^1.1.12", "@radix-ui/react-toast": "^1.2.14", @@ -40,7 +40,9 @@ "@radix-ui/react-toggle-group": "^1.1.10", "@radix-ui/react-tooltip": "^1.2.7", "@tanstack/react-query": "^5.83.0", + "@types/canvas-confetti": "^1.9.0", "axios": "^1.12.2", + "canvas-confetti": "^1.9.4", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", @@ -49,11 +51,13 @@ "input-otp": "^1.4.2", "jwt-decode": "^4.0.0", "lucide-react": "^0.462.0", + "motion": "^12.36.0", "next-themes": "^0.3.0", "react": "^18.3.1", "react-day-picker": "^8.10.1", "react-dom": "^18.3.1", "react-hook-form": "^7.61.1", + "react-markdown": "^9.1.0", "react-resizable-panels": "^2.1.9", "react-router-dom": "^6.30.1", "recharts": "^2.15.4", diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 0d079c0..0458234 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import { MessageSquare, Image, AudioLines, Mic, ArrowLeft, Plus, ChevronLeft, ChevronRight, Bot, Brain } from "lucide-react"; +import { MessageSquare, Image, AudioLines, Mic, ArrowLeft, Plus, ChevronLeft, ChevronRight, Bot, Brain, FileText, Layers } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Separator } from "@/components/ui/separator"; import { ThemeToggle } from "@/components/ThemeToggle"; @@ -7,11 +7,11 @@ import { GlobalFunctions } from "@/GlobalFunctions"; interface LayoutProps { children: React.ReactNode; - activeTab: "chat" | "images" | "transcription" | "generation" | "bots" | "agent"; - onTabChange: (tab: "chat" | "images" | "transcription" | "generation" | "bots" | "agent") => void; + activeTab: "chat" | "images" | "transcription" | "generation" | "bots" | "agent" | "prompts" | "parecerJuridico" | "areas"; + onTabChange: (tab: "chat" | "images" | "transcription" | "generation" | "bots" | "agent" | "prompts" | "parecerJuridico" | "areas") => void; } -type TabType = "chat" | "images" | "transcription" | "generation" | "bots" | "agent"; +type TabType = "chat" | "images" | "transcription" | "generation" | "bots" | "agent" | "prompts" | "parecerJuridico" | "areas"; export const Layout = ({ children, activeTab, onTabChange }: LayoutProps) => { const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(false); @@ -23,6 +23,9 @@ export const Layout = ({ children, activeTab, onTabChange }: LayoutProps) => { { id: "generation" as TabType, label: "Geração de Áudio", icon: Mic }, //{ id: "bots" as TabType, label: "Bots", icon: Bot }, { id: "agent" as TabType, label: "Agente de Parecer", icon: Brain }, + { id: "prompts" as TabType, label: "Prompts", icon: FileText }, + { id: "parecerJuridico" as TabType, label: "Parecer Jurídico", icon: Bot }, + { id: "areas" as TabType, label: "Áreas", icon: Layers }, ]; return ( diff --git a/src/components/areas/AreasView.tsx b/src/components/areas/AreasView.tsx new file mode 100644 index 0000000..40ff800 --- /dev/null +++ b/src/components/areas/AreasView.tsx @@ -0,0 +1,498 @@ +import { useState, useMemo, useEffect } from "react"; +import { Layers, Plus, Edit, Trash2 } from "lucide-react"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Textarea } from "@/components/ui/textarea"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; +import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog"; +import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@/components/ui/alert-dialog"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { usePrompts } from "@/contexts/PromptsContext"; +import { areasService, type AreaItem } from "@/services/areas"; +import { toast } from "sonner"; + +export function AreasView() { + const { areas, setAreas, areaDescriptions, setAreaDescriptions, setPrompts } = usePrompts(); + + const [isCreateOpen, setIsCreateOpen] = useState(false); + const [isEditOpen, setIsEditOpen] = useState(false); + const [isDeleteOpen, setIsDeleteOpen] = useState(false); + const [selectedAreaItem, setSelectedAreaItem] = useState(null); + const [editName, setEditName] = useState(""); + const [editDescription, setEditDescription] = useState(""); + const [newName, setNewName] = useState(""); + const [newDescription, setNewDescription] = useState(""); + const [isCreatingArea, setIsCreatingArea] = useState(false); + const [isSavingEdit, setIsSavingEdit] = useState(false); + const [isDeletingArea, setIsDeletingArea] = useState(false); + + const selectedArea = selectedAreaItem?.nome ?? null; + + const [filterNome, setFilterNome] = useState(""); + const [currentPage, setCurrentPage] = useState(1); + const [itemsPerPage, setItemsPerPage] = useState(10); + + const [areasList, setAreasList] = useState([]); + const [totalRegistros, setTotalRegistros] = useState(0); + const [totalPaginas, setTotalPaginas] = useState(1); + const [loadingList, setLoadingList] = useState(true); + + const totalPages = Math.max(1, totalPaginas); + + useEffect(() => { + let cancelled = false; + setLoadingList(true); + areasService.listar({ + nome: filterNome.trim() || undefined, + page: currentPage, + per_page: itemsPerPage, + }) + .then((res) => { + if (!cancelled) { + setAreasList(res.data ?? []); + setTotalRegistros(res.total_registros ?? 0); + setTotalPaginas(res.total_paginas ?? 1); + setAreas((prev) => [...new Set([...prev, ...(res.data ?? []).map((a) => a.nome)])].sort((a, b) => a.localeCompare(b))); + setAreaDescriptions((prev) => ({ + ...prev, + ...Object.fromEntries((res.data ?? []).map((a) => [a.nome, a.descricao ?? ""])), + })); + } + }) + .catch((e: unknown) => { + if (!cancelled) { + const msg = e && typeof e === "object" && "message" in e ? (e as { message: string }).message : "Erro ao carregar áreas."; + toast.error(msg); + setAreasList([]); + setTotalRegistros(0); + setTotalPaginas(1); + } + }) + .finally(() => { + if (!cancelled) setLoadingList(false); + }); + return () => { cancelled = true; }; + }, [filterNome, currentPage, itemsPerPage]); + + useEffect(() => { + setCurrentPage(1); + }, [filterNome]); + + const handleItemsPerPageChange = (value: string) => { + setItemsPerPage(Number(value)); + setCurrentPage(1); + }; + + const handleCreate = async () => { + const name = newName.trim(); + const description = newDescription.trim(); + if (!name) return; + if (areas.includes(name)) { + toast.error("Já existe uma área com esse nome."); + return; + } + setIsCreatingArea(true); + try { + await areasService.criar(name, description); + setAreas((prev) => [...prev, name].sort((a, b) => a.localeCompare(b))); + setAreaDescriptions((prev) => ({ ...prev, [name]: description })); + setNewName(""); + setNewDescription(""); + setIsCreateOpen(false); + toast.success("Área criada."); + areasService.listar({ nome: filterNome.trim() || undefined, page: currentPage, per_page: itemsPerPage }) + .then((res) => { + setAreasList(res.data ?? []); + setTotalRegistros(res.total_registros ?? 0); + setTotalPaginas(res.total_paginas ?? 1); + setAreas((p) => [...new Set([...p, ...(res.data ?? []).map((a) => a.nome)])].sort((a, b) => a.localeCompare(b))); + setAreaDescriptions((p) => ({ ...p, ...Object.fromEntries((res.data ?? []).map((a) => [a.nome, a.descricao ?? ""])) })); + }) + .catch(() => {}); + } catch (e: unknown) { + const message = e && typeof e === "object" && "message" in e ? (e as { message: string }).message : "Erro ao criar área."; + toast.error(message); + } finally { + setIsCreatingArea(false); + } + }; + + const openEdit = (item: AreaItem) => { + setSelectedAreaItem(item); + setEditName(item.nome); + setEditDescription(item.descricao ?? areaDescriptions[item.nome] ?? ""); + setIsEditOpen(true); + }; + + const refetchList = () => { + areasService.listar({ nome: filterNome.trim() || undefined, page: currentPage, per_page: itemsPerPage }) + .then((res) => { + setAreasList(res.data ?? []); + setTotalRegistros(res.total_registros ?? 0); + setTotalPaginas(res.total_paginas ?? 1); + setAreas((p) => [...new Set([...p, ...(res.data ?? []).map((a) => a.nome)])].sort((a, b) => a.localeCompare(b))); + setAreaDescriptions((p) => ({ ...p, ...Object.fromEntries((res.data ?? []).map((a) => [a.nome, a.descricao ?? ""])) })); + }) + .catch(() => {}); + }; + + const handleSaveEdit = async () => { + if (!selectedAreaItem || !editName.trim()) { + setIsEditOpen(false); + return; + } + const name = editName.trim(); + const description = editDescription.trim(); + if (name !== selectedAreaItem.nome && areas.includes(name)) { + toast.error("Já existe uma área com esse nome."); + return; + } + setIsSavingEdit(true); + try { + await areasService.editar(selectedAreaItem.id, name, description); + const oldName = selectedAreaItem.nome; + if (name !== oldName) { + setAreas((prev) => prev.map((a) => (a === oldName ? name : a)).sort((a, b) => a.localeCompare(b))); + setPrompts((prev) => prev.map((p) => (p.area === oldName ? { ...p, area: name } : p))); + } + setAreaDescriptions((prev) => { + const next = { ...prev }; + if (oldName in next) delete next[oldName]; + next[name] = description; + return next; + }); + setSelectedAreaItem(null); + setIsEditOpen(false); + toast.success("Área atualizada."); + refetchList(); + } catch (e: unknown) { + const message = e && typeof e === "object" && "message" in e ? (e as { message: string }).message : "Erro ao editar área."; + toast.error(message); + } finally { + setIsSavingEdit(false); + } + }; + + const openDelete = (item: AreaItem) => { + setSelectedAreaItem(item); + setIsDeleteOpen(true); + }; + + const handleDelete = async () => { + if (!selectedAreaItem || totalRegistros <= 1) return; + setIsDeletingArea(true); + try { + await areasService.deletar(selectedAreaItem.id); + const fallback = areasList.find((a) => a.id !== selectedAreaItem!.id)?.nome ?? areas.find((a) => a !== selectedAreaItem!.nome); + if (fallback) { + setPrompts((prev) => + prev.map((p) => (p.area === selectedAreaItem.nome ? { ...p, area: fallback } : p)) + ); + } + setAreas((prev) => prev.filter((a) => a !== selectedAreaItem.nome)); + setAreaDescriptions((prev) => { + const next = { ...prev }; + delete next[selectedAreaItem.nome]; + return next; + }); + setSelectedAreaItem(null); + setIsDeleteOpen(false); + toast.success("Área excluída."); + refetchList(); + } catch (e: unknown) { + const message = e && typeof e === "object" && "message" in e ? (e as { message: string }).message : "Erro ao excluir área."; + toast.error(message); + } finally { + setIsDeletingArea(false); + } + }; + + const clearFilters = () => { + setFilterNome(""); + setCurrentPage(1); + }; + + return ( +

+
+
+

+ + Áreas +

+
+ +
+
+ {(loadingList || totalRegistros > 0) && ( +
+ setFilterNome(e.target.value)} + className="w-full md:max-w-sm text-sm" + /> + {filterNome.trim() && ( + + )} +
+ Itens: + +
+
+ )} +
+ +
+ {!loadingList && areasList.length === 0 && totalRegistros === 0 ? ( + + + + + Nenhuma área cadastrada + + + Crie a primeira área para usar nos prompts (ex.: Bate-papo, Imagens). + + + + + + + ) : ( + <> +
+ + + + Área + Ações + + + + {loadingList ? ( + + + Carregando... + + + ) : ( + areasList.map((item) => ( + + {item.nome} + +
+ + +
+
+
+ )) + )} +
+
+
+ + {!loadingList && totalRegistros > 0 && ( +
+

+ Mostrando {totalRegistros} {totalRegistros === 1 ? "área" : "áreas"} +

+
+ +
+ {Array.from({ length: Math.min(totalPages, 5) }, (_, i) => { + let page: number; + if (totalPages <= 5) { + page = i + 1; + } else if (currentPage <= 3) { + page = i + 1; + } else if (currentPage >= totalPages - 2) { + page = totalPages - 4 + i; + } else { + page = currentPage - 2 + i; + } + return ( + + ); + })} +
+ +
+
+ )} + + )} +
+ + {/* Modal Novo */} + + + + Nova área + Informe o nome e, se quiser, a descrição da área. Ela poderá ser usada nos prompts. + +
+
+ + setNewName(e.target.value)} + placeholder="Ex: Suporte" + onKeyDown={(e) => e.key === "Enter" && handleCreate()} + /> +
+
+ +