From 29c64c7e399df37ef6395b5d9a8a7c64722acef2 Mon Sep 17 00:00:00 2001 From: Marco Pedone Date: Mon, 4 Aug 2025 17:45:44 +0200 Subject: [PATCH] init --- .dockerignore | 35 + .gitignore | 37 + apps/backend/.air.toml | 46 + apps/backend/.dockerignore | 11 + apps/backend/Dockerfile | 69 + apps/backend/TODO | 4 + apps/backend/db_handler.go | 317 + apps/backend/dbhelpers/dbhelpers.go | 146 + apps/backend/docker-compose.yml | 102 + apps/backend/fallback.webp | Bin 0 -> 5650 bytes apps/backend/from_bkp.go | 266 + apps/backend/go.mod | 55 + apps/backend/go.sum | 137 + apps/backend/image_handler.go | 127 + apps/backend/images.go | 206 + apps/backend/miogest_handler.go | 516 + apps/backend/models.go | 365 + apps/backend/pg_dumper.sh | 23 + apps/backend/public/static/js/htmx.js | 1 + apps/backend/public/views/backup-upload.html | 59 + apps/backend/public/views/main.html | 163 + apps/backend/server.go | 260 + apps/backend/storage.go | 263 + apps/backend/storage_handlers/fs.go | 74 + apps/backend/storage_handlers/minio.go | 137 + .../storage_handlers/storage_handler.go | 53 + apps/backend/test.jpg | Bin 0 -> 77454 bytes apps/backend/utils.go | 122 + apps/db/Dockerfile | 19 + apps/db/docker-compose.yml | 34 + apps/db/filter_sql.awk | 72 + apps/db/initial/1_init.sql | 1135 + apps/db/initial/2_data.sql | 133 + apps/db/initial/3_seed_user.sql | 21 + apps/db/log_parser.sh | 61 + apps/db/migration.sql | 0 apps/db/pg_dumper.sh | 23 + apps/infoalloggi/.docker_env | 25 + apps/infoalloggi/.dockerignore | 9 + apps/infoalloggi/.github/dependabot.yml | 21 + apps/infoalloggi/.github/workflows/ci.yml | 56 + apps/infoalloggi/.kanelrc.js | 24 + apps/infoalloggi/.vscode/launch.json | 28 + apps/infoalloggi/.vscode/settings.json | 29 + apps/infoalloggi/Dockerfile | 135 + apps/infoalloggi/TODO | 59 + apps/infoalloggi/TypeHelpers.type.ts | 45 + apps/infoalloggi/check-env-vars.js | 50 + apps/infoalloggi/components.json | 21 + apps/infoalloggi/dev_utils_compose.sh | 7 + apps/infoalloggi/docker-compose.yml | 63 + apps/infoalloggi/emails/VerificaEmail.tsx | 40 + apps/infoalloggi/emails/base.tsx | 81 + apps/infoalloggi/emails/contatto.tsx | 44 + apps/infoalloggi/emails/contatto_annuncio.tsx | 52 + apps/infoalloggi/emails/email-interessato.tsx | 71 + apps/infoalloggi/emails/gereric-email.tsx | 48 + .../emails/onboarding-servizio.tsx | 102 + .../infoalloggi/emails/pagamento-conferma.tsx | 42 + apps/infoalloggi/emails/pagamento-errore.tsx | 36 + .../emails/pagamento-ricezione.tsx | 36 + apps/infoalloggi/emails/pw-reset-link.tsx | 39 + apps/infoalloggi/emails/recesso.tsx | 39 + .../emails/registrazione-avvenuta.tsx | 35 + .../infoalloggi/emails/static/Infoalloggi.png | Bin 0 -> 6168 bytes apps/infoalloggi/eslint.config.mjs | 152 + apps/infoalloggi/headers/dev-https.js | 13 + apps/infoalloggi/headers/dev.js | 13 + apps/infoalloggi/headers/lint.js | 13 + apps/infoalloggi/headers/pg-typegen.js | 13 + apps/infoalloggi/headers/type.js | 13 + apps/infoalloggi/keydb-docker-compose.yml | 21 + apps/infoalloggi/knip.json | 57 + apps/infoalloggi/kyselyRules/plugin.js | 15 + apps/infoalloggi/kyselyRules/rules/null.js | 107 + .../kyselyRules/rules/null.test.js | 55 + apps/infoalloggi/kyselyRules/rules/select.js | 61 + .../kyselyRules/rules/select.test.js | 31 + apps/infoalloggi/kyselyRules/rules/where.js | 52 + .../kyselyRules/rules/where.test.js | 26 + apps/infoalloggi/next.config.mjs | 88 + apps/infoalloggi/package-lock.json | 19903 ++++++++ apps/infoalloggi/package.json | 146 + apps/infoalloggi/pgadmin-docker-compose.yml | 15 + apps/infoalloggi/postcss.config.cjs | 9 + apps/infoalloggi/prettier.config.cjs | 10 + apps/infoalloggi/public/Hero.svg | 100 + apps/infoalloggi/public/Infoalloggi.png | Bin 0 -> 6168 bytes apps/infoalloggi/public/aptm.webp | Bin 0 -> 197734 bytes apps/infoalloggi/public/bgpattern.webp | Bin 0 -> 671214 bytes .../public/come_funziona_aggiungi.jpg | Bin 0 -> 197410 bytes .../public/come_funziona_confirm.jpg | Bin 0 -> 215396 bytes .../public/come_funziona_contratto.jpg | Bin 0 -> 261690 bytes .../infoalloggi/public/come_funziona_meet.jpg | Bin 0 -> 567245 bytes .../public/come_funziona_ricerca.jpg | Bin 0 -> 284341 bytes apps/infoalloggi/public/fallback-image.png | Bin 0 -> 3186 bytes apps/infoalloggi/public/fallback-video.png | Bin 0 -> 1708 bytes .../public/favicon/android-chrome-192x192.png | Bin 0 -> 10610 bytes .../public/favicon/android-chrome-512x512.png | Bin 0 -> 40662 bytes .../public/favicon/apple-touch-icon.png | Bin 0 -> 9680 bytes .../public/favicon/favicon-16x16.png | Bin 0 -> 586 bytes .../public/favicon/favicon-32x32.png | Bin 0 -> 1195 bytes apps/infoalloggi/public/favicon/favicon.ico | Bin 0 -> 15406 bytes apps/infoalloggi/public/favicon/favicon.png | Bin 0 -> 101274 bytes .../public/favicon/safari-pinned-tab.svg | 138 + apps/infoalloggi/public/newLogo.svg | 62 + apps/infoalloggi/public/rent_0.webp | Bin 0 -> 136544 bytes apps/infoalloggi/public/rent_1.webp | Bin 0 -> 98704 bytes apps/infoalloggi/public/rent_2.webp | Bin 0 -> 64434 bytes .../public/screenshots/desktop.webp | Bin 0 -> 51886 bytes .../public/screenshots/mobile.webp | Bin 0 -> 22782 bytes apps/infoalloggi/public/site.webmanifest | 36 + apps/infoalloggi/reset.d.ts | 1 + .../src/components/IconComponents.tsx | 374 + .../src/components/ImageWithFallback.tsx | 19 + .../src/components/InformationBubble.tsx | 85 + apps/infoalloggi/src/components/Layout.tsx | 258 + apps/infoalloggi/src/components/MapDialog.tsx | 65 + .../src/components/accordionComp.tsx | 58 + .../src/components/acquisto_processing.tsx | 242 + .../src/components/acquisto_receipt.tsx | 187 + .../src/components/allegato-iframe.tsx | 56 + .../src/components/analyticsChart.tsx | 155 + .../src/components/annunci_grid.tsx | 34 + .../src/components/annunci_map.tsx | 161 + .../src/components/annunci_tutorial.tsx | 112 + .../annuncio_interactions.tsx | 213 + .../annuncio-interactions/contatto_modal.tsx | 38 + .../src/components/annuncio_card.tsx | 310 + .../components/area-riservata/allegati.tsx | 384 + .../area-riservata/comunicazioni.tsx | 63 + .../components/area-riservata/dashboard.tsx | 78 + .../src/components/area-riservata/ordini.tsx | 214 + .../src/components/area-riservata/sidebar.tsx | 86 + apps/infoalloggi/src/components/banners.tsx | 115 + .../src/components/blurry_divider.tsx | 5 + .../src/components/chat/chat-attachments.tsx | 191 + .../src/components/chat/chat-bottombar.tsx | 171 + .../src/components/chat/chat-bubble.tsx | 202 + .../src/components/chat/chat-list.tsx | 439 + .../src/components/chat/chat-message-list.tsx | 23 + .../src/components/chat/chat-sidebar.tsx | 447 + .../src/components/chat/chat-topbar.tsx | 269 + apps/infoalloggi/src/components/chat/chat.tsx | 53 + .../src/components/chat/message-loading.tsx | 45 + .../src/components/codiceRicerca.tsx | 184 + .../src/components/color_picker.tsx | 71 + .../src/components/come_funziona.tsx | 76 + apps/infoalloggi/src/components/confirm.tsx | 63 + apps/infoalloggi/src/components/counter.tsx | 63 + .../components/custom_ui/HybridTooltip.tsx | 71 + .../components/custom_ui/animated-button.tsx | 128 + .../components/custom_ui/animated-number.tsx | 55 + .../custom_ui/autoResizeTextArea.tsx | 116 + .../src/components/custom_ui/credenza.tsx | 229 + .../src/components/custom_ui/data-table.tsx | 207 + .../custom_ui/dataTable-FacetedFilter.tsx | 146 + .../custom_ui/dataTable-ViewToggle.tsx | 59 + .../components/custom_ui/dataTable-header.tsx | 75 + .../custom_ui/dataTable-pagination.tsx | 103 + .../custom_ui/dataTable-toolbar.tsx | 89 + .../src/components/custom_ui/emoji-picker.tsx | 235 + .../src/components/custom_ui/fileUpload.tsx | 1369 + .../src/components/custom_ui/form.tsx | 201 + .../src/components/custom_ui/input-icon.tsx | 37 + .../src/components/custom_ui/input.tsx | 23 + .../src/components/custom_ui/inputLayouts.tsx | 22 + .../components/custom_ui/loading-button.tsx | 34 + .../src/components/custom_ui/multi-select.tsx | 347 + .../src/components/custom_ui/multiselect.tsx | 293 + .../components/custom_ui/nestableDialog.tsx | 344 + .../components/custom_ui/staggered-fade.tsx | 49 + .../src/components/custom_ui/textarea.tsx | 22 + .../src/components/doc_not_found.tsx | 18 + apps/infoalloggi/src/components/etichette.tsx | 191 + apps/infoalloggi/src/components/footer.tsx | 106 + apps/infoalloggi/src/components/loading.tsx | 48 + apps/infoalloggi/src/components/map/Map.tsx | 294 + .../src/components/map/custom_marker.tsx | 400 + .../src/components/map/map_marker.tsx | 99 + .../src/components/navbar/lang-toggle.tsx | 44 + .../src/components/navbar/login-button.tsx | 200 + .../src/components/navbar/main-nav.tsx | 39 + .../src/components/navbar/mobile-nav.tsx | 362 + .../src/components/navbar/ricerca_command.tsx | 50 + .../src/components/navbar/settings-modal.tsx | 25 + .../src/components/navbar/site-header.tsx | 51 + .../src/components/navbar/theme-toggle.tsx | 43 + .../src/components/payment_status.tsx | 53 + .../src/components/phone-input.tsx | 233 + apps/infoalloggi/src/components/prezzi.tsx | 390 + .../src/components/progress_redirect.tsx | 62 + .../components/servizio/annuncio_actions.tsx | 1200 + .../src/components/servizio/annuncio_card.tsx | 267 + .../src/components/servizio/conferma.tsx | 37 + .../src/components/servizio/interactions.tsx | 611 + .../src/components/servizio/main.tsx | 338 + .../servizio/service-duration-display.tsx | 128 + .../components/servizio/servizio_actions.tsx | 291 + .../servizio/servizio_annunci_accordions.tsx | 203 + apps/infoalloggi/src/components/spinner.tsx | 32 + .../src/components/status-page.tsx | 36 + .../src/components/subscriptionDbg.tsx | 65 + apps/infoalloggi/src/components/svgs.tsx | 657 + .../src/components/tables/annunci-tables.tsx | 128 + .../src/components/tables/banlist-table.tsx | 96 + .../src/components/tables/banners-table.tsx | 240 + .../src/components/tables/etichette.tsx | 110 + .../src/components/tables/flags-table.tsx | 98 + .../src/components/tables/orders-table.tsx | 245 + .../src/components/tables/payments-table.tsx | 258 + .../components/tables/prezziario-tables.tsx | 214 + .../src/components/tables/servizio-table.tsx | 268 + .../src/components/tables/storage-table.tsx | 358 + .../src/components/tables/stringhe-table.tsx | 106 + .../src/components/tables/users-table.tsx | 323 + apps/infoalloggi/src/components/timeline.tsx | 231 + .../src/components/tip-tap/editor.tsx | 41 + .../src/components/tip-tap/toolbar.tsx | 160 + .../src/components/ui/Infoalloggi.tsx | 16 + .../src/components/ui/accordion.tsx | 64 + .../src/components/ui/alert-dialog.tsx | 155 + apps/infoalloggi/src/components/ui/avatar.tsx | 51 + apps/infoalloggi/src/components/ui/badge.tsx | 46 + .../src/components/ui/breadcrumb.tsx | 109 + apps/infoalloggi/src/components/ui/button.tsx | 75 + .../src/components/ui/calendar.tsx | 523 + apps/infoalloggi/src/components/ui/card.tsx | 92 + .../src/components/ui/carousel.tsx | 241 + apps/infoalloggi/src/components/ui/chart.tsx | 354 + .../src/components/ui/checkbox.tsx | 30 + .../src/components/ui/collapsible.tsx | 33 + .../infoalloggi/src/components/ui/command.tsx | 182 + .../src/components/ui/context-menu.tsx | 250 + apps/infoalloggi/src/components/ui/dialog.tsx | 141 + apps/infoalloggi/src/components/ui/drawer.tsx | 154 + .../src/components/ui/dropdown-menu.tsx | 255 + apps/infoalloggi/src/components/ui/form.tsx | 168 + apps/infoalloggi/src/components/ui/input.tsx | 21 + apps/infoalloggi/src/components/ui/label.tsx | 22 + .../src/components/ui/pagination.tsx | 128 + .../infoalloggi/src/components/ui/popover.tsx | 48 + .../src/components/ui/progress.tsx | 29 + .../src/components/ui/scroll-area.tsx | 56 + apps/infoalloggi/src/components/ui/select.tsx | 185 + .../src/components/ui/separator.tsx | 26 + apps/infoalloggi/src/components/ui/sheet.tsx | 139 + .../src/components/ui/skeleton.tsx | 13 + apps/infoalloggi/src/components/ui/slider.tsx | 72 + apps/infoalloggi/src/components/ui/switch.tsx | 31 + apps/infoalloggi/src/components/ui/table.tsx | 114 + apps/infoalloggi/src/components/ui/tabs.tsx | 66 + .../src/components/ui/textarea.tsx | 18 + apps/infoalloggi/src/components/ui/toggle.tsx | 45 + .../infoalloggi/src/components/ui/tooltip.tsx | 61 + .../src/components/upload_modal.tsx | 263 + .../src/components/user_avatar.tsx | 41 + .../src/components/videoPlayer.tsx | 100 + apps/infoalloggi/src/env.mjs | 118 + apps/infoalloggi/src/forms/FormBanlist.tsx | 146 + apps/infoalloggi/src/forms/FormBanners.tsx | 388 + .../src/forms/FormChangePassword.tsx | 172 + .../src/forms/FormContattoAnnuncio.tsx | 208 + apps/infoalloggi/src/forms/FormEtichette.tsx | 136 + apps/infoalloggi/src/forms/FormFlags.tsx | 122 + apps/infoalloggi/src/forms/FormLogin.tsx | 213 + .../infoalloggi/src/forms/FormNewPswReset.tsx | 108 + .../infoalloggi/src/forms/FormNewServizio.tsx | 512 + .../src/forms/FormNewServizioAcquisto.tsx | 1487 + apps/infoalloggi/src/forms/FormNewUser.tsx | 248 + .../src/forms/FormOverridePassword.tsx | 234 + apps/infoalloggi/src/forms/FormPrezzo.tsx | 472 + .../src/forms/FormProfilo_Account.tsx | 218 + .../src/forms/FormProfilo_Anagrafica.tsx | 833 + apps/infoalloggi/src/forms/FormPwSetup.tsx | 215 + .../src/forms/FormRstPwFromToken.tsx | 220 + apps/infoalloggi/src/forms/FormStringhe.tsx | 125 + .../src/forms/MotivazioneTransitorio.tsx | 66 + apps/infoalloggi/src/hooks/chatHooks.ts | 262 + apps/infoalloggi/src/hooks/coordDistance.ts | 36 + apps/infoalloggi/src/hooks/filesHooks.ts | 33 + apps/infoalloggi/src/hooks/locale.ts | 195 + .../src/hooks/schedaAnnuncioUtils.ts | 251 + apps/infoalloggi/src/hooks/use-media-query.ts | 18 + .../infoalloggi/src/hooks/useClickOutside.tsx | 28 + apps/infoalloggi/src/hooks/useMobile.tsx | 19 + .../src/hooks/useStrongPassword.ts | 80 + .../src/i18n/FormErrorsTranslation.ts | 297 + apps/infoalloggi/src/i18n/comuni.ts | 39523 ++++++++++++++++ apps/infoalloggi/src/i18n/en.ts | 1290 + apps/infoalloggi/src/i18n/it.ts | 1291 + apps/infoalloggi/src/i18n/locales.ts | 737 + apps/infoalloggi/src/i18n/nazioni.ts | 1030 + apps/infoalloggi/src/i18n/provincie.ts | 112 + apps/infoalloggi/src/i18n/stripe.ts | 152 + apps/infoalloggi/src/lib/annuncio_details.ts | 55 + apps/infoalloggi/src/lib/basicPwGenerator.ts | 30 + apps/infoalloggi/src/lib/form_utils.ts | 284 + apps/infoalloggi/src/lib/nossr.tsx | 9 + apps/infoalloggi/src/lib/storage_manager.ts | 94 + apps/infoalloggi/src/lib/useIsTyping.ts | 46 + apps/infoalloggi/src/lib/use_fowarded_ref.tsx | 16 + apps/infoalloggi/src/lib/userViewContext.tsx | 30 + apps/infoalloggi/src/lib/utils.ts | 45 + apps/infoalloggi/src/lib/zodForm.ts | 16 + apps/infoalloggi/src/middleware.ts | 24 + .../src/middlewares/apis_middleware.ts | 45 + .../src/middlewares/auth_middleware.ts | 148 + apps/infoalloggi/src/pages/404.tsx | 38 + apps/infoalloggi/src/pages/500.tsx | 37 + apps/infoalloggi/src/pages/500Auth.tsx | 34 + apps/infoalloggi/src/pages/_app.tsx | 84 + apps/infoalloggi/src/pages/_document.tsx | 40 + apps/infoalloggi/src/pages/annunci.tsx | 468 + apps/infoalloggi/src/pages/annuncio/[cod].tsx | 636 + apps/infoalloggi/src/pages/api/panel.ts | 16 + .../src/pages/api/stripe-webhook.ts | 130 + .../src/pages/api/tiles/[[...slug]].ts | 85 + apps/infoalloggi/src/pages/api/trpc/[trpc].ts | 31 + .../pages/area-riservata/admin/annunci.tsx | 34 + .../pages/area-riservata/admin/banners.tsx | 170 + .../pages/area-riservata/admin/blacklist.tsx | 167 + .../src/pages/area-riservata/admin/chats.tsx | 63 + .../area-riservata/admin/chats/[chatId].tsx | 102 + .../admin/edit-annuncio/[id].tsx | 475 + .../pages/area-riservata/admin/etichette.tsx | 173 + .../src/pages/area-riservata/admin/flags.tsx | 161 + .../src/pages/area-riservata/admin/ordini.tsx | 41 + .../pages/area-riservata/admin/prezziario.tsx | 181 + .../pages/area-riservata/admin/storage.tsx | 384 + .../area-riservata/admin/testi-stringhe.tsx | 169 + .../admin/user-view/allegati/[userId].tsx | 54 + .../user-view/comunicazioni/[userId].tsx | 62 + .../admin/user-view/edit-user/[userId].tsx | 282 + .../admin/user-view/onboard/[servizioId].tsx | 114 + .../admin/user-view/ordini/[userId].tsx | 70 + .../admin/user-view/ricerca/[userId].tsx | 79 + .../admin/user-view/servizio/[userId].tsx | 164 + .../src/pages/area-riservata/admin/utenti.tsx | 81 + .../src/pages/area-riservata/allegati.tsx | 33 + .../allegato-view/[allegatoId].tsx | 242 + .../src/pages/area-riservata/chat.tsx | 85 + .../pages/area-riservata/comunicazioni.tsx | 38 + .../src/pages/area-riservata/dashboard.tsx | 40 + .../src/pages/area-riservata/ordini.tsx | 55 + .../payment-recap/[ordineId].tsx | 91 + .../src/pages/area-riservata/profilo.tsx | 119 + .../src/pages/auth/new-password-reset.tsx | 23 + .../auth/nonvalid-password-reset-token.tsx | 31 + .../src/pages/auth/password-reset/[token].tsx | 70 + apps/infoalloggi/src/pages/chi-siamo.tsx | 37 + apps/infoalloggi/src/pages/contatti.tsx | 253 + apps/infoalloggi/src/pages/guida.tsx | 106 + apps/infoalloggi/src/pages/index.tsx | 120 + apps/infoalloggi/src/pages/login.tsx | 23 + apps/infoalloggi/src/pages/prezzi.tsx | 194 + apps/infoalloggi/src/pages/privacy-policy.tsx | 33 + apps/infoalloggi/src/pages/proprietari.tsx | 98 + .../pages/servizio/acquisto-processing.tsx | 208 + .../pages/servizio/condizioni/[stringaId].tsx | 96 + .../servizio/conferma-immobile/[...slug].tsx | 215 + .../contratto-registrazione/[...slug].tsx | 137 + .../pages/servizio/contratto/[...slug].tsx | 137 + .../pages/servizio/onboard/[servizioId].tsx | 114 + .../pages/servizio/pagamento/[ordineId].tsx | 115 + .../servizio/pre-onboard/[servizioId].tsx | 126 + .../servizio/riapri-conferma/[...slug].tsx | 130 + .../src/pages/termini-condizioni.tsx | 32 + apps/infoalloggi/src/pages/test.tsx | 21 + apps/infoalloggi/src/pages/test4.tsx | 6 + .../src/providers/AnnuncioProvider.tsx | 15 + .../src/providers/I18nProvider.tsx | 45 + .../src/providers/RicercaProvider.tsx | 189 + .../src/providers/ServizioProvider.tsx | 75 + .../src/providers/SessionProvider.tsx | 67 + .../src/providers/StorageTableProvider.tsx | 88 + apps/infoalloggi/src/schemas/Database.ts | 8 + .../infoalloggi/src/schemas/public/Annunci.ts | 113 + .../infoalloggi/src/schemas/public/BanType.ts | 12 + .../infoalloggi/src/schemas/public/Banlist.ts | 23 + .../infoalloggi/src/schemas/public/Banners.ts | 42 + apps/infoalloggi/src/schemas/public/Chats.ts | 25 + .../src/schemas/public/ChatsEtichette.ts | 19 + apps/infoalloggi/src/schemas/public/Emails.ts | 25 + .../src/schemas/public/Etichette.ts | 22 + .../src/schemas/public/EventQueue.ts | 24 + apps/infoalloggi/src/schemas/public/Flags.ts | 20 + .../src/schemas/public/GenericStatusEnum.ts | 11 + .../src/schemas/public/Interests.ts | 19 + .../src/schemas/public/Messages.ts | 30 + .../src/schemas/public/MiogestImagesRef.ts | 20 + .../src/schemas/public/OrderTypeEnum.ts | 12 + apps/infoalloggi/src/schemas/public/Ordini.ts | 34 + .../src/schemas/public/PaymentStatusEnum.ts | 11 + .../src/schemas/public/Payments.ts | 42 + .../src/schemas/public/Prezziario.ts | 44 + .../src/schemas/public/PublicSchema.ts | 77 + .../src/schemas/public/Ratelimiter.ts | 19 + .../src/schemas/public/Servizio.ts | 68 + .../src/schemas/public/ServizioAnnunci.ts | 58 + .../src/schemas/public/Storageindex.ts | 28 + .../src/schemas/public/TempTokens.ts | 20 + .../src/schemas/public/TestiEStringhe.ts | 20 + .../schemas/public/TipologiaPosizioneEnum.ts | 10 + apps/infoalloggi/src/schemas/public/Users.ts | 50 + .../src/schemas/public/UsersAnagrafica.ts | 57 + .../src/schemas/public/UsersStorage.ts | 19 + apps/infoalloggi/src/server/FattureInCloud.ts | 12 + apps/infoalloggi/src/server/api/root.ts | 45 + .../src/server/api/routers/annunci.ts | 100 + .../src/server/api/routers/auth.ts | 158 + .../src/server/api/routers/banlist.ts | 58 + .../src/server/api/routers/chat.ts | 93 + .../src/server/api/routers/chat_sse.ts | 160 + .../src/server/api/routers/comunicazioni.ts | 39 + .../src/server/api/routers/contact.ts | 38 + .../src/server/api/routers/event_queue.ts | 27 + .../src/server/api/routers/fatture.ts | 48 + .../src/server/api/routers/interests.ts | 133 + .../src/server/api/routers/messages_sse.ts | 289 + .../src/server/api/routers/pagamenti.ts | 33 + .../src/server/api/routers/prezziario.ts | 103 + .../src/server/api/routers/servizio.ts | 436 + .../src/server/api/routers/settings.ts | 252 + .../src/server/api/routers/stats.ts | 62 + .../src/server/api/routers/storage.ts | 152 + .../src/server/api/routers/stripe.ts | 63 + .../src/server/api/routers/test.ts | 14 + .../src/server/api/routers/users.ts | 99 + apps/infoalloggi/src/server/api/trpc.ts | 239 + apps/infoalloggi/src/server/auth/jwt.ts | 38 + .../server/controllers/annunci.controller.ts | 475 + .../src/server/controllers/auth.controller.ts | 293 + .../src/server/controllers/chat.controller.ts | 293 + .../controllers/etichette.controller.ts | 156 + .../controllers/event_queue.controller.ts | 96 + .../src/server/controllers/fic.controller.ts | 47 + .../server/controllers/flags.controller.ts | 108 + .../server/controllers/ordini.controller.ts | 126 + .../controllers/prezziario.controller.ts | 18 + .../server/controllers/servizio.controller.ts | 1589 + .../server/controllers/skebby.controller.ts | 161 + .../server/controllers/storage.controller.ts | 191 + .../server/controllers/stripe.controller.ts | 255 + .../src/server/controllers/user.controller.ts | 178 + apps/infoalloggi/src/server/db.ts | 60 + .../src/server/services/annunci.service.ts | 16 + .../src/server/services/auth.service.ts | 156 + .../src/server/services/banlist.service.ts | 106 + .../src/server/services/banners.service.ts | 110 + .../src/server/services/chat.service.ts | 50 + .../src/server/services/email.service.ts | 57 + .../src/server/services/fic.service.ts | 87 + .../src/server/services/imageServer.ts | 14 + .../src/server/services/interests.service.ts | 97 + .../infoalloggi/src/server/services/mailer.ts | 219 + .../src/server/services/messages.service.ts | 64 + .../src/server/services/password.service.ts | 32 + .../src/server/services/prezziario.service.ts | 194 + .../src/server/services/ratelimiter.ts | 48 + .../src/server/services/storage.service.ts | 184 + .../server/services/testi_stringhe.service.ts | 123 + .../src/server/services/user.service.ts | 178 + apps/infoalloggi/src/server/sse.ts | 150 + .../src/server/utils/ctxChecker.ts | 39 + apps/infoalloggi/src/server/utils/sse_zod.ts | 79 + .../infoalloggi/src/server/utils/ssgHelper.ts | 38 + .../infoalloggi/src/server/utils/zod_types.ts | 91 + apps/infoalloggi/src/styles/globals.css | 289 + apps/infoalloggi/src/utils/api.ts | 74 + apps/infoalloggi/src/utils/fonts.ts | 7 + apps/infoalloggi/src/utils/get-media-url.ts | 8 + apps/infoalloggi/src/utils/kanel-types.ts | 62 + apps/infoalloggi/src/utils/keydb.ts | 11 + apps/infoalloggi/src/utils/kysely-helper.ts | 32 + apps/infoalloggi/src/utils/utils.ts | 17 + apps/infoalloggi/tsconfig.json | 70 + compose.sh | 4 + docker-compose.yml | 203 + pg_dumper.sh | 23 + readme.md | 6 + 481 files changed, 122434 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 apps/backend/.air.toml create mode 100644 apps/backend/.dockerignore create mode 100644 apps/backend/Dockerfile create mode 100644 apps/backend/TODO create mode 100644 apps/backend/db_handler.go create mode 100644 apps/backend/dbhelpers/dbhelpers.go create mode 100644 apps/backend/docker-compose.yml create mode 100644 apps/backend/fallback.webp create mode 100644 apps/backend/from_bkp.go create mode 100644 apps/backend/go.mod create mode 100644 apps/backend/go.sum create mode 100644 apps/backend/image_handler.go create mode 100644 apps/backend/images.go create mode 100644 apps/backend/miogest_handler.go create mode 100644 apps/backend/models.go create mode 100644 apps/backend/pg_dumper.sh create mode 100644 apps/backend/public/static/js/htmx.js create mode 100644 apps/backend/public/views/backup-upload.html create mode 100644 apps/backend/public/views/main.html create mode 100644 apps/backend/server.go create mode 100644 apps/backend/storage.go create mode 100644 apps/backend/storage_handlers/fs.go create mode 100644 apps/backend/storage_handlers/minio.go create mode 100644 apps/backend/storage_handlers/storage_handler.go create mode 100644 apps/backend/test.jpg create mode 100644 apps/backend/utils.go create mode 100644 apps/db/Dockerfile create mode 100644 apps/db/docker-compose.yml create mode 100644 apps/db/filter_sql.awk create mode 100644 apps/db/initial/1_init.sql create mode 100644 apps/db/initial/2_data.sql create mode 100644 apps/db/initial/3_seed_user.sql create mode 100644 apps/db/log_parser.sh create mode 100644 apps/db/migration.sql create mode 100644 apps/db/pg_dumper.sh create mode 100644 apps/infoalloggi/.docker_env create mode 100644 apps/infoalloggi/.dockerignore create mode 100644 apps/infoalloggi/.github/dependabot.yml create mode 100644 apps/infoalloggi/.github/workflows/ci.yml create mode 100644 apps/infoalloggi/.kanelrc.js create mode 100644 apps/infoalloggi/.vscode/launch.json create mode 100644 apps/infoalloggi/.vscode/settings.json create mode 100644 apps/infoalloggi/Dockerfile create mode 100644 apps/infoalloggi/TODO create mode 100644 apps/infoalloggi/TypeHelpers.type.ts create mode 100644 apps/infoalloggi/check-env-vars.js create mode 100644 apps/infoalloggi/components.json create mode 100644 apps/infoalloggi/dev_utils_compose.sh create mode 100644 apps/infoalloggi/docker-compose.yml create mode 100644 apps/infoalloggi/emails/VerificaEmail.tsx create mode 100644 apps/infoalloggi/emails/base.tsx create mode 100644 apps/infoalloggi/emails/contatto.tsx create mode 100644 apps/infoalloggi/emails/contatto_annuncio.tsx create mode 100644 apps/infoalloggi/emails/email-interessato.tsx create mode 100644 apps/infoalloggi/emails/gereric-email.tsx create mode 100644 apps/infoalloggi/emails/onboarding-servizio.tsx create mode 100644 apps/infoalloggi/emails/pagamento-conferma.tsx create mode 100644 apps/infoalloggi/emails/pagamento-errore.tsx create mode 100644 apps/infoalloggi/emails/pagamento-ricezione.tsx create mode 100644 apps/infoalloggi/emails/pw-reset-link.tsx create mode 100644 apps/infoalloggi/emails/recesso.tsx create mode 100644 apps/infoalloggi/emails/registrazione-avvenuta.tsx create mode 100644 apps/infoalloggi/emails/static/Infoalloggi.png create mode 100644 apps/infoalloggi/eslint.config.mjs create mode 100644 apps/infoalloggi/headers/dev-https.js create mode 100644 apps/infoalloggi/headers/dev.js create mode 100644 apps/infoalloggi/headers/lint.js create mode 100644 apps/infoalloggi/headers/pg-typegen.js create mode 100644 apps/infoalloggi/headers/type.js create mode 100644 apps/infoalloggi/keydb-docker-compose.yml create mode 100644 apps/infoalloggi/knip.json create mode 100644 apps/infoalloggi/kyselyRules/plugin.js create mode 100644 apps/infoalloggi/kyselyRules/rules/null.js create mode 100644 apps/infoalloggi/kyselyRules/rules/null.test.js create mode 100644 apps/infoalloggi/kyselyRules/rules/select.js create mode 100644 apps/infoalloggi/kyselyRules/rules/select.test.js create mode 100644 apps/infoalloggi/kyselyRules/rules/where.js create mode 100644 apps/infoalloggi/kyselyRules/rules/where.test.js create mode 100644 apps/infoalloggi/next.config.mjs create mode 100644 apps/infoalloggi/package-lock.json create mode 100644 apps/infoalloggi/package.json create mode 100644 apps/infoalloggi/pgadmin-docker-compose.yml create mode 100644 apps/infoalloggi/postcss.config.cjs create mode 100644 apps/infoalloggi/prettier.config.cjs create mode 100644 apps/infoalloggi/public/Hero.svg create mode 100644 apps/infoalloggi/public/Infoalloggi.png create mode 100644 apps/infoalloggi/public/aptm.webp create mode 100644 apps/infoalloggi/public/bgpattern.webp create mode 100644 apps/infoalloggi/public/come_funziona_aggiungi.jpg create mode 100644 apps/infoalloggi/public/come_funziona_confirm.jpg create mode 100644 apps/infoalloggi/public/come_funziona_contratto.jpg create mode 100644 apps/infoalloggi/public/come_funziona_meet.jpg create mode 100644 apps/infoalloggi/public/come_funziona_ricerca.jpg create mode 100644 apps/infoalloggi/public/fallback-image.png create mode 100644 apps/infoalloggi/public/fallback-video.png create mode 100644 apps/infoalloggi/public/favicon/android-chrome-192x192.png create mode 100644 apps/infoalloggi/public/favicon/android-chrome-512x512.png create mode 100644 apps/infoalloggi/public/favicon/apple-touch-icon.png create mode 100644 apps/infoalloggi/public/favicon/favicon-16x16.png create mode 100644 apps/infoalloggi/public/favicon/favicon-32x32.png create mode 100644 apps/infoalloggi/public/favicon/favicon.ico create mode 100644 apps/infoalloggi/public/favicon/favicon.png create mode 100644 apps/infoalloggi/public/favicon/safari-pinned-tab.svg create mode 100644 apps/infoalloggi/public/newLogo.svg create mode 100644 apps/infoalloggi/public/rent_0.webp create mode 100644 apps/infoalloggi/public/rent_1.webp create mode 100644 apps/infoalloggi/public/rent_2.webp create mode 100644 apps/infoalloggi/public/screenshots/desktop.webp create mode 100644 apps/infoalloggi/public/screenshots/mobile.webp create mode 100644 apps/infoalloggi/public/site.webmanifest create mode 100644 apps/infoalloggi/reset.d.ts create mode 100644 apps/infoalloggi/src/components/IconComponents.tsx create mode 100644 apps/infoalloggi/src/components/ImageWithFallback.tsx create mode 100644 apps/infoalloggi/src/components/InformationBubble.tsx create mode 100644 apps/infoalloggi/src/components/Layout.tsx create mode 100644 apps/infoalloggi/src/components/MapDialog.tsx create mode 100644 apps/infoalloggi/src/components/accordionComp.tsx create mode 100644 apps/infoalloggi/src/components/acquisto_processing.tsx create mode 100644 apps/infoalloggi/src/components/acquisto_receipt.tsx create mode 100644 apps/infoalloggi/src/components/allegato-iframe.tsx create mode 100644 apps/infoalloggi/src/components/analyticsChart.tsx create mode 100644 apps/infoalloggi/src/components/annunci_grid.tsx create mode 100644 apps/infoalloggi/src/components/annunci_map.tsx create mode 100644 apps/infoalloggi/src/components/annunci_tutorial.tsx create mode 100644 apps/infoalloggi/src/components/annuncio-interactions/annuncio_interactions.tsx create mode 100644 apps/infoalloggi/src/components/annuncio-interactions/contatto_modal.tsx create mode 100644 apps/infoalloggi/src/components/annuncio_card.tsx create mode 100644 apps/infoalloggi/src/components/area-riservata/allegati.tsx create mode 100644 apps/infoalloggi/src/components/area-riservata/comunicazioni.tsx create mode 100644 apps/infoalloggi/src/components/area-riservata/dashboard.tsx create mode 100644 apps/infoalloggi/src/components/area-riservata/ordini.tsx create mode 100644 apps/infoalloggi/src/components/area-riservata/sidebar.tsx create mode 100644 apps/infoalloggi/src/components/banners.tsx create mode 100644 apps/infoalloggi/src/components/blurry_divider.tsx create mode 100644 apps/infoalloggi/src/components/chat/chat-attachments.tsx create mode 100644 apps/infoalloggi/src/components/chat/chat-bottombar.tsx create mode 100644 apps/infoalloggi/src/components/chat/chat-bubble.tsx create mode 100644 apps/infoalloggi/src/components/chat/chat-list.tsx create mode 100644 apps/infoalloggi/src/components/chat/chat-message-list.tsx create mode 100644 apps/infoalloggi/src/components/chat/chat-sidebar.tsx create mode 100644 apps/infoalloggi/src/components/chat/chat-topbar.tsx create mode 100644 apps/infoalloggi/src/components/chat/chat.tsx create mode 100644 apps/infoalloggi/src/components/chat/message-loading.tsx create mode 100644 apps/infoalloggi/src/components/codiceRicerca.tsx create mode 100644 apps/infoalloggi/src/components/color_picker.tsx create mode 100644 apps/infoalloggi/src/components/come_funziona.tsx create mode 100644 apps/infoalloggi/src/components/confirm.tsx create mode 100644 apps/infoalloggi/src/components/counter.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/HybridTooltip.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/animated-button.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/animated-number.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/autoResizeTextArea.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/credenza.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/data-table.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/dataTable-FacetedFilter.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/dataTable-ViewToggle.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/dataTable-header.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/dataTable-pagination.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/dataTable-toolbar.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/emoji-picker.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/fileUpload.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/form.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/input-icon.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/input.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/inputLayouts.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/loading-button.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/multi-select.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/multiselect.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/nestableDialog.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/staggered-fade.tsx create mode 100644 apps/infoalloggi/src/components/custom_ui/textarea.tsx create mode 100644 apps/infoalloggi/src/components/doc_not_found.tsx create mode 100644 apps/infoalloggi/src/components/etichette.tsx create mode 100644 apps/infoalloggi/src/components/footer.tsx create mode 100644 apps/infoalloggi/src/components/loading.tsx create mode 100644 apps/infoalloggi/src/components/map/Map.tsx create mode 100644 apps/infoalloggi/src/components/map/custom_marker.tsx create mode 100644 apps/infoalloggi/src/components/map/map_marker.tsx create mode 100644 apps/infoalloggi/src/components/navbar/lang-toggle.tsx create mode 100644 apps/infoalloggi/src/components/navbar/login-button.tsx create mode 100644 apps/infoalloggi/src/components/navbar/main-nav.tsx create mode 100644 apps/infoalloggi/src/components/navbar/mobile-nav.tsx create mode 100644 apps/infoalloggi/src/components/navbar/ricerca_command.tsx create mode 100644 apps/infoalloggi/src/components/navbar/settings-modal.tsx create mode 100644 apps/infoalloggi/src/components/navbar/site-header.tsx create mode 100644 apps/infoalloggi/src/components/navbar/theme-toggle.tsx create mode 100644 apps/infoalloggi/src/components/payment_status.tsx create mode 100644 apps/infoalloggi/src/components/phone-input.tsx create mode 100644 apps/infoalloggi/src/components/prezzi.tsx create mode 100644 apps/infoalloggi/src/components/progress_redirect.tsx create mode 100644 apps/infoalloggi/src/components/servizio/annuncio_actions.tsx create mode 100644 apps/infoalloggi/src/components/servizio/annuncio_card.tsx create mode 100644 apps/infoalloggi/src/components/servizio/conferma.tsx create mode 100644 apps/infoalloggi/src/components/servizio/interactions.tsx create mode 100644 apps/infoalloggi/src/components/servizio/main.tsx create mode 100644 apps/infoalloggi/src/components/servizio/service-duration-display.tsx create mode 100644 apps/infoalloggi/src/components/servizio/servizio_actions.tsx create mode 100644 apps/infoalloggi/src/components/servizio/servizio_annunci_accordions.tsx create mode 100644 apps/infoalloggi/src/components/spinner.tsx create mode 100644 apps/infoalloggi/src/components/status-page.tsx create mode 100644 apps/infoalloggi/src/components/subscriptionDbg.tsx create mode 100644 apps/infoalloggi/src/components/svgs.tsx create mode 100644 apps/infoalloggi/src/components/tables/annunci-tables.tsx create mode 100644 apps/infoalloggi/src/components/tables/banlist-table.tsx create mode 100644 apps/infoalloggi/src/components/tables/banners-table.tsx create mode 100644 apps/infoalloggi/src/components/tables/etichette.tsx create mode 100644 apps/infoalloggi/src/components/tables/flags-table.tsx create mode 100644 apps/infoalloggi/src/components/tables/orders-table.tsx create mode 100644 apps/infoalloggi/src/components/tables/payments-table.tsx create mode 100644 apps/infoalloggi/src/components/tables/prezziario-tables.tsx create mode 100644 apps/infoalloggi/src/components/tables/servizio-table.tsx create mode 100644 apps/infoalloggi/src/components/tables/storage-table.tsx create mode 100644 apps/infoalloggi/src/components/tables/stringhe-table.tsx create mode 100644 apps/infoalloggi/src/components/tables/users-table.tsx create mode 100644 apps/infoalloggi/src/components/timeline.tsx create mode 100644 apps/infoalloggi/src/components/tip-tap/editor.tsx create mode 100644 apps/infoalloggi/src/components/tip-tap/toolbar.tsx create mode 100644 apps/infoalloggi/src/components/ui/Infoalloggi.tsx create mode 100644 apps/infoalloggi/src/components/ui/accordion.tsx create mode 100644 apps/infoalloggi/src/components/ui/alert-dialog.tsx create mode 100644 apps/infoalloggi/src/components/ui/avatar.tsx create mode 100644 apps/infoalloggi/src/components/ui/badge.tsx create mode 100644 apps/infoalloggi/src/components/ui/breadcrumb.tsx create mode 100644 apps/infoalloggi/src/components/ui/button.tsx create mode 100644 apps/infoalloggi/src/components/ui/calendar.tsx create mode 100644 apps/infoalloggi/src/components/ui/card.tsx create mode 100644 apps/infoalloggi/src/components/ui/carousel.tsx create mode 100644 apps/infoalloggi/src/components/ui/chart.tsx create mode 100644 apps/infoalloggi/src/components/ui/checkbox.tsx create mode 100644 apps/infoalloggi/src/components/ui/collapsible.tsx create mode 100644 apps/infoalloggi/src/components/ui/command.tsx create mode 100644 apps/infoalloggi/src/components/ui/context-menu.tsx create mode 100644 apps/infoalloggi/src/components/ui/dialog.tsx create mode 100644 apps/infoalloggi/src/components/ui/drawer.tsx create mode 100644 apps/infoalloggi/src/components/ui/dropdown-menu.tsx create mode 100644 apps/infoalloggi/src/components/ui/form.tsx create mode 100644 apps/infoalloggi/src/components/ui/input.tsx create mode 100644 apps/infoalloggi/src/components/ui/label.tsx create mode 100644 apps/infoalloggi/src/components/ui/pagination.tsx create mode 100644 apps/infoalloggi/src/components/ui/popover.tsx create mode 100644 apps/infoalloggi/src/components/ui/progress.tsx create mode 100644 apps/infoalloggi/src/components/ui/scroll-area.tsx create mode 100644 apps/infoalloggi/src/components/ui/select.tsx create mode 100644 apps/infoalloggi/src/components/ui/separator.tsx create mode 100644 apps/infoalloggi/src/components/ui/sheet.tsx create mode 100644 apps/infoalloggi/src/components/ui/skeleton.tsx create mode 100644 apps/infoalloggi/src/components/ui/slider.tsx create mode 100644 apps/infoalloggi/src/components/ui/switch.tsx create mode 100644 apps/infoalloggi/src/components/ui/table.tsx create mode 100644 apps/infoalloggi/src/components/ui/tabs.tsx create mode 100644 apps/infoalloggi/src/components/ui/textarea.tsx create mode 100644 apps/infoalloggi/src/components/ui/toggle.tsx create mode 100644 apps/infoalloggi/src/components/ui/tooltip.tsx create mode 100644 apps/infoalloggi/src/components/upload_modal.tsx create mode 100644 apps/infoalloggi/src/components/user_avatar.tsx create mode 100644 apps/infoalloggi/src/components/videoPlayer.tsx create mode 100644 apps/infoalloggi/src/env.mjs create mode 100644 apps/infoalloggi/src/forms/FormBanlist.tsx create mode 100644 apps/infoalloggi/src/forms/FormBanners.tsx create mode 100644 apps/infoalloggi/src/forms/FormChangePassword.tsx create mode 100644 apps/infoalloggi/src/forms/FormContattoAnnuncio.tsx create mode 100644 apps/infoalloggi/src/forms/FormEtichette.tsx create mode 100644 apps/infoalloggi/src/forms/FormFlags.tsx create mode 100644 apps/infoalloggi/src/forms/FormLogin.tsx create mode 100644 apps/infoalloggi/src/forms/FormNewPswReset.tsx create mode 100644 apps/infoalloggi/src/forms/FormNewServizio.tsx create mode 100644 apps/infoalloggi/src/forms/FormNewServizioAcquisto.tsx create mode 100644 apps/infoalloggi/src/forms/FormNewUser.tsx create mode 100644 apps/infoalloggi/src/forms/FormOverridePassword.tsx create mode 100644 apps/infoalloggi/src/forms/FormPrezzo.tsx create mode 100644 apps/infoalloggi/src/forms/FormProfilo_Account.tsx create mode 100644 apps/infoalloggi/src/forms/FormProfilo_Anagrafica.tsx create mode 100644 apps/infoalloggi/src/forms/FormPwSetup.tsx create mode 100644 apps/infoalloggi/src/forms/FormRstPwFromToken.tsx create mode 100644 apps/infoalloggi/src/forms/FormStringhe.tsx create mode 100644 apps/infoalloggi/src/forms/MotivazioneTransitorio.tsx create mode 100644 apps/infoalloggi/src/hooks/chatHooks.ts create mode 100644 apps/infoalloggi/src/hooks/coordDistance.ts create mode 100644 apps/infoalloggi/src/hooks/filesHooks.ts create mode 100644 apps/infoalloggi/src/hooks/locale.ts create mode 100644 apps/infoalloggi/src/hooks/schedaAnnuncioUtils.ts create mode 100644 apps/infoalloggi/src/hooks/use-media-query.ts create mode 100644 apps/infoalloggi/src/hooks/useClickOutside.tsx create mode 100644 apps/infoalloggi/src/hooks/useMobile.tsx create mode 100644 apps/infoalloggi/src/hooks/useStrongPassword.ts create mode 100644 apps/infoalloggi/src/i18n/FormErrorsTranslation.ts create mode 100644 apps/infoalloggi/src/i18n/comuni.ts create mode 100644 apps/infoalloggi/src/i18n/en.ts create mode 100644 apps/infoalloggi/src/i18n/it.ts create mode 100644 apps/infoalloggi/src/i18n/locales.ts create mode 100644 apps/infoalloggi/src/i18n/nazioni.ts create mode 100644 apps/infoalloggi/src/i18n/provincie.ts create mode 100644 apps/infoalloggi/src/i18n/stripe.ts create mode 100644 apps/infoalloggi/src/lib/annuncio_details.ts create mode 100644 apps/infoalloggi/src/lib/basicPwGenerator.ts create mode 100644 apps/infoalloggi/src/lib/form_utils.ts create mode 100644 apps/infoalloggi/src/lib/nossr.tsx create mode 100644 apps/infoalloggi/src/lib/storage_manager.ts create mode 100644 apps/infoalloggi/src/lib/useIsTyping.ts create mode 100644 apps/infoalloggi/src/lib/use_fowarded_ref.tsx create mode 100644 apps/infoalloggi/src/lib/userViewContext.tsx create mode 100644 apps/infoalloggi/src/lib/utils.ts create mode 100644 apps/infoalloggi/src/lib/zodForm.ts create mode 100644 apps/infoalloggi/src/middleware.ts create mode 100644 apps/infoalloggi/src/middlewares/apis_middleware.ts create mode 100644 apps/infoalloggi/src/middlewares/auth_middleware.ts create mode 100644 apps/infoalloggi/src/pages/404.tsx create mode 100644 apps/infoalloggi/src/pages/500.tsx create mode 100644 apps/infoalloggi/src/pages/500Auth.tsx create mode 100644 apps/infoalloggi/src/pages/_app.tsx create mode 100644 apps/infoalloggi/src/pages/_document.tsx create mode 100644 apps/infoalloggi/src/pages/annunci.tsx create mode 100644 apps/infoalloggi/src/pages/annuncio/[cod].tsx create mode 100644 apps/infoalloggi/src/pages/api/panel.ts create mode 100644 apps/infoalloggi/src/pages/api/stripe-webhook.ts create mode 100644 apps/infoalloggi/src/pages/api/tiles/[[...slug]].ts create mode 100644 apps/infoalloggi/src/pages/api/trpc/[trpc].ts create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/annunci.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/banners.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/blacklist.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/chats.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/chats/[chatId].tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/edit-annuncio/[id].tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/etichette.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/flags.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/ordini.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/prezziario.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/storage.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/testi-stringhe.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/user-view/allegati/[userId].tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/user-view/comunicazioni/[userId].tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/user-view/edit-user/[userId].tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/user-view/onboard/[servizioId].tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/user-view/ordini/[userId].tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/user-view/ricerca/[userId].tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/user-view/servizio/[userId].tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/admin/utenti.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/allegati.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/allegato-view/[allegatoId].tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/chat.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/comunicazioni.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/dashboard.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/ordini.tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/payment-recap/[ordineId].tsx create mode 100644 apps/infoalloggi/src/pages/area-riservata/profilo.tsx create mode 100644 apps/infoalloggi/src/pages/auth/new-password-reset.tsx create mode 100644 apps/infoalloggi/src/pages/auth/nonvalid-password-reset-token.tsx create mode 100644 apps/infoalloggi/src/pages/auth/password-reset/[token].tsx create mode 100644 apps/infoalloggi/src/pages/chi-siamo.tsx create mode 100644 apps/infoalloggi/src/pages/contatti.tsx create mode 100644 apps/infoalloggi/src/pages/guida.tsx create mode 100644 apps/infoalloggi/src/pages/index.tsx create mode 100644 apps/infoalloggi/src/pages/login.tsx create mode 100644 apps/infoalloggi/src/pages/prezzi.tsx create mode 100644 apps/infoalloggi/src/pages/privacy-policy.tsx create mode 100644 apps/infoalloggi/src/pages/proprietari.tsx create mode 100644 apps/infoalloggi/src/pages/servizio/acquisto-processing.tsx create mode 100644 apps/infoalloggi/src/pages/servizio/condizioni/[stringaId].tsx create mode 100644 apps/infoalloggi/src/pages/servizio/conferma-immobile/[...slug].tsx create mode 100644 apps/infoalloggi/src/pages/servizio/contratto-registrazione/[...slug].tsx create mode 100644 apps/infoalloggi/src/pages/servizio/contratto/[...slug].tsx create mode 100644 apps/infoalloggi/src/pages/servizio/onboard/[servizioId].tsx create mode 100644 apps/infoalloggi/src/pages/servizio/pagamento/[ordineId].tsx create mode 100644 apps/infoalloggi/src/pages/servizio/pre-onboard/[servizioId].tsx create mode 100644 apps/infoalloggi/src/pages/servizio/riapri-conferma/[...slug].tsx create mode 100644 apps/infoalloggi/src/pages/termini-condizioni.tsx create mode 100644 apps/infoalloggi/src/pages/test.tsx create mode 100644 apps/infoalloggi/src/pages/test4.tsx create mode 100644 apps/infoalloggi/src/providers/AnnuncioProvider.tsx create mode 100644 apps/infoalloggi/src/providers/I18nProvider.tsx create mode 100644 apps/infoalloggi/src/providers/RicercaProvider.tsx create mode 100644 apps/infoalloggi/src/providers/ServizioProvider.tsx create mode 100644 apps/infoalloggi/src/providers/SessionProvider.tsx create mode 100644 apps/infoalloggi/src/providers/StorageTableProvider.tsx create mode 100644 apps/infoalloggi/src/schemas/Database.ts create mode 100644 apps/infoalloggi/src/schemas/public/Annunci.ts create mode 100644 apps/infoalloggi/src/schemas/public/BanType.ts create mode 100644 apps/infoalloggi/src/schemas/public/Banlist.ts create mode 100644 apps/infoalloggi/src/schemas/public/Banners.ts create mode 100644 apps/infoalloggi/src/schemas/public/Chats.ts create mode 100644 apps/infoalloggi/src/schemas/public/ChatsEtichette.ts create mode 100644 apps/infoalloggi/src/schemas/public/Emails.ts create mode 100644 apps/infoalloggi/src/schemas/public/Etichette.ts create mode 100644 apps/infoalloggi/src/schemas/public/EventQueue.ts create mode 100644 apps/infoalloggi/src/schemas/public/Flags.ts create mode 100644 apps/infoalloggi/src/schemas/public/GenericStatusEnum.ts create mode 100644 apps/infoalloggi/src/schemas/public/Interests.ts create mode 100644 apps/infoalloggi/src/schemas/public/Messages.ts create mode 100644 apps/infoalloggi/src/schemas/public/MiogestImagesRef.ts create mode 100644 apps/infoalloggi/src/schemas/public/OrderTypeEnum.ts create mode 100644 apps/infoalloggi/src/schemas/public/Ordini.ts create mode 100644 apps/infoalloggi/src/schemas/public/PaymentStatusEnum.ts create mode 100644 apps/infoalloggi/src/schemas/public/Payments.ts create mode 100644 apps/infoalloggi/src/schemas/public/Prezziario.ts create mode 100644 apps/infoalloggi/src/schemas/public/PublicSchema.ts create mode 100644 apps/infoalloggi/src/schemas/public/Ratelimiter.ts create mode 100644 apps/infoalloggi/src/schemas/public/Servizio.ts create mode 100644 apps/infoalloggi/src/schemas/public/ServizioAnnunci.ts create mode 100644 apps/infoalloggi/src/schemas/public/Storageindex.ts create mode 100644 apps/infoalloggi/src/schemas/public/TempTokens.ts create mode 100644 apps/infoalloggi/src/schemas/public/TestiEStringhe.ts create mode 100644 apps/infoalloggi/src/schemas/public/TipologiaPosizioneEnum.ts create mode 100644 apps/infoalloggi/src/schemas/public/Users.ts create mode 100644 apps/infoalloggi/src/schemas/public/UsersAnagrafica.ts create mode 100644 apps/infoalloggi/src/schemas/public/UsersStorage.ts create mode 100644 apps/infoalloggi/src/server/FattureInCloud.ts create mode 100644 apps/infoalloggi/src/server/api/root.ts create mode 100644 apps/infoalloggi/src/server/api/routers/annunci.ts create mode 100644 apps/infoalloggi/src/server/api/routers/auth.ts create mode 100644 apps/infoalloggi/src/server/api/routers/banlist.ts create mode 100644 apps/infoalloggi/src/server/api/routers/chat.ts create mode 100644 apps/infoalloggi/src/server/api/routers/chat_sse.ts create mode 100644 apps/infoalloggi/src/server/api/routers/comunicazioni.ts create mode 100644 apps/infoalloggi/src/server/api/routers/contact.ts create mode 100644 apps/infoalloggi/src/server/api/routers/event_queue.ts create mode 100644 apps/infoalloggi/src/server/api/routers/fatture.ts create mode 100644 apps/infoalloggi/src/server/api/routers/interests.ts create mode 100644 apps/infoalloggi/src/server/api/routers/messages_sse.ts create mode 100644 apps/infoalloggi/src/server/api/routers/pagamenti.ts create mode 100644 apps/infoalloggi/src/server/api/routers/prezziario.ts create mode 100644 apps/infoalloggi/src/server/api/routers/servizio.ts create mode 100644 apps/infoalloggi/src/server/api/routers/settings.ts create mode 100644 apps/infoalloggi/src/server/api/routers/stats.ts create mode 100644 apps/infoalloggi/src/server/api/routers/storage.ts create mode 100644 apps/infoalloggi/src/server/api/routers/stripe.ts create mode 100644 apps/infoalloggi/src/server/api/routers/test.ts create mode 100644 apps/infoalloggi/src/server/api/routers/users.ts create mode 100644 apps/infoalloggi/src/server/api/trpc.ts create mode 100644 apps/infoalloggi/src/server/auth/jwt.ts create mode 100644 apps/infoalloggi/src/server/controllers/annunci.controller.ts create mode 100644 apps/infoalloggi/src/server/controllers/auth.controller.ts create mode 100644 apps/infoalloggi/src/server/controllers/chat.controller.ts create mode 100644 apps/infoalloggi/src/server/controllers/etichette.controller.ts create mode 100644 apps/infoalloggi/src/server/controllers/event_queue.controller.ts create mode 100644 apps/infoalloggi/src/server/controllers/fic.controller.ts create mode 100644 apps/infoalloggi/src/server/controllers/flags.controller.ts create mode 100644 apps/infoalloggi/src/server/controllers/ordini.controller.ts create mode 100644 apps/infoalloggi/src/server/controllers/prezziario.controller.ts create mode 100644 apps/infoalloggi/src/server/controllers/servizio.controller.ts create mode 100644 apps/infoalloggi/src/server/controllers/skebby.controller.ts create mode 100644 apps/infoalloggi/src/server/controllers/storage.controller.ts create mode 100644 apps/infoalloggi/src/server/controllers/stripe.controller.ts create mode 100644 apps/infoalloggi/src/server/controllers/user.controller.ts create mode 100644 apps/infoalloggi/src/server/db.ts create mode 100644 apps/infoalloggi/src/server/services/annunci.service.ts create mode 100644 apps/infoalloggi/src/server/services/auth.service.ts create mode 100644 apps/infoalloggi/src/server/services/banlist.service.ts create mode 100644 apps/infoalloggi/src/server/services/banners.service.ts create mode 100644 apps/infoalloggi/src/server/services/chat.service.ts create mode 100644 apps/infoalloggi/src/server/services/email.service.ts create mode 100644 apps/infoalloggi/src/server/services/fic.service.ts create mode 100644 apps/infoalloggi/src/server/services/imageServer.ts create mode 100644 apps/infoalloggi/src/server/services/interests.service.ts create mode 100644 apps/infoalloggi/src/server/services/mailer.ts create mode 100644 apps/infoalloggi/src/server/services/messages.service.ts create mode 100644 apps/infoalloggi/src/server/services/password.service.ts create mode 100644 apps/infoalloggi/src/server/services/prezziario.service.ts create mode 100644 apps/infoalloggi/src/server/services/ratelimiter.ts create mode 100644 apps/infoalloggi/src/server/services/storage.service.ts create mode 100644 apps/infoalloggi/src/server/services/testi_stringhe.service.ts create mode 100644 apps/infoalloggi/src/server/services/user.service.ts create mode 100644 apps/infoalloggi/src/server/sse.ts create mode 100644 apps/infoalloggi/src/server/utils/ctxChecker.ts create mode 100644 apps/infoalloggi/src/server/utils/sse_zod.ts create mode 100644 apps/infoalloggi/src/server/utils/ssgHelper.ts create mode 100644 apps/infoalloggi/src/server/utils/zod_types.ts create mode 100644 apps/infoalloggi/src/styles/globals.css create mode 100644 apps/infoalloggi/src/utils/api.ts create mode 100644 apps/infoalloggi/src/utils/fonts.ts create mode 100644 apps/infoalloggi/src/utils/get-media-url.ts create mode 100644 apps/infoalloggi/src/utils/kanel-types.ts create mode 100644 apps/infoalloggi/src/utils/keydb.ts create mode 100644 apps/infoalloggi/src/utils/kysely-helper.ts create mode 100644 apps/infoalloggi/src/utils/utils.ts create mode 100644 apps/infoalloggi/tsconfig.json create mode 100644 compose.sh create mode 100644 docker-compose.yml create mode 100644 pg_dumper.sh create mode 100644 readme.md diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9dc6901 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,35 @@ +.gitignore +.git +readme.md +build_logs.txt + + +apps/backend/.git.bkp +apps/backend/images +apps/backend/storage +apps/backend/tmp +apps/backend/vscode +apps/backend/.air.toml +apps/backend/.git +apps/backend/.gitignore +apps/backend/bkp.xml +apps/backend/.bin +apps/backend/test.webp +apps/backend/TODO + +apps/db/.git.bkp +apps/db/.git +apps/db/.gitignore + +apps/infoalloggi/.git.bkp +apps/infoalloggi/.git +apps/infoalloggi/.gitignore +apps/infoalloggi/TODO +apps/infoalloggi/node_modules +apps/infoalloggi/.vscode +apps/infoalloggi/.next +apps/infoalloggi/Dockerfile +apps/infoalloggi/.env +apps/infoalloggi/.docker_env + +apps/infoalloggi_old \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b928d03 --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +.env +build_logs.txt + +infoalloggi_old/ + +apps/db/.git.bkp +apps/db/.env +apps/db/.gitignore + +apps/backend/.git.bkp +apps/backend/.gitignore +apps/backend/tmp +apps/backend/images +apps/backend/bkp.xml +apps/backend/storage +apps/backend/.bin +apps/backend/caller.bat +apps/backend/*.exe +apps/backend/web.config +apps/backend/.env +apps/backend/test.webp +apps/backend/thumbnail-test.webp + +apps/infoalloggi/.git.bkp +apps/infoalloggi/.gitignore +apps/infoalloggi/node_modules +apps/infoalloggi/.next/ +apps/infoalloggi/out/ +apps/infoalloggi/next-env.d.ts +apps/infoalloggi/build +apps/infoalloggi/.DS_Store +apps/infoalloggi/*.pem +apps/infoalloggi/npm-debug.log* +apps/infoalloggi/.env +apps/infoalloggi/.env*.local +apps/infoalloggi/*.tsbuildinfo +apps/infoalloggi/certificates \ No newline at end of file diff --git a/apps/backend/.air.toml b/apps/backend/.air.toml new file mode 100644 index 0000000..d1cd51c --- /dev/null +++ b/apps/backend/.air.toml @@ -0,0 +1,46 @@ +root = "." +testdata_dir = "testdata" +tmp_dir = "tmp" + +[build] + args_bin = [] + bin = "tmp\\main.exe" + cmd = "go build -o ./tmp/main.exe ." + delay = 1000 + exclude_dir = ["assets", "tmp", "vendor", "testdata", "images", ".bin", "storage"] + exclude_file = [] + exclude_regex = ["_test.go"] + exclude_unchanged = false + follow_symlink = false + full_bin = "" + include_dir = [] + include_ext = ["go", "tpl", "tmpl", "html"] + include_file = [] + kill_delay = "0s" + log = "build-errors.log" + poll = false + poll_interval = 0 + post_cmd = [] + pre_cmd = [] + rerun = false + rerun_delay = 500 + send_interrupt = false + stop_on_error = false + +[color] + app = "" + build = "yellow" + main = "magenta" + runner = "green" + watcher = "cyan" + +[log] + main_only = false + time = false + +[misc] + clean_on_exit = false + +[screen] + clear_on_rebuild = false + keep_scroll = true diff --git a/apps/backend/.dockerignore b/apps/backend/.dockerignore new file mode 100644 index 0000000..254d620 --- /dev/null +++ b/apps/backend/.dockerignore @@ -0,0 +1,11 @@ +images +storage +tmp +vscode +.air.toml +.git +.gitignore +bkp.xml +.bin +test.webp +TODO diff --git a/apps/backend/Dockerfile b/apps/backend/Dockerfile new file mode 100644 index 0000000..7a66b5b --- /dev/null +++ b/apps/backend/Dockerfile @@ -0,0 +1,69 @@ +# Start from the latest golang base image +FROM golang:1.24 AS builder + +# Set the Current Working Directory inside the container +WORKDIR /app + +# Copy go mod and sum files +COPY go.mod go.sum ./ + +# Download all dependencies. Dependencies will be cached if the go.mod and go.sum files are not changed +RUN go mod download + +# Copy the source from the current directory to the Working Directory inside the container +COPY . . + +# Build the Go app +RUN go build -o main . + +# Start a new stage from alpine:latest +FROM alpine:latest AS runner + +ARG POSTGRES_USER +ARG POSTGRES_PASSWORD +ARG POSTGRES_DB +ARG PGHOST +ARG PGPORT +ARG IMAGEOPTION +ARG CONCURRENT_IMAGES +ARG STORAGE_STRATEGY +ARG MINIO_ENDPOINT +ARG MINIO_PORT +ARG MINIO_ROOT_USER +ARG MINIO_ROOT_PASSWORD + +RUN apk --no-cache add ca-certificates libc6-compat +ENV GOMEMLIMIT=2750MiB +ENV GOGC=100 +ENV PGHOST=$PGHOST +ENV POSTGRES_DB=$POSTGRES_DB +ENV PGPORT=$PGPORT +ENV POSTGRES_USER=$POSTGRES_USER +ENV POSTGRES_PASSWORD=$POSTGRES_PASSWORD +ENV IMAGEOPTION=$IMAGEOPTION +ENV CONCURRENT_IMAGES=$CONCURRENT_IMAGES +ENV STORAGE_STRATEGY=$STORAGE_STRATEGY +ENV MINIO_ENDPOINT=$MINIO_ENDPOINT +ENV MINIO_PORT=$MINIO_PORT +ENV MINIO_ROOT_USER=$MINIO_ROOT_USER +ENV MINIO_ROOT_PASSWORD=$MINIO_ROOT_PASSWORD + +WORKDIR /app + +# Copy the Pre-built binary file from the previous stage +COPY --from=builder /app/main /app/. +COPY --from=builder /app/public /app/public +COPY --from=builder /app/test.jpg /app/test.jpg +#COPY --from=builder /app/.env /app/.env +# create images and storage folder +RUN mkdir images +RUN mkdir storage +RUN mkdir storage/tmp + +RUN apk add curl + +# Expose port 1323 to the outside world +EXPOSE 1323 + +# Command to run the executable +CMD ["./main"] diff --git a/apps/backend/TODO b/apps/backend/TODO new file mode 100644 index 0000000..bbf6244 --- /dev/null +++ b/apps/backend/TODO @@ -0,0 +1,4 @@ + +Todo: + ☐ https://medium.com/@felipedutratine/pass-environment-variables-from-docker-to-my-golang-2a967c5905fe + dsdsd \ No newline at end of file diff --git a/apps/backend/db_handler.go b/apps/backend/db_handler.go new file mode 100644 index 0000000..bf5fc80 --- /dev/null +++ b/apps/backend/db_handler.go @@ -0,0 +1,317 @@ +package main + +import ( + "backend/dbhelpers" + "context" + "fmt" + "log/slog" + "os" + + "github.com/georgysavva/scany/v2/pgxscan" + pgxuuid "github.com/jackc/pgx-gofrs-uuid" + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgxpool" +) + +type DbHandler struct { + Dbpool *pgxpool.Pool + Ctx context.Context +} + +func NewDbHandler() *DbHandler { + fmt.Println("Connecting to db") + ctx := context.Background() + + host := os.Getenv("PGHOST") + dbname := os.Getenv("POSTGRES_DB") + dbport := os.Getenv("PGPORT") + pguser := os.Getenv("POSTGRES_USER") + pgpassword := os.Getenv("POSTGRES_PASSWORD") + + connStr := fmt.Sprintf("postgresql://%s:%s@%s:%s/%s?sslmode=disable", pguser, pgpassword, host, dbport, dbname) + fmt.Printf("Connecting to db with connection string: %s", connStr) + config, err := pgxpool.ParseConfig(connStr) + if err != nil { + panic(err) + } + config.ConnConfig.Tracer = dbhelpers.NewMultiQueryTracer(dbhelpers.NewLoggingQueryTracer(slog.Default())) + + config.AfterConnect = func(ctx context.Context, conn *pgx.Conn) error { + pgxuuid.Register(conn.TypeMap()) + return nil + } + dbpool, err := pgxpool.NewWithConfig(ctx, config) + if err != nil { + panic(err) + } + fmt.Println("Connected to db") + + return &DbHandler{Dbpool: dbpool, Ctx: ctx} +} + +func (h *DbHandler) GetActiveAnnunci() []string { + var annunci []string + pgxscan.Select(h.Ctx, h.Dbpool, &annunci, "SELECT codice FROM public.annunci WHERE web = true and stato = 'Attivo' ") + /*for i, annuncio := range annunci { + //if first letter is V then set annuncio as the last 4 digits + if string(annuncio[0]) != "V" { + annunci[i] = annuncio[:4] + } + }*/ + return annunci +} + +func (h *DbHandler) GetAllAnnunci() []AnnunciDB { + //var annuncio AnnunciDB + var annunci []AnnunciDB + + pgxscan.Select(h.Ctx, h.Dbpool, &annunci, "SELECT * FROM public.annunci") + return annunci + +} + +func (h *DbHandler) InsertAnnunciInDB(annunci AnnunciParsed) { + + //SET ALL WEB TO FALSE + _, err := h.Dbpool.Exec(h.Ctx, "UPDATE public.annunci SET web = false") + if err != nil { + panic(err) + + } + //GET ALL CODICI + var codici []string + err = pgxscan.Select(h.Ctx, h.Dbpool, &codici, "SELECT DISTINCT codice FROM public.annunci") + if err != nil { + panic(err) + } + batch := &pgx.Batch{} + for _, annuncio := range annunci.Annuncio { + + if contains(codici, annuncio.Codice) { + batch.Queue(` + UPDATE public.annunci + SET locatore = $1, + numero = $2, + idlocatore = $3, + email = $4, + creato_il = $5, + modificato_il = $6, + indirizzo = $7, + civico = $8, + comune = $9, + cap = $10, + provincia = $11, + regione = $12, + lat = $13, + lon = $14, + indirizzo_secondario = $15, + civico_secondario = $16, + lat_secondario = $17, + lon_secondario = $18, + tipo = $19, + categorie = $20, + prezzo = $21, + anno = $22, + consegna = $23, + classe = $24, + mq = $25, + piano = $26, + piano_palazzo = $27, + unita_condominio = $28, + numero_vani = $29, + numero_camere = $30, + numero_bagni = $31, + numero_balconi = $32, + numero_terrazzi = $33, + numero_box = $34, + numero_postiauto = $35, + caratteristiche = $36, + accessori = $37, + titolo_it = $38, + desc_it = $39, + titolo_en = $40, + desc_en = $41, + stato = $42, + web = $43, + homepage = $44, + url_immagini = $45, + url_video = $46 + WHERE codice = $47 + `, annuncio.Locatore, annuncio.Numero, annuncio.Idlocatore, + annuncio.Email, annuncio.Creato_il, annuncio.Modificato_il, + annuncio.Indirizzo, annuncio.Civico, annuncio.Comune, annuncio.Cap, + annuncio.Provincia, annuncio.Regione, annuncio.Lat, annuncio.Lon, + annuncio.Indirizzo_secondario, annuncio.Civico_secondario, annuncio.Lat_secondario, + annuncio.Lon_secondario, annuncio.Tipo, annuncio.Categorie, annuncio.Prezzo, annuncio.Anno, + annuncio.Consegna, annuncio.Classe, annuncio.Mq, annuncio.Piano, annuncio.Piano_palazzo, + annuncio.Unita_condominio, annuncio.Numero_vani, annuncio.Numero_camere, annuncio.Numero_bagni, + annuncio.Numero_balconi, annuncio.Numero_terrazzi, annuncio.Numero_box, annuncio.Numero_postiauto, + annuncio.Caratteristiche, annuncio.Accessori, annuncio.Titolo_it, annuncio.Desc_it, annuncio.Titolo_en, + annuncio.Desc_en, annuncio.Stato, annuncio.Web, annuncio.Homepage, annuncio.Url_foto, + annuncio.Url_video, annuncio.Codice) + + } else { + batch.Queue(` + INSERT INTO public.annunci( + locatore, + numero, + idlocatore, + email, + creato_il, + modificato_il, + indirizzo, + civico, + comune, + cap, + provincia, + regione, + lat, + lon, + indirizzo_secondario, + civico_secondario, + lat_secondario, + lon_secondario, + tipo, + categorie, + prezzo, + anno, + consegna, + classe, + mq, + piano, + piano_palazzo, + unita_condominio, + numero_vani, + numero_camere, + numero_bagni, + numero_balconi, + numero_terrazzi, + numero_box, + numero_postiauto, + caratteristiche, + accessori, + titolo_it, + desc_it, + titolo_en, + desc_en, + stato, + web, + homepage, + url_immagini, + url_video, + codice + ) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43, $44, $45, $46, $47) + `, annuncio.Locatore, annuncio.Numero, annuncio.Idlocatore, + annuncio.Email, annuncio.Creato_il, annuncio.Modificato_il, + annuncio.Indirizzo, annuncio.Civico, annuncio.Comune, annuncio.Cap, + annuncio.Provincia, annuncio.Regione, annuncio.Lat, annuncio.Lon, + annuncio.Indirizzo_secondario, annuncio.Civico_secondario, annuncio.Lat_secondario, + annuncio.Lon_secondario, annuncio.Tipo, annuncio.Categorie, annuncio.Prezzo, annuncio.Anno, + annuncio.Consegna, annuncio.Classe, annuncio.Mq, annuncio.Piano, annuncio.Piano_palazzo, + annuncio.Unita_condominio, annuncio.Numero_vani, annuncio.Numero_camere, annuncio.Numero_bagni, + annuncio.Numero_balconi, annuncio.Numero_terrazzi, annuncio.Numero_box, annuncio.Numero_postiauto, + annuncio.Caratteristiche, annuncio.Accessori, annuncio.Titolo_it, annuncio.Desc_it, annuncio.Titolo_en, + annuncio.Desc_en, annuncio.Stato, annuncio.Web, annuncio.Homepage, annuncio.Url_foto, + annuncio.Url_video, annuncio.Codice) + + } + } + results := h.Dbpool.SendBatch(h.Ctx, batch).Close() + fmt.Println(results) + +} + +func contains(s []string, str string) bool { + for _, v := range s { + if v == str { + return true + } + } + return false +} + +func (h *DbHandler) ClearRecords() { + + //SET ALL WEB TO FALSE + _, err := h.Dbpool.Exec(h.Ctx, "DELETE FROM public.annunci") + if err != nil { + panic(err) + + } +} + +func (h *DbHandler) SetFromBkp(annunci AnnunciParsed) { + h.ClearRecords() + + batch := &pgx.Batch{} + for _, annuncio := range annunci.Annuncio { + batch.Queue(` + INSERT INTO public.annunci( + locatore, + numero, + idlocatore, + email, + creato_il, + modificato_il, + indirizzo, + civico, + comune, + cap, + provincia, + regione, + lat, + lon, + indirizzo_secondario, + civico_secondario, + lat_secondario, + lon_secondario, + tipo, + categorie, + prezzo, + anno, + consegna, + classe, + mq, + piano, + piano_palazzo, + unita_condominio, + numero_vani, + numero_camere, + numero_bagni, + numero_balconi, + numero_terrazzi, + numero_box, + numero_postiauto, + caratteristiche, + accessori, + titolo_it, + desc_it, + titolo_en, + desc_en, + stato, + web, + homepage, + url_immagini, + url_video, + codice + ) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43, $44, $45, $46, $47) + `, annuncio.Locatore, annuncio.Numero, annuncio.Idlocatore, + annuncio.Email, annuncio.Creato_il, annuncio.Modificato_il, + annuncio.Indirizzo, annuncio.Civico, annuncio.Comune, annuncio.Cap, + annuncio.Provincia, annuncio.Regione, annuncio.Lat, annuncio.Lon, + annuncio.Indirizzo_secondario, annuncio.Civico_secondario, annuncio.Lat_secondario, + annuncio.Lon_secondario, annuncio.Tipo, annuncio.Categorie, annuncio.Prezzo, annuncio.Anno, + annuncio.Consegna, annuncio.Classe, annuncio.Mq, annuncio.Piano, annuncio.Piano_palazzo, + annuncio.Unita_condominio, annuncio.Numero_vani, annuncio.Numero_camere, annuncio.Numero_bagni, + annuncio.Numero_balconi, annuncio.Numero_terrazzi, annuncio.Numero_box, annuncio.Numero_postiauto, + annuncio.Caratteristiche, annuncio.Accessori, annuncio.Titolo_it, annuncio.Desc_it, annuncio.Titolo_en, + annuncio.Desc_en, annuncio.Stato, annuncio.Web, annuncio.Homepage, annuncio.Url_foto, + annuncio.Url_video, annuncio.Codice) + + } + results := h.Dbpool.SendBatch(h.Ctx, batch).Close() + fmt.Println(results) + +} diff --git a/apps/backend/dbhelpers/dbhelpers.go b/apps/backend/dbhelpers/dbhelpers.go new file mode 100644 index 0000000..ec0f967 --- /dev/null +++ b/apps/backend/dbhelpers/dbhelpers.go @@ -0,0 +1,146 @@ +package dbhelpers + +import ( + "context" + "fmt" + "log/slog" + "regexp" + "strings" + + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgxpool" +) + +// obfuscate replaces the first n characters of a string with asterisks. +func obfuscate(s string, n int) string { + if len(s) <= n { + return s + } + return s[:n] + strings.Repeat("*", len(s)-n) +} + +// ConnectToDatabaseWithLogging connects to the database with logging. It tests +// the connection and returns the connection pool. +func ConnectToDatabaseWithLogging(ctx context.Context, connectionString string, loggingEnabled bool) (*pgxpool.Pool, error) { + // Parse the connection string + slog. + Info("parsing connection string", + slog.String("connection_string", obfuscate(connectionString, 10)), + ) + config, err := pgxpool.ParseConfig(connectionString) + if err != nil { + return nil, fmt.Errorf("failed to parse connection string: %w", err) + } + // If logging is enabled, set the tracer + if loggingEnabled { + config.ConnConfig.Tracer = NewMultiQueryTracer(NewLoggingQueryTracer(slog.Default())) + } + + // Create the connection pool + slog.Info("creating connection pool") + pool, err := pgxpool.NewWithConfig(ctx, config) + if err != nil { + return nil, fmt.Errorf("failed to create connection pool: %w", err) + } + + // Ping the database + slog.Info("pinging database") + if err := pool.Ping(ctx); err != nil { + return nil, fmt.Errorf("failed to ping database: %w", err) + } + return pool, nil +} + +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +var ( + replaceTabs = regexp.MustCompile(`\t+`) + replaceSpacesBeforeOpeningParens = regexp.MustCompile(`\s+\(`) + replaceSpacesAfterOpeningParens = regexp.MustCompile(`\(\s+`) + replaceSpacesBeforeClosingParens = regexp.MustCompile(`\s+\)`) + replaceSpacesAfterClosingParens = regexp.MustCompile(`\)\s+`) + replaceSpaces = regexp.MustCompile(`\s+`) +) + +// prettyPrintSQL removes empty lines and trims spaces. +func prettyPrintSQL(sql string) string { + lines := strings.Split(sql, "\n") + + pretty := strings.Join(lines, " ") + pretty = replaceTabs.ReplaceAllString(pretty, "") + pretty = replaceSpacesBeforeOpeningParens.ReplaceAllString(pretty, "(") + pretty = replaceSpacesAfterOpeningParens.ReplaceAllString(pretty, "(") + pretty = replaceSpacesAfterClosingParens.ReplaceAllString(pretty, ")") + pretty = replaceSpacesBeforeClosingParens.ReplaceAllString(pretty, ")") + + // Finally, replace multiple spaces with a single space + pretty = replaceSpaces.ReplaceAllString(pretty, " ") + + return strings.TrimSpace(pretty) +} + +// https://github.com/jackc/pgx/issues/1061#issuecomment-1186250809 +type LoggingQueryTracer struct { + logger *slog.Logger +} + +func NewLoggingQueryTracer(logger *slog.Logger) *LoggingQueryTracer { + return &LoggingQueryTracer{logger: logger} +} + +func (l *LoggingQueryTracer) TraceQueryStart(ctx context.Context, conn *pgx.Conn, data pgx.TraceQueryStartData) context.Context { + l.logger. + Info("query start", + slog.String("sql", prettyPrintSQL(data.SQL)), + slog.Any("args", data.Args), + ) + return ctx +} + +func (l *LoggingQueryTracer) TraceQueryEnd(ctx context.Context, conn *pgx.Conn, data pgx.TraceQueryEndData) { + // Failure + if data.Err != nil { + l.logger. + Error("query end", + slog.String("error", data.Err.Error()), + slog.String("command_tag", data.CommandTag.String()), + ) + return + } + + // Success + l.logger. + Info("query end", + slog.String("command_tag", data.CommandTag.String()), + ) +} + +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +// https://github.com/jackc/pgx/discussions/1677#discussioncomment-8815982 +type MultiQueryTracer struct { + Tracers []pgx.QueryTracer +} + +func NewMultiQueryTracer(tracers ...pgx.QueryTracer) *MultiQueryTracer { + return &MultiQueryTracer{Tracers: tracers} +} + +func (m *MultiQueryTracer) TraceQueryStart(ctx context.Context, conn *pgx.Conn, data pgx.TraceQueryStartData) context.Context { + for _, t := range m.Tracers { + ctx = t.TraceQueryStart(ctx, conn, data) + } + return ctx +} + +func (m *MultiQueryTracer) TraceQueryEnd(ctx context.Context, conn *pgx.Conn, data pgx.TraceQueryEndData) { + for _, t := range m.Tracers { + t.TraceQueryEnd(ctx, conn, data) + } +} diff --git a/apps/backend/docker-compose.yml b/apps/backend/docker-compose.yml new file mode 100644 index 0000000..c39207c --- /dev/null +++ b/apps/backend/docker-compose.yml @@ -0,0 +1,102 @@ +services: + minio: + image: minio/minio + expose: + - "9000" + - "9001" + volumes: + - minio_storage:/data + networks: + - dokploy-network + environment: + MINIO_ROOT_USER: ${MINIO_ROOT_USER} + MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} + command: server --console-address ":9001" /data + healthcheck: + test: [ "CMD", "curl", "-f", "http://minio:9000/minio/health/live" ] + interval: 10s + timeout: 10s + retries: 5 + + tiles: + image: eqalpha/keydb:latest + volumes: + - tiles-data:/data + networks: + - dokploy-network + expose: + - "6379" + command: keydb-server /etc/keydb/keydb.conf --maxmemory 100mb --maxmemory-policy volatile-lru --maxmemory-samples 5 + healthcheck: + test: ["CMD", "keydb-cli", "-h", "localhost", "ping"] + interval: 5s + timeout: 3s + retries: 5 + restart: unless-stopped + deploy: + resources: + limits: + cpus: "0.5" + sysctls: + vm.overcommit_memory: "1" + + keydb: + image: eqalpha/keydb:latest + volumes: + - keydb-data:/data + networks: + - dokploy-network + expose: + - "6379" + healthcheck: + test: ["CMD", "keydb-cli", "-h", "localhost", "ping"] + interval: 5s + timeout: 3s + retries: 5 + restart: unless-stopped + deploy: + resources: + limits: + cpus: "0.5" + sysctls: + vm.overcommit_memory: "1" + + backend: + build: + context: . + dockerfile: Dockerfile + networks: + - dokploy-network + expose: + - 1323 + restart: unless-stopped + volumes: + - images_volume:/app/images + - storage_volume:/app/storage + environment: + STORAGE_STRATEGY: "minio" + MINIO_URL: minio:9000 + MINIO_ROOT_USER: ${MINIO_ROOT_USER} + MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + PGHOST: db + PGPORT: "5432" + IMAGEOPTION: "true" + CONCURRENT_IMAGES: ${CONCURRENT_IMAGES} + depends_on: + minio: + condition: service_healthy + +volumes: + minio_storage: + images_volume: + storage_volume: + tiles-data: + keydb-data: + + +networks: + dokploy-network: + external: true diff --git a/apps/backend/fallback.webp b/apps/backend/fallback.webp new file mode 100644 index 0000000000000000000000000000000000000000..3e0bc54b403cce53506c1afbaf6a9aaec31bfba5 GIT binary patch literal 5650 zcmWIYbaUepV_*n(bqWXzu!!JdU|yzKprFihpYcPIur{6s2U$ED~j`6(b)8C8BjJM>yaNqYuV^-+@ zKVdUC{%rq$K>X3{y6Pl-fso?cf)!1R=iTT&A}aIkNSwlo=i8J%vbx)D6z|ZoeA}_d zG4Onj>m#ndQN^R7F`70;bINE@Fj_E@R!!KtZt_!co7MK&-vow?uHE!Lzc$F7gqp?Q z$vd@N)9v7eR)bgdyMOP8BD>7GD~Y>SbJ^`&xs7ON9d@3^%G_~Ydz!+E7Z+8;Hb$iD zHU4MGA-bwFTK=r%L1O(4U#1|<815Ta_%dTVwy8gLO4OWNNqnuUH-Bbj^vneYm5EHb zWgA+Bc_NO4Yo;g3Wu=ki7neWh&rR9D=6`3$Th-Q<4lg$*UyBo~lbOQWT#VNhnHtAj zxlMFE|8P-VhM%gKk>?*_mQQ+tNBFLFDEXOO@i{wXp;)`G&vjEX;@b%s^JkuXqY}EY zF-et;*M%cAVSdB?Cp=a9f?Jtorjh8w3rATXuJK68yVET?)rDKz>DUcY!|B42B&{0< zHVQSfEt>vRGEQ!*j&d)z7{?7_3-#bDe=h8u7adlQ`q?-w{il?*l%qu$mY}FGxUS2=Ls-ya@Yh|XrUD7z=E298M|NR`6 z=>NP?@iAA7bA-PO9osqc!2t#ar;H`;%8NN!?x-DDu5eZ0-G_6hr=Bm#IhC(GiNVWI z`TL%?8Ra(%)?5B#>UzCF(X;*G$Ma_|Xc#_oJf$3ZK-1v2Yv9^y^T#Y&<tlP~bGNVpj=FfZ6tZPrDdH7$Hmu=U$Dd+h9);SK7>Rodf zPVk01T$sj?!Y8vL=d{CO|y>e^Fg67m<`z0C{U zWYc_q>l}fM@1+)u6M*^VH(RphO%2wb*N1OkIb{b8d8PAMLjK(6u(f%C8xH(yFV8OO zo%lrV@0thA?z>kW;AyxrY13s{j|2t=e)kmCEAAT>ZK zQv-v-{22QSTnn=py)W%cVU%q7`(xW9J-)wxExa_Q1Zpe_bXnB#==c04y#vwVI-RTD P^~5ePDfI*TjkW*)327fs literal 0 HcmV?d00001 diff --git a/apps/backend/from_bkp.go b/apps/backend/from_bkp.go new file mode 100644 index 0000000..d5c57b6 --- /dev/null +++ b/apps/backend/from_bkp.go @@ -0,0 +1,266 @@ +package main + +import ( + "encoding/xml" + "fmt" + "io" + "os" + "strings" + "sync" + "time" +) + +func From_Backup() XmlBkp { + //open the bkp.xml file + xmlFile, err := os.Open("bkp.xml") + if err != nil { + fmt.Println(err) + } + defer xmlFile.Close() + + byteValue, err := io.ReadAll(xmlFile) + if err != nil { + fmt.Println(err) + } + var miogest XmlBkp + xml.Unmarshal(byteValue, &miogest) + return miogest + +} + +func ParseUpdateBkp() AnnunciParsed { + + miogest := From_Backup() + + var AnnunciArray AnnunciParsed + extractedData := make(chan AnnuncioParsed) + defaultCaratteristiche := Miogest.GetCaratteristiche() + defaultCategorie := Miogest.GetCategorie() + + var wg sync.WaitGroup + wg.Add(len(miogest.Annunci.Record)) + + for i := 0; i < len(miogest.Annunci.Record); i++ { + go func(i int) { + defer wg.Done() + extractData_bkp(miogest.Annunci.Record[i], extractedData, defaultCaratteristiche, defaultCategorie) + }(i) + } + + go func() { + wg.Wait() + close(extractedData) + }() + + for result := range extractedData { + AnnunciArray.Annuncio = append(AnnunciArray.Annuncio, result) + } + + return AnnunciArray +} + +func extractData_bkp(annuncio AnnuncioBKP, extractedData chan AnnuncioParsed, defaultCaratteristiche ListaCaratteristiche, defaultCategorie []Categoria) { + + var tmp AnnuncioParsed = AnnuncioParsed{} + + codice := RemoveWhitespace(GetStringValue(annuncio.Codice)) + tmp.Codice = codice + tmp.Email = nil + if annuncio.Proprietario != nil && annuncio.Proprietario.Cliente != nil && annuncio.Proprietario.Cliente.Nome != nil { + tmp.Locatore = annuncio.Proprietario.Cliente.Nome + } + tmp.Numero = nil + if annuncio.Proprietario != nil && annuncio.Proprietario.Cliente != nil && annuncio.Proprietario.Cliente.Nome != nil { + tmp.Idlocatore = annuncio.Proprietario.Cliente.ID + } + + upperIndirizzo := MakeUppercase(GetStringValue(annuncio.Indirizzo)) + tmp.Indirizzo = &upperIndirizzo + tmp.Civico = annuncio.Civico + upperComune := MakeUppercase(GetStringValue(annuncio.Comune)) + tmp.Comune = &upperComune + tmp.Cap = annuncio.Cap + tmp.Provincia = annuncio.Provincia + tmp.Regione = annuncio.Regione + tmp.Lat = CommaToDot(annuncio.Lat) + tmp.Lon = CommaToDot(annuncio.Lon) + tmp.Indirizzo_secondario = nil + tmp.Civico_secondario = nil + tmp.Lat_secondario = nil + tmp.Lon_secondario = nil + + var tipo = tipologiaParser(*annuncio.Tipo) + tmp.Tipo = &tipo + + tmpanno := GetStringValue(annuncio.Anno) + if tmpanno != "0" && tmpanno != "" { + tmp.Anno = &tmpanno + } + tmp.Prezzo = prezzoParse(annuncio.Prezzo) + tmp.Consegna = parseConsegna(annuncio.Consegna) + tmp.Classe = annuncio.Classe + + if annuncio.Categorie != nil && annuncio.Categorie.Categoria != nil { + resultArray := make([]string, 0) + cats := *annuncio.Categorie.Categoria + for _, cat := range cats { + for _, catdef := range defaultCategorie { + if cat.ID == catdef.Id { + resultArray = append(resultArray, catdef.Nome) + } + } + } + if tmp.Categorie == nil { + tmp.Categorie = &[]string{} + } + *tmp.Categorie = resultArray + } + + tmp.Mq = CommaToDot(annuncio.Mq) + tmp.Piano = annuncio.Piano + tmp.Piano_palazzo = annuncio.PianoPalazzo + tmp.Unita_condominio = annuncio.UnitaImmobiliari + tmp.Numero_vani = annuncio.NumeroVani + tmp.Numero_camere = annuncio.NumeroCamere + tmp.Numero_bagni = annuncio.NumeroBagni + tmp.Numero_balconi = annuncio.NumeroBalconi + tmp.Numero_terrazzi = annuncio.NumeroTerrazzi + tmp.Numero_box = annuncio.NumeroBox + tmp.Numero_postiauto = annuncio.NumeroPostiauto + tmpstato := GetStringValue(annuncio.Stato) + var tmpstatoString string + if tmpstato == "1" { + tmpstatoString = "Attivo" + } + if tmpstato == "2" { + tmpstatoString = "Trattativa" + } else { + tmpstatoString = "Sospeso" + } + tmp.Stato = &tmpstatoString + home := false + tmp.Homepage = &home + + layout := "20060102150405" + if annuncio.Inserito != nil { + t, err := time.Parse(layout, *annuncio.Inserito) + if err != nil { + tmp.Creato_il = nil + } else { + tmp.Creato_il = &t + } + } + + tmp.Modificato_il = nil + + var itlingua string = "it" + var enlingua string = "en" + var tmpTitoloIt *string = nil + var tmpTitoloEn *string = nil + var tmpDescIt *string = nil + var tmpDescEn *string = nil + + if annuncio.Descrizioni != nil { + for _, desc := range *annuncio.Descrizioni.Descrizione { + + if desc.Lingua != nil { + if *desc.Lingua == itlingua { + tmpTitoloIt = desc.Titolo + tmpDescIt = desc.Testo + } + if *desc.Lingua == enlingua { + tmpTitoloEn = desc.Titolo + tmpDescEn = desc.Testo + } + } + + } + } + + tmp.Titolo_it = tmpTitoloIt + tmp.Titolo_en = tmpTitoloEn + tmp.Desc_it = tmpDescIt + tmp.Desc_en = tmpDescEn + w := false + tmp.Web = &w + + tmp.Url_video = nil + + if annuncio.Accessori != nil && annuncio.Accessori.Accessorio != nil { + tmpAcc := make([]string, 0) + for _, acc := range *annuncio.Accessori.Accessorio { + if acc.Nome != nil { + tmpAcc = append(tmpAcc, *acc.Nome) + } + } + if tmp.Accessori == nil { + tmp.Accessori = &[]string{} + } + *tmp.Accessori = tmpAcc + } + + tmpCaratteristiche := make(map[string]interface{}) + + if annuncio.Schede != nil && annuncio.Schede.Scheda != nil { + for _, scheda := range *annuncio.Schede.Scheda { + if scheda.Valore != nil { + var cossriponding_name *string = nil + for _, def := range defaultCaratteristiche.Caratteristiche { + if scheda.ID == def.Id { + cossriponding_name = &def.Tagxml + } + } + if cossriponding_name != nil { + tmpCaratteristiche[*cossriponding_name] = *scheda.Valore + } + } + } + } + + for _, def := range defaultCaratteristiche.Caratteristiche { + + if _, ok := tmpCaratteristiche[def.Tagxml]; !ok { + tmpCaratteristiche[def.Tagxml] = nil + } + + } + tmp.Caratteristiche = &tmpCaratteristiche + + tmp.Url_foto = nil + tmp.Url_video = nil + + extractedData <- tmp + +} + +func TestTipologieBkp() { + + bkp := From_Backup() + var tipologie []string + for _, r := range bkp.Annunci.Record { + if r.Tipo != nil { + if !contains(tipologie, *r.Tipo) { + tipologie = append(tipologie, *r.Tipo) + } + } + } + fmt.Println(strings.Join(tipologie, ",")) + +} + +func tipologiaParser(tipo string) string { + var result string + switch tipo { + case "Affitto Residenziale", "Affitto Turistico": + result = "Transitorio" + case "Vendita Residenziale", "Vendita Commerciale": + result = "Vendita" + case "Affitto Commerciale", "Affitto": + result = "Stabile" + case "Cessione Commerciale", "Cessione": + result = "Cessione" + default: + result = "Errore" + } + return result +} diff --git a/apps/backend/go.mod b/apps/backend/go.mod new file mode 100644 index 0000000..d832ec8 --- /dev/null +++ b/apps/backend/go.mod @@ -0,0 +1,55 @@ +module backend + +go 1.22 + +require ( + github.com/georgysavva/scany/v2 v2.1.3 + github.com/jackc/pgx/v5 v5.5.5 + github.com/joho/godotenv v1.5.1 + github.com/labstack/echo/v4 v4.11.2 +) + +require ( + github.com/dsnet/compress v0.0.1 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/frankban/quicktest v1.14.6 // indirect + github.com/go-ini/ini v1.67.0 // indirect + github.com/goccy/go-json v0.10.5 // indirect + github.com/gofrs/uuid/v5 v5.0.0 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect + github.com/jackc/puddle/v2 v2.2.1 // indirect + github.com/klauspost/compress v1.17.11 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/mholt/archiver v3.1.1+incompatible // indirect + github.com/minio/crc64nvme v1.0.0 // indirect + github.com/minio/md5-simd v1.1.2 // indirect + github.com/nickalie/go-binwrapper v0.0.0-20190114141239-525121d43c84 // indirect + github.com/nwaples/rardecode v1.1.3 // indirect + github.com/pierrec/lz4 v2.6.1+incompatible // indirect + github.com/rs/xid v1.6.0 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect + golang.org/x/image v0.14.0 // indirect + golang.org/x/sync v0.11.0 // indirect +) + +require ( + github.com/jackc/pgx-gofrs-uuid v0.0.0-20230224015001-1d428863c2e2 + github.com/labstack/gommon v0.4.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/minio/minio-go/v7 v7.0.86 + github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 + github.com/nickalie/go-webpbin v0.0.0-20220110095747-f10016bf2dc1 + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasttemplate v1.2.2 // indirect + golang.org/x/crypto v0.33.0 // indirect + golang.org/x/net v0.35.0 // indirect + golang.org/x/sys v0.30.0 // indirect + golang.org/x/text v0.22.0 // indirect +) diff --git a/apps/backend/go.sum b/apps/backend/go.sum new file mode 100644 index 0000000..fb1f8ba --- /dev/null +++ b/apps/backend/go.sum @@ -0,0 +1,137 @@ +github.com/cockroachdb/cockroach-go/v2 v2.2.0 h1:/5znzg5n373N/3ESjHF5SMLxiW4RKB05Ql//KWfeTFs= +github.com/cockroachdb/cockroach-go/v2 v2.2.0/go.mod h1:u3MiKYGupPPjkn3ozknpMUpxPaNLTFWAya419/zv6eI= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/georgysavva/scany/v2 v2.1.3 h1:Zd4zm/ej79Den7tBSU2kaTDPAH64suq4qlQdhiBeGds= +github.com/georgysavva/scany/v2 v2.1.3/go.mod h1:fqp9yHZzM/PFVa3/rYEC57VmDx+KDch0LoqrJzkvtos= +github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= +github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= +github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/uuid/v5 v5.0.0 h1:p544++a97kEL+svbcFbCQVM9KFu0Yo25UoISXGNNH9M= +github.com/gofrs/uuid/v5 v5.0.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx-gofrs-uuid v0.0.0-20230224015001-1d428863c2e2 h1:QWdhlQz98hUe1xmjADOl2mr8ERLrOqj0KWLdkrnNsRQ= +github.com/jackc/pgx-gofrs-uuid v0.0.0-20230224015001-1d428863c2e2/go.mod h1:Ti7pyNDU/UpXKmBTeFgxTvzYDM9xHLiYKMsLdt4b9cg= +github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw= +github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A= +github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= +github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/labstack/echo/v4 v4.11.2 h1:T+cTLQxWCDfqDEoydYm5kCobjmHwOwcv4OJAPHilmdE= +github.com/labstack/echo/v4 v4.11.2/go.mod h1:UcGuQ8V6ZNRmSweBIJkPvGfwCMIlFmiqrPqiEBfPYws= +github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= +github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mholt/archiver v3.1.1+incompatible h1:1dCVxuqs0dJseYEhi5pl7MYPH9zDa1wBi7mF09cbNkU= +github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= +github.com/minio/crc64nvme v1.0.0 h1:MeLcBkCTD4pAoU7TciAfwsfxgkhM2u5hCe48hSEVFr0= +github.com/minio/crc64nvme v1.0.0/go.mod h1:eVfm2fAzLlxMdUGc0EEBGSMmPwmXD5XiNRpnu9J3bvg= +github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= +github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= +github.com/minio/minio-go/v7 v7.0.86 h1:DcgQ0AUjLJzRH6y/HrxiZ8CXarA70PAIufXHodP4s+k= +github.com/minio/minio-go/v7 v7.0.86/go.mod h1:VbfO4hYwUu3Of9WqGLBZ8vl3Hxnxo4ngxK4hzQDf4x4= +github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= +github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= +github.com/nickalie/go-binwrapper v0.0.0-20190114141239-525121d43c84 h1:/6MoQlTdk1eAi0J9O89ypO8umkp+H7mpnSF2ggSL62Q= +github.com/nickalie/go-binwrapper v0.0.0-20190114141239-525121d43c84/go.mod h1:Eeech2fhQ/E4bS8cdc3+SGABQ+weQYGyWBvZ/mNr5uY= +github.com/nickalie/go-webpbin v0.0.0-20220110095747-f10016bf2dc1 h1:9awJsNP+gYOGCr3pQu9i217bCNsVwoQCmD3h7CYwxOw= +github.com/nickalie/go-webpbin v0.0.0-20220110095747-f10016bf2dc1/go.mod h1:m5oz0fmp+uyRBxxFkvciIpe1wd2JZ3pDVJ3x/D8/EGw= +github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= +github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= +github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU= +github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= +github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= +golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4= +golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= +golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/apps/backend/image_handler.go b/apps/backend/image_handler.go new file mode 100644 index 0000000..f916a6e --- /dev/null +++ b/apps/backend/image_handler.go @@ -0,0 +1,127 @@ +package main + +import ( + "fmt" + "log" + "os" + "path/filepath" + + "github.com/georgysavva/scany/v2/pgxscan" + "github.com/jackc/pgx/v5" +) + +type ImageRefManager struct { +} + +func NewImageRefManager() *ImageRefManager { + return &ImageRefManager{} +} + +func (i *ImageRefManager) GetImagesRef() ([]MiogestImagesRef_Table, error) { + + var images []MiogestImagesRef_Table + + err := pgxscan.Select(Db.Ctx, Db.Dbpool, &images, "SELECT * FROM public.miogest_images_ref") + if err != nil { + return nil, err + } + + return images, nil +} + +func (i *ImageRefManager) InsertImagesRef(annunci *AnnunciXML) error { + + batch := &pgx.Batch{} + + for _, annuncio := range annunci.Annuncio { + batch.Queue(` + INSERT INTO public.miogest_images_ref (codice, foto) + VALUES ($1, $2) + ON CONFLICT (codice) DO UPDATE SET foto = $2 + `, &annuncio.Codice, &annuncio.Foto) + } + + if err := Db.Dbpool.SendBatch(Db.Ctx, batch).Close(); err != nil { + return err + } + + return nil +} + +func (i *ImageRefManager) FindIsUpdate(annunci *AnnunciXML) ([]string, error) { + r, err := i.GetImagesRef() + if err != nil { + return nil, err + } + refMap := make(map[string][]string) // Convert slice to map for faster lookup + for _, ref := range r { + if ref.Foto != nil { + refMap[ref.Codice] = *ref.Foto + } + } + + var result []string + for _, annuncio := range annunci.Annuncio { + if annuncio.Codice != nil && annuncio.Foto != nil { + refFoto, exists := refMap[*annuncio.Codice] + if !exists { + fmt.Println("new codice", *annuncio.Codice) + result = append(result, *annuncio.Codice) + continue + } + + if len(*annuncio.Foto) != len(refFoto) { + fmt.Println("Different length", *annuncio.Foto, refFoto) + result = append(result, *annuncio.Codice) + continue + } + + for i, foto := range *annuncio.Foto { + if foto != refFoto[i] { + fmt.Println("Different content", *annuncio.Foto, refFoto) + result = append(result, *annuncio.Codice) + break + } + } + } + } + return result, nil +} + +func (i *ImageRefManager) ClearImages(to_clear []string) error { + + for _, codice := range to_clear { + + folder := filepath.Join(imgbasepath, codice) + err := os.RemoveAll(folder) + if err != nil { + return err + } + + } + return nil +} + +func (i *ImageRefManager) Reset() error { + + _, err := Db.Dbpool.Exec(Db.Ctx, "DELETE FROM public.miogest_images_ref") + if err != nil { + return err + } + + _, err = Db.Dbpool.Exec(Db.Ctx, "UPDATE public.annunci SET url_immagini = NULL, url_video = NULL") + if err != nil { + return err + } + + err = os.RemoveAll(imgbasepath) + if err != nil { + log.Fatal(err) + } + err = os.Mkdir(imgbasepath, 0755) + if err != nil { + log.Fatal(err) + } + + return nil +} diff --git a/apps/backend/images.go b/apps/backend/images.go new file mode 100644 index 0000000..bcdf4b1 --- /dev/null +++ b/apps/backend/images.go @@ -0,0 +1,206 @@ +package main + +import ( + "bytes" + "fmt" + "image" + "image/jpeg" + "image/png" + "log" + "net/http" + "os" + "path/filepath" + "strconv" + + "github.com/labstack/echo/v4" + "github.com/nfnt/resize" + "github.com/nickalie/go-webpbin" +) + +func Conversion(input string) error { + var width uint = 1920 + output := filepath.Base(input) + outputdir := filepath.Dir(input) + ext := filepath.Ext(output) + output = output[0 : len(output)-len(ext)] // Remove file extension // Add .webp extension + log.Println("Converting", input, "to", output+".webp") + f, err := os.Open(input) + if err != nil { + return err + } + defer f.Close() + var img image.Image + + switch ext { + case ".webp": + log.Println("Image already in WebP format") + img, err = webpbin.Decode(f) + if err != nil { + return err + } + case ".png", ".PNG": + // Convert from PNG + img, err = png.Decode(f) + if err != nil { + return err + } + case ".jpeg", ".jpg", ".JPG", ".JPEG": + // Convert from JPEG + img, err = jpeg.Decode(f) + if err != nil { + return err + } + default: + return fmt.Errorf("error: Unsupported file type: %s", ext) + } + + err = image_creation(img, width, output, outputdir) + if err != nil { + return err + } + + err = thumbnail_creation(img, output, outputdir) + if err != nil { + return err + } + + fmt.Println("Conversion completed successfully") + + return nil +} + +func image_creation(img image.Image, width uint, output string, outputdir string) error { + // Resize the image + resizedImg := resize.Resize(width, 0, img, resize.Lanczos3) + + // Create the output file + outputPath := fmt.Sprintf("%s/%s.webp", outputdir, output) + log.Println("Creating", outputPath) + out, err := os.Create(outputPath) + if err != nil { + return err + } + defer out.Close() + + // Encode the resized image to the output file + err = webpbin.Encode(out, resizedImg) + if err != nil { + return err + } + return nil +} + +func thumbnail_creation(img image.Image, output string, outputdir string) error { + // Resize the image + resizedImg := resize.Resize(32, 0, img, resize.Lanczos3) + + // Create the output file + outputPath := fmt.Sprintf("%s/thumbnail-%s.webp", outputdir, output) + log.Println("Creating", outputPath) + out, err := os.Create(outputPath) + if err != nil { + return err + } + defer out.Close() + + // Encode the resized image to the output file + err = webpbin.Encode(out, resizedImg) + if err != nil { + return err + } + return nil +} + +func ImageRoutes(e *echo.Echo) { + + e.GET("/initcwebp", func(c echo.Context) error { + Conversion("test.jpg") + return c.String(http.StatusOK, "Cwebp initialized") + }) + + e.GET("/images/list", func(c echo.Context) error { + annunci := Db.GetActiveAnnunci() + return c.JSON(http.StatusOK, annunci) + }) + + e.GET("/images/get/:cod/:imgNum", func(c echo.Context) error { + cod := c.Param("cod") + imgNum := c.Param("imgNum") + thumb := c.QueryParam("thumbnail") == "true" + widthStr := c.QueryParam("w") + //quality := c.QueryParam("q") + fmt.Printf("request for %s/%s, thumbnail=%t, w=%s\n", cod, imgNum, thumb, widthStr) + prefix := "" + if thumb { + prefix = "thumbnail-" + } + + Path := filepath.Join(imgbasepath, cod, imgNum, fmt.Sprintf("%s%s_%s.webp", prefix, cod, imgNum)) + fmt.Println(Path) + if _, err := os.Stat(Path); os.IsNotExist(err) { + + fmt.Println("Image does not exist:", Path) + // Serve a fallback image if the requested image is not found + + return FallbackImage(c) + } + if widthStr != "" { + width, err := strconv.Atoi(widthStr) + if err != nil { + fmt.Println("Invalid width parameter:", widthStr) + + return FallbackImage(c) + } + f, err := os.Open(Path) + if err != nil { + return err + } + img, err := webpbin.Decode(f) + if err != nil { + fmt.Println("Failed to decode image:", err) + return FallbackImage(c) + } + resizedImg := resize.Resize(uint(width), 0, img, resize.Lanczos3) + buffer := new(bytes.Buffer) + err = webpbin.Encode(buffer, resizedImg) + if err != nil { + fmt.Println("Failed to encode image:", err) + return FallbackImage(c) + } + return c.Blob(http.StatusOK, "image/webp", buffer.Bytes()) + } + + return c.File(Path) + + }) + + e.GET("/images/resetimages", func(c echo.Context) error { + + err := ImageManager.Reset() + if err != nil { + return c.String(http.StatusInternalServerError, err.Error()) + } + + return c.String(http.StatusOK, "OK") + }) + + e.POST("/image-option-toggle", func(c echo.Context) error { + // Toggle the imageOption value + imageOption = !imageOption + + // Convert the boolean value to a string and set the environment variable + os.Setenv("IMAGEOPTION", strconv.FormatBool(imageOption)) + + return c.String(http.StatusOK, "OK") + }) + +} + +func FallbackImage(c echo.Context) error { + // Serve a fallback image if the requested image is not found + fallbackPath := "fallback.webp" // Path to your fallback image + if _, err := os.Stat(fallbackPath); os.IsNotExist(err) { + return c.String(http.StatusNotFound, "Fallback image not found") + } + return c.File(fallbackPath) +} diff --git a/apps/backend/miogest_handler.go b/apps/backend/miogest_handler.go new file mode 100644 index 0000000..a23ee8a --- /dev/null +++ b/apps/backend/miogest_handler.go @@ -0,0 +1,516 @@ +package main + +import ( + "fmt" + "io" + "log" + "net/http" + "os" + "path/filepath" + "reflect" + "regexp" + "slices" + "strconv" + "strings" + "sync" + "time" +) + +type MiogestHandler struct { + Caratterisiche ListaCaratteristiche + Categorie []Categoria + AnnunciXML AnnunciXML + AnnunciParsed AnnunciParsed + annunci_cache_expires time.Time + vars_cache_expires time.Time +} + +func NewMiogestHandler() *MiogestHandler { + return &MiogestHandler{ + Caratterisiche: ListaCaratteristiche{}, + Categorie: nil, + AnnunciXML: AnnunciXML{}, + AnnunciParsed: AnnunciParsed{}, + annunci_cache_expires: time.Now(), + vars_cache_expires: time.Now(), + } +} + +// ANNUNCI FROM MIOGEST +func (m *MiogestHandler) GetAnnunci() AnnunciXML { + if len(m.AnnunciXML.Annuncio) == 0 || time.Now().After(m.annunci_cache_expires) { + m.GetAnnunciFromMiogest() + } + return m.AnnunciXML +} + +func (m *MiogestHandler) GetAnnunciFromMiogest() { + m.AnnunciXML = GetDataXML[AnnunciXML]("http://partner.miogest.com/agenzie/infoalloggi.xml") + m.annunci_cache_expires = time.Now().Add(1 * time.Hour) +} + +// CATEGORIE AND CARATTERISTICHE FROM MIOGEST +func (m *MiogestHandler) InitDefaults() { + m.GenerateCaratteristiche() + m.GenerateCategorie() +} + +func (m *MiogestHandler) GetCaratteristiche() ListaCaratteristiche { + if len(m.Caratterisiche.Caratteristiche) == 0 || time.Now().After(m.vars_cache_expires) { + m.GenerateCaratteristiche() + } + return m.Caratterisiche +} + +func (m *MiogestHandler) GetCategorie() []Categoria { + if len(m.Categorie) == 0 || time.Now().After(m.vars_cache_expires) { + m.GenerateCategorie() + } + return m.Categorie +} + +func (m *MiogestHandler) GenerateCaratteristiche() { + var result = GetDataXML[DefaultCaratteristiche]("https://www.miogest.com/apps/revo.aspx?tipo=schede") + var array ListaCaratteristiche + for _, tag := range result.Scheda { + var c = Caratteristica{Id: tag.Id, Tagxml: tag.Tagxml} + array.Caratteristiche = append(array.Caratteristiche, c) + } + m.Caratterisiche = array + m.vars_cache_expires = time.Now().Add(1 * time.Hour) +} + +func (m *MiogestHandler) GenerateCategorie() { + var result = GetDataXML[DefaultCategories]("https://www.miogest.com/apps/revo.aspx?tipo=categorie") + var listaCategorie []Categoria + for _, elem := range result.Cat { + var c = Categoria{Id: elem.ID, Nome: elem.Nome} + listaCategorie = append(listaCategorie, c) + } + m.Categorie = listaCategorie + m.vars_cache_expires = time.Now().Add(1 * time.Hour) +} + +// ANNUNCI PARSED +func (m *MiogestHandler) GetAnnunciParsed() AnnunciParsed { + m.ParseAnnunci() + return m.AnnunciParsed +} + +func (m *MiogestHandler) ParseAnnunci() { + annunci := m.GetAnnunci() + cod_image_to_update := []string{} + if imageOption { + var err error + cod_image_to_update, err = ImageManager.FindIsUpdate(&annunci) + if err != nil { + log.Fatalf("Failed to find images to update: %v", err.Error()) + } + if err := ImageManager.ClearImages(cod_image_to_update); err != nil { + log.Fatalf("Failed to clear images: %v", err.Error()) + } + ImageManager.InsertImagesRef(&annunci) + } + + var AnnunciArray AnnunciParsed + AnnunciArray.Annuncio = make([]AnnuncioParsed, 0, len(annunci.Annuncio)) + Miogest.InitDefaults() + var wg sync.WaitGroup + wg.Add(len(annunci.Annuncio)) + sem := make(chan struct{}, concurrentImages) //Limit concurrent goroutines + lista_codici := []string{} + for i := range annunci.Annuncio { + + lista_codici = append(lista_codici, RemoveWhitespace(*annunci.Annuncio[i].Codice)) + sem <- struct{}{} + go func(i int) { + defer wg.Done() + defer func() { <-sem }() + result := extractData_update(&annunci.Annuncio[i], contains(cod_image_to_update, *annunci.Annuncio[i].Codice)) + AnnunciArray.Annuncio = append(AnnunciArray.Annuncio, result) + }(i) + } + wg.Wait() + if imageOption { + for _, codice := range lista_codici { + err := folderCleanup(codice) + if err != nil { + log.Fatalf("Failed to cleanup folder: %v", err.Error()) + } + } + } + m.AnnunciParsed = AnnunciArray +} + +var re = regexp.MustCompile(`[^+\d]`) + +func boolUpd(b bool) *bool { + return &b +} + +func strUpd(s string) *string { + return &s +} + +func extractData_update(annuncio *AnnuncioXML, updateImages bool) AnnuncioParsed { + var tmp AnnuncioParsed = AnnuncioParsed{} + tmp.Codice = RemoveWhitespace(GetStringValue(annuncio.Codice)) + processLocatore(&tmp, annuncio) + processIndirizzo(&tmp, annuncio) + processTipologia(&tmp, annuncio) + tmp.Consegna = parseConsegna(annuncio.Consegna) + processCategorie(&tmp, annuncio) + processDatiImmobile(&tmp, annuncio) + tmp.Stato = annuncio.Stato + + tmp.Homepage = boolUpd(false) + if annuncio.HomePage != nil { + if *annuncio.HomePage == "si" { + + tmp.Homepage = boolUpd(true) + } + } + layout := "20060102150405" + if annuncio.Creato != nil { + t, err := time.Parse(layout, *annuncio.Creato) + if err != nil { + tmp.Creato_il = nil + } else { + tmp.Creato_il = &t + } + } + if annuncio.Modifica != nil { + t, err := time.Parse(layout, *annuncio.Modifica) + if err != nil { + tmp.Modificato_il = nil + } else { + tmp.Modificato_il = &t + } + } + tmp.Titolo_it = annuncio.Titolo + tmp.Titolo_en = annuncio.TitoloEn + tmp.Desc_it = annuncio.Descrizione + tmp.Desc_en = annuncio.DescrizioneEn + + tmp.Web = boolUpd(true) + + videos := []string{} + if annuncio.Video != nil { + videos = *annuncio.Video + } + miogestVideos := []string{} + if annuncio.AMMedias != nil { + for _, media := range *annuncio.AMMedias { + if media.AMVideo != nil && media.AMVideo.Url != nil { + miogestVideos = append(miogestVideos, *media.AMVideo.Url) + } + } + } + concatenatedVideos := slices.Concat(videos, miogestVideos) + tmp.Url_video = &concatenatedVideos + + if annuncio.Accessori != nil { + tmp.Accessori = annuncio.Accessori + } + tmpcaratt := parseCaratteristiche(annuncio) + tmp.Caratteristiche = &tmpcaratt + if updateImages { + processImages(&tmp, annuncio) + } + folders := GetPathDirsArray(filepath.Join(imgbasepath, tmp.Codice)) + for _, folder := range folders { + folderpath := filepath.Join(filepath.Join(imgbasepath, tmp.Codice), folder) + files, err := os.ReadDir(folderpath) + if err != nil { + panic(err) + } + for _, file := range files { + if strings.Contains(file.Name(), "webp") && !strings.HasPrefix(file.Name(), "thumbnail") { + tmpImgUrl := tmp.Codice + "/" + folder + if tmp.Url_foto == nil { + tmp.Url_foto = &[]string{} + } + *tmp.Url_foto = append(*tmp.Url_foto, tmpImgUrl) + } + } + } + return tmp +} + +func processLocatore(tmp *AnnuncioParsed, annuncio *AnnuncioXML) { + if annuncio.Clienti == nil || annuncio.Clienti.Cliente == nil { + return + } + tmp.Email = annuncio.Clienti.Cliente.Email1 + + var number string + for _, tel := range []*string{annuncio.Clienti.Cliente.Tel1, annuncio.Clienti.Cliente.Tel2, annuncio.Clienti.Cliente.Tel3} { + if tel != nil { + cleanedTel := re.ReplaceAllString(*tel, "") + if cleanedTel != "" { + number = cleanedTel + break + } + } + } + tmp.Numero = &number + if annuncio.Clienti.Cliente.Cognome != nil && annuncio.Clienti.Cliente.Nome != nil { + tmp.Locatore = strUpd(fmt.Sprintf("%s %s", MakeUppercase(*annuncio.Clienti.Cliente.Cognome), MakeUppercase(*annuncio.Clienti.Cliente.Nome))) + } + tmp.Idlocatore = annuncio.Clienti.Cliente.Id +} + +func processIndirizzo(tmp *AnnuncioParsed, annuncio *AnnuncioXML) { + tmp.Indirizzo = strUpd(MakeUppercase(GetStringValue(annuncio.Indirizzo))) + tmp.Civico = annuncio.Civico + tmp.Comune = strUpd(MakeUppercase(GetStringValue(annuncio.Comune))) + tmp.Cap = annuncio.Cap + tmp.Provincia = annuncio.Provincia + tmp.Regione = annuncio.Regione + tmp.Lat = annuncio.Latitudine + tmp.Lon = annuncio.Longitudine + tmp.Indirizzo_secondario = strUpd(MakeUppercase(GetStringValue(annuncio.IndirizzoSecondario))) + tmp.Civico_secondario = annuncio.CivicoSecondario + tmp.Lat_secondario = annuncio.LatitudineSecondario + tmp.Lon_secondario = annuncio.LongitudineSecondario +} + +func processTipologia(tmp *AnnuncioParsed, annuncio *AnnuncioXML) { + if annuncio.Tipologia == nil { + tmp.Tipo = strUpd("Errore") + return + } + if *annuncio.Tipologia == "V" { + tmp.Tipo = strUpd("Vendita") + return + } + if *annuncio.Tipologia == "I" { + tmp.Tipo = strUpd("Cessione") + return + } + if *annuncio.Tipologia == "A" { + if *annuncio.Tipologia2 == "Residenziale" || *annuncio.Tipologia2 == "Turistico" || *annuncio.Tipologia2 == "Stanza" { + tmp.Tipo = strUpd("Transitorio") + } else { + tmp.Tipo = strUpd("Stabile") + } + return + } + tmp.Tipo = strUpd("Errore") + +} + +func processCategorie(tmp *AnnuncioParsed, annuncio *AnnuncioXML) { + if annuncio.Categoria == nil { + return + } + resultArray := make([]string, 0) + cats := *annuncio.Categoria + defaultCategorie := Miogest.GetCategorie() + for _, cat := range cats { + for _, catdef := range defaultCategorie { + if cat == catdef.Id { + resultArray = append(resultArray, catdef.Nome) + } + } + } + if tmp.Categorie == nil { + tmp.Categorie = &[]string{} + } + *tmp.Categorie = resultArray +} + +func prezzoParse(prezzo *string) int { + zero := 0 + if prezzo == nil { + return zero + } + f, err := strconv.ParseFloat(strings.TrimSpace(strings.ReplaceAll(*prezzo, ",", ".")), 64) + if err != nil { + log.Printf("Failed to parse price: %v", err) + return zero + } + prezzoInt := int(f * 100) // Convert to cents + return prezzoInt +} + +func processDatiImmobile(tmp *AnnuncioParsed, annuncio *AnnuncioXML) { + tmpanno := GetStringValue(annuncio.Anno) + if tmpanno != "0" && tmpanno != "" { + tmp.Anno = &tmpanno + } + + tmp.Prezzo = prezzoParse(annuncio.Prezzo) + tmp.Classe = annuncio.Classe + if annuncio.Mq != nil { + replaced := strings.ReplaceAll(*annuncio.Mq, ",", "") + tmp.Mq = &replaced + } + tmp.Piano = annuncio.Piano + tmp.Piano_palazzo = annuncio.PianiCondominio + tmp.Unita_condominio = annuncio.UnitaCondominio + tmp.Numero_vani = annuncio.Vani + tmp.Numero_camere = annuncio.Camere + tmp.Numero_bagni = annuncio.Bagni + tmp.Numero_balconi = annuncio.Balconi + tmp.Numero_terrazzi = annuncio.Terrazzi + tmp.Numero_box = annuncio.Box + tmp.Numero_postiauto = annuncio.PostiAuto +} + +func processImages(tmp *AnnuncioParsed, annuncio *AnnuncioXML) { + path := filepath.Join(imgbasepath, tmp.Codice) + err := os.MkdirAll(path, 0755) + if err != nil { + log.Printf("Failed to create directory: %v", err) + panic(err) + } + var wg sync.WaitGroup + sem := make(chan struct{}, concurrentImages) // Limit concurrent goroutines + nfoto := 0 + var fotos []string + if annuncio.Foto != nil { + fotos = *annuncio.Foto + } + for _, url := range fotos { + fmt.Println("Processing image", url) + imgpath := filepath.Join(path, fmt.Sprintf("%d", nfoto)) + if _, err := os.Stat(imgpath); os.IsNotExist(err) { + os.Mkdir(imgpath, 0755) + } + filename := filepath.Join(imgpath, fmt.Sprintf("%s_%d%s", tmp.Codice, nfoto, filepath.Ext(url))) + wg.Add(1) + sem <- struct{}{} + go func(url, filename string) { + defer wg.Done() + defer func() { <-sem }() + downloadImage(url, filename) + }(url, filename) + nfoto++ + } + wg.Wait() + processWebpImages(path) +} + +func downloadImage(url, filename string) { + response, err := http.Get(url) + if err != nil { + log.Fatalf("Failed to download image: %v", err) + return + } + defer response.Body.Close() + file, err := os.Create(filename) + if err != nil { + log.Fatalf("Failed to create file: %v", err) + return + } + defer file.Close() + _, err = io.Copy(file, response.Body) + if err != nil { + log.Fatalf("Failed to save image: %v", err) + } +} + +func processWebpImages(path string) { + array, err := GetPathsArray(path) + if err != nil { + log.Fatal(err) + } + var wg sync.WaitGroup + sem := make(chan struct{}, concurrentImages) // Limit concurrent goroutines + for _, img := range array { + wg.Add(1) + sem <- struct{}{} + go func(img string) { + defer wg.Done() + defer func() { <-sem }() + err := Conversion(img) + if err != nil { + log.Fatal(err) + } + }(img) + } + wg.Wait() +} + +func folderCleanup(codice string) error { + folders := GetPathDirsArray(filepath.Join(imgbasepath, codice)) + non_webp := []string{} + for _, folder := range folders { + folderpath := filepath.Join(imgbasepath, codice, folder) + files, err := os.ReadDir(folderpath) + if err != nil { + return err + } + for _, file := range files { + if !strings.Contains(file.Name(), "webp") { + non_webp = append(non_webp, filepath.Join(folderpath, file.Name())) + } + } + } + for _, file := range non_webp { + err := os.Remove(file) + if err != nil { + return err + } + } + return nil +} + +func parseCaratteristiche(wrkrecord *AnnuncioXML) map[string]interface{} { + if reflect.TypeOf(wrkrecord).Kind() != reflect.Ptr || reflect.ValueOf(wrkrecord).Elem().Kind() != reflect.Struct { + return nil + } + tmpCaratteristiche := make(map[string]interface{}) + val := reflect.ValueOf(wrkrecord).Elem() + numField := val.NumField() + for i := 0; i < numField; i++ { + if strings.HasPrefix(val.Type().Field(i).Name, "Scheda_") { + nameField := val.Type().Field(i).Name + valueField := val.Field(i) + if valueField.IsValid() && !valueField.IsNil() { + tmpCaratteristiche[nameField] = valueField.Interface() + } else { + tmpCaratteristiche[nameField] = nil + } + } + } + for _, scheda := range Miogest.GetCaratteristiche().Caratteristiche { + if _, ok := tmpCaratteristiche[scheda.Tagxml]; !ok { + tmpCaratteristiche[scheda.Tagxml] = nil + } + } + return tmpCaratteristiche +} + +var mesiMapping = map[int]string{ + 1: "Gennaio", + 2: "Febbraio", + 3: "Marzo", + 4: "Aprile", + 5: "Maggio", + 6: "Giugno", + 7: "Luglio", + 8: "Agosto", + 9: "Settembre", + 10: "Ottobre", + 11: "Novembre", + 12: "Dicembre", +} + +func parseConsegna(original *string) *int { + currentMonth := int(time.Now().Month()) + if original == nil { + return nil + } + if *original == "Libero" { + return ¤tMonth + } else { + for k, v := range mesiMapping { + if *original == v { + return &k + } + } + } + return ¤tMonth +} diff --git a/apps/backend/models.go b/apps/backend/models.go new file mode 100644 index 0000000..aa3bf79 --- /dev/null +++ b/apps/backend/models.go @@ -0,0 +1,365 @@ +package main + +import ( + "os" + "time" +) + +type XmlBkp struct { + Annunci struct { + Record []AnnuncioBKP `xml:"record"` + } `xml:"annunci"` +} + +type AnnuncioBKP struct { + Codice *string `xml:"codice"` + Proprietario *struct { + Cliente *struct { + ID *string `xml:"id"` + Nome *string `xml:"nome"` + } `xml:"cliente"` + } `xml:"proprietario"` + Nazione *string `xml:"nazione"` + Regione *string `xml:"regione"` + Provincia *string `xml:"provincia"` + Comune *string `xml:"comune"` + Cap *string `xml:"cap"` + Indirizzo *string `xml:"indirizzo"` + Civico *string `xml:"civico"` + Lat *string `xml:"lat"` + Lon *string `xml:"lon"` + Tipo *string `xml:"tipo"` + Categorie *struct { + Categoria *[]struct { + ID string `xml:"id"` + Nome string `xml:"nome"` + } `xml:"categoria"` + } `xml:"categorie"` + Prezzo *string `xml:"prezzo"` + Piani *string `xml:"piani"` + Anno *string `xml:"anno"` + Consegna *string `xml:"consegna"` + Classe *string `xml:"classe"` + Mq *string `xml:"mq"` + Piano *string `xml:"piano"` + PianoPalazzo *string `xml:"piano_palazzo"` + UnitaImmobiliari *string `xml:"unita_immobiliari"` + NumeroVani *string `xml:"numero_vani"` + NumeroCamere *string `xml:"numero_camere"` + NumeroLetti *string `xml:"numero_letti"` + NumeroBagni *string `xml:"numero_bagni"` + NumeroBalconi *string `xml:"numero_balconi"` + NumeroTerrazzi *string `xml:"numero_terrazzi"` + NumeroBox *string `xml:"numero_box"` + NumeroPostiauto *string `xml:"numero_postiauto"` + Schede *struct { + Scheda *[]struct { + ID string `xml:"id"` + Nome string `xml:"nome"` + Valore *string `xml:"valore"` + } `xml:"scheda"` + } `xml:"schede"` + Accessori *struct { + Accessorio *[]struct { + ID string `xml:"id"` + Nome *string `xml:"nome"` + } `xml:"accessorio"` + } `xml:"accessori"` + Web *string `xml:"web"` + Descrizioni *struct { + Descrizione *[]struct { + Lingua *string `xml:"lingua"` + Titolo *string `xml:"titolo"` + Testo *string `xml:"testo"` + } `xml:"descrizione"` + } `xml:"descrizioni"` + Allegati *struct { + Foto *[]struct { + Nome *string `xml:"nome"` + URL *string `xml:"url"` + } `xml:"foto"` + } `xml:"allegati"` + Inserito *string `xml:"inserito"` + Stato *string `xml:"stato"` +} + +type AnnunciXML struct { + Annuncio []AnnuncioXML `xml:"Annuncio"` +} + +type AnnuncioXML struct { + Codice *string `xml:"Codice"` + Stato *string `xml:"Stato"` + Creato *string `xml:"Creato"` + Modifica *string `xml:"Modifica"` + Regione *string `xml:"Regione"` + Provincia *string `xml:"Provincia"` + Comune *string `xml:"Comune"` + Indirizzo *string `xml:"Indirizzo"` + Civico *string `xml:"Civico"` + Latitudine *string `xml:"Latitudine"` + Longitudine *string `xml:"Longitudine"` + IndirizzoSecondario *string `xml:"IndirizzoSecondario"` + CivicoSecondario *string `xml:"CivicoSecondario"` + LatitudineSecondario *string `xml:"LatitudineSecondario"` + LongitudineSecondario *string `xml:"LongitudineSecondario"` + Tipologia *string `xml:"Tipologia"` + Tipologia2 *string `xml:"Tipologia2"` + Categoria *[]string `xml:"Categoria"` + HomePage *string `xml:"HomePage"` + Prezzo *string `xml:"Prezzo"` + Anno *string `xml:"Anno"` + Mq *string `xml:"Mq"` + Vani *string `xml:"Vani"` + Camere *string `xml:"Camere"` + Bagni *string `xml:"Bagni"` + Balconi *string `xml:"Balconi"` + Terrazzi *string `xml:"Terrazzi"` + Piano *string `xml:"Piano"` + PianiCondominio *string `xml:"PianiCondominio"` + UnitaCondominio *string `xml:"UnitaCondominio"` + Box *string `xml:"Box"` + PostiAuto *string `xml:"PostiAuto"` + Classe *string `xml:"Classe"` + Scheda_AccessoDisabili *string `xml:"Scheda_AccessoDisabili"` + Scheda_AccoglienzaBimbi *string `xml:"Scheda_AccoglienzaBimbi"` + Scheda_AcquaCalda *string `xml:"Scheda_AcquaCalda"` + Scheda_AffittoMuriAnno *string `xml:"Scheda_AffittoMuriAnno"` + Scheda_Appartamenti *string `xml:"Scheda_Appartamenti"` + Scheda_Arredi *string `xml:"Scheda_Arredi"` + Scheda_Balconi *string `xml:"Scheda_Balconi"` + Scheda_CambioBiancheria *string `xml:"Scheda_CambioBiancheria"` + Scheda_CanoniAnticipati *string `xml:"Scheda_CanoniAnticipati"` + Scheda_CantinaSolaio *string `xml:"Scheda_CantinaSolaio"` + Scheda_Categoria *string `xml:"Scheda_Categoria"` + Scheda_Cauzione *string `xml:"Scheda_Cauzione"` + Scheda_Destinazione *string `xml:"Scheda_Destinazione"` + Scheda_ElettricitaGas *string `xml:"Scheda_ElettricitaGas"` + Scheda_FonteEnergetica *string `xml:"Scheda_FonteEnergetica"` + Scheda_Giardino *string `xml:"Scheda_Giardino"` + Scheda_Grado *string `xml:"Scheda_Grado"` + Scheda_IncassoAnnuo *string `xml:"Scheda_IncassoAnnuo"` + Scheda_IndiceEdificabilita *string `xml:"Scheda_IndiceEdificabilita"` + Scheda_Infissi *string `xml:"Scheda_Infissi"` + Scheda_Internet *string `xml:"Scheda_Internet"` + Scheda_LatiLiberi *string `xml:"Scheda_LatiLiberi"` + Scheda_Magazzino *string `xml:"Scheda_Magazzino"` + Scheda_NumeroCamere *string `xml:"Scheda_NumeroCamere"` + Scheda_NumeroDipendenti *string `xml:"Scheda_NumeroDipendenti"` + Scheda_NumeroVetrine *string `xml:"Scheda_NumeroVetrine"` + Scheda_OneriUrbanizzazione *string `xml:"Scheda_OneriUrbanizzazione"` + Scheda_OrariApertura *string `xml:"Scheda_OrariApertura"` + Scheda_Orientamento *string `xml:"Scheda_Orientamento"` + Scheda_Panorama *string `xml:"Scheda_Panorama"` + Scheda_PavimentoBagno *string `xml:"Scheda_PavimentoBagno"` + Scheda_PavimentoCucina *string `xml:"Scheda_PavimentoCucina"` + Scheda_PavimentoGiorno *string `xml:"Scheda_PavimentoGiorno"` + Scheda_PavimentoNotte *string `xml:"Scheda_PavimentoNotte"` + Scheda_Pavimento *string `xml:"Scheda_Pavimento"` + Scheda_Persiana *string `xml:"Scheda_Persiana"` + Scheda_Piano *string `xml:"Scheda_Piano"` + Scheda_Posizione *string `xml:"Scheda_Posizione"` + Scheda_PossibilitàAcquistoMuri *string `xml:"Scheda_PossibilitàAcquistoMuri"` + Scheda_PostiSedere *string `xml:"Scheda_PostiSedere"` + Scheda_Pulizie *string `xml:"Scheda_Pulizie"` + Scheda_Raffrescamento *string `xml:"Scheda_Raffrescamento"` + Scheda_Riscaldamento *string `xml:"Scheda_Riscaldamento"` + Scheda_ScadenzaContratto *string `xml:"Scheda_ScadenzaContratto"` + Scheda_Serramenti *string `xml:"Scheda_Serramenti"` + Scheda_SpCondominialiAnno *string `xml:"Scheda_SpCondominialiAnno"` + Scheda_SpazioParcheggio *string `xml:"Scheda_SpazioParcheggio"` + Scheda_StatoImmobile *string `xml:"Scheda_StatoImmobile"` + Scheda_Taverna *string `xml:"Scheda_Taverna"` + Scheda_Terrazzi *string `xml:"Scheda_Terrazzi"` + Scheda_TipoContratto *string `xml:"Scheda_TipoContratto"` + Scheda_TipoCucina *string `xml:"Scheda_TipoCucina"` + Scheda_TipoGestione *string `xml:"Scheda_TipoGestione"` + Scheda_TipoImpianto *string `xml:"Scheda_TipoImpianto"` + Scheda_TipoRegistr *string `xml:"Scheda_TipoRegistr"` + Scheda_TipoRiscaldamento *string `xml:"Scheda_TipoRiscaldamento"` + Scheda_TipoSaracinesca *string `xml:"Scheda_TipoSaracinesca"` + Scheda_TipoSoggiorno *string `xml:"Scheda_TipoSoggiorno"` + Scheda_TotalePiani *string `xml:"Scheda_TotalePiani"` + Scheda_Tv *string `xml:"Scheda_Tv"` + Accessori *[]string `xml:"Accessori"` + Titolo *string `xml:"Titolo"` + TitoloEn *string `xml:"Titolo_En"` + Descrizione *string `xml:"Descrizione"` + DescrizioneEn *string `xml:"Descrizione_En"` + Foto *[]string `xml:"Foto"` + Consegna *string `xml:"Consegna"` + Clienti *struct { + Cliente *struct { + Id *string `xml:"Id"` + Cognome *string `xml:"Cognome"` + Nome *string `xml:"Nome"` + Tel1 *string `xml:"Tel1"` + Tel2 *string `xml:"Tel2"` + Tel3 *string `xml:"Tel3"` + Email1 *string `xml:"Email1"` + } `xml:"Cliente"` + } `xml:"Clienti"` + Cap *string `xml:"Cap"` + Video *[]string `xml:"Video"` + AMMedias *[]struct { + AMVideo *struct { + Url *string `xml:"Url"` + } `xml:"AMVideo"` + } `xml:"AMMedias"` +} + +type AnnunciParsed struct { + Annuncio []AnnuncioParsed +} +type AnnuncioParsed struct { + Accessori *[]string + Anno *string + Numero_bagni *string + Numero_balconi *string + Numero_box *string + Numero_camere *string + Cap *string + Categorie *[]string + Civico *string + Civico_secondario *string + Classe *string + Codice string + Comune *string + Consegna *int + Creato_il *time.Time + Desc_it *string + Desc_en *string + Email *string + Homepage *bool + Indirizzo *string + Indirizzo_secondario *string + Lat *string + Lat_secondario *string + Lon *string + Lon_secondario *string + Modificato_il *time.Time + Mq *string + Piano_palazzo *string + Piano *string + Numero_postiauto *string + Prezzo int + Provincia *string + Regione *string + Caratteristiche *map[string]interface{} + Locatore *string + Numero *string + Idlocatore *string + Stato *string + Numero_terrazzi *string + Tipo *string + Titolo_it *string + Titolo_en *string + Unita_condominio *string + Numero_vani *string + Url_foto *[]string + Url_video *[]string + Web *bool +} + +type AnnunciDB struct { + Id int + Codice string + Locatore *string + Numero *string + Idlocatore *string + Indirizzo *string + Civico *string + Comune *string + Cap *string + Provincia *string + Regione *string + Lat *string + Lon *string + Indirizzo_secondario *string + Civico_secondario *string + Lat_secondario *string + Lon_secondario *string + Tipo *string + Categorie *[]string + Prezzo int + Anno *string + Consegna *string + Classe *string + Mq *string + Piano *string + Piano_palazzo *int + Unita_condominio *int + Numero_vani *int + Numero_camere *int + Numero_bagni *int + Numero_balconi *int + Numero_terrazzi *int + Numero_box *int + Numero_postiauto *int + Accessori *[]string + Titolo_it *string + Desc_it *string + Titolo_en *string + Desc_en *string + Stato *string + Web *bool + Caratteristiche *map[string]interface{} + Url_immagini *[]string + Homepage *bool + Url_video *[]string + Email *string + Creato_il *time.Time + Modificato_il *time.Time +} + +type FilebrowserData struct { + Data []File + Folder *string +} + +type File struct { + Name string + Size int64 + Mode os.FileMode + ModTime string + IsDir bool +} +type DefaultCaratteristiche struct { + Scheda []struct { + Id string `xml:"id"` + Tagxml string `xml:"tagxml"` + } `xml:"scheda"` +} +type Caratteristica struct { + Id string + Tagxml string +} +type ListaCaratteristiche struct { + Caratteristiche []Caratteristica +} + +type DefaultCategories struct { + Cat []struct { + ID string `xml:"id"` + Nome string `xml:"nome"` + } `xml:"cat"` +} + +type Categoria struct { + Id string + Nome string +} + +type Storageindex struct { + Id string + Created_at time.Time + Filename string + Ext string + From_admin bool + Expires_at *time.Time +} + +type MiogestImagesRef_Table struct { + Codice string + Foto *[]string +} diff --git a/apps/backend/pg_dumper.sh b/apps/backend/pg_dumper.sh new file mode 100644 index 0000000..d05bd78 --- /dev/null +++ b/apps/backend/pg_dumper.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Set the necessary environment variables +export PGHOST="localhost" +export PGPORT="5432" +export PGDATABASE="postgres" +export PGUSER="postgres" +export PGPASSWORD="rootpost" + +# Call pg_dump.exe to generate the SQL file +"C:/Program Files/PostgreSQL/16/bin/pg_dump.exe" -f "./db-docker/initial/1_init.sql" --schema-only + +"C:/Program Files/PostgreSQL/16/bin/pg_dump.exe" -f "./db-docker/initial/2_data.sql" --data-only -t prezziario -t banners -t etichette -t flags -t banlist -t testi_e_stringhe -t temp_tokens + +# Check if the pg_dump command was successful +if [ $? -eq 0 ]; then + echo "SQL file generated successfully." +else + echo "Failed to generate SQL file." +fi + +# Wait for user keypress +read -n 1 -s -r -p "Press any key to exit..." diff --git a/apps/backend/public/static/js/htmx.js b/apps/backend/public/static/js/htmx.js new file mode 100644 index 0000000..5ac9041 --- /dev/null +++ b/apps/backend/public/static/js/htmx.js @@ -0,0 +1 @@ +(function(e,t){if(typeof define==="function"&&define.amd){define([],t)}else if(typeof module==="object"&&module.exports){module.exports=t()}else{e.htmx=e.htmx||t()}})(typeof self!=="undefined"?self:this,function(){return function(){"use strict";var Y={onLoad:t,process:Pt,on:Z,off:K,trigger:fe,ajax:wr,find:E,findAll:f,closest:v,values:function(e,t){var r=nr(e,t||"post");return r.values},remove:U,addClass:B,removeClass:n,toggleClass:V,takeClass:j,defineExtension:qr,removeExtension:Hr,logAll:X,logNone:F,logger:null,config:{historyEnabled:true,historyCacheSize:10,refreshOnHistoryMiss:false,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:true,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:true,allowScriptTags:true,inlineScriptNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:false,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",useTemplateFragments:false,scrollBehavior:"smooth",defaultFocusScroll:false,getCacheBusterParam:false,globalViewTransitions:false,methodsThatUseUrlParams:["get"],selfRequestsOnly:false},parseInterval:d,_:e,createEventSource:function(e){return new EventSource(e,{withCredentials:true})},createWebSocket:function(e){var t=new WebSocket(e,[]);t.binaryType=Y.config.wsBinaryType;return t},version:"1.9.6"};var r={addTriggerHandler:St,bodyContains:oe,canAccessLocalStorage:M,findThisElement:de,filterValues:lr,hasAttribute:o,getAttributeValue:ee,getClosestAttributeValue:re,getClosestMatch:c,getExpressionVars:xr,getHeaders:sr,getInputValues:nr,getInternalData:ie,getSwapSpecification:fr,getTriggerSpecs:Ze,getTarget:ge,makeFragment:l,mergeObjects:se,makeSettleInfo:T,oobSwap:ye,querySelectorExt:le,selectAndSwap:Fe,settleImmediately:Wt,shouldCancel:tt,triggerEvent:fe,triggerErrorEvent:ue,withExtensions:C};var b=["get","post","put","delete","patch"];var w=b.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function d(e){if(e==undefined){return undefined}if(e.slice(-2)=="ms"){return parseFloat(e.slice(0,-2))||undefined}if(e.slice(-1)=="s"){return parseFloat(e.slice(0,-1))*1e3||undefined}if(e.slice(-1)=="m"){return parseFloat(e.slice(0,-1))*1e3*60||undefined}return parseFloat(e)||undefined}function Q(e,t){return e.getAttribute&&e.getAttribute(t)}function o(e,t){return e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function ee(e,t){return Q(e,t)||Q(e,"data-"+t)}function u(e){return e.parentElement}function te(){return document}function c(e,t){while(e&&!t(e)){e=u(e)}return e?e:null}function O(e,t,r){var n=ee(t,r);var i=ee(t,"hx-disinherit");if(e!==t&&i&&(i==="*"||i.split(" ").indexOf(r)>=0)){return"unset"}else{return n}}function re(t,r){var n=null;c(t,function(e){return n=O(t,e,r)});if(n!=="unset"){return n}}function h(e,t){var r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector;return r&&r.call(e,t)}function q(e){var t=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i;var r=t.exec(e);if(r){return r[1].toLowerCase()}else{return""}}function i(e,t){var r=new DOMParser;var n=r.parseFromString(e,"text/html");var i=n.body;while(t>0){t--;i=i.firstChild}if(i==null){i=te().createDocumentFragment()}return i}function H(e){return e.match(/",0);return r.querySelector("template").content}else{var n=q(e);switch(n){case"thead":case"tbody":case"tfoot":case"colgroup":case"caption":return i(""+e+"
",1);case"col":return i(""+e+"
",2);case"tr":return i(""+e+"
",2);case"td":case"th":return i(""+e+"
",3);case"script":case"style":return i("
"+e+"
",1);default:return i(e,0)}}}function ne(e){if(e){e()}}function L(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function A(e){return L(e,"Function")}function N(e){return L(e,"Object")}function ie(e){var t="htmx-internal-data";var r=e[t];if(!r){r=e[t]={}}return r}function I(e){var t=[];if(e){for(var r=0;r=0}function oe(e){if(e.getRootNode&&e.getRootNode()instanceof window.ShadowRoot){return te().body.contains(e.getRootNode().host)}else{return te().body.contains(e)}}function k(e){return e.trim().split(/\s+/)}function se(e,t){for(var r in t){if(t.hasOwnProperty(r)){e[r]=t[r]}}return e}function S(e){try{return JSON.parse(e)}catch(e){y(e);return null}}function M(){var e="htmx:localStorageTest";try{localStorage.setItem(e,e);localStorage.removeItem(e);return true}catch(e){return false}}function D(t){try{var e=new URL(t);if(e){t=e.pathname+e.search}if(!t.match("^/$")){t=t.replace(/\/+$/,"")}return t}catch(e){return t}}function e(e){return gr(te().body,function(){return eval(e)})}function t(t){var e=Y.on("htmx:load",function(e){t(e.detail.elt)});return e}function X(){Y.logger=function(e,t,r){if(console){console.log(t,e,r)}}}function F(){Y.logger=null}function E(e,t){if(t){return e.querySelector(t)}else{return E(te(),e)}}function f(e,t){if(t){return e.querySelectorAll(t)}else{return f(te(),e)}}function U(e,t){e=s(e);if(t){setTimeout(function(){U(e);e=null},t)}else{e.parentElement.removeChild(e)}}function B(e,t,r){e=s(e);if(r){setTimeout(function(){B(e,t);e=null},r)}else{e.classList&&e.classList.add(t)}}function n(e,t,r){e=s(e);if(r){setTimeout(function(){n(e,t);e=null},r)}else{if(e.classList){e.classList.remove(t);if(e.classList.length===0){e.removeAttribute("class")}}}}function V(e,t){e=s(e);e.classList.toggle(t)}function j(e,t){e=s(e);ae(e.parentElement.children,function(e){n(e,t)});B(e,t)}function v(e,t){e=s(e);if(e.closest){return e.closest(t)}else{do{if(e==null||h(e,t)){return e}}while(e=e&&u(e));return null}}function g(e,t){return e.substring(0,t.length)===t}function _(e,t){return e.substring(e.length-t.length)===t}function z(e){var t=e.trim();if(g(t,"<")&&_(t,"/>")){return t.substring(1,t.length-2)}else{return t}}function W(e,t){if(t.indexOf("closest ")===0){return[v(e,z(t.substr(8)))]}else if(t.indexOf("find ")===0){return[E(e,z(t.substr(5)))]}else if(t.indexOf("next ")===0){return[$(e,z(t.substr(5)))]}else if(t.indexOf("previous ")===0){return[G(e,z(t.substr(9)))]}else if(t==="document"){return[document]}else if(t==="window"){return[window]}else if(t==="body"){return[document.body]}else{return te().querySelectorAll(z(t))}}var $=function(e,t){var r=te().querySelectorAll(t);for(var n=0;n=0;n--){var i=r[n];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING){return i}}};function le(e,t){if(t){return W(e,t)[0]}else{return W(te().body,e)[0]}}function s(e){if(L(e,"String")){return E(e)}else{return e}}function J(e,t,r){if(A(t)){return{target:te().body,event:e,listener:t}}else{return{target:s(e),event:t,listener:r}}}function Z(t,r,n){Nr(function(){var e=J(t,r,n);e.target.addEventListener(e.event,e.listener)});var e=A(r);return e?r:n}function K(t,r,n){Nr(function(){var e=J(t,r,n);e.target.removeEventListener(e.event,e.listener)});return A(r)?r:n}var he=te().createElement("output");function ve(e,t){var r=re(e,t);if(r){if(r==="this"){return[de(e,t)]}else{var n=W(e,r);if(n.length===0){y('The selector "'+r+'" on '+t+" returned no matches!");return[he]}else{return n}}}}function de(e,t){return c(e,function(e){return ee(e,t)!=null})}function ge(e){var t=re(e,"hx-target");if(t){if(t==="this"){return de(e,"hx-target")}else{return le(e,t)}}else{var r=ie(e);if(r.boosted){return te().body}else{return e}}}function me(e){var t=Y.config.attributesToSettle;for(var r=0;r0){o=e.substr(0,e.indexOf(":"));t=e.substr(e.indexOf(":")+1,e.length)}else{o=e}var r=te().querySelectorAll(t);if(r){ae(r,function(e){var t;var r=i.cloneNode(true);t=te().createDocumentFragment();t.appendChild(r);if(!xe(o,e)){t=r}var n={shouldSwap:true,target:e,fragment:t};if(!fe(e,"htmx:oobBeforeSwap",n))return;e=n.target;if(n["shouldSwap"]){De(o,e,e,t,a)}ae(a.elts,function(e){fe(e,"htmx:oobAfterSwap",n)})});i.parentNode.removeChild(i)}else{i.parentNode.removeChild(i);ue(te().body,"htmx:oobErrorNoTarget",{content:i})}return e}function be(e,t,r){var n=re(e,"hx-select-oob");if(n){var i=n.split(",");for(let e=0;e0){var r=t.replace("'","\\'");var n=e.tagName.replace(":","\\:");var i=o.querySelector(n+"[id='"+r+"']");if(i&&i!==o){var a=e.cloneNode();pe(e,i);s.tasks.push(function(){pe(e,a)})}}})}function Ee(e){return function(){n(e,Y.config.addedClass);Pt(e);Ct(e);Ce(e);fe(e,"htmx:load")}}function Ce(e){var t="[autofocus]";var r=h(e,t)?e:e.querySelector(t);if(r!=null){r.focus()}}function a(e,t,r,n){Se(e,r,n);while(r.childNodes.length>0){var i=r.firstChild;B(i,Y.config.addedClass);e.insertBefore(i,t);if(i.nodeType!==Node.TEXT_NODE&&i.nodeType!==Node.COMMENT_NODE){n.tasks.push(Ee(i))}}}function Te(e,t){var r=0;while(r-1){var t=e.replace(/]*>|>)([\s\S]*?)<\/svg>/gim,"");var r=t.match(/]*>|>)([\s\S]*?)<\/title>/im);if(r){return r[2]}}}function Fe(e,t,r,n,i,a){i.title=Xe(n);var o=l(n);if(o){be(r,o,i);o=Me(r,o,a);we(o);return De(e,r,t,o,i)}}function Ue(e,t,r){var n=e.getResponseHeader(t);if(n.indexOf("{")===0){var i=S(n);for(var a in i){if(i.hasOwnProperty(a)){var o=i[a];if(!N(o)){o={value:o}}fe(r,a,o)}}}else{var s=n.split(",");for(var l=0;l0){var o=t[0];if(o==="]"){n--;if(n===0){if(a===null){i=i+"true"}t.shift();i+=")})";try{var s=gr(e,function(){return Function(i)()},function(){return true});s.source=i;return s}catch(e){ue(te().body,"htmx:syntax:error",{error:e,source:i});return null}}}else if(o==="["){n++}if($e(o,a,r)){i+="(("+r+"."+o+") ? ("+r+"."+o+") : (window."+o+"))"}else{i=i+o}a=t.shift()}}}function x(e,t){var r="";while(e.length>0&&!e[0].match(t)){r+=e.shift()}return r}var Je="input, textarea, select";function Ze(e){var t=ee(e,"hx-trigger");var r=[];if(t){var n=We(t);do{x(n,ze);var i=n.length;var a=x(n,/[,\[\s]/);if(a!==""){if(a==="every"){var o={trigger:"every"};x(n,ze);o.pollInterval=d(x(n,/[,\[\s]/));x(n,ze);var s=Ge(e,n,"event");if(s){o.eventFilter=s}r.push(o)}else if(a.indexOf("sse:")===0){r.push({trigger:"sse",sseEvent:a.substr(4)})}else{var l={trigger:a};var s=Ge(e,n,"event");if(s){l.eventFilter=s}while(n.length>0&&n[0]!==","){x(n,ze);var u=n.shift();if(u==="changed"){l.changed=true}else if(u==="once"){l.once=true}else if(u==="consume"){l.consume=true}else if(u==="delay"&&n[0]===":"){n.shift();l.delay=d(x(n,p))}else if(u==="from"&&n[0]===":"){n.shift();var f=x(n,p);if(f==="closest"||f==="find"||f==="next"||f==="previous"){n.shift();f+=" "+x(n,p)}l.from=f}else if(u==="target"&&n[0]===":"){n.shift();l.target=x(n,p)}else if(u==="throttle"&&n[0]===":"){n.shift();l.throttle=d(x(n,p))}else if(u==="queue"&&n[0]===":"){n.shift();l.queue=x(n,p)}else if((u==="root"||u==="threshold")&&n[0]===":"){n.shift();l[u]=x(n,p)}else{ue(e,"htmx:syntax:error",{token:n.shift()})}}r.push(l)}}if(n.length===i){ue(e,"htmx:syntax:error",{token:n.shift()})}x(n,ze)}while(n[0]===","&&n.shift())}if(r.length>0){return r}else if(h(e,"form")){return[{trigger:"submit"}]}else if(h(e,'input[type="button"], input[type="submit"]')){return[{trigger:"click"}]}else if(h(e,Je)){return[{trigger:"change"}]}else{return[{trigger:"click"}]}}function Ke(e){ie(e).cancelled=true}function Ye(e,t,r){var n=ie(e);n.timeout=setTimeout(function(){if(oe(e)&&n.cancelled!==true){if(!nt(r,e,Mt("hx:poll:trigger",{triggerSpec:r,target:e}))){t(e)}Ye(e,t,r)}},r.pollInterval)}function Qe(e){return location.hostname===e.hostname&&Q(e,"href")&&Q(e,"href").indexOf("#")!==0}function et(t,r,e){if(t.tagName==="A"&&Qe(t)&&(t.target===""||t.target==="_self")||t.tagName==="FORM"){r.boosted=true;var n,i;if(t.tagName==="A"){n="get";i=Q(t,"href")}else{var a=Q(t,"method");n=a?a.toLowerCase():"get";if(n==="get"){}i=Q(t,"action")}e.forEach(function(e){it(t,function(e,t){if(v(e,Y.config.disableSelector)){m(e);return}ce(n,i,e,t)},r,e,true)})}}function tt(e,t){if(e.type==="submit"||e.type==="click"){if(t.tagName==="FORM"){return true}if(h(t,'input[type="submit"], button')&&v(t,"form")!==null){return true}if(t.tagName==="A"&&t.href&&(t.getAttribute("href")==="#"||t.getAttribute("href").indexOf("#")!==0)){return true}}return false}function rt(e,t){return ie(e).boosted&&e.tagName==="A"&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function nt(e,t,r){var n=e.eventFilter;if(n){try{return n.call(t,r)!==true}catch(e){ue(te().body,"htmx:eventFilter:error",{error:e,source:n.source});return true}}return false}function it(a,o,e,s,l){var u=ie(a);var t;if(s.from){t=W(a,s.from)}else{t=[a]}if(s.changed){t.forEach(function(e){var t=ie(e);t.lastValue=e.value})}ae(t,function(n){var i=function(e){if(!oe(a)){n.removeEventListener(s.trigger,i);return}if(rt(a,e)){return}if(l||tt(e,a)){e.preventDefault()}if(nt(s,a,e)){return}var t=ie(e);t.triggerSpec=s;if(t.handledFor==null){t.handledFor=[]}if(t.handledFor.indexOf(a)<0){t.handledFor.push(a);if(s.consume){e.stopPropagation()}if(s.target&&e.target){if(!h(e.target,s.target)){return}}if(s.once){if(u.triggeredOnce){return}else{u.triggeredOnce=true}}if(s.changed){var r=ie(n);if(r.lastValue===n.value){return}r.lastValue=n.value}if(u.delayed){clearTimeout(u.delayed)}if(u.throttle){return}if(s.throttle){if(!u.throttle){o(a,e);u.throttle=setTimeout(function(){u.throttle=null},s.throttle)}}else if(s.delay){u.delayed=setTimeout(function(){o(a,e)},s.delay)}else{fe(a,"htmx:trigger");o(a,e)}}};if(e.listenerInfos==null){e.listenerInfos=[]}e.listenerInfos.push({trigger:s.trigger,listener:i,on:n});n.addEventListener(s.trigger,i)})}var at=false;var ot=null;function st(){if(!ot){ot=function(){at=true};window.addEventListener("scroll",ot);setInterval(function(){if(at){at=false;ae(te().querySelectorAll("[hx-trigger='revealed'],[data-hx-trigger='revealed']"),function(e){lt(e)})}},200)}}function lt(t){if(!o(t,"data-hx-revealed")&&P(t)){t.setAttribute("data-hx-revealed","true");var e=ie(t);if(e.initHash){fe(t,"revealed")}else{t.addEventListener("htmx:afterProcessNode",function(e){fe(t,"revealed")},{once:true})}}}function ut(e,t,r){var n=k(r);for(var i=0;i=0){var t=vt(n);setTimeout(function(){ft(s,r,n+1)},t)}};t.onopen=function(e){n=0};ie(s).webSocket=t;t.addEventListener("message",function(e){if(ct(s)){return}var t=e.data;C(s,function(e){t=e.transformResponse(t,null,s)});var r=T(s);var n=l(t);var i=I(n.children);for(var a=0;a0){fe(u,"htmx:validation:halted",i);return}t.send(JSON.stringify(l));if(tt(e,u)){e.preventDefault()}})}else{ue(u,"htmx:noWebSocketSourceError")}}function vt(e){var t=Y.config.wsReconnectDelay;if(typeof t==="function"){return t(e)}if(t==="full-jitter"){var r=Math.min(e,6);var n=1e3*Math.pow(2,r);return n*Math.random()}y('htmx.config.wsReconnectDelay must either be a function or the string "full-jitter"')}function dt(e,t,r){var n=k(r);for(var i=0;i0){var o=n.shift();var s=o.match(/^\s*([a-zA-Z:\-\.]+:)(.*)/);if(a===0&&s){o.split(":");i=s[1].slice(0,-1);r[i]=s[2]}else{r[i]+=o}a+=Ht(o)}for(var l in r){Lt(e,l,r[l])}}}function Nt(t){Oe(t);for(var e=0;eY.config.historyCacheSize){i.shift()}while(i.length>0){try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(e){ue(te().body,"htmx:historyCacheError",{cause:e,cache:i});i.shift()}}}function Bt(e){if(!M()){return null}e=D(e);var t=S(localStorage.getItem("htmx-history-cache"))||[];for(var r=0;r=200&&this.status<400){fe(te().body,"htmx:historyCacheMissLoad",o);var e=l(this.response);e=e.querySelector("[hx-history-elt],[data-hx-history-elt]")||e;var t=Ft();var r=T(t);var n=Xe(this.response);if(n){var i=E("title");if(i){i.innerHTML=n}else{window.document.title=n}}ke(t,e,r);Wt(r.tasks);Xt=a;fe(te().body,"htmx:historyRestore",{path:a,cacheMiss:true,serverResponse:this.response})}else{ue(te().body,"htmx:historyCacheMissLoadError",o)}};e.send()}function Gt(e){jt();e=e||location.pathname+location.search;var t=Bt(e);if(t){var r=l(t.content);var n=Ft();var i=T(n);ke(n,r,i);Wt(i.tasks);document.title=t.title;setTimeout(function(){window.scrollTo(0,t.scroll)},0);Xt=e;fe(te().body,"htmx:historyRestore",{path:e,item:t})}else{if(Y.config.refreshOnHistoryMiss){window.location.reload(true)}else{$t(e)}}}function Jt(e){var t=ve(e,"hx-indicator");if(t==null){t=[e]}ae(t,function(e){var t=ie(e);t.requestCount=(t.requestCount||0)+1;e.classList["add"].call(e.classList,Y.config.requestClass)});return t}function Zt(e){var t=ve(e,"hx-disabled-elt");if(t==null){t=[]}ae(t,function(e){var t=ie(e);t.requestCount=(t.requestCount||0)+1;e.setAttribute("disabled","")});return t}function Kt(e,t){ae(e,function(e){var t=ie(e);t.requestCount=(t.requestCount||0)-1;if(t.requestCount===0){e.classList["remove"].call(e.classList,Y.config.requestClass)}});ae(t,function(e){var t=ie(e);t.requestCount=(t.requestCount||0)-1;if(t.requestCount===0){e.removeAttribute("disabled")}})}function Yt(e,t){for(var r=0;r=0}function fr(e,t){var r=t?t:re(e,"hx-swap");var n={swapStyle:ie(e).boosted?"innerHTML":Y.config.defaultSwapStyle,swapDelay:Y.config.defaultSwapDelay,settleDelay:Y.config.defaultSettleDelay};if(ie(e).boosted&&!ur(e)){n["show"]="top"}if(r){var i=k(r);if(i.length>0){for(var a=0;a0?l.join(":"):null;n["scroll"]=u;n["scrollTarget"]=f}else if(o.indexOf("show:")===0){var c=o.substr(5);var l=c.split(":");var h=l.pop();var f=l.length>0?l.join(":"):null;n["show"]=h;n["showTarget"]=f}else if(o.indexOf("focus-scroll:")===0){var v=o.substr("focus-scroll:".length);n["focusScroll"]=v=="true"}else if(a==0){n["swapStyle"]=o}else{y("Unknown modifier in hx-swap: "+o)}}}}return n}function cr(e){return re(e,"hx-encoding")==="multipart/form-data"||h(e,"form")&&Q(e,"enctype")==="multipart/form-data"}function hr(t,r,n){var i=null;C(r,function(e){if(i==null){i=e.encodeParameters(t,n,r)}});if(i!=null){return i}else{if(cr(r)){return or(n)}else{return ar(n)}}}function T(e){return{tasks:[],elts:[e]}}function vr(e,t){var r=e[0];var n=e[e.length-1];if(t.scroll){var i=null;if(t.scrollTarget){i=le(r,t.scrollTarget)}if(t.scroll==="top"&&(r||i)){i=i||r;i.scrollTop=0}if(t.scroll==="bottom"&&(n||i)){i=i||n;i.scrollTop=i.scrollHeight}}if(t.show){var i=null;if(t.showTarget){var a=t.showTarget;if(t.showTarget==="window"){a="body"}i=le(r,a)}if(t.show==="top"&&(r||i)){i=i||r;i.scrollIntoView({block:"start",behavior:Y.config.scrollBehavior})}if(t.show==="bottom"&&(n||i)){i=i||n;i.scrollIntoView({block:"end",behavior:Y.config.scrollBehavior})}}}function dr(e,t,r,n){if(n==null){n={}}if(e==null){return n}var i=ee(e,t);if(i){var a=i.trim();var o=r;if(a==="unset"){return null}if(a.indexOf("javascript:")===0){a=a.substr(11);o=true}else if(a.indexOf("js:")===0){a=a.substr(3);o=true}if(a.indexOf("{")!==0){a="{"+a+"}"}var s;if(o){s=gr(e,function(){return Function("return ("+a+")")()},{})}else{s=S(a)}for(var l in s){if(s.hasOwnProperty(l)){if(n[l]==null){n[l]=s[l]}}}}return dr(u(e),t,r,n)}function gr(e,t,r){if(Y.config.allowEval){return t()}else{ue(e,"htmx:evalDisallowedError");return r}}function mr(e,t){return dr(e,"hx-vars",true,t)}function pr(e,t){return dr(e,"hx-vals",false,t)}function xr(e){return se(mr(e),pr(e))}function yr(t,r,n){if(n!==null){try{t.setRequestHeader(r,n)}catch(e){t.setRequestHeader(r,encodeURIComponent(n));t.setRequestHeader(r+"-URI-AutoEncoded","true")}}}function br(t){if(t.responseURL&&typeof URL!=="undefined"){try{var e=new URL(t.responseURL);return e.pathname+e.search}catch(e){ue(te().body,"htmx:badResponseUrl",{url:t.responseURL})}}}function R(e,t){return e.getAllResponseHeaders().match(t)}function wr(e,t,r){e=e.toLowerCase();if(r){if(r instanceof Element||L(r,"String")){return ce(e,t,null,null,{targetOverride:s(r),returnPromise:true})}else{return ce(e,t,s(r.source),r.event,{handler:r.handler,headers:r.headers,values:r.values,targetOverride:s(r.target),swapOverride:r.swap,returnPromise:true})}}else{return ce(e,t,null,null,{returnPromise:true})}}function Sr(e){var t=[];while(e){t.push(e);e=e.parentElement}return t}function Er(e,t,r){var n;var i;if(typeof URL==="function"){i=new URL(t,document.location.href);var a=document.location.origin;n=a===i.origin}else{i=t;n=g(t,document.location.origin)}if(Y.config.selfRequestsOnly){if(!n){return false}}return fe(e,"htmx:validateUrl",se({url:i,sameHost:n},r))}function ce(e,t,n,r,i,M){var a=null;var o=null;i=i!=null?i:{};if(i.returnPromise&&typeof Promise!=="undefined"){var s=new Promise(function(e,t){a=e;o=t})}if(n==null){n=te().body}var D=i.handler||Tr;if(!oe(n)){ne(a);return s}var l=i.targetOverride||ge(n);if(l==null||l==he){ue(n,"htmx:targetError",{target:ee(n,"hx-target")});ne(o);return s}var u=ie(n);var f=u.lastButtonClicked;if(f){var c=Q(f,"formaction");if(c!=null){t=c}var h=Q(f,"formmethod");if(h!=null){e=h}}if(!M){var X=function(){return ce(e,t,n,r,i,true)};var F={target:l,elt:n,path:t,verb:e,triggeringEvent:r,etc:i,issueRequest:X};if(fe(n,"htmx:confirm",F)===false){ne(a);return s}}var v=n;var d=re(n,"hx-sync");var g=null;var m=false;if(d){var p=d.split(":");var x=p[0].trim();if(x==="this"){v=de(n,"hx-sync")}else{v=le(n,x)}d=(p[1]||"drop").trim();u=ie(v);if(d==="drop"&&u.xhr&&u.abortable!==true){ne(a);return s}else if(d==="abort"){if(u.xhr){ne(a);return s}else{m=true}}else if(d==="replace"){fe(v,"htmx:abort")}else if(d.indexOf("queue")===0){var U=d.split(" ");g=(U[1]||"last").trim()}}if(u.xhr){if(u.abortable){fe(v,"htmx:abort")}else{if(g==null){if(r){var y=ie(r);if(y&&y.triggerSpec&&y.triggerSpec.queue){g=y.triggerSpec.queue}}if(g==null){g="last"}}if(u.queuedRequests==null){u.queuedRequests=[]}if(g==="first"&&u.queuedRequests.length===0){u.queuedRequests.push(function(){ce(e,t,n,r,i)})}else if(g==="all"){u.queuedRequests.push(function(){ce(e,t,n,r,i)})}else if(g==="last"){u.queuedRequests=[];u.queuedRequests.push(function(){ce(e,t,n,r,i)})}ne(a);return s}}var b=new XMLHttpRequest;u.xhr=b;u.abortable=m;var w=function(){u.xhr=null;u.abortable=false;if(u.queuedRequests!=null&&u.queuedRequests.length>0){var e=u.queuedRequests.shift();e()}};var B=re(n,"hx-prompt");if(B){var S=prompt(B);if(S===null||!fe(n,"htmx:prompt",{prompt:S,target:l})){ne(a);w();return s}}var V=re(n,"hx-confirm");if(V){if(!confirm(V)){ne(a);w();return s}}var E=sr(n,l,S);if(i.headers){E=se(E,i.headers)}var j=nr(n,e);var C=j.errors;var T=j.values;if(i.values){T=se(T,i.values)}var _=xr(n);var z=se(T,_);var R=lr(z,n);if(e!=="get"&&!cr(n)){E["Content-Type"]="application/x-www-form-urlencoded"}if(Y.config.getCacheBusterParam&&e==="get"){R["org.htmx.cache-buster"]=Q(l,"id")||"true"}if(t==null||t===""){t=te().location.href}var O=dr(n,"hx-request");var W=ie(n).boosted;var q=Y.config.methodsThatUseUrlParams.indexOf(e)>=0;var H={boosted:W,useUrlParams:q,parameters:R,unfilteredParameters:z,headers:E,target:l,verb:e,errors:C,withCredentials:i.credentials||O.credentials||Y.config.withCredentials,timeout:i.timeout||O.timeout||Y.config.timeout,path:t,triggeringEvent:r};if(!fe(n,"htmx:configRequest",H)){ne(a);w();return s}t=H.path;e=H.verb;E=H.headers;R=H.parameters;C=H.errors;q=H.useUrlParams;if(C&&C.length>0){fe(n,"htmx:validation:halted",H);ne(a);w();return s}var $=t.split("#");var G=$[0];var L=$[1];var A=t;if(q){A=G;var J=Object.keys(R).length!==0;if(J){if(A.indexOf("?")<0){A+="?"}else{A+="&"}A+=ar(R);if(L){A+="#"+L}}}if(!Er(n,A,H)){ue(n,"htmx:invalidPath",H);ne(o);return s}b.open(e.toUpperCase(),A,true);b.overrideMimeType("text/html");b.withCredentials=H.withCredentials;b.timeout=H.timeout;if(O.noHeaders){}else{for(var N in E){if(E.hasOwnProperty(N)){var Z=E[N];yr(b,N,Z)}}}var I={xhr:b,target:l,requestConfig:H,etc:i,boosted:W,pathInfo:{requestPath:t,finalRequestPath:A,anchor:L}};b.onload=function(){try{var e=Sr(n);I.pathInfo.responsePath=br(b);D(n,I);Kt(P,k);fe(n,"htmx:afterRequest",I);fe(n,"htmx:afterOnLoad",I);if(!oe(n)){var t=null;while(e.length>0&&t==null){var r=e.shift();if(oe(r)){t=r}}if(t){fe(t,"htmx:afterRequest",I);fe(t,"htmx:afterOnLoad",I)}}ne(a);w()}catch(e){ue(n,"htmx:onLoadError",se({error:e},I));throw e}};b.onerror=function(){Kt(P,k);ue(n,"htmx:afterRequest",I);ue(n,"htmx:sendError",I);ne(o);w()};b.onabort=function(){Kt(P,k);ue(n,"htmx:afterRequest",I);ue(n,"htmx:sendAbort",I);ne(o);w()};b.ontimeout=function(){Kt(P,k);ue(n,"htmx:afterRequest",I);ue(n,"htmx:timeout",I);ne(o);w()};if(!fe(n,"htmx:beforeRequest",I)){ne(a);w();return s}var P=Jt(n);var k=Zt(n);ae(["loadstart","loadend","progress","abort"],function(t){ae([b,b.upload],function(e){e.addEventListener(t,function(e){fe(n,"htmx:xhr:"+t,{lengthComputable:e.lengthComputable,loaded:e.loaded,total:e.total})})})});fe(n,"htmx:beforeSend",I);var K=q?null:hr(b,n,R);b.send(K);return s}function Cr(e,t){var r=t.xhr;var n=null;var i=null;if(R(r,/HX-Push:/i)){n=r.getResponseHeader("HX-Push");i="push"}else if(R(r,/HX-Push-Url:/i)){n=r.getResponseHeader("HX-Push-Url");i="push"}else if(R(r,/HX-Replace-Url:/i)){n=r.getResponseHeader("HX-Replace-Url");i="replace"}if(n){if(n==="false"){return{}}else{return{type:i,path:n}}}var a=t.pathInfo.finalRequestPath;var o=t.pathInfo.responsePath;var s=re(e,"hx-push-url");var l=re(e,"hx-replace-url");var u=ie(e).boosted;var f=null;var c=null;if(s){f="push";c=s}else if(l){f="replace";c=l}else if(u){f="push";c=o||a}if(c){if(c==="false"){return{}}if(c==="true"){c=o||a}if(t.pathInfo.anchor&&c.indexOf("#")===-1){c=c+"#"+t.pathInfo.anchor}return{type:f,path:c}}else{return{}}}function Tr(l,u){var f=u.xhr;var c=u.target;var e=u.etc;var t=u.requestConfig;if(!fe(l,"htmx:beforeOnLoad",u))return;if(R(f,/HX-Trigger:/i)){Ue(f,"HX-Trigger",l)}if(R(f,/HX-Location:/i)){jt();var r=f.getResponseHeader("HX-Location");var h;if(r.indexOf("{")===0){h=S(r);r=h["path"];delete h["path"]}wr("GET",r,h).then(function(){_t(r)});return}var n=R(f,/HX-Refresh:/i)&&"true"===f.getResponseHeader("HX-Refresh");if(R(f,/HX-Redirect:/i)){location.href=f.getResponseHeader("HX-Redirect");n&&location.reload();return}if(n){location.reload();return}if(R(f,/HX-Retarget:/i)){u.target=te().querySelector(f.getResponseHeader("HX-Retarget"))}var v=Cr(l,u);var i=f.status>=200&&f.status<400&&f.status!==204;var d=f.response;var a=f.status>=400;var g=Y.config.ignoreTitle;var o=se({shouldSwap:i,serverResponse:d,isError:a,ignoreTitle:g},u);if(!fe(c,"htmx:beforeSwap",o))return;c=o.target;d=o.serverResponse;a=o.isError;g=o.ignoreTitle;u.target=c;u.failed=a;u.successful=!a;if(o.shouldSwap){if(f.status===286){Ke(l)}C(l,function(e){d=e.transformResponse(d,f,l)});if(v.type){jt()}var s=e.swapOverride;if(R(f,/HX-Reswap:/i)){s=f.getResponseHeader("HX-Reswap")}var h=fr(l,s);if(h.hasOwnProperty("ignoreTitle")){g=h.ignoreTitle}c.classList.add(Y.config.swappingClass);var m=null;var p=null;var x=function(){try{var e=document.activeElement;var t={};try{t={elt:e,start:e?e.selectionStart:null,end:e?e.selectionEnd:null}}catch(e){}var r;if(R(f,/HX-Reselect:/i)){r=f.getResponseHeader("HX-Reselect")}var n=T(c);Fe(h.swapStyle,c,l,d,n,r);if(t.elt&&!oe(t.elt)&&Q(t.elt,"id")){var i=document.getElementById(Q(t.elt,"id"));var a={preventScroll:h.focusScroll!==undefined?!h.focusScroll:!Y.config.defaultFocusScroll};if(i){if(t.start&&i.setSelectionRange){try{i.setSelectionRange(t.start,t.end)}catch(e){}}i.focus(a)}}c.classList.remove(Y.config.swappingClass);ae(n.elts,function(e){if(e.classList){e.classList.add(Y.config.settlingClass)}fe(e,"htmx:afterSwap",u)});if(R(f,/HX-Trigger-After-Swap:/i)){var o=l;if(!oe(l)){o=te().body}Ue(f,"HX-Trigger-After-Swap",o)}var s=function(){ae(n.tasks,function(e){e.call()});ae(n.elts,function(e){if(e.classList){e.classList.remove(Y.config.settlingClass)}fe(e,"htmx:afterSettle",u)});if(v.type){if(v.type==="push"){_t(v.path);fe(te().body,"htmx:pushedIntoHistory",{path:v.path})}else{zt(v.path);fe(te().body,"htmx:replacedInHistory",{path:v.path})}}if(u.pathInfo.anchor){var e=E("#"+u.pathInfo.anchor);if(e){e.scrollIntoView({block:"start",behavior:"auto"})}}if(n.title&&!g){var t=E("title");if(t){t.innerHTML=n.title}else{window.document.title=n.title}}vr(n.elts,h);if(R(f,/HX-Trigger-After-Settle:/i)){var r=l;if(!oe(l)){r=te().body}Ue(f,"HX-Trigger-After-Settle",r)}ne(m)};if(h.settleDelay>0){setTimeout(s,h.settleDelay)}else{s()}}catch(e){ue(l,"htmx:swapError",u);ne(p);throw e}};var y=Y.config.globalViewTransitions;if(h.hasOwnProperty("transition")){y=h.transition}if(y&&fe(l,"htmx:beforeTransition",u)&&typeof Promise!=="undefined"&&document.startViewTransition){var b=new Promise(function(e,t){m=e;p=t});var w=x;x=function(){document.startViewTransition(function(){w();return b})}}if(h.swapDelay>0){setTimeout(x,h.swapDelay)}else{x()}}if(a){ue(l,"htmx:responseError",se({error:"Response Status Error Code "+f.status+" from "+u.pathInfo.requestPath},u))}}var Rr={};function Or(){return{init:function(e){return null},onEvent:function(e,t){return true},transformResponse:function(e,t,r){return e},isInlineSwap:function(e){return false},handleSwap:function(e,t,r,n){return false},encodeParameters:function(e,t,r){return null}}}function qr(e,t){if(t.init){t.init(r)}Rr[e]=se(Or(),t)}function Hr(e){delete Rr[e]}function Lr(e,r,n){if(e==undefined){return r}if(r==undefined){r=[]}if(n==undefined){n=[]}var t=ee(e,"hx-ext");if(t){ae(t.split(","),function(e){e=e.replace(/ /g,"");if(e.slice(0,7)=="ignore:"){n.push(e.slice(7));return}if(n.indexOf(e)<0){var t=Rr[e];if(t&&r.indexOf(t)<0){r.push(t)}}})}return Lr(u(e),r,n)}var Ar=false;te().addEventListener("DOMContentLoaded",function(){Ar=true});function Nr(e){if(Ar||te().readyState==="complete"){e()}else{te().addEventListener("DOMContentLoaded",e)}}function Ir(){if(Y.config.includeIndicatorStyles!==false){te().head.insertAdjacentHTML("beforeend","")}}function Pr(){var e=te().querySelector('meta[name="htmx-config"]');if(e){return S(e.content)}else{return null}}function kr(){var e=Pr();if(e){Y.config=se(Y.config,e)}}Nr(function(){kr();Ir();var e=te().body;Pt(e);var t=te().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(e){var t=e.target;var r=ie(t);if(r&&r.xhr){r.xhr.abort()}});var r=window.onpopstate;window.onpopstate=function(e){if(e.state&&e.state.htmx){Gt();ae(t,function(e){fe(e,"htmx:restored",{document:te(),triggerEvent:fe})})}else{if(r){r(e)}}};setTimeout(function(){fe(e,"htmx:load",{});e=null},0)});return Y}()}); \ No newline at end of file diff --git a/apps/backend/public/views/backup-upload.html b/apps/backend/public/views/backup-upload.html new file mode 100644 index 0000000..40f8bfd --- /dev/null +++ b/apps/backend/public/views/backup-upload.html @@ -0,0 +1,59 @@ +{{define "backup-upload"}} + + + + + + Backup Upload + + + + +
+

Backup Upload

+
+
+ + + +
+
+
+ + + + +{{end}} \ No newline at end of file diff --git a/apps/backend/public/views/main.html b/apps/backend/public/views/main.html new file mode 100644 index 0000000..daa91be --- /dev/null +++ b/apps/backend/public/views/main.html @@ -0,0 +1,163 @@ +{{define "main"}} + + + + + + + Dashboard + + + + +
+

Dashboard Api:

+
+ +

Enviroment Variables:

+ +
+ +
Image Processing: {{.imageOption}}
+ +
+
Concurrent Images: {{.concurrentImages}}
+
+
+
+ + +
+ Health DB + +
+
+
+
+ Upload Bkp +

Carica il file di backup

+
+
+ Open Bkp +

Legge il file di backup

+
+
+ Parse Bkp +

Prende i dati dal file di backup e li eabora

+
+
+ Set Bkp in db +

Aggiorna i dati nel database con i dati provenienti dal backup

+
+
+
+
+ Fetch MioGest +

Riceve dati dal xml giornaliero

+
+
+ MioGest Sample +

Sample del file xml giornaliero

+
+
+ Parse Update +

Prende i dati da miogest e li eabora, scarica e converte le foto

+
+
+ Set Update in db +

Aggiorna i dati nel database con i dati provenienti da miogest

+
+
+ +
+
+ + + + + +{{end}} \ No newline at end of file diff --git a/apps/backend/server.go b/apps/backend/server.go new file mode 100644 index 0000000..68295e4 --- /dev/null +++ b/apps/backend/server.go @@ -0,0 +1,260 @@ +package main + +import ( + storagehandlers "backend/storage_handlers" + "fmt" + "io" + "log" + "math/rand" + "net/http" + "os" + "path/filepath" + "strconv" + "strings" + "text/template" + "time" + + "github.com/joho/godotenv" + "github.com/labstack/echo/v4" +) + +var ( + imgbasepath string + imageOption bool + concurrentImages int = 1 + storagepath string + Db *DbHandler + Miogest *MiogestHandler + ImageManager *ImageRefManager + Storage storagehandlers.StorageHandler + tempStorageLimit int = 5 +) + +func main() { + // SETUP WORK DIRECTORY + pwd, err := os.Getwd() + if err != nil { + fmt.Println(err) + os.Exit(1) + } + // join paths indipedently of the OS + imgbasepath = filepath.Join(pwd, "images") + fmt.Println("Image base path: ", imgbasepath) + storagepath = filepath.Join(pwd, "storage") + + // SETUP ENV VARIABLES + err = godotenv.Load(".env") + if err != nil { + fmt.Println("Error loading .env file") + } + if os.Getenv("IMAGEOPTION") != "" { + if os.Getenv("IMAGEOPTION") == "true" { + imageOption = true + + } else { + imageOption = false + } + } + if os.Getenv("CONCURRENT_IMAGES") != "" { + concurrentImages, err = strconv.Atoi(os.Getenv("CONCURRENT_IMAGES")) + if err != nil { + fmt.Println("Error parsing CONCURRENT_IMAGES:", err) + } + } + + // SETUP DATABASE HANDLER + Db = NewDbHandler() + if Db == nil { + log.Fatal("Error connecting to db") + } + defer Db.Dbpool.Close() + + // SETUP MIOGEST HANDLER + Miogest = NewMiogestHandler() + if Miogest == nil { + log.Fatal("Error connecting to miogest") + } + + // SETUP IMAGE MANAGER + ImageManager = NewImageRefManager() + if ImageManager == nil { + log.Fatal("Error creating image manager") + } + + // SETUP STORAGE HANDLER + storagehandlers.Storagepath = storagepath + var strategy storagehandlers.StorageStrategy = storagehandlers.FS + STORAGE_STRATEGY := os.Getenv("STORAGE_STRATEGY") + + if STORAGE_STRATEGY == "s3" || STORAGE_STRATEGY == "minio" { + MINIO_URL := os.Getenv("MINIO_URL") + MINIO_ROOT_USER := os.Getenv("MINIO_ROOT_USER") + MINIO_ROOT_PASSWORD := os.Getenv("MINIO_ROOT_PASSWORD") + + if MINIO_URL == "" || MINIO_ROOT_USER == "" || MINIO_ROOT_PASSWORD == "" { + fmt.Println("Error: MINIO_ROOT_USER, MINIO_ROOT_PASSWORD and MINIO_URL must be set") + strategy = storagehandlers.FS + } else { + strategy = storagehandlers.S3 + } + } + + h, err := storagehandlers.NewStorageHandler(strategy) + if err != nil { + log.Fatal("Error creating storage handler: " + err.Error()) + } + Storage = h + fmt.Printf("Storage Strategy: %s\n", strategy) + + // SETUP ECHO + e := SetupRoutes() + + // SETUP PORT + port := "1323" + if os.Getenv("ASPNETCORE_PORT") != "" { + port = os.Getenv("ASPNETCORE_PORT") + } + + fmt.Println("Image Option: ", imageOption) + fmt.Println("Concurrent Images: ", concurrentImages) + fmt.Println("Server url: http://localhost:" + port) + + Conversion("test.jpg") + + // START ECHO + e.Logger.Info(e.Start(":" + port)) +} + +type Template struct { + templates *template.Template +} + +func (t *Template) Render(w io.Writer, name string, data any, c echo.Context) error { + return t.templates.ExecuteTemplate(w, name, data) +} + +func SetupRoutes() *echo.Echo { + funcs := map[string]any{ + "contains": strings.Contains, + "hasPrefix": strings.HasPrefix, + "hasSuffix": strings.HasSuffix, + "getImage": func(txt string) string { + return txt[7:] + }, + "isWebp": func(txt string) bool { + return strings.Contains(txt, "webp") + }, + } + t := &Template{ + templates: template.Must(template.New("").Funcs(funcs).ParseGlob("public/views/*.html")), + } + e := echo.New() + e.Renderer = t + + // MISC + e.Static("/static", "public/static") + e.GET("/", func(c echo.Context) error { + return c.Render(http.StatusOK, "main", map[string]any{ + "imageOption": imageOption, + "concurrentImages": concurrentImages, + }) + }) + e.GET("/test", func(c echo.Context) error { + return c.String(http.StatusOK, "OK") + }) + e.POST("/testpost", func(c echo.Context) error { + // Get the form value + test := c.FormValue("test") + fmt.Println("test:", test) + return c.String(http.StatusOK, "OK") + }) + e.GET("/health", func(c echo.Context) error { + _, err := Db.Dbpool.Exec(Db.Ctx, "SELECT 1") + if err != nil { + panic(err) + } + return c.String(http.StatusOK, "success") + }) + + MiogestRoutes(e) + BkpRoutes(e) + StorageRoutes(e) + ImageRoutes(e) + + return e +} + +func BkpRoutes(e *echo.Echo) { + e.GET("/upload-backup", func(c echo.Context) error { + return c.Render(http.StatusOK, "backup-upload", nil) + }) + e.POST("/upload-backup", func(c echo.Context) error { + file, err := c.FormFile("file") + if err != nil { + return err + } + src, err := file.Open() + if err != nil { + return err + } + defer src.Close() + dst, err := os.Create("bkp.xml") + if err != nil { + return err + } + defer dst.Close() + if _, err = io.Copy(dst, src); err != nil { + return err + } + return c.HTML(http.StatusOK, fmt.Sprintf("

File %s uploaded successfully.

", file.Filename)) + }) + e.GET("/bkp", func(c echo.Context) error { + data := From_Backup() + return c.JSONPretty(http.StatusOK, data, " ") + }) + e.GET("/parsebkp", func(c echo.Context) error { + var data = ParseUpdateBkp() + return c.JSONPretty(http.StatusOK, data, " ") + }) + e.GET("/setbkp", func(c echo.Context) error { + var data = ParseUpdateBkp() + Db.SetFromBkp(data) + return c.String(http.StatusOK, "Setted") + }) +} + +func MiogestRoutes(e *echo.Echo) { + // MIOGEST DEFAULTS + e.GET("/cats", func(c echo.Context) error { + var data = Miogest.GetCaratteristiche() + return c.JSONPretty(http.StatusOK, data, " ") + }) + e.GET("/categ", func(c echo.Context) error { + var data = Miogest.GetCategorie() + return c.JSONPretty(http.StatusOK, data, " ") + }) + + // MIOGEST UPDATE + e.GET("/miogest", func(c echo.Context) error { + data := Miogest.GetAnnunci() + return c.JSONPretty(http.StatusOK, data, " ") + }) + e.GET("/miogest-sample", func(c echo.Context) error { + xml := Miogest.GetAnnunci() + rand := rand.Intn(len(xml.Annuncio)) + data := xml.Annuncio[rand] + return c.JSONPretty(http.StatusOK, data, " ") + }) + e.GET("/parse", func(c echo.Context) error { + start := time.Now() + var data = Miogest.GetAnnunciParsed() + end := time.Now() + fmt.Println("time taken:", end.Sub(start).String()) + return c.JSONPretty(http.StatusOK, data, " ") + }) + e.GET("/update", func(c echo.Context) error { + var data = Miogest.GetAnnunciParsed() + Db.InsertAnnunciInDB(data) + return c.String(http.StatusOK, "Updated") + }) +} diff --git a/apps/backend/storage.go b/apps/backend/storage.go new file mode 100644 index 0000000..a43f54b --- /dev/null +++ b/apps/backend/storage.go @@ -0,0 +1,263 @@ +package main + +import ( + "errors" + "fmt" + "log" + "mime/multipart" + "net/http" + "os" + "path/filepath" + "slices" + "time" + + "github.com/georgysavva/scany/v2/pgxscan" + "github.com/labstack/echo/v4" +) + +// Upload saves a file to the storage directory. +func Upload(file *multipart.FileHeader, from_admin bool) (string, error) { + log.Printf("Uploading file: %s", file.Filename) + log.Printf("DB instance: %v", Db.Dbpool) + var newId string + err := Db.Dbpool.QueryRow(Db.Ctx, "INSERT INTO public.storageindex(filename)VALUES (null) RETURNING id;").Scan(&newId) + if err != nil { + log.Fatal(err) + } + if newId == "" { + return "", errors.New("failed to create new id") + } + err = Storage.Add(file, newId) + if err != nil { + return "", err + } + //if !from_admin , expires in 60 days + var expiresAt *time.Time + if !from_admin { + exp := time.Now().AddDate(0, 2, 0) // 60 days + expiresAt = &exp + } else { + expiresAt = nil + } + + _, err = Db.Dbpool.Exec(Db.Ctx, "UPDATE public.storageindex set filename= $2, ext = $3, from_admin = $4, expires_at = $5 where id = $1", newId, file.Filename, filepath.Ext(file.Filename), from_admin, expiresAt) + if err != nil { + log.Fatal(err) + } + + _, err = Db.Dbpool.Exec(Db.Ctx, "DELETE FROM public.storageindex WHERE filename IS NULL") + if err != nil { + log.Fatal(err) + } + return newId, nil + +} + +func StorageAuth(c echo.Context) error { + token := c.Request().URL.Query().Get("token") + if len(token) < 1 { + return c.String(http.StatusUnauthorized, "Unauthorized") + } + var tk []string + err := pgxscan.Select(Db.Ctx, Db.Dbpool, &tk, "SELECT token FROM public.temp_tokens WHERE token = $1 and elapse > $2", token, time.Now()) + if err != nil { + return err + } + if tk == nil { + return errors.New("invalid token") + } + + _, err = Db.Dbpool.Exec(Db.Ctx, "DELETE FROM public.temp_tokens WHERE elapse < $1", time.Now()) + if err != nil { + return err + } + return nil +} + +func RemoveFromDb(ref string) error { + + _, err := Db.Dbpool.Exec(Db.Ctx, "DELETE FROM public.storageindex WHERE id = $1", ref) + if err != nil { + return err + } + return nil +} + +func RemoveExpired() error { + //get all expired files + var items_db []Storageindex + err := pgxscan.Select(Db.Ctx, Db.Dbpool, &items_db, "SELECT * FROM public.storageindex WHERE expires_at is not null and expires_at < NOW()") + if err != nil { + return fmt.Errorf("failed to get expired items: %w", err) + } + for _, item := range items_db { + formattedName := item.Id + item.Ext + err = Storage.Delete(formattedName) + if err != nil { + return fmt.Errorf("failed to delete file %s: %w", formattedName, err) + } + err = RemoveFromDb(item.Id) + if err != nil { + return fmt.Errorf("failed to remove item from db: %w", err) + } + + } + return nil +} + +func CheckConcruency() error { + + var items_db []struct { + Id string + Ext string + } + + err := pgxscan.Select(Db.Ctx, Db.Dbpool, &items_db, "SELECT id, ext FROM public.storageindex") + if err != nil { + return err + } + + files, err := Storage.List() + if err != nil { + return err + } + if len(items_db) != len(files) { + var founds []string + for _, item := range items_db { + formattedName := item.Id + item.Ext + found := slices.Contains(files, formattedName) + if found { + founds = append(founds, formattedName) + } else { + + _, err := Db.Dbpool.Exec(Db.Ctx, "DELETE FROM public.storageindex WHERE id = $1", item.Id) + if err != nil { + return err + } + } + + } + for _, file := range files { + found := slices.Contains(founds, file) + if !found { + fmt.Printf("File %v not found in db\n", file) + //TODO decidere se eliminarlo + + } + } + } + + return nil +} + +func TempFolderCleaner() error { + files, err := os.ReadDir(filepath.Join(storagepath, "/tmp/")) + if err != nil { + return err + } + fmt.Println("Temp files: ", len(files)) + if len(files) >= tempStorageLimit { + + var oldest_Time time.Time + var oldest_File string + for _, file := range files { + file_infos, err := file.Info() + if err != nil { + return err + } + if oldest_Time.IsZero() || file_infos.ModTime().Before(oldest_Time) { + oldest_Time = file_infos.ModTime() + oldest_File = file.Name() + } + } + err = os.Remove(filepath.Join(storagepath, "/tmp/", oldest_File)) + if err != nil { + return err + } + + } + return nil + +} + +// ROUTES +func StorageRoutes(e *echo.Echo) { + + e.GET("/storage/list", func(c echo.Context) error { + filenames, err := Storage.List() + if err != nil { + return c.String(http.StatusInternalServerError, err.Error()) + } + return c.JSON(http.StatusOK, filenames) + }) + + e.GET("/storage/get/:filename", func(c echo.Context) error { + err := TempFolderCleaner() + if err != nil { + return c.String(http.StatusInternalServerError, "Failed to clean temp folder: "+err.Error()) + } + err = StorageAuth(c) + if err != nil { + return c.JSON(http.StatusUnauthorized, "Unauthorized: "+err.Error()) + } + + filename := c.Param("filename") + path, err := Storage.Get(filename) + if err != nil { + return c.String(http.StatusInternalServerError, "Failed to get file: "+err.Error()) + } + + return c.File(path) + }) + e.POST("/storage/upload", func(c echo.Context) error { + fmt.Println("Uploading file") + + err := StorageAuth(c) + if err != nil { + return c.String(http.StatusInternalServerError, "Failed to verify Auth: "+err.Error()) + } + + from_admin := c.QueryParam("from_admin") == "true" + file, err := c.FormFile("file") + if err != nil { + return err + } + + fileId, err := Upload(file, from_admin) + if err != nil { + return c.String(http.StatusInternalServerError, "Failed to upload file: "+err.Error()) + } + + return c.String(http.StatusOK, fileId) + }) + e.DELETE("/storage/delete/:filename", func(c echo.Context) error { + err := StorageAuth(c) + if err != nil { + return c.String(http.StatusInternalServerError, "Failed to verify Auth: "+err.Error()) + } + filename := c.Param("filename") + + err = Storage.Delete(filename) + if err != nil { + return c.String(http.StatusInternalServerError, "Failed to remove file / file not found: "+err.Error()) + } + return c.String(http.StatusOK, "File removed") + + }) + e.GET("/storage/remove-expired", func(c echo.Context) error { + + err := RemoveExpired() + if err != nil { + return c.String(http.StatusInternalServerError, "Failed to remove files / files not found: "+err.Error()) + } + return c.String(http.StatusOK, "File removed") + + }) + e.GET("/storage/test", func(c echo.Context) error { + err := CheckConcruency() + if err != nil { + return c.String(http.StatusInternalServerError, "Failed to check concruency: "+err.Error()) + } + return c.String(http.StatusOK, "OK") + }) +} diff --git a/apps/backend/storage_handlers/fs.go b/apps/backend/storage_handlers/fs.go new file mode 100644 index 0000000..046e8eb --- /dev/null +++ b/apps/backend/storage_handlers/fs.go @@ -0,0 +1,74 @@ +package storagehandlers + +import ( + "io" + "log" + "mime/multipart" + "os" + "path/filepath" +) + +type Fs_Handler struct { +} + +func NewFsHandler() *Fs_Handler { + return &Fs_Handler{} +} +func (f *Fs_Handler) Init() error { + if _, err := os.Stat(Storagepath); os.IsNotExist(err) { + return err + } + return nil +} + +func (f *Fs_Handler) Add(file *multipart.FileHeader, fileId string) error { + src, err := file.Open() + if err != nil { + log.Printf("Error opening file: %v\n", err) + return err + } + defer src.Close() + + extension := filepath.Ext(file.Filename) + destPath := filepath.Join(Storagepath, fileId+extension) + dst, err := os.Create(destPath) + if err != nil { + log.Println("Error creating file") + return err + } + defer dst.Close() + if _, err = io.Copy(dst, src); err != nil { + log.Println("Error copying file") + return err + } + return nil +} + +func (f *Fs_Handler) Delete(filename string) error { + filePath := filepath.Join(Storagepath, filename) + if _, err := os.Stat(filePath); os.IsNotExist(err) { + return err + } + return os.Remove(filePath) +} + +func (f *Fs_Handler) Get(filename string) (string, error) { + path := filepath.Join(Storagepath, filename) + + if _, err := os.Stat(path); os.IsNotExist(err) { + return "", err + } + return path, nil +} + +func (f *Fs_Handler) List() ([]string, error) { + files, err := os.ReadDir(Storagepath) + if err != nil { + return nil, err + } + var filenames []string + for _, file := range files { + filenames = append(filenames, file.Name()) + } + return filenames, nil +} diff --git a/apps/backend/storage_handlers/minio.go b/apps/backend/storage_handlers/minio.go new file mode 100644 index 0000000..a1e14b7 --- /dev/null +++ b/apps/backend/storage_handlers/minio.go @@ -0,0 +1,137 @@ +package storagehandlers + +import ( + "context" + "fmt" + "log" + "mime/multipart" + "os" + "path/filepath" + + "github.com/minio/minio-go/v7" + "github.com/minio/minio-go/v7/pkg/credentials" +) + +var ( + useSSL = false + bucketName = "storage" +) + +type S3_Handler struct { + minioClient *minio.Client +} + +func (s *S3_Handler) Init() error { + found, err := s.minioClient.BucketExists(context.Background(), bucketName) + if err != nil { + + log.Println(err) + return err + } + if !found { + err = s.minioClient.MakeBucket(context.Background(), bucketName, minio.MakeBucketOptions{}) + if err != nil { + log.Println(err) + return err + } + log.Println("Bucket created successfully") + } + log.Println("Bucket found") + return nil + +} + +func NewS3Handler() (*S3_Handler, error) { + MINIO_URL := os.Getenv("MINIO_URL") + MINIO_ROOT_USER := os.Getenv("MINIO_ROOT_USER") + MINIO_ROOT_PASSWORD := os.Getenv("MINIO_ROOT_PASSWORD") + + minioClient, err := minio.New(MINIO_URL, &minio.Options{ + Creds: credentials.NewStaticV4(MINIO_ROOT_USER, MINIO_ROOT_PASSWORD, ""), + Secure: useSSL, + }) + if err != nil { + log.Fatalln(err) + } + return &S3_Handler{ + minioClient, + }, nil +} + +func (s *S3_Handler) Add(file *multipart.FileHeader, fileId string) error { + ctx := context.Background() + src, err := file.Open() + if err != nil { + log.Printf("Error opening file: %v\n", err) + return err + } + defer src.Close() + + extension := filepath.Ext(file.Filename) + objectName := fileId + extension + + info, err := s.minioClient.PutObject(ctx, bucketName, objectName, src, file.Size, minio.PutObjectOptions{ContentType: "application/octet-stream"}) + if err != nil { + log.Fatalln(err) + return err + } + log.Printf("Successfully uploaded %s of size %d\n", objectName, info.Size) + return nil +} + +func (s *S3_Handler) Delete(filename string) error { + opts := minio.RemoveObjectOptions{ + GovernanceBypass: true, + } + err := s.minioClient.RemoveObject(context.Background(), bucketName, filename, opts) + if err != nil { + log.Fatalln(err) + return err + } + return nil +} + +// func (s *S3_Handler) DeleteM(filename string) error { +// opts := minio.RemoveObjectOptions{ +// GovernanceBypass: true, +// } +// err := s.minioClient.RemoveObjects(context.Background(), bucketName, filename, opts) +// if err != nil { +// log.Fatalln(err) +// return err +// } +// return nil +// } + +func (s *S3_Handler) Get(filename string) (string, error) { + localPath := filepath.Join(Storagepath, "/tmp/", filename) + + err := s.minioClient.FGetObject(context.Background(), bucketName, filename, localPath, minio.GetObjectOptions{}) + if err != nil { + fmt.Println(err) + return "", fmt.Errorf("error downloading file %s: %w", filename, err) + } + log.Printf("Successfully downloaded %s\n", filename) + return localPath, nil + +} + +func (s *S3_Handler) List() ([]string, error) { + ctx, cancel := context.WithCancel(context.Background()) + + defer cancel() + + objectCh := s.minioClient.ListObjects(ctx, bucketName, minio.ListObjectsOptions{ + Prefix: "", + Recursive: true, + }) + var list []string + for object := range objectCh { + if object.Err != nil { + log.Println(object.Err) + return nil, object.Err + } + list = append(list, object.Key) + } + return list, nil +} diff --git a/apps/backend/storage_handlers/storage_handler.go b/apps/backend/storage_handlers/storage_handler.go new file mode 100644 index 0000000..8b436b6 --- /dev/null +++ b/apps/backend/storage_handlers/storage_handler.go @@ -0,0 +1,53 @@ +package storagehandlers + +import ( + "errors" + "mime/multipart" +) + +var ( + Storagepath string +) + +type StorageHandler interface { + Init() error + Add(file *multipart.FileHeader, fileId string) error + Delete(filename string) error + Get(filename string) (string, error) + List() ([]string, error) +} + +type StorageStrategy string + +const ( + FS StorageStrategy = "fs" + S3 StorageStrategy = "s3" +) + +func NewStorageHandler(strategy StorageStrategy) (StorageHandler, error) { + if Storagepath == "" { + return nil, errors.New("storage path not set") + } + switch strategy { + case FS: + h := NewFsHandler() + err := h.Init() + if err != nil { + return nil, err + } + return h, nil + + case S3: + h, err := NewS3Handler() + if err != nil { + return nil, err + } + err = h.Init() + if err != nil { + return nil, err + } + return h, nil + default: + return nil, errors.New("invalid storage strategy") + } +} diff --git a/apps/backend/test.jpg b/apps/backend/test.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecb31e88083e7941a7e02743feb5cbb95173a129 GIT binary patch literal 77454 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 0 { + return strings.ToUpper(string(s[0])) + s[1:] + } + return "" +} + +func CheckStringIfPresent(value *string) string { + if value != nil { + return strings.TrimSpace(*value) + } + return "" +} + +func CheckStringIfPresentBool(value string) bool { + if value != "" { + return true + } else { + return false + } +} + +func fetchXML(url string) ([]byte, error) { + resp, err := http.Get(url) + if err != nil { + return []byte{}, fmt.Errorf("GET error: %v", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return []byte{}, fmt.Errorf("status error: %v", resp.StatusCode) + } + + data, err := io.ReadAll(resp.Body) + if err != nil { + return []byte{}, fmt.Errorf("read body: %v", err) + } + + return data, nil +} + +func GetDataXML[T any](url string) T { + xmlBytes, err := fetchXML(url) + if err != nil { + log.Fatalf("Failed to get XML: %v", err) + panic(err) + } + var result T + err = xml.Unmarshal(xmlBytes, &result) + if err != nil { + log.Fatalf("Failed to unmarshal XML: %v", err) + panic(err) + } + return result +} + +func GetPathsArray(path string) ([]string, error) { + var paths []string + + err := filepath.Walk(path, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.IsDir() { + paths = append(paths, path) + } + return nil + }) + + if err != nil { + return nil, err + } + + return paths, nil +} + +func GetPathDirsArray(path string) []string { + var folderNames []string + files, err := os.ReadDir(path) + if err != nil { + log.Fatal(err) + } + + for _, file := range files { + if file.IsDir() { + folderNames = append(folderNames, file.Name()) + } + } + return folderNames +} + +func GetStringValue(strPtr *string) string { + if strPtr != nil { + return *strPtr + } + return "" +} +func RemoveWhitespace(str string) string { + return strings.ReplaceAll(str, " ", "") +} + +func CommaToDot(str *string) *string { + if str != nil { + result := strings.ReplaceAll(*str, ",", ".") + return &result + } + return nil +} diff --git a/apps/db/Dockerfile b/apps/db/Dockerfile new file mode 100644 index 0000000..b784213 --- /dev/null +++ b/apps/db/Dockerfile @@ -0,0 +1,19 @@ +# Start a new stage for PostgreSQL +FROM postgres:16 AS postgres + +# Set environment variables for PostgreSQL + +ARG POSTGRES_USER +ARG POSTGRES_PASSWORD +ARG POSTGRES_DB + +ENV POSTGRES_USER=$POSTGRES_USER +ENV POSTGRES_PASSWORD=$POSTGRES_PASSWORD +ENV POSTGRES_DB=$POSTGRES_DB + +# Copy the schema.sql file to the docker-entrypoint-initdb.d directory +COPY ./initial/*.sql /docker-entrypoint-initdb.d/ + +# Expose the PostgreSQL port +EXPOSE 5432 +CMD ["-p", "5432"] \ No newline at end of file diff --git a/apps/db/docker-compose.yml b/apps/db/docker-compose.yml new file mode 100644 index 0000000..5ef2aab --- /dev/null +++ b/apps/db/docker-compose.yml @@ -0,0 +1,34 @@ + +services: + db: + build: + context: . + dockerfile: Dockerfile + args: + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + environment: + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + restart: always + networks: + - dokploy-network + expose: + - "5432" + volumes: + - dbdata:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"] + interval: 1s + timeout: 5s + retries: 10 + + +networks: + dokploy-network: + external: true + +volumes: + dbdata: \ No newline at end of file diff --git a/apps/db/filter_sql.awk b/apps/db/filter_sql.awk new file mode 100644 index 0000000..4dbe9af --- /dev/null +++ b/apps/db/filter_sql.awk @@ -0,0 +1,72 @@ +# filter_sql.awk + +BEGIN { + in_sql_block = 0; + sql_command = ""; + sql_start_pattern = "ISTRUZIONE:|LOG: *istruzione:"; + target_commands_regex = "(CREATE TABLE|ALTER TABLE|DROP TABLE)"; + + # If git_cutoff_date_str is empty (no Git repo or commit), set a dummy value to avoid error + # and set perform_cutoff to false. Otherwise, it's true. + perform_cutoff = (git_cutoff_date_str != ""); + if (!perform_cutoff) { + git_cutoff_date_str = ""; # Ensure it's empty if not performing cutoff + } + + current_log_timestamp_full = ""; # Initialize for each log file +} + +# --- NEW AWK LOGIC FOR CUTOFF --- +# Rule 1: Always check for a new log entry header and extract its timestamp. +# This must be the first pattern rule in awk. +$0 ~ new_log_regex { + # Always update the timestamp if it's a new log line + current_log_timestamp_full = substr($0, 1, 23); # YYYY-MM-DD HH:MM:SS.ms (23 chars) + + # Rule 1a: If a cutoff is active AND the current log entry is OLDER than the cutoff date. + # String comparison works for YYYY-MM-DD HH:MM:SS.ms format. + if (perform_cutoff && current_log_timestamp_full < git_cutoff_date_str) { + # If the current log entry is too old, discard any partially accumulated SQL command + # that might have started before this old log line was encountered. + in_sql_block = 0; + sql_command = ""; + next; # Skip to the next line immediately. + } + + # Rule 1b: If we were previously in an SQL block and this is a new, valid (not-cut-off) log entry, + # then the previous command is complete and should be processed. + if (in_sql_block) { + gsub(/^[ \t\n]+|[ \t\n]+$/, "", sql_command); + if (tolower(sql_command) ~ tolower(target_commands_regex)) { + print sql_command "\n"; + } + sql_command = ""; # Reset for the next command + in_sql_block = 0; # Reset the flag + } +} + +# Rule 2: If the line starts an SQL statement (and it passed the cutoff check or no cutoff is applied). +# This rule will only run for lines that were *not* skipped by Rule 1a. +$0 ~ sql_start_pattern { + line_content = $0; + sub(/.*(ISTRUZIONE:|LOG: *istruzione:)[ \t]*/, "", line_content); + sql_command = line_content; + in_sql_block = 1; + next; # Skip to the next line. +} + +# Rule 3: If we are in an SQL block (meaning it's a continuation line for an SQL command). +# This rule will only run for lines that were *not* skipped by Rule 1a or handled by Rule 2. +in_sql_block { + sql_command = sql_command "\n" $0; +} + +END { + # This block processes the very last command in the file if it was still accumulating + if (in_sql_block) { + gsub(/^[ \t\n]+|[ \t\n]+$/, "", sql_command); + if (tolower(sql_command) ~ tolower(target_commands_regex)) { + print sql_command "\n"; + } + } +} \ No newline at end of file diff --git a/apps/db/initial/1_init.sql b/apps/db/initial/1_init.sql new file mode 100644 index 0000000..9234d0d --- /dev/null +++ b/apps/db/initial/1_init.sql @@ -0,0 +1,1135 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 16.0 +-- Dumped by pg_dump version 16.0 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: adminpack; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS adminpack WITH SCHEMA pg_catalog; + + +-- +-- Name: EXTENSION adminpack; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION adminpack IS 'administrative functions for PostgreSQL'; + + +-- +-- Name: BanType; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public."BanType" AS ENUM ( + 'ip', + 'email', + 'phone', + 'cf' +); + + +ALTER TYPE public."BanType" OWNER TO postgres; + +-- +-- Name: GenericStatusEnum; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public."GenericStatusEnum" AS ENUM ( + 'pending', + 'success', + 'failed' +); + + +ALTER TYPE public."GenericStatusEnum" OWNER TO postgres; + +-- +-- Name: OrderTypeEnum; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public."OrderTypeEnum" AS ENUM ( + 'Acconto', + 'Saldo', + 'Consulenza', + 'Altro' +); + + +ALTER TYPE public."OrderTypeEnum" OWNER TO postgres; + +-- +-- Name: PaymentStatusEnum; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public."PaymentStatusEnum" AS ENUM ( + 'processing', + 'success', + 'failed' +); + + +ALTER TYPE public."PaymentStatusEnum" OWNER TO postgres; + +-- +-- Name: TipologiaPosizioneEnum; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public."TipologiaPosizioneEnum" AS ENUM ( + 'Transitorio', + 'Stabile' +); + + +ALTER TYPE public."TipologiaPosizioneEnum" OWNER TO postgres; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- Name: annunci; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.annunci ( + id integer NOT NULL, + codice text NOT NULL, + locatore text, + numero text, + idlocatore text, + indirizzo text, + civico text, + comune text, + cap text, + provincia text, + regione text, + lat text, + lon text, + indirizzo_secondario text, + civico_secondario text, + lat_secondario text, + lon_secondario text, + tipo text, + categorie text[], + prezzo integer DEFAULT 0 NOT NULL, + anno text, + classe text, + mq numeric, + piano text, + piano_palazzo integer, + unita_condominio integer, + numero_vani integer, + numero_camere integer, + numero_bagni integer, + numero_balconi integer, + numero_terrazzi integer, + numero_box integer, + numero_postiauto integer, + accessori text[], + titolo_it text, + desc_it text, + titolo_en text, + desc_en text, + stato text, + web boolean, + caratteristiche json, + url_immagini text[], + homepage boolean, + url_video text[], + email text, + creato_il timestamp without time zone, + modificato_il timestamp without time zone, + consegna integer +); + + +ALTER TABLE public.annunci OWNER TO postgres; + +-- +-- Name: COLUMN annunci.caratteristiche; Type: COMMENT; Schema: public; Owner: postgres +-- + +COMMENT ON COLUMN public.annunci.caratteristiche IS '@type(Caratteristiche, ''src/utils/kanel-types.ts'', false, false, true)'; + + +-- +-- Name: annunci_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.annunci_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.annunci_id_seq OWNER TO postgres; + +-- +-- Name: annunci_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.annunci_id_seq OWNED BY public.annunci.id; + + +-- +-- Name: banlist; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.banlist ( + id integer NOT NULL, + value text NOT NULL, + type public."BanType" NOT NULL +); + + +ALTER TABLE public.banlist OWNER TO postgres; + +-- +-- Name: banlist_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.banlist_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.banlist_id_seq OWNER TO postgres; + +-- +-- Name: banlist_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.banlist_id_seq OWNED BY public.banlist.id; + + +-- +-- Name: banners; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.banners ( + idbanner text NOT NULL, + titolo text, + testo text, + is_unskippable boolean NOT NULL, + has_cta boolean NOT NULL, + cta_href text, + cta_icon text, + cta_text text, + color text, + is_active boolean NOT NULL, + show_public boolean NOT NULL, + show_private boolean NOT NULL, + hide_duration integer +); + + +ALTER TABLE public.banners OWNER TO postgres; + +-- +-- Name: chats; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.chats ( + chatid uuid DEFAULT gen_random_uuid() NOT NULL, + created_at timestamp without time zone NOT NULL, + user_ref uuid NOT NULL, + tags text[] +); + + +ALTER TABLE public.chats OWNER TO postgres; + +-- +-- Name: chats_etichette; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.chats_etichette ( + chatid uuid NOT NULL, + etichettaid integer NOT NULL +); + + +ALTER TABLE public.chats_etichette OWNER TO postgres; + +-- +-- Name: emails; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.emails ( + id_email integer NOT NULL, + user_id uuid NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL, + data json NOT NULL +); + + +ALTER TABLE public.emails OWNER TO postgres; + +-- +-- Name: emails_id_email_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.emails_id_email_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.emails_id_email_seq OWNER TO postgres; + +-- +-- Name: emails_id_email_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.emails_id_email_seq OWNED BY public.emails.id_email; + + +-- +-- Name: etichette; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.etichette ( + id_etichetta integer NOT NULL, + title text NOT NULL, + color_hex character varying(7) NOT NULL +); + + +ALTER TABLE public.etichette OWNER TO postgres; + +-- +-- Name: etichette_id_etichetta_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.etichette_id_etichetta_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.etichette_id_etichetta_seq OWNER TO postgres; + +-- +-- Name: etichette_id_etichetta_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.etichette_id_etichetta_seq OWNED BY public.etichette.id_etichetta; + + +-- +-- Name: event_queue; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.event_queue ( + event_id integer NOT NULL, + lock_expires timestamp with time zone NOT NULL, + data jsonb, + status text DEFAULT 'pending'::text NOT NULL +); + + +ALTER TABLE public.event_queue OWNER TO postgres; + +-- +-- Name: event_queue_event_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.event_queue_event_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.event_queue_event_id_seq OWNER TO postgres; + +-- +-- Name: event_queue_event_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.event_queue_event_id_seq OWNED BY public.event_queue.event_id; + + +-- +-- Name: flags; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.flags ( + id text NOT NULL, + value text NOT NULL +); + + +ALTER TABLE public.flags OWNER TO postgres; + +-- +-- Name: interests; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.interests ( + "annuncioId" integer NOT NULL, + "userId" uuid NOT NULL +); + + +ALTER TABLE public.interests OWNER TO postgres; + +-- +-- Name: messages; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.messages ( + messageid uuid DEFAULT gen_random_uuid() NOT NULL, + chatid uuid NOT NULL, + message text, + "time" timestamp without time zone NOT NULL, + isread boolean DEFAULT false NOT NULL, + sender uuid NOT NULL +); + + +ALTER TABLE public.messages OWNER TO postgres; + +-- +-- Name: miogest_images_ref; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.miogest_images_ref ( + codice text NOT NULL, + foto text[] +); + + +ALTER TABLE public.miogest_images_ref OWNER TO postgres; + +-- +-- Name: ordini; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.ordini ( + ordine_id uuid DEFAULT gen_random_uuid() NOT NULL, + userid uuid NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL, + packid text NOT NULL, + servizio_id uuid NOT NULL, + type public."OrderTypeEnum" NOT NULL, + "isActive" boolean DEFAULT false NOT NULL +); + + +ALTER TABLE public.ordini OWNER TO postgres; + +-- +-- Name: payments; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.payments ( + id uuid DEFAULT gen_random_uuid() NOT NULL, + userid uuid NOT NULL, + amount_cent integer NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL, + paymentmethod text, + paymentname text NOT NULL, + paid_at timestamp without time zone, + intent_id text, + paymentstatus public."PaymentStatusEnum", + servizio_id uuid NOT NULL, + ordine_id uuid NOT NULL +); + + +ALTER TABLE public.payments OWNER TO postgres; + +-- +-- Name: prezziario; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.prezziario ( + idprezziario text NOT NULL, + prezzo_cent integer NOT NULL, + testo_condizioni text, + "isActive" boolean DEFAULT true NOT NULL, + nome_it text NOT NULL, + nome_en text NOT NULL, + desc_it text NOT NULL, + desc_en text NOT NULL, + sconto integer DEFAULT 0 NOT NULL, + "isAcconto" boolean DEFAULT false NOT NULL, + "isSaldo" boolean DEFAULT false NOT NULL, + "isConsulenza" boolean DEFAULT false NOT NULL, + "isStabile" boolean DEFAULT false NOT NULL, + "isTransitorio" boolean DEFAULT false NOT NULL +); + + +ALTER TABLE public.prezziario OWNER TO postgres; + +-- +-- Name: ratelimiter; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.ratelimiter ( + key text NOT NULL, + request_timestamp timestamp without time zone NOT NULL, + request_count integer NOT NULL +); + + +ALTER TABLE public.ratelimiter OWNER TO postgres; + +-- +-- Name: servizio; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.servizio ( + user_id uuid NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL, + tipologia public."TipologiaPosizioneEnum" NOT NULL, + arredato boolean DEFAULT false NOT NULL, + budget integer NOT NULL, + n_adulti integer NOT NULL, + n_minori integer NOT NULL, + animali boolean DEFAULT false NOT NULL, + fumatori boolean DEFAULT false NOT NULL, + giardino boolean DEFAULT false NOT NULL, + parcheggio boolean DEFAULT false NOT NULL, + terrazzo boolean DEFAULT false NOT NULL, + ascensore boolean DEFAULT false NOT NULL, + pianoterra boolean DEFAULT false NOT NULL, + motivazione_transitorio text, + reddito text, + "isSent" boolean DEFAULT false NOT NULL, + servizio_id uuid DEFAULT gen_random_uuid() NOT NULL, + decorrenza timestamp without time zone, + "isInterrotto" boolean DEFAULT false NOT NULL, + entromese integer, + permanenza integer, + "isOkAcconto" boolean DEFAULT false NOT NULL, + "isOkSaldo" boolean DEFAULT false NOT NULL, + "isOkConsulenza" boolean DEFAULT false NOT NULL +); + + +ALTER TABLE public.servizio OWNER TO postgres; + +-- +-- Name: servizio_annunci; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.servizio_annunci ( + servizio_id uuid NOT NULL, + annunci_id integer NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL, + open_contatti_at timestamp without time zone, + doc_conferma_ref uuid, + user_confirmed_at timestamp without time zone, + accettato_conferma_at timestamp without time zone, + caparra_causale text, + caparra_iban text, + caparra_importo text, + caparra_intestazione text, + "hasConfermaAdmin" boolean DEFAULT false NOT NULL, + doc_contratto_ref uuid, + gestionale_id integer, + contratto_decorrenza date, + contratto_scadenza date, + contratto_tipo text, + doc_registrazione_ref uuid, + doc_conferma_added boolean DEFAULT false NOT NULL, + doc_contratto_added boolean DEFAULT false NOT NULL, + doc_registrazione_added boolean DEFAULT false NOT NULL +); + + +ALTER TABLE public.servizio_annunci OWNER TO postgres; + +-- +-- Name: storageindex; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.storageindex ( + id uuid DEFAULT gen_random_uuid() NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL, + filename text, + ext text, + from_admin boolean DEFAULT false NOT NULL, + expires_at timestamp without time zone +); + + +ALTER TABLE public.storageindex OWNER TO postgres; + +-- +-- Name: temp_tokens; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.temp_tokens ( + token uuid DEFAULT gen_random_uuid() NOT NULL, + elapse timestamp without time zone DEFAULT (now() + '00:00:30'::interval) NOT NULL +); + + +ALTER TABLE public.temp_tokens OWNER TO postgres; + +-- +-- Name: testi_e_stringhe; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.testi_e_stringhe ( + stinga_id text NOT NULL, + stringa_value text +); + + +ALTER TABLE public.testi_e_stringhe OWNER TO postgres; + +-- +-- Name: users; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.users ( + id uuid DEFAULT gen_random_uuid() NOT NULL, + username text NOT NULL, + email text NOT NULL, + "isAdmin" boolean DEFAULT false NOT NULL, + "isBlocked" boolean DEFAULT false NOT NULL, + password text NOT NULL, + nome text NOT NULL, + cognome text NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL, + reset_password_token text, + reset_password_expires timestamp without time zone, + telefono text NOT NULL, + "isAdminMade" boolean DEFAULT false, + "isVerified" boolean DEFAULT false NOT NULL, + "verificationToken" text, + "verificationTokenExpires" timestamp without time zone, + salt text NOT NULL +); + + +ALTER TABLE public.users OWNER TO postgres; + +-- +-- Name: users_anagrafica; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.users_anagrafica ( + idanagrafica uuid DEFAULT gen_random_uuid() NOT NULL, + userid uuid NOT NULL, + luogo_nascita text, + data_nascita timestamp without time zone, + nazione_nascita text, + codice_fiscale text, + via_residenza text, + civico_residenza text, + comune_residenza text, + provincia_residenza text, + cap_residenza text, + nazione_residenza text, + sesso text, + azienda boolean DEFAULT false NOT NULL, + ragione_sociale text, + sede_legale text, + p_iva text, + fatturazione_aziendale boolean DEFAULT false NOT NULL, + codice_destinatario text, + legale_rappresentante text +); + + +ALTER TABLE public.users_anagrafica OWNER TO postgres; + +-- +-- Name: users_storage; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.users_storage ( + userid uuid NOT NULL, + storageid uuid NOT NULL +); + + +ALTER TABLE public.users_storage OWNER TO postgres; + +-- +-- Name: annunci id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.annunci ALTER COLUMN id SET DEFAULT nextval('public.annunci_id_seq'::regclass); + + +-- +-- Name: banlist id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.banlist ALTER COLUMN id SET DEFAULT nextval('public.banlist_id_seq'::regclass); + + +-- +-- Name: emails id_email; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.emails ALTER COLUMN id_email SET DEFAULT nextval('public.emails_id_email_seq'::regclass); + + +-- +-- Name: etichette id_etichetta; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.etichette ALTER COLUMN id_etichetta SET DEFAULT nextval('public.etichette_id_etichetta_seq'::regclass); + + +-- +-- Name: event_queue event_id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.event_queue ALTER COLUMN event_id SET DEFAULT nextval('public.event_queue_event_id_seq'::regclass); + + +-- +-- Name: annunci annunci_codice_key; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.annunci + ADD CONSTRAINT annunci_codice_key UNIQUE (codice); + + +-- +-- Name: annunci annunci_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.annunci + ADD CONSTRAINT annunci_pkey PRIMARY KEY (id); + + +-- +-- Name: banlist banlist_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.banlist + ADD CONSTRAINT banlist_pkey PRIMARY KEY (id); + + +-- +-- Name: banners banners_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.banners + ADD CONSTRAINT banners_pkey PRIMARY KEY (idbanner); + + +-- +-- Name: chats_etichette chats_etichette_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.chats_etichette + ADD CONSTRAINT chats_etichette_pkey PRIMARY KEY (chatid, etichettaid); + + +-- +-- Name: chats chats_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.chats + ADD CONSTRAINT chats_pkey PRIMARY KEY (chatid); + + +-- +-- Name: emails emails_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.emails + ADD CONSTRAINT emails_pkey PRIMARY KEY (id_email); + + +-- +-- Name: etichette etichette_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.etichette + ADD CONSTRAINT etichette_pkey PRIMARY KEY (id_etichetta); + + +-- +-- Name: event_queue event_queue_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.event_queue + ADD CONSTRAINT event_queue_pkey PRIMARY KEY (event_id); + + +-- +-- Name: messages messages_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.messages + ADD CONSTRAINT messages_pkey PRIMARY KEY (messageid); + + +-- +-- Name: miogest_images_ref miogest_images_ref_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.miogest_images_ref + ADD CONSTRAINT miogest_images_ref_pkey PRIMARY KEY (codice); + + +-- +-- Name: ordini ordini2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.ordini + ADD CONSTRAINT ordini2_pkey PRIMARY KEY (ordine_id); + + +-- +-- Name: payments payments2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.payments + ADD CONSTRAINT payments2_pkey PRIMARY KEY (id); + + +-- +-- Name: prezziario prezziario2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.prezziario + ADD CONSTRAINT prezziario2_pkey PRIMARY KEY (idprezziario); + + +-- +-- Name: servizio servizio_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.servizio + ADD CONSTRAINT servizio_pkey PRIMARY KEY (servizio_id); + + +-- +-- Name: flags sitesettings_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.flags + ADD CONSTRAINT sitesettings_pkey PRIMARY KEY (id); + + +-- +-- Name: users_storage sotrageuser; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.users_storage + ADD CONSTRAINT sotrageuser UNIQUE (userid, storageid); + + +-- +-- Name: storageindex storageindex_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.storageindex + ADD CONSTRAINT storageindex_pkey PRIMARY KEY (id); + + +-- +-- Name: temp_tokens temp_tokens_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.temp_tokens + ADD CONSTRAINT temp_tokens_pkey PRIMARY KEY (token); + + +-- +-- Name: testi_e_stringhe testi_e_stringhe_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.testi_e_stringhe + ADD CONSTRAINT testi_e_stringhe_pkey PRIMARY KEY (stinga_id); + + +-- +-- Name: banlist typeval; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.banlist + ADD CONSTRAINT typeval UNIQUE (type, value); + + +-- +-- Name: servizio_annunci uniq_annuncio_servizio; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.servizio_annunci + ADD CONSTRAINT uniq_annuncio_servizio UNIQUE (annunci_id, servizio_id); + + +-- +-- Name: interests uniqui_interest; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.interests + ADD CONSTRAINT uniqui_interest UNIQUE ("annuncioId", "userId"); + + +-- +-- Name: users users_email_key; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.users + ADD CONSTRAINT users_email_key UNIQUE (email); + + +-- +-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.users + ADD CONSTRAINT users_pkey PRIMARY KEY (id); + + +-- +-- Name: users_anagrafica usersanagrafica2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.users_anagrafica + ADD CONSTRAINT usersanagrafica2_pkey PRIMARY KEY (idanagrafica); + + +-- +-- Name: users_anagrafica usserunique2; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.users_anagrafica + ADD CONSTRAINT usserunique2 UNIQUE (userid); + + +-- +-- Name: annunci_immagini_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX annunci_immagini_index ON public.annunci USING gin (url_immagini); + + +-- +-- Name: ratelimiter_key_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX ratelimiter_key_index ON public.ratelimiter USING btree (key); + + +-- +-- Name: chats_etichette chat_etichetta_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.chats_etichette + ADD CONSTRAINT chat_etichetta_fkey FOREIGN KEY (chatid) REFERENCES public.chats(chatid) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: emails email_user; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.emails + ADD CONSTRAINT email_user FOREIGN KEY (user_id) REFERENCES public.users(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: chats_etichette etichetta_chetich_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.chats_etichette + ADD CONSTRAINT etichetta_chetich_fkey FOREIGN KEY (etichettaid) REFERENCES public.etichette(id_etichetta) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID; + + +-- +-- Name: interests interesse_annuncio; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.interests + ADD CONSTRAINT interesse_annuncio FOREIGN KEY ("annuncioId") REFERENCES public.annunci(id) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID; + + +-- +-- Name: interests interesse_user; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.interests + ADD CONSTRAINT interesse_user FOREIGN KEY ("userId") REFERENCES public.users(id) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID; + + +-- +-- Name: messages messages_chatid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.messages + ADD CONSTRAINT messages_chatid_fkey FOREIGN KEY (chatid) REFERENCES public.chats(chatid) ON DELETE CASCADE; + + +-- +-- Name: messages messages_user_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.messages + ADD CONSTRAINT messages_user_fkey FOREIGN KEY (sender) REFERENCES public.users(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: ordini ordine2_pack_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.ordini + ADD CONSTRAINT ordine2_pack_fkey FOREIGN KEY (packid) REFERENCES public.prezziario(idprezziario) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID; + + +-- +-- Name: ordini ordine2_servizio_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.ordini + ADD CONSTRAINT ordine2_servizio_fkey FOREIGN KEY (servizio_id) REFERENCES public.servizio(servizio_id) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID; + + +-- +-- Name: ordini ordine2_userid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.ordini + ADD CONSTRAINT ordine2_userid_fkey FOREIGN KEY (userid) REFERENCES public.users(id) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID; + + +-- +-- Name: payments payments2_ordine_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.payments + ADD CONSTRAINT payments2_ordine_fkey FOREIGN KEY (ordine_id) REFERENCES public.ordini(ordine_id) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID; + + +-- +-- Name: payments payments2_servizio_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.payments + ADD CONSTRAINT payments2_servizio_fkey FOREIGN KEY (servizio_id) REFERENCES public.servizio(servizio_id) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID; + + +-- +-- Name: payments payments2_userid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.payments + ADD CONSTRAINT payments2_userid_fkey FOREIGN KEY (userid) REFERENCES public.users(id) ON DELETE CASCADE; + + +-- +-- Name: servizio_annunci servizio_annuncio_J_annuncio; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.servizio_annunci + ADD CONSTRAINT "servizio_annuncio_J_annuncio" FOREIGN KEY (annunci_id) REFERENCES public.annunci(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: servizio_annunci servizio_annuncio_J_servizio; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.servizio_annunci + ADD CONSTRAINT "servizio_annuncio_J_servizio" FOREIGN KEY (servizio_id) REFERENCES public.servizio(servizio_id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: servizio_annunci servizio_annuncio_conferma_doc; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.servizio_annunci + ADD CONSTRAINT servizio_annuncio_conferma_doc FOREIGN KEY (doc_conferma_ref) REFERENCES public.storageindex(id) ON UPDATE CASCADE ON DELETE SET NULL NOT VALID; + + +-- +-- Name: servizio_annunci servizio_annuncio_contratto_doc; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.servizio_annunci + ADD CONSTRAINT servizio_annuncio_contratto_doc FOREIGN KEY (doc_contratto_ref) REFERENCES public.storageindex(id) ON UPDATE CASCADE ON DELETE SET NULL NOT VALID; + + +-- +-- Name: servizio_annunci servizio_annuncio_registraz_doc; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.servizio_annunci + ADD CONSTRAINT servizio_annuncio_registraz_doc FOREIGN KEY (doc_registrazione_ref) REFERENCES public.storageindex(id) ON UPDATE CASCADE ON DELETE SET NULL NOT VALID; + + +-- +-- Name: servizio user_servizio; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.servizio + ADD CONSTRAINT user_servizio FOREIGN KEY (user_id) REFERENCES public.users(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: chats userchats; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.chats + ADD CONSTRAINT userchats FOREIGN KEY (user_ref) REFERENCES public.users(id) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID; + + +-- +-- Name: users_anagrafica useridfkeyanagrafica2; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.users_anagrafica + ADD CONSTRAINT useridfkeyanagrafica2 FOREIGN KEY (userid) REFERENCES public.users(id) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID; + + +-- +-- Name: users_storage users_storage_storageid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.users_storage + ADD CONSTRAINT users_storage_storageid_fkey FOREIGN KEY (storageid) REFERENCES public.storageindex(id) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID; + + +-- +-- Name: users_storage userstorage; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.users_storage + ADD CONSTRAINT userstorage FOREIGN KEY (userid) REFERENCES public.users(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/apps/db/initial/2_data.sql b/apps/db/initial/2_data.sql new file mode 100644 index 0000000..4e30860 --- /dev/null +++ b/apps/db/initial/2_data.sql @@ -0,0 +1,133 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 16.0 +-- Dumped by pg_dump version 16.0 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Data for Name: banlist; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.banlist (id, value, type) FROM stdin; +1 roberto@gmail.com email +\. + + +-- +-- Data for Name: banners; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.banners (idbanner, titolo, testo, is_unskippable, has_cta, cta_href, cta_icon, cta_text, color, is_active, show_public, show_private, hide_duration) FROM stdin; +Banner_feste Buone Feste Vi avvisiamo che t t /contact arrowR Contattaci rosso f t t 1 +BANNER_NEWS Buone notizie! Salve salve cliente t t /contact arrowR Contattaci verde f t f 30 +\. + + +-- +-- Data for Name: etichette; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.etichette (id_etichetta, title, color_hex) FROM stdin; +1 testggergerg #027b00 +9 F #090bfd +8 Marzia #ffed00 +10 W #13e96f +\. + + +-- +-- Data for Name: flags; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.flags (id, value) FROM stdin; +ANNUNCIO_INTERACTIONS_DISABLED false +EMAIL_VERIFICATION true +ONLY_OAUTH false +EMAIL_OFF true +SMS_OFF true +\. + + +-- +-- Data for Name: prezziario; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.prezziario (idprezziario, prezzo_cent, testo_condizioni, "isActive", nome_it, nome_en, desc_it, desc_en, sconto, "isAcconto", "isSaldo", "isConsulenza", "isStabile", "isTransitorio") FROM stdin; +GESTIONE 7500 \N t Gestione Management Gestione Management 0 f f f f f +INTEGRAZIONE 5500 \N t Integrazione Integration Integrazione Integration 0 f f f f f +REDPACK 2500 \N t RedPack RedPack RedPack RedPack 0 f f f f f +ADEPACK 5000 \N t AdePack AdePack AdePack AdePack 0 f f f f f +ASSISTENZA 5000 \N t Assistenza Assistance Assistenza Assistance 0 f f f f f +RIMBORSO 0 \N t Rimborso Refund Rimborso Refund 0 f f f f f +ACCONTO_CA 3500 CONDIZIONI_CERCHI t Acconto Cerco Stabile Down Payment for Stable Acconto per servizio Cerco Stabile, valido per la visita di 10 immobili in 60 giorni Down payment for Stable service, valid for visiting 10 properties in 60 days 0 t f f t f +CONS_COMM 15000 CONDIZIONI_CERCHI t Consulenza Commerciale Commercial Consultancy Consulenza Commerciale Commercial Consultancy 0 f f t t t +CONS_3+2 12500 CONDIZIONI_CERCHI t Consulenza Agevolati Consultancy 3+2 Consulenza Agevolati Consultancy 3+2 0 f f t t f +CONS_4+4 10000 CONDIZIONI_CERCHI t Consulenza 4+4 4+4 Consultancy Consulenza 4+4 4+4 Consultancy 0 f f t t f +CONS_TRAN 7000 CONDIZIONI_CERCHI t Consulenza Transitori Transitory Consultancy Consulenza Transitori Transitory Consultancy 0 f f t f t +CONS_30GG 4000 CONDIZIONI_CERCHI t Consulenza 30gg 30-day Consultancy Consulenza 30gg 30-day Consultancy 0 f f t f t +SALDOBD_12MESI 42500 CONDIZIONI_CERCHI t Saldo Cerco Transitorio (12 mesi) Short Term 12 months Saldo Cerco Breve 12 mesi Balance for Short Term 12 months 0 f t f f t +SALDOBD_1MESE 4500 CONDIZIONI_CERCHI t Saldo Cerco Transitorio (1 mese) Short Term 1 month Saldo Cerco Breve 1 mese Balance for Short Term 1 month 0 f t f f t +SALDOBD_3MESI 21500 CONDIZIONI_CERCHI t Saldo Cerco Transitorio (3 mesi) Short Term 3 months Saldo Cerco Breve 3 mesi Balance for Short Term 3 months 0 f t f f t +ACCONTO_BD 3500 CONDIZIONI_CERCHI t Acconto Cerco Transitorio Down Payment for Short Term Acconto per servizio Cerco Breve, valido per la visita di 10 immobili in 60 giorni Down payment for Short Term service, valid for visiting 10 properties in 60 days 0 t f f f t +SALDOBD_6MESI 32500 CONDIZIONI_CERCHI t Saldo Cerco Transitorio (6 mesi) Short Term 6 months Saldo Cerco Breve 6 mesi comprensivo di contratto e registrazione Balance for Short Term 6 months 0 f t f f t +SALDOBD_9MESI 37500 CONDIZIONI_CERCHI t Saldo Cerco Transitorio (9 mesi) Short Term 9 months Saldo Cerco Breve 9 mesi Balance for Short Term 9 months 0 f t f f t +SALDOCA500 29900 CONDIZIONI_CERCHI t Saldo Cerco Stabile (500) Stable 500 Saldo per la ricerca di un immobile stabile con canone massimo di 500 euro mensili Balance for Stable 500 0 f t f t f +SALDOCA500+ 38700 CONDIZIONI_CERCHI t Saldo Cerco Stabile (500+) Stable 500+ Saldo per la ricerca di un immobile stabile con canone massimo di 500 euro mensili Balance for Stable 500+ 0 f t f t f +\. + + +-- +-- Data for Name: temp_tokens; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.temp_tokens (token, elapse) FROM stdin; +5d069230-9572-4b26-aa06-2964f3ca79a2 2030-02-19 10:25:33.046587 +0f411d4b-9102-4fb9-951a-62681a5ccaf0 2025-07-31 09:45:47.221901 +707df347-2460-4a90-b0c9-b6c42ef9ef38 2025-07-31 09:45:47.224744 +\. + + +-- +-- Data for Name: testi_e_stringhe; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.testi_e_stringhe (stinga_id, stringa_value) FROM stdin; +CONDIZIONI_CERCHI

CONDIZIONI GENERALI DI CONTRATTO – ATTIVAZIONE DEL SERVIZIO INFOALLOGGI.IT UTENTE ABBONATO (edizione 1005/N/2023/1)

La ringraziamo di aver scelto il servizio online di informazione immobiliare e benvenuto nella pagina delle Condizioni Generali di Contratto (di seguito “CGC”) riservate all’Utente (di seguito " Utente") interessato a ricevere il servizio informativo relativamente ai dati non visibili dell’annuncio immobiliare pubblicizzato sul sito web Infoalloggi.it (di seguito “Sito”) con visita dell’immobile direttamente con il proprietario o delegato dello stesso, attivabile tramite l’acquisto di un Pack.

Il Sito è di proprietà della Società Arcenia S.r.l. (di seguito “Società”) con sede legale a Bassano del Grappa (VI), Via Beata Giovanna, 1 iscritta presso il Registro delle Imprese di Vicenza n. VI 00924740244 - R.E.A. 277224 - CF./P.IVA: 00924740244 - Cap. Soc. I.V. 10500,00 €.

1. Introduzione

1.1 Il presente documento, unitamente alla Privacy Policy, regola i rapporti contrattuali tra la Società e l’Utente;

1.2 Con l’accettazione delle presenti CGC nel Sito, l’Utente, stabilisce un accordo vincolante con la Società.

2. Definizioni

2.1 In aggiunta ai termini ed alle espressioni definiti in altre clausole delle presenti CGC, ai fini delle stesse, i termini e le espressioni di seguito elencati, hanno il significato in seguito indicato per ciascuno di essi

“Account”: insieme delle informazioni personali relative all’Utente identificato da un indirizzo di posta elettronica ed una password;

“Acconto”: prima parte del pagamento relativo all’acquisto di un Pack, come riportato di seguito*;

“Annuncio”: immobile pubblicato nel Sito e di proprietà dell’Inserzionista;

“Area riservata”: insieme di sezioni e pagine facente parte dell’Account dell’Utente;

Cancellazione”: quanto a seguito di verifiche avviene la cancellazione dell’account Utente;

“Condizioni Generali di Contratto - CGC” : il presente documento concluso tra la Società che offre il servizio di informazione e l’Utente;

“Conferma immobile”: è l’interesse dichiarato che l’Utente effettua a seguito della valutazione positiva di un immobile che ha visitato di persona e direttamente con il proprietario;

“Contratto”: le presenti CGC unitamente alla Privacy Policy e la raccolta dei dati dell'Utente tramite la Form di acquisto e parametri di richiesta;

“Corrispettivo”: somma di denaro dovuta dall’Utente alla Società per la fruizione del Servizio, composta da Acconto e saldo del Pack;

“Crediti”: numero di annunci totali che l’Utente può sbloccare;

“Form”: interfaccia di un programma che consente all’Utente del Sito di inserire e inviare uno o più dati;

“ Sito”: piattaforma o sito web di proprietà della Società Arcenia S.r.l. con sede in Bassano del Grappa (VI);

“Inserzionista”: il proprietario del bene immobile che acquista il diritto di utilizzare il servizio di informazione e divulgazione immobiliare tramite il sito web Infoalloggi.it;

“Pack”: sono pacchetti di servizi che l’Utente può acquistare tramite il Sito;

“Parametri di ricerca”: sono dati che l’Utente inserisce nella sua Area riservata e che formano la Richiesta di ricerca e contribuiscono a stabilire l'importo del Saldo del Pack;

“Privacy Policy”: l’insieme di regole, procedure e informazioni fornite dalla Società volte a disciplinare la raccolta dei dati personali da parte di Infoalloggi.it conformemente al Reg. UE n. 679/2016;

“Profilo”: è un insieme di dati che l’Utente inserisce durante l’acquisto del Pack presente nel Sito relativamente alle caratteristiche della ricerca immobile e ai suoi dati personali;

“Saldo”: importo che l’Utente è tenuto a versare a seguito di un acquisto di un Pack in riferimento ai parametri di Richiesta inseriti, come riportato di seguito**;

“Servizio informativo”: Il ricevimento dei dati del proprietario relativi all’annuncio salvato e sbloccato nella propria area riservata dell’Utente Abbonato;

“Sospensione”: quanto a seguito di verifiche avviene la sospensione dell’account Utente;

“Interruzione”: modalità con cui l’Utente comunica alla Società la volontà di rinunciare agli annunci visitati in quanto non sono di proprio interesse e di interrompere il Servizio;

“Richiesta”: la proposta con cui l'Utente chiede tramite il Sito (accedendo alla propria area riservata e inserendo i parametri di ricerca), l’erogazione del Servizio, con accettazione delle vigenti CGC, comunicando i propri dati personali, e posizione lavorativa o familiare;

“Utente”: il soggetto, maggiore d’età, che ha formulato una Richiesta e che usufruisce del Servizio. L’Utente è identificato tramite un Account personale;

“Valutazione visita”: è la recensione che l’Utente rilascia dopo aver visitato l’immobile assieme all’utente Inserzionista proprietario o che ne fa le veci;

*L'Acconto si quantifica come segue: (tutti i prezzi sono IVA inclusa)

  • per il Pack "Affitto Breve Durata" acconto di 35,00 €

  • per il Pack "Cerco Affitto" acconto di 35,00 €

  • per il Pack “Acquisto casa” acconto di 47,00 €

Per il Pack "Affitto Breve Durata" il Saldo è quantificato in riferimento al campo "La mia permanenza richiesta" della sezione "Parametri di ricerca" del profilo dell'Utente e varia come segue: (tutti i prezzi sono IVA inclusa e contratto transitorio, compreso)

  • permanenza: "Fino a 1 mese" con saldo di 45,00 €

  • permanenza: "Fino a 3 mesi" con saldo di 215,00 €

  • permanenza: "Fino a 6 mesi" con saldo di 325,00 €

  • permanenza: "Fino a 9 mesi" con saldo di 375,00 €

  • permanenza: "Fino a 12 mesi" con saldo di 425,00 €

Per il Pack "Cerco Affitto" il saldo è quantificato in riferimento al campo "Budget” della sezione "Parametri di ricerca" del profilo dell'Utente e varia come segue: (tutti i prezzi sono IVA inclusa e contratto di locazione, escluso)

  • saldo di 299,00 € se il valore è inferiore a 500,00 €

  • saldo di 387,00 € se il valore è superiore a 500,00 €

Per il Pack "Acquisto casa" il saldo è quantificato in riferimento al campo "Budget” della sezione "Parametri di ricerca" del profilo dell'Utente e varia come segue: (tutti i prezzi sono IVA inclusa)

  • saldo di 490,00 € se il valore è inferiore o uguale a 80000,00 €

  • saldo di 680,00 € se il valore è superiore a 80000,00 €

Art. A. Disciplina contrattuale

A.1 – Le presenti Condizioni Generali di Contratto e la raccolta dei dati dell'Utente tramite la Richiesta costituiscono un corpo unico di norme (di seguito il “Contratto”) a disciplina del rapporto tra Te e la Società, pertanto devono essere considerate in maniera unitaria e inscindibile;

A.2 – Per tutto quanto non previsto dalle presenti CGC si applicheranno le disposizioni del Codice Civile.

Art. B. Oggetto

B.1 – Il Contratto ha per oggetto la fornitura da parte della Società a Tuo favore dei servizi di informazione immobiliare che compongono i pacchetti di offerta denominati Pack;

B.2 – Tale prerogativa potrà essere esercitata acquistando un Pack a scelta sul Sito con accesso all’area “riservata e personale”;

B.3 – L’Utente avrà la possibilità, per tutto il periodo di vigenza del Contratto, di accedere costantemente ai dati relativi ai proprietari di immobili corrispondenti ai propri parametri di ricerca;

B.4 – Il Pack acquistato è valido per la ricerca di un solo immobile di qualsiasi tipologia e categoria, attraverso la visita di un numero massimo di immobili come indicato nel Pack corrispondente;

B.5 – In caso di ricerca di un immobile Breve Durata “ad uso transitorio” il Pack è valido per una sola prestazione, ovvero per aver trovato un accordo con un proprietario e in caso di necessità di “proroga” del servizio offerto per altra permanenza per lo stesso immobile, l’Utente è obbligato ad acquistare un Pack in riferimento alla permanenza desiderata, in quel momento in vigore.

Art. C. Durata, Ripensamento, Interruzione, Rimborso, Sospensione, Cancellazione

C.1 – Il Contratto decorre dalla data di decorrenza del Pack ed ha termine alla naturale scadenza indicata, con esclusione di rinnovo tacito;

C.2 – L’Utente ha la facoltà di recedere dal presente Servizio entro il termine di 14 (quattordici) giorni dalla decorrenza del Pack acquistato come disciplinato dal decreto legislativo n. 21/2014 che ha recepito la direttiva 2011/83/UE sui diritti dei consumatori, dandone comunicazione tramite e-mail: recesso@infoalloggi.it o PEC: arceniasrl@legalmail.it, solo se il proprio PROFILO risulta completo di parametri di ricerca e corredato di documentazione richiesta e se nel frattempo non ha ricevuto le informazioni al punto C.3;

C.3 – L’ottenimento di informazioni nel periodo di “ripensamento” riguardanti i contatti privati degli Inserzionisti esclude l’Utente del diritto di ripensamento, in questo caso la quota versata non potrà essere restituita all’Utente per nessun motivo di sorta, neppure in forma parziale;

C.4 – La Società offre all’Utente la possibilità (denominata “Interruzione”) di interrompere il Contratto nei primi 14 giorni dalla decorrenza del Pack acquistato e di non dover effettuare il saldo, nel caso tra gli immobili visitati si manifesti la volontà di rifiutarli in quanto si ritengano non corrispondenti alle proprie esigenze. Codesta opportunità si attiva inviando, senza spese, una e-mail a interruzione@infoalloggi.it e senza ottenere nessun rimborso dell’importo versato;

C.5 – La Società ha la facoltà di verificare la veridicità della comunicazione/valutazione inserita dall’Utente in riferimento al punto C.4 e se dovesse emergere una antinomia tale da mettere in discussione la buona fede dell’Utente, la Società chiederà un indennizzo pari al doppio del corrispettivo totale del Pack acquistato;

C.6 – La Società effettuerà il rimborso della quota versata entro 30 giorni dalla data di richiesta di recesso, trattenendo gli oneri di segreteria pari a 5,00 €, salvo costi aggiuntivi di commissioni bancarie;

C.7 – La Società si riserva il diritto di sospendere o cancellare l’account di un Utente nel caso in cui l'utente non adempia gli obblighi assunti con l'accettazione delle CGC; Rifiuta ogni richiesta di presentazione documentazione relativa alla propria posizione lavorativa ed identità. In caso la finalità della ricerca immobile sia per un soggetto terzo; In caso di mancanza di requisiti tali da generare possibili contestazione da parte di terzi e per tutelare i propri interessi. La sospensione o cancellazione dell’account non da all’Utente alcun diritto di risarcimento, rimborso o indennizzo.

Art. D. Conclusione del Contratto e pagamento Corrispettivo

D.1 – Il Contratto, anche in mancanza di accettazione espressa da parte della Società, si intende concluso al momento del pagamento del corrispettivo indicato nel Pack acquistato e termina con il pagamento del saldo comprensivo di tasse ed IVA espresso in Euro;

D.2 – L’acquisto di un Pack per la ricerca immobile, sia per Affitto, Acquisto e Affitto Breve Durata, prevede un costo totale, ripartito in Acconto e saldo;

D.3 – L’Utente potrà ricevere le fatture per il Corrispettivo dovuto esclusivamente tramite posta elettronica all’indirizzo e-mail presente nel proprio Profilo;

D.4 – Nella sezione “I miei ordini”, l’Utente troverà una ricevuta di cortesia del Suo acquisto;

D.5 – Il saldo, dovrà avvenire entro e non oltre la data di scadenza stabilita e riportata nel Pack acquistato o prima di acquistare un Pack aggiuntivo;

D.6 – Il pagamento del Pack nella sua interezza è una propedeuticità per l’accesso ai nostri servizi di consulenza contrattuale;

D.7 – L’importo del Corrispettivo dovuto è riportato nella pagina seguente del Sito https://www.infoalloggi.it/pack e anche nella dashboard della propria area riservata dell’Utente e si intende IVA compresa;

D.8 – In caso di inadempienza da parte dell'Utente nel mancato pagamento del Corrispettivo nella sua interezza (salvo comunicazione di recesso o interruzione entro i termini stabiliti) entro alla scadenza stabilita indicata nel Pack, si applicheranno gli interessi commerciali ai sensi del d. lgs. 231/2002 e un indennizzo pari all'importo del Saldo se il mancato pagamento supera il quindicesimo giorno dalla scadenza del pack, fatto salvo il diritto al risarcimento del maggior danno.

Art. E. Responsabilità della Società

E.1 – La Società si impegna per tutta la durata del Contratto a fornire un Servizio chiaro, puntuale e corretto;

E.2 – La Società si impegna a pubblicare tutti gli immobili disponibili e visitabili, tramite il Sito;

E.3 – La Società si impegna a mettere a disposizione dell’Utente i dati di tutti gli immobili corrispondenti ai parametri di ricerca;

E.4 – La Società non potrà essere ritenuta responsabile nel caso di informazioni erronee che possono apparire nella scheda immobile/dettagli dell’annuncio sul Sito;

E.5 – La Società non è altresì responsabile del fatto che l’Utente non trovi durante il periodo della validità del Servizio alcuna proposta di Suo interesse, poiché l’obbligazione della Società consiste nel mettere a disposizione tutte le informazioni degli annunci e dei relativi proprietari presenti nel Sito;

E.6 – La Società non fornisce alcuna informazione in ordine alla situazione giuridica del bene offerto in vendita o locazione, se non tramite l’acquisto di un Servizio di consulenza integrata richiedibile inviando una mail a: consulenza@infoalloggi.it

Art. F. Responsabilità dell’Utente

F.1 – L’Utente si obbliga ad utilizzare il presente Servizio solo a titolo personale e pertanto non potrà essere utilizzato da, né trasferito a terzi nel corso della sua durata, pena la sospensione dello stesso e indennizzo in rif. punto F4, salvo la facoltà da parte della Società e previa richiesta scritta di trasferirlo a terzi;

F.2 – L’Utente si obbliga a fornire alla Società i propri dati garantendo la veridicità dei dati forniti ai sensi dell’art. Art. 76 D.P.R. 28.12.2000 n. 445 allegando o inviando il proprio documento d'identità, busta paga o contratto di lavoro, , inoltre dichiara di non essere un professionista abilitato alla funzione di intermediario immobiliare o comunque di essere completamente estraneo all’attività di qualsivoglia agenzia immobiliare, pena l’interruzione immediata del Servizio e riserva azione legale da parte della Società;

F.3 – L’Utente si obbliga a comunicare alla Società tempestivamente ai fini dell’aggiornamento del Sito e feedback sull’esito della visita all’immobile, in caso di inosservanza la Società si riserva la facoltà di sospendere il Servizio;

F.4 – L’Utente si obbliga a non comunicare a terzi i dati ricevuti di cui viene a conoscenza diretta tramite l’area riservata e personale, relativamente agli immobili e ai dati dei proprietari, pena la risoluzione immediata del Servizio, senza che l’Utente possa chiedere alcun rimborso o indennizzo. In tal caso l’Utente sarà obbligato a pagare, a titolo di penale (art. 1382 C.C.), un indennizzo pari al doppio del corrispettivo del Pack acquistato, inoltre la Società si riserva il diritto di agire legalmente nei confronti dell’Utente quale trasgressore per accertare un eventuale maggior danno: è importante che l’Utente sappia che la protezione dei dati riservati relativi agli Inserzionisti della Società costituisce elemento fondamentale per la nostra attività;

F.5 – L’Utente si impegna a presentarsi telefonicamente all’inserzionista come “Utente Infoalloggi.it/Arca”, anche al momento della vista dell’immobile l’Utente è ugualmente tenuto a precisarlo;

F.6 – L’Utente si impegna a contattare l'inserzionista e visitare gli immobili richiesti e ricevuti/sbloccati, in caso di rinuncia da parte dell’Utente è prevista la facoltà da parte della Società di sospendere il Servizio al secondo immobile rifiutato;

F.7 – L’Utente si impegna a non utilizzare i dati o le informazioni acquisite tramite il Servizio per concludere accordi con Inserzionisti al di fuori della procedura di conferma immobile presente nella Sua area riservata e personale. Al tal riguardo la Società si riserva di effettuare tutte le opportune verifiche e l’Utente ha l’obbligo di indennizzare la Società per inadempienza contrattuale come riportato nel precedente punto F4;

F.8 – L'utente riconoscere che i parametri di richiesta inseriti nella propria sezione dell'area personale e le comunicazioni intercorse via email e tramite messaggi WhatsApp, concorrono a determinare l'importo del Saldo del Pack da effettuare nei termini stabiliti;

Art. G. Autorizzazioni

G.1 – Con l’accettazione del presente Contratto l’Utente autorizza espressamente la Società a pubblicare, senza spesa aggiuntiva, degli annunci in ricerca nella piccola pubblicità di quotidiani, riviste e settimanali settoriali, portali immobiliari e non, ritenuta conveniente per il buon fine del presente Servizio;

G.2 – L’Utente autorizza la Società inoltre a rendere accessibili i Suoi dati identificativi ed eventuali altri documenti, agli Inserzionisti;

Art. H. Reclami

H.1 – Se l’Utente ha utilizzato il nostro Servizio e non è rimasto soddisfatto per qualsiasi motivo, potrà farci conoscere la Sua opinione in merito inviando una mail all’indirizzo: reclami@infoalloggi.it

Art. I. Clausola di Conciliazione

I1 – Tutte le controversie nascenti dal presente contratto verranno deferite in prima istanza all’Organismo di Mediazione Forense presso il Tribunale di Vicenza e risolte secondo il Regolamento di Conciliazione vigente in quel momento o, in alternativa, alla Camera di Commercio di Vicenza.

Art. L. Elezione di domicilio e Foro Competente

L1 – Le PARTI eleggono domicilio, a tutti gli effetti del Contratto (a) quanto alla Società presso la propria sede legale; (b) quanto all’Utente presso l’indirizzo indicato nella sezione “Profilo della sezione riservata ”;

L2 – Per qualsiasi controversia che dovesse insorgere fra le Parti in merito all’interpretazione, esecuzione, validità, efficacia e risoluzione del Contratto, sarà competente in via esclusiva il Foro di Vicenza, impregiudicata la competenza inderogabile di ogni altro foro prevista dalle vigenti disposizioni di legge. Per tutte le controversie fra la Società e l’Utente che rivesta la qualifica di consumatore (ai sensi dell’art.3, comma 1, lett. a) del Codice del Consumo, sarà esclusivamente competente il giudice del luogo di residenza o di domicilio dell’Utente, se ubicati nel territorio della Repubblica Italiana.

Ai fini dell’applicazione degli Articoli 1341 e 1342 codice civile, l’Utente dichiara di aver letto, accettato e compreso le condizioni contrattuali generali ed in particolare dichiara di approvare specificamente le seguenti clausole: Art. B.4 Numero massimo di immobili da possibile conferma; Art. B.5 Obbligo di acquisto nuovo Pack in caso di nuova locazione transitoria; Art. C.3 Esecuzione anticipata del contratto nella periodo di ripensamento; Art. C.4 Obbligo dell’Utente nel rispetto dell’Offerta ricevuta; Art. C.5 Obbligo di indennizzo in caso di inadempienza; Art. C.7 Sospensione o cancellazione; Art. D.2 Costo totale del Pack; Art. D.5 Versamento del saldo del Pack entro la scadenza; Art. D.8 Interessi commerciali ed indennizzo in caso di mancato pagamento; Art. E.4 Descrizione annuncio; Art. E.5 Obbligo di manleva a carico dell’Utente; Art. F.1 Il Servizio è nominale; Art. F.2 Veridicità dei dati comunicati; Art. F.3 Obbligo di feedback; Art. F.4 Divieto di comunicazioni a terzi; Art. F.7 Impegno al rispetto della procedura online; Art. L. Elezione di domicilio e Foro Competente.

+TEST

TEST

ordinata

  • a

  • b

  • c


numeri

  1. a

  2. b

  3. c

+TERMINI_CONDIZIONI

TERMINI E CONDIZIONI D’USO

Il sito web “www.infoalloggi.it e www.infoalloggi.com” (di seguito Sito) è di proprietà della società Arcenia S.r.L. con sede legale in Via Beata Giovanna, 1 Bassano del Grappa (Vicenza) 36061 – P. IVA 00924740244 (di seguito “Società”) REA: VI – 277224

L’accesso al sito e le informazioni relative a tutti i servizi che comporta il rispetto e l’accettazione delle presenti Condizioni d’Uso e Condizioni Generali di Contratto (di seguito “Condizioni”).

Infoalloggi.it/com è una piattaforma che fornisce servizi a pagamento a te che vuoi vendere o dare in locazione o cercare casa in acquisto o locazione, con un contatto diretto e riservato con il proprietario dell’immobile, accessibile tramite l’area riservata o via e-mail, telefono ed SMS.

Status utente

L’utilizzo del sito ti attribuisce lo status di Utente.

In genere l’Utente per la consultazione degli immobili non è tenuto a registrarsi e le offerte sono in forma gratuita. Tuttavia per l’utilizzo di alcuni servizi ti viene richiesta la registrazione dell’Utente con prestazione economica nella forma e termini stabilita con l'acquisto di un Pack.

Proprietà intellettuale

La Società è la legittima titolare del Sito, delle pagine che comprende, le informazioni o elementi contenuti nei testi, documenti, fotografie, disegni, grafica, database, software, loghi, marchi, nomi commerciali o altri segni sono protetti da diritti di proprietà intellettuale o industriale.

Consultazione degli annunci

Gli annunci presenti sul Sito vengono pubblicati tramite procedure automatiche e la pubblicazione degli stessi avviene con un aggiornamento in tempo reale. Gli immobili sono tutti visionabili, salvo eccezioni di trattative in corso tra il proprietario e interessato. La descrizione nella scheda è fornita dal proprietario e le caratteristiche, immagini e metrature riportate, possono essere soggette a rettifiche o precisazioni e non comportano nessun obbligo contrattuale.

Usi consentiti e vietati

È vietato svolgere, direttamente o indirettamente, qualsiasi forma di sfruttamento commerciale dei servizi attraverso l’accesso, l’uso, il trasferimento di informazioni contenute nel Sito. La violazione di questo divieto sarà perseguita a norma di legge.

L'utilizzo del Servizio è consentito solo ad utenti maggiorenni secondo la legge italiana ( maggiori di anni 18 ). 

L’Utente riconosce e accetta che l’uso del contenuto e / o dei servizi offerti dal Sito è a proprio esclusivo utilizzo e sotto la sua responsabilità.

L’Utente si impegna a utilizzare il Sito e tutti i contenuti e servizi in conformità alla legge, al buon costume, ordine pubblico e di queste Condizioni d’Uso. Allo stesso modo si impegna inoltre a fare un uso appropriato dei servizi e / o di contenuti del Sito e a non impiegarli per attività illecite, contrarie alla buona fede o delittuose, violare i diritti di terzi e / o regolamenti che violano la proprietà intellettuale, o di qualsiasi altra norme dell’ordinamento giuridico.

É proibito l’uso del sito per scopi diversi da quelli previsti dalla Società.

Inoltre, la Società si riserva il diritto di non concedere l’accesso a servizi e contenuti del sito quando lo ritiene la sua politica commerciale.

Prezzi

I prezzi applicati in vigore al momento dell’acquisto, sono esposti in moneta Euro e si intendono comprensivi di IVA.

Legge applicazione e giurisdizione

Salvo quanto disposto da norme di legge non derogabili, il Tribunale di Vicenza sarà competente in via esclusiva a dirimere ogni controversia riguardante le presenti Condizioni ed i rapporti dalle stesse regolati.

+TERMINI_CONDIZIONI_ENG

TERMS & CONDITIONS OF USE

The websites “www.infoalloggi.it and www.infoalloggi.com” (from now on “Site”) is property of the society Arcenia S.r.L. with legal address Via Beata Giovanna, 1 Bassano del Grappa (Vicenza) 36061 – P. IVA 00924740244 (from now on “Society”) REA: VI – 277224

The access to the site and the information pertaining all the services entails the respect and the acceptance of the present conditions of use and contractual terms and conditions. (from now on “Conditions”)

Infoalloggi.it/com is a platform that provides paid services to those who want to sell or rent or find a property rented or on sale, with a direct and confidential contact with the owner of the property, reachable through the reserved area or by email, telephone or SMS.

User Status

The use of the site gives the User status.

Usually the User in order to view the properties does not need to register and the offers are free.

However, in order to use some services, the registration of the user with a payment in the manner and the terms established by the purchase of the Pack is necessary.


Intellectual Property

The Society is the only legitimate owner of the Site, of the pages within, of the information, elements contained in the texts, documents, photos, drawings, graphics, database, software, logos, brands, commercial names or other signs are protected by the intellectual property or industrial rights.

Adverts viewing

Every advert present on our site has been published trough automatic procedures and is updated in real time. All the properties can be visited, except those under negotiation between the owner and a subscriber. The description on the advert sheet is provided by the owner and the characteristics, images and the total surface area are subject to changes and are not contractually binding. 

Allowed and forbidden uses

It is forbidden to carry out directly or indirectly any kind of commercial use of the services by accessing, using or transferring any information within the Site. The violation of this prohibition will be prosecuted by law.

The service is reserved for users over 18 years old, according to italian law.

The User acknowledges and accepts that the contents and the use of the services offered by the Site are under his exclusive responsibility and are for their exclusive use.

The User undertakes to treat the Site and all its contents and services in accordance with the law, common decency, public order and these Conditions. At the same time he undertakes to make an appropriate use of the services and/or the contents of the Site and to do not use them for any illegal or illicit activity, any use contrary to good faith, infringing third parties rights and/or intellectual property regulations or any existing  norm of the legal system.

It is forbidden to use the Site for any purpose different from those listed by the Society.

The Society reserves the right to do not give access to its services based on its commercial policy.

Prices 

The applied prices are those in place at the moment of the purchase, they are shown in euros and are inclusive of IVA.

Law application and jurisdiction

Except when disposed by non-derogable rules, the competent court for any dispute will be the Judiciary Authority of Vicenza.

+PRIVACY_POLICY_ENG

Note legali e privacy

INFORMATIVA SUL TRATTAMENTO DEI DATI PERSONALI

In questa pagina si descrivono le modalità di gestione del presente sito in riferimento al trattamento dei dati personali degli utenti che li consultano. Si tratta di un’informativa che è resa in conformità alla vigente normativa in materia dei dati personali per gli utenti che interagiscono con i servizi del presente sito nel quadro del Regolamento Ue 2016/679. L’informativa è resa solo per il presente sito e non anche per altri siti web eventualmente consultati dall’utente tramite i nostri link.

IL “TITOLARE” DEL TRATTAMENTO

A seguito della consultazione del sito possono essere trattati dati relativi a persone identificate o identificabili. Il “titolare” del loro trattamento è Smart srl, sede legale sita inVia Tortona, 33 20144 Milano - telefono 0289954040, www.paginemail.it, info@paginemail.it, PEC: paginemail@pec.it

LUOGO DI TRATTAMENTO DEI DATI

I trattamenti connessi ai servizi web e sono curati solo da personale tecnico dell’Ufficio incaricato del trattamento, oppure da eventuali incaricati di occasionali operazioni di manutenzione. Nessun dato derivante dal servizio web viene comunicato o diffuso.

FINALITÀ DEL TRATTAMENTO E BASE GIURIDICA DEL TRATTAMENTO

I dati personali forniti dagli utenti che inoltrano richieste o intendono utilizzare servizi o prodotti offerti tramite il sito nonché ricevere ulteriori specifici contenuti sono utilizzati al solo fine di dare riscontro alle richieste o eseguire il servizio o la prestazione richiesta e sono comunicati a terzi nel solo caso in cui ciò sia a tal fine necessario. Base giuridica di questi trattamenti è la necessità di dare riscontro alle richieste degli interessati o eseguire attività previste dagli accordi definiti con gli interessati. Con il consenso espresso dell’utente i dati potranno essere usati per attività di comunicazione commerciale relativi ad offerte di prodotti o servizi ulteriori del titolare. Base giuridica di questo trattamento è il consenso liberamente espresso dall’interessato. Al di fuori di queste ipotesi i dati di navigazione degli utenti vengono conservati per il tempo strettamente necessario alla gestione delle attività di trattamento nei limiti previsti dalla legge

TIPI DI DATI TRATTATI

DATI DI NAVIGAZIONE

I sistemi informatici e le procedure software preposte al funzionamento del sito acquisiscono, nel corso del loro normale esercizio, alcuni dati personali la cui trasmissione è implicita nell’uso dei protocolli di comunicazione di Internet. Si tratta di informazioni che non sono raccolte per essere associate a interessati identificati, ma che per loro stessa natura potrebbero, attraverso elaborazioni ed associazioni con dati detenuti da terzi, permettere di identificare gli utenti. In questa categoria di dati rientrano gli indirizzi IP o i nomi a dominio dei computer utilizzati dagli utenti che si connettono al sito, gli indirizzi in notazione URI (Uniform Resource Identifier) delle risorse richieste, l’orario della richiesta, il metodo utilizzato nel sottoporre la richiesta al server, la dimensione del file ottenuto in risposta, il codice numerico indicante lo stato della risposta data dal server (buon fine, errore, ecc.) ed altri parametri relativi al sistema operativo e all’ambiente informatico dell’utente. Questi dati vengono utilizzati al solo fine di ricavare informazioni statistiche anonime sull’uso del sito e per controllarne il corretto funzionamento e vengono cancellati dopo l’elaborazione. I dati potrebbero essere utilizzati per l’accertamento di responsabilità in caso di ipotetici reati informatici ai danni del sito.

DATI FORNITI VOLONTARIAMENTE DALL’UTENTE

L’invio facoltativo, esplicito e volontario di posta elettronica agli indirizzi indicati sul sito comporta la successiva acquisizione dell’indirizzo del mittente, necessario per rispondere alle richieste, nonché degli eventuali altri dati personali inseriti nella missiva. Specifiche informative di sintesi verranno progressivamente riportate o visualizzate nelle pagine del sito predisposte per particolari servizi a richiesta.

COOKIES

Per cookies si intende un elemento testuale che viene inserito nel disco fisso di un computer solo in seguito ad autorizzazione. I cookies hanno la funzione di snellire l’analisi del traffico su web o di segnalare quando un sito specifico viene visitato e consentono alle applicazioni web di inviare informazioni a singoli utenti. Nessun dato personale degli utenti viene in proposito acquisito dal sito. Non viene fatto uso di cookies per la trasmissione di informazioni di carattere personale, né vengono utilizzati c.d. cookies persistenti di alcun tipo, ovvero sistemi per il tracciamento degli utenti. L’uso di c.d. cookies di sessione è strettamente limitato alla trasmissione di identificativi di sessione (costituiti da numeri casuali generati dal server) necessari per consentire l’esplorazione sicura ed efficiente del sito. I c.d. cookies di sessione utilizzati nel sito evitano il ricorso ad altre tecniche informatiche potenzialmente pregiudizievoli per la riservatezza della navigazione degli utenti e non consentono l’acquisizione di dati personali identificativi dell’utente.

FACOLTATIVITÀ DEL CONFERIMENTO DEI DATI

A parte quanto specificato per i dati di navigazione, l’utente è libero di fornire i dati personali per richiedere i servizi offerti dal Titolare. Il loro mancato conferimento può comportare l’impossibilità di ottenere quanto richiesto.

MODALITÀ DEL TRATTAMENTO E TEMPI DI CONSERVAZIONE DEI DATI

I dati personali sono trattati con strumenti automatizzati per il tempo strettamente necessario a conseguire gli scopi per cui sono stati raccolti. Specifiche misure di sicurezza sono osservate per prevenire la perdita dei dati, usi illeciti o non corretti ed accessi non autorizzati. I dati sono conservati per il tempo strettamente necessario per il perseguimento delle finalità indicate nella presente informativa e saranno cancellati al termine di tale periodo, salvo che i dati stessi debbano essere conservati per obblighi di legge o per far valere un diritto in sede giudiziaria.

DIRITTI DEGLI INTERESSATI

Nei limiti e alle condizioni previste dalla legge, il titolare ha l’obbligo di rispondere alle richieste dell’interessato in merito ai dati personali che lo riguardano. In particolare, in base alla vigente normativa:

  1. L'interessato ha il diritto di ottenere dal titolare del trattamento la conferma che sia o meno in corso un trattamento di dati personali che lo riguardano e in tal caso, di ottenere l'accesso ai dati personali e alle seguenti informazioni: le finalità del trattamento; le categorie di dati personali in questione; i destinatari o le categorie di destinatari a cui i dati personali sono stati o saranno comunicati, in particolare se destinatari di paesi terzi o organizzazioni internazionali; quando possibile, il periodo di conservazione dei dati personali previsto oppure, se non è possibile, i criteri utilizzati per determinare tale periodo; l'esistenza del diritto dell'interessato di chiedere al titolare del trattamento la rettifica o la cancellazione dei dati personali o la limitazione del trattamento dei dati personali che lo riguardano o di opporsi al loro trattamento; il diritto di proporre reclamo a un'autorità di controllo; qualora i dati non siano raccolti presso l'interessato, tutte le informazioni disponibili sulla loro origine; l'esistenza di un processo decisionale automatizzato, compresa la profilazione

  2. L'interessato ha il diritto di ottenere dal titolare del trattamento la rettifica dei dati personali inesatti che lo riguardano senza ingiustificato ritardo. Tenuto conto delle finalità del trattamento, l'interessato ha il diritto di ottenere l'integrazione dei dati personali incompleti, anche fornendo una dichiarazione integrativa.

  3. L'interessato ha il diritto di ottenere dal titolare del trattamento la cancellazione dei dati personali che lo riguardano senza ingiustificato ritardo e il titolare del trattamento ha l'obbligo di cancellare senza ingiustificato ritardo i dati personali nei limiti e nei casi previsti dalla vigente normativa. Il titolare del trattamento comunica a ciascuno dei destinatari cui sono stati trasmessi i dati personali le eventuali rettifiche o cancellazioni o limitazioni del trattamento nei limiti e nelle forme previste dalla vigente normativa.

  4. L'interessato ha il diritto di ottenere dal titolare del trattamento la limitazione del trattamento.

  5. L'interessato ha il diritto di ricevere in un formato strutturato, di uso comune e leggibile da dispositivo automatico i dati personali che lo riguardano forniti a un titolare del trattamento e ha il diritto di trasmettere tali dati a un altro titolare del trattamento senza impedimenti da parte del titolare del trattamento cui li ha forniti.

Per esercitare i diritti sopra elencati, l’interessato dovrà presentare richiesta utilizzando i seguenti punti di contatto. Le richieste vanno rivolte al Titolare al seguente indirizzo Smart srl, sede legale sita in Via Tortona, 33 20144 Milano - telefono 0289954040, www.paginemail.it, info@paginemail.it, PEC: paginemail@pec.it La presente versione dell’informativa sul trattamento dei dati personali è stata aggiornata il giorno 07 maggio 2021.


Cookie policy

Il presente documento è redatto dal titolare del trattamento (di seguito “TITOLARE”), in qualità di titolare del trattamento dei dati personali derivanti dalla navigazione all’interno del presente sito web (di seguito il “Sito”).

TITOLARE intende informare l’utente che il Sito utilizza cookie tecnici per garantire un’ottimale esperienza di navigazione. La presente policy sui cookies (“Policy sui Cookies”), che deve essere letta ad integrazione delle informazioni rese nella Privacy Policy, serve per descrivere i tipi di cookies e altre tecnologie usate sul Sito, nonché i motivi e le condizioni di utilizzo dei cookies. Informiamo che alcuni cookies sono necessari per consentire la corretta navigazione del Sito e continuando a navigare si acconsente all’utilizzo di tali cookie. L’Utente può comunque evitare l’installazione di cookie configurando le impostazioni del suo browser oppure disabilitando l’uso dei siti tramite il browser direttamente, come specificato nel dettaglio di seguito.

Uso dei cookie

Il "Sito" utilizza i Cookie per rendere i propri servizi semplici e efficienti per l’utenza che visiona le pagine di livingwithnets.it. Gli utenti che visionano il Sito, vedranno inserite delle quantità minime di informazioni nei dispositivi in uso, che siano computer e periferiche mobili, in piccoli file di testo denominati “cookie” salvati nelle directory utilizzate dal browser web dell’Utente. Vi sono vari tipi di cookie, alcuni per rendere più efficace l’uso del Sito, altri per abilitare determinate funzionalità. Analizzandoli in maniera particolareggiata i nostri cookie permettono di:
• memorizzare le preferenze inserite;
• evitare di reinserire le stesse informazioni più volte durante la visita quali ad esempio nome utente e password;
• analizzare l’utilizzo dei servizi e dei contenuti forniti da livingwithnets.it per ottimizzarne l’esperienza di navigazione e i servizi offerti.

Tipologie di Cookie

Cookie tecnici
Questa tipologia di cookie permette il corretto funzionamento di alcune sezioni del Sito. Sono di due categorie: persistenti e di sessione:
• persistenti: una volta chiuso il browser non vengono distrutti ma rimangono fino ad una data di scadenza preimpostata
• di sessione: vengono distrutti ogni volta che il browser viene chiuso

Questi cookie, inviati sempre dal nostro dominio, sono necessari a visualizzare correttamente il sito e in relazione ai servizi tecnici offerti, verranno quindi sempre utilizzati e inviati, a meno che l’utenza non modifichi le impostazioni nel proprio browser (inficiando così la visualizzazione delle pagine del sito).


Cookie analitici

I cookie in questa categoria vengono utilizzati per collezionare informazioni sull’uso del sito. Livingwithnets.it userà queste informazioni in merito ad analisi statistiche anonime al fine di migliorare l’utilizzo del Sito e per rendere i contenuti più interessanti e attinenti ai desideri dell’utenza. Questa tipologia di cookie raccoglie dati in forma anonima sull’attività dell’utenza e su come è arrivata sul Sito. I cookie analitici sono inviati dal Sito Stesso o da domini di terze parti.
Cookie di analisi di servizi di terze parti

Questi cookie sono utilizzati al fine di raccogliere informazioni sull’uso del Sito da parte degli utenti in forma anonima quali: pagine visitate, tempo di permanenza, origini del traffico di provenienza, provenienza geografica, età, genere e interessi ai fini di campagne di marketing. Questi cookie sono inviati da domini di terze parti esterni al Sito.


Cookie per integrare prodotti e funzioni di software di terze parti

Questa tipologia di cookie integra funzionalità sviluppate da terzi all’interno delle pagine del Sito come le icone e le preferenze espresse nei social network al fine di condivisione dei contenuti del sito o per l’uso di servizi software di terze parti (come i software per generare le mappe e ulteriori software che offrono servizi aggiuntivi). Questi cookie sono inviati da domini di terze parti e da siti partner che offrono le loro funzionalità tra le pagine del Sito.


Cookie di profilazione
Sono quei cookie necessari a creare profili utenti al fine di inviare messaggi pubblicitari in linea con le preferenze manifestate dall’utente all’interno delle pagine del Sito.
Livingwithnets.it, secondo la normativa vigente, non è tenuto a chiedere consenso per i cookie tecnici e di analytics, in quanto necessari a fornire i servizi richiesti.
Per tutte le altre tipologie di cookie il consenso può essere espresso dall’Utente con una o più di una delle seguenti modalità:

 Mediante specifiche configurazioni del browser utilizzato o dei relativi programmi informatici utilizzati per navigare le pagine che compongono il Sito.

 Mediante modifica delle impostazioni nell’uso dei servizi di terze parti

Entrambe queste soluzioni potrebbero impedire all’utente di utilizzare o visualizzare parti del Sito.


Siti Web e servizi di terze parti
Il Sito potrebbe contenere collegamenti ad altri siti Web che dispongono di una propria informativa sulla privacy che può essere diverse da quella adottata da livingwithnets.it e che che quindi non risponde di questi siti.


Elenco cookie
Il sito non fa uso di cookie di profilazione ma utilizza solo cookie tecnici e di sessione come indicato nella seguente tabella. Ci riserviamo di aggiornare ed integrare tale tabella nel caso dovessimo utilizzare ulteriori cookies.

Alcuni dei servizi di seguito indicati potrebbero utilizzare Strumenti di Tracciamento per identificare l’Utente o utilizzare la tecnica del behavioral retargeting, ossia visualizzare annunci pubblicitari personalizzati in base agli interessi e al comportamento dell’Utente, rilevati anche al di fuori di questa Applicazione. Per avere maggiori informazioni in merito, ti suggeriamo di verificare le informative privacy dei rispettivi servizi.
Generalmente i servizi di questo tipo offrono la possibilità di disattivare tale tracciamento. Oltre a qualsiasi funzione di opt-out fornita da uno qualsiasi dei servizi elencati in questo documento, l’Utente può leggere di più su come disattivare gli annunci pubblicitari basati sugli interessi nell'apposita sezione "Come disattivare la pubblicità basata sugli interessi" in questo documento.

Segmenti di pubblico simili di Google Ads (Google Ireland Limited)

Segmenti di pubblico simili è un servizio di advertising e targeting comportamentale fornito da Google Ireland Limited che utilizza i Dati di Remarketing Google Ads per mostrare annunci pubblicitari a Utenti con comportamenti simili a quelli di altri Utenti che sono già nella lista di remarketing a causa del loro precedente utilizzo di questa Applicazione.
Sulla base di questi Dati, gli annunci personalizzati saranno mostrati agli Utenti suggeriti da Segmenti di pubblico simili di Google Ads.

Gli Utenti che non vogliono essere inclusi nei segmenti di pubblico simili, possono scegliere di non partecipare e disabilitare l'uso dei Strumenti di Tracciamento pubblicitari visitando le: Impostazioni annunci di Google.

Per una comprensione dell'utilizzo dei Dati da parte di Google, si prega di consultare le norme per i partner di Google.

Dati Personali trattati: Dati di utilizzo e Strumento di Tracciamento.

Luogo del trattamento: Irlanda – Privacy Policy – Opt Out.

Durata di archiviazione:

  • AID: 2 anni

  • ANID: 2 anni

  • Conversion: 3 mesi

  • DSID: 14 giorni

  • FCNEC: 1 anno

  • FLC: 10 secondi

  • FPAU: 3 mesi

  • FPGCLAW: 3 mesi

  • FPGCLDC: 3 mesi

  • FPGCLGB: 3 mesi

  • IDE: 2 anni

  • NID: 6 mesi

  • RUL: 1 anno

  • TAID: 14 giorni

  • __gads: 2 anni

  • __gsas: 2 anni

  • gac : 3 mesi

  • gacgb_ : 3 mesi

  • gclau: 3 mesi

  • gclaw: 3 mesi

  • gcldc: 3 mesi

  • gclgb: 3 mesi

  • gclgf: 3 mesi

  • gclha: 3 mesi

  • id: 2 anni

  • test_cookie: 15 minuti

Google AdSense (Google Ireland Limited)

Google AdSense è un servizio di advertising fornito da Google Ireland Limited. Questo servizio usa il Cookie “DoubleClick”, che traccia l’utilizzo di questa Applicazione ed il comportamento dell’Utente in relazione agli annunci pubblicitari, ai prodotti e ai servizi offerti.
L’Utente può decidere in qualsiasi momento di disabilitare tutti i cookie DoubleClick andando su: Impostazioni Annunci.

Per una comprensione dell'utilizzo dei dati da parte di Google, si prega di consultare le norme per i partner di Google.

Dati Personali trattati: Dati di utilizzo e Strumento di Tracciamento.

Luogo del trattamento: Irlanda – Privacy Policy – Opt Out.

Durata di archiviazione:

  • AID: 2 anni

  • ANID: 2 anni

  • Conversion: 3 mesi

  • DSID: 14 giorni

  • FCNEC: 1 anno

  • FLC: 10 secondi

  • FPAU: 3 mesi

  • FPGCLAW: 3 mesi

  • FPGCLDC: 3 mesi

  • FPGCLGB: 3 mesi

  • IDE: 2 anni

  • NID: 6 mesi

  • RUL: 1 anno

  • TAID: 14 giorni

  • __gads: 2 anni

  • __gsas: 2 anni

  • gac : 3 mesi

  • gacgb_ : 3 mesi

  • gclau: 3 mesi

  • gclaw: 3 mesi

  • gcldc: 3 mesi

  • gclgb: 3 mesi

  • gclgf: 3 mesi

  • gclha: 3 mesi

  • id: 2 anni

  • test_cookie: 15 minuti

Microsoft Advertising (Microsoft Corporation)

Microsoft Advertising è un servizio di advertising fornito da Microsoft Corporation.

Dati Personali trattati: Dati di utilizzo e Strumento di Tracciamento.

Luogo del trattamento: Stati Uniti – Privacy Policy – Opt Out.

Durata di archiviazione:

  • MUID: 2 anni

  • _uetmsclkid: 3 mesi

  • _uetmsclkid: non definita

  • _uetsid: 1 giorno

  • _uetsid: non definita

  • _uetvid: 2 anni

  • _uetvid: non definita

Pubblico simile di Facebook (Facebook Ireland Ltd)

Pubblico simile di Facebook è un servizio di advertising e di targeting comportamentale fornito da Facebook Ireland Ltd che utilizza i Dati raccolti attraverso il servizio Pubblico personalizzato di Facebook al fine di mostrare annunci pubblicitari a Utenti con comportamenti simili a Utenti che sono già in una lista di Pubblico personalizzato sulla base del loro precedente utilizzo di questa Applicazione o della loro interazione con contenuti rilevanti attraverso le applicazioni e i servizi di Facebook.
Sulla base di questi Dati, gli annunci personalizzati saranno mostrati agli Utenti suggeriti da Pubblico simile di Facebook.

Gli Utenti possono scegliere di non utilizzare i Strumenti di Tracciamento di Facebook per la personalizzazione degli annunci visitando questa pagina di opt-out .

Dati Personali trattati: Dati di utilizzo e Strumento di Tracciamento.

Luogo del trattamento: Irlanda – Privacy Policy – Opt Out.

Durata di archiviazione:

  • _fbp: 3 mesi

AddThis (Oracle Corporation)

AddThis è un servizio di advertising e behavioural targeting fornito da Oracle Corporation che mostra un widget che permette l’interazione con social network e piattaforme esterne così come la condivisione dei contenuti di questa Applicazione. AddThis connette inoltre le attività di questa Applicazione con il network pubblicitario di Oracle. Gli Utenti possono disattivare l’utilizzo da parte di Oracle di Strumenti di Tracciamento per la personalizzazione degli annunci visitando la pagina di opt-out.

Dati Personali trattati: Dati di utilizzo, Identificativo univoco universale (UUID) e Strumento di Tracciamento.

Luogo del trattamento: Stati Uniti – Privacy Policy – Opt out.

Durata di archiviazione:

  • UID: 2 anni

  • __atuvc: 2 anni

  • __atuvs: 30 minuti

Google Campaign Manager 360 (Google Ireland Limited)

Google Campaign Manager 360 è un servizio di advertising fornito da Google Ireland Limited con il quale il Titolare può condurre campagne pubblicitarie congiuntamente a reti pubblicitarie esterne con cui il Titolare, se non in altro modo specificato nel presente documento, non ha alcuna relazione diretta. Google Campaign Manager 360 consente inoltre al Titolare di misurare le performace della campagna pubblicitaria, di gestire piazzamenti, annunci pubblicitari, creatività e di verificare la corretta implementazione dei tag (come la presenza di errori nella formattazione dell’annuncio). Questa Applicazione, attraverso Google Campaign Manager 360, raccoglie e trasmette Dati relativi all’Utente ai media buyer che effettuano offerte per l’acquisto del suo inventario. Questi buyer potrebbero raccogliere e memorizzare tali Dati a scopo di retargeting o per altre finalità pubblicitarie.

Gli Utenti possono decidere di disabilitare tutti i Strumenti di Tracciamento per la personalizzazione degli annunci visitando la pagina Google Impostazioni annunci.

Per una comprensione dell'utilizzo dei Dati da parte di Google, si prega di consultare le norme per i partner di Google.

Dati Personali trattati: Dati di utilizzo, posizione geografica e Strumento di Tracciamento.

Luogo del trattamento: Irlanda – Privacy Policy.

Durata di archiviazione:

  • AID: 2 anni

  • ANID: 2 anni

  • Conversion: 3 mesi

  • DSID: 14 giorni

  • FCNEC: 1 anno

  • FLC: 10 secondi

  • FPAU: 3 mesi

  • FPGCLAW: 3 mesi

  • FPGCLDC: 3 mesi

  • FPGCLGB: 3 mesi

  • IDE: 2 anni

  • NID: 6 mesi

  • RUL: 1 anno

  • TAID: 14 giorni

  • __gads: 2 anni

  • __gsas: 2 anni

  • gac : 3 mesi

  • gacgb_ : 3 mesi

  • gclau: 3 mesi

  • gclaw: 3 mesi

  • gcldc: 3 mesi

  • gclgb: 3 mesi

  • gclgf: 3 mesi

  • gclha: 3 mesi

  • id: 2 anni

  • test_cookie: 15 minuti

Google DV360 (Google Ireland Limited)

Google DV360 è un servizio di advertising fornito da Google Ireland Limited che consente al Titolare di gestire e pianificare campagne pubblicitarie. Ciò include il design degli annunci, la possibilità di mostrare tali annunci al giusto pubblico di riferimento, presentare proposte basate su processi decisionali automatizzati (cosiddette “offerte automatiche”) e misurare le performance delle campagne pubblicitarie.
Gli Utenti possono decidere di disabilitare tutti i Strumenti di Tracciamento per la personalizzazione degli annunci visitando la pagina Google Impostazioni annunci.

Per una comprensione dell'utilizzo dei Dati da parte di Google, si prega di consultare le norme per i partner di Google.

Dati Personali trattati: Dati di utilizzo e Strumento di Tracciamento.

Luogo del trattamento: Irlanda – Privacy Policy.

Durata di archiviazione:

  • AID: 2 anni

  • ANID: 2 anni

  • Conversion: 3 mesi

  • DSID: 14 giorni

  • FCNEC: 1 anno

  • FLC: 10 secondi

  • FPAU: 3 mesi

  • FPGCLAW: 3 mesi

  • FPGCLDC: 3 mesi

  • FPGCLGB: 3 mesi

  • IDE: 2 anni

  • NID: 6 mesi

  • RUL: 1 anno

  • TAID: 14 giorni

  • __gads: 2 anni

  • __gsas: 2 anni

  • gac : 3 mesi

  • gacgb_ : 3 mesi

  • gclau: 3 mesi

  • gclaw: 3 mesi

  • gcldc: 3 mesi

  • gclgb: 3 mesi

  • gclgf: 3 mesi

  • gclha: 3 mesi

  • id: 2 anni

  • test_cookie: 15 minuti

Google Ad Manager (Google Ireland Limited)

Google Ad Manager è un servizio di advertising fornito da Google Ireland Limited con il quale il Titolare può condurre campagne pubblicitarie congiuntamente a reti pubblicitarie esterne con cui il Titolare, se non in altro modo specificato nel presente documento, non ha alcuna relazione diretta.
Per una comprensione dell'utilizzo dei Dati da parte di Google, si prega di consultare le norme per i partner di Google.
Questo servizio usa il Cookie“DoubleClick”, che traccia l’utilizzo di questa Applicazione ed il comportamento dell’Utente in relazione agli annunci pubblicitari, ai prodotti e ai servizi offerti.

L’Utente può decidere in qualsiasi momento di disabilitare tutti i cookie DoubleClick andando su: Impostazioni Annunci.

Dati Personali trattati: Dati di utilizzo e Strumento di Tracciamento.

Luogo del trattamento: Irlanda – Privacy Policy.

Durata di archiviazione:

  • AID: 2 anni

  • ANID: 2 anni

  • Conversion: 3 mesi

  • DSID: 14 giorni

  • FCNEC: 1 anno

  • FLC: 10 secondi

  • FPAU: 3 mesi

  • FPGCLAW: 3 mesi

  • FPGCLDC: 3 mesi

  • FPGCLGB: 3 mesi

  • IDE: 2 anni

  • NID: 6 mesi

  • RUL: 1 anno

  • TAID: 14 giorni

  • __gads: 2 anni

  • __gsas: 2 anni

  • gac : 3 mesi

  • gacgb_ : 3 mesi

  • gclau: 3 mesi

  • gclaw: 3 mesi

  • gcldc: 3 mesi

  • gclgb: 3 mesi

  • gclgf: 3 mesi

  • gclha: 3 mesi

  • id: 2 anni

  • test_cookie: 15 minuti

Rakuten Advertising (Rakuten Marketing LLC dba Rakuten Advertising)

Rakuten Advertising è un servizio di advertising fornito da Rakuten Marketing LLC dba Rakuten Advertising.

Dati Personali trattati: Dati di utilizzo, Identificativo univoco universale (UUID) e Strumento di Tracciamento.

Luogo del trattamento: Unione europea – Privacy Policy – Opt out.

Durata di archiviazione:

  • __rmccpa: non definita

  • __rmco: non definita

  • __rmco_cs: non definita

  • __rmco_jsv: non definita

  • __rmco_jsver: non definita

  • __rmts: non definita

  • cID: 2 anni

  • ccv2: 2 anni

  • icts: 2 anni

  • ls_token: 6 anni

  • lsclick_mid*: 2 anni

  • lsn_statp: 2 anni

  • m*: durata della sessione

  • mf_token: 6 anni

  • nextperf_token: 6 anni

  • opt-out: 6 anni

  • pID: 2 anni

  • rmStore*: 1 mese

  • rmStore*: non definita

  • rmgconsent: 2 anni

  • rmlconsent_*: 2 anni

  • rmuid: 2 anni

  • rp: 2 anni

  • rt_status: 6 anni

  • tc: 2 anni

  • uuid: 2 anni

Tradedoubler (Tradedoubler)

Tradedoubler è un servizio di advertising fornito da TradeDoubler AG.
Per avere informazioni sull'uso dei Cookie di TradeDoubler e su come bloccarli: Tradedoubler's targeting technologies.

Dati Personali trattati: Dati di utilizzo e Strumento di Tracciamento.

Luogo del trattamento: Svezia – Privacy Policy – Opt Out.

Criteo (Criteo SA)

Criteo è un servizio di advertising fornito da Criteo SA.

Dati Personali trattati: Dati di utilizzo e Strumento di Tracciamento.

Luogo del trattamento: Francia – Privacy Policy – Opt Out.

Durata di archiviazione:

  • criteo_fast_bid: 7 giorni

  • criteo_fast_bid_expires: 7 giorni

  • cto_bundle: 2 anni

  • cto_bundle: non definita

  • cto_optout: 5 anni

  • cto_optout: non definita

  • optout: 5 anni

  • uid: 2 anni

RTB House (RTB House S.A.)

RTB House è un servizio di advertising fornito da RTB House S.A.

Dati Personali trattati: Dati di utilizzo e Strumento di Tracciamento.

Luogo del trattamento: Polonia – Privacy Policy – Opt out.

Durata di archiviazione:

  • ts: 1 anno

  • u: 1 anno

Yandex (YANDEX, LLC)

Yandex è un servizio di advertising fornito da YANDEX, LLC.

Dati Personali trattati: Dati di utilizzo e Strumento di Tracciamento.

Luogo del trattamento: Russia – Privacy Policy.



Come disabilitare i cookie mediante configurazione del browser

Se desideri approfondire le modalità con cui il tuo browser memorizza i cookies durante la tua navigazione, ti invitiamo a seguire questi link sui siti dei rispettivi fornitori.

  • Firefox: https://support.mozilla.org/it/kb/Gestione%20dei%20cookie

  • Internet Explorer: https://support.microsoft.com/it-it/help/17442/windows-internet-explorer-delete-manage-cookies

  • Chrome: https://support.google.com/chrome/answer/95647?hl=it%20

  • Safari: https://support.apple.com/kb/PH19214?viewlocale=it_IT&locale=en_US

  • Safari IOS: https://support.apple.com/it-it/HT201265



Titolare del trattamento

Titolare del trattamento dei dati è Smart srl, sede legale sita inVia Tortona, 33 20144 Milano - telefono 0289954040, www.paginemail.it, info@paginemail.it, PEC: smart-italia@pec.it
Ultimo aggiornamento 13 aprile 2023




Condizioni generali

1. VALIDITÀ DI PREMESSE ED ALLEGATI

Premesse ed allegati fanno patto.

2. DEFINIZIONI

Ove non espressamente specificato, i seguenti termini avranno il significato di seguito specificato: “Fornitore”: SMART S.r.l. p.i. 02216470845 sede in Via Tortona, 33 20144 Milano “Cliente”: la persona giuridica, società, ente, ditta individuale, libero professionista i cui dati sono presenti nel registro internet delle imprese italiane denominato “Paginemail Italia”. “Parti”: collettivamente, il Cliente e il Fornitore. “Paginemail”: il registro internet delle imprese italiane denominato “Paginemail Italia” di cui è proprietario e titolare del trattamento la SMART S.r.l. p.i. 02216470845 sede in Via Tortona, 33 20144 Milano “Servizio”: l’insieme delle prestazioni erogate dal Fornitore a favore del Cliente e meglio descritte nel successivo articolo 4 di queste condizioni generali.

3. OGGETTO DEL CONTRATTO

Assumendo un’obbligazione di mezzi, il Fornitore eroga al Cliente servizi di inserimento in anagrafiche consultabili via internet, comunicazione dei dati del Cliente alle altre aziende inserite nel database, la consultazione del database, invio della newsletter alle aziende che ne facciano richiesta e altri servizi che possono essere offerti durante il periodo di validità del contratto. indicizzazione e posizionamento nel motore di ricerca interno del Fornitore, indicizzazione nei motori di ricerca Google, Yahoo, Bing, Cuil ...

4. OBBLIGAZIONI A CARICO DEL FORNITORE

  • a. Inserimento dei dati del Cliente in PagineMail L’inserimento dei dati del Cliente in una scheda cliente di PagineMail comprende: ragione sociale - indirizzo, città, cap e provincia - settore merceologico - indirizzo mail - telefono, fax - url del proprio sito internet - descrizione aziendale - parole chiave - logo aziendale - foto fornite dal cliente - video fornito dal cliente - nome del Responsabile - Prodotti e Servizi trattati

  • b. Disponibilità del Servizio Salvi caso fortuito, forza maggiore, indisponibilità di accesso, fatto del terzo e interventi di manutenzione, il Servizio è disponibile 24 ore su 24.

  • c. Regime di circolazione dei dati del Cliente Fermo restando quanto previsto dall’informativa sul trattamento dei dati personali, il Fornitore, a fronte dell’esplicito consenso del Cliente potrà inviare a quest’ultimo delle comunicazioni commerciali, senza tuttavia cedere i dati in questione ad altri soggetti.

  • d. Sicurezza Il Fornitore tratta i dati del Cliente, inclusi quelli relativi al pagamento del Servizio, in conformità alle prescrizioni della normativa sul trattamento dei dati personali. Al fine di rispettare gli obblighi di sicurezza imposti dalla legge e di proteggere le proprie infrastrutture, il Fornitore potrà utilizzare sistemi antivirus, antispam, intrusion detection e quant’altro ritenuto necessario; allo stesso modo e per gli stessi fini, il Fornitore potrà sospendere cautelativamente l’accesso del Cliente al Servizio e/o la disponibilità del servizio stesso senza che il Cliente possa lamentare e/o richiedere danni derivanti da quanto stabilito in questo articolo.

  • e. Limitazioni di garanzia e responsabilità Il Fornitore assume un’obbligazione di mezzi e garantisce l’erogazione del servizio limitatamente a quanto sotto il suo diretto controllo; di conseguenza, vista anche la natura della rete internet, salvi i limiti inderogabili per legge il Fornitore declina ogni responsabilità e non presta garanzia alcuna per danni anche indiretti di qualsiasi tipo derivanti dalla indisponibilità del Servizio derivante da fatto del terzo (come, a titolo meramente esemplificativo e non esaustivo, interruzione di connettività, danneggiamento informatico) e/o derivanti dall’uso del Servizio da parte del Cliente e/o di terzi. Il Fornitore farà del proprio meglio per tenere aggiornati i dati del Cliente, pur spettando a quest’ultimo l’obbligo di comunicare al Fornitore ogni variazione rilevante ai fini dell’erogazione del Servizio. Il Fornitore non può garantire il permanere del posizionamento raggiunto dal Cliente nei motori di ricerca diversi da quello interno di PagineMail.

5. OBBLIGAZIONI A CARICO DEL CLIENTE

  • a. Predisposizione di locali e attrezzature Il Cliente predispone a proprie cura e spese tutto quanto necessario alla fruizione del Servizio (a titolo meramente esemplificativo: locali, attrezzature, linee internet, sistemi di sicurezza, verifica di accessibilità tramite terminali mobili e smartphone, cablaggi).

  • b. Rispetto obblighi di legge Il Cliente adotta, sempre a propria cura e spese, tutte le prescrizioni stabilite dalla normativa vigente per la fruizione del Servizio.

  • c. Adozione di misure di sicurezza Il Cliente protegge con adeguate misure di sicurezza tutte le informazioni relative al Servizio, ivi espressamente inclusi i codici per l’accesso alla propria pagina personale e segnala al Fornitore ogni evento anomalo, ivi espressamente compresa la presa di cognizione, anche accidentale, da parte di terzi delle informazioni in questione.

  • d. Accettazione valore probatorio dei log Il Cliente accetta sin d’ora il valore probatorio dei log (registri di collegamento) generati dai sistemi informatici nella disponibilità del Fornitore.

  • e. Titolarità, attendibilità e aggiornamento dei dati inseriti in PagineMail Il Cliente dichiara di avere il diritto di inserire i dati della propria ditta/azienda in PagineMail, che i dati in questione sono attendibili e costantemente aggiornati.

  • f. Scelta delle keyword Il Cliente è unico responsabile della scelta delle keyword per l’indicizzazione della propria attività e si obbliga a selezionarle nel pieno rispetto della normativa vigente, con particolare riferimento alla tutela dei segni distintivi, della reputazione e della concorrenza oltre che in materia di falsità e contraffazione. Il Cliente riconosce, in ogni caso, il diritto del Fornitore di non utilizzare, cancellare e di rifiutare l’utilizzo di keyword che il Fornitore ritenesse inappropriate, con particolare ma non esclusivo riferimento a parole sgradevoli o ingannevoli. Il Cliente accetta, altresì, che le stesse keyword potranno essere usate anche per altri Clienti del Fornitore.

  • g. Disponibilità a ricevere invii pubblicitari Il Cliente accetta di ricevere comunicazioni commerciali da parte del Fornitore o da terze parti che abbiano incaricato il Fornitore dell’invio.

  • h. Comunicazione di variazioni di dati e domicilio e indirizzo di posta elettronica Il Cliente comunica tempestivamente e in forma scritta ogni variazione dei dati relativi al proprio domicilio fiscale. In assenza della comunicazione di cui al punto precedente, il domicilio valido a ogni effetto di legge rimarrà quello precedentemente dichiarato e risultante dal Servizio.

6. DURATA IL CONTRATTO

Il contratto per la fornitura del Servizio ha durata di 1 (uno) anno dalla data di attivazione del Servizio e si intende tacitamente rinnovato di anno in anno, salvo disdetta da inviarsi a SMART Amministrazione, Via Tortona, 33 20144 Milano, con lettera raccomandata A.R. almeno 60 giorni prima rispetto alla scadenza naturale.

7. ASSENZA DI COSTI ECONOMICI

Il Servizio è erogato senza richiedere un corrispettivo economico al Cliente

8. RECESSO

Ai sensi dell'art. 1456 c.c. il Fornitore può recedere dal presente contratto nel caso in cui, a proprio insindacabile giudizio, ravvisi comportamenti del Cliente non conformi alla natura dei servizi o in qualsiasi modo lesivi della propria immagine o anche potenzialmente lesivi degli interessi degli altri clienti o comunque impropri rispetto alle finalità del servizio. Poiché i servizi sono resi a titolo gratuito a fini pubblicitari e/o promozionali il Fornitore si riserva in ogni caso il diritto di cessare la fornitura del Servizio quando vengano meno gli interessi pubblicitari e/o promozionali che costituiscono il fine del Servizio stesso senza che ciò possa fa sorgere in capo al Cliente qualsiasi diritto a chiedere indennizzi, risarcimenti e quant’altro assimilato e/o assimilabile. Le Parti possono altresì recedere anticipatamente dal presente Contratto con preavviso scritto, inviato via Raccomandata A/R o via e-mail ai rispettivi indirizzi, con un preavviso di 30 gg rispetto alla data di recesso richiesta. Nessun risarcimento danni potrà essere richiesto al Fornitore per danni diretti e/o indiretti causati dalla mancata utilizzazione dei servizi.

9. RISOLUZIONE DEL CONTRATTO

Fatto in ogni caso il diritto del Fornitore al risarcimento dei danni subiti, questo contratto si risolve di diritto ai sensi dell’art. 1456 C.c. nel caso di abuso del Servizio da parte del Cliente, comunicazione non autorizzata da legittimo titolare dei dati aziendali, comunicazione di dati falsi, mancato aggiornamento dei dati precedentemente comunicati. Il Fornitore comunicherà al Cliente a mezzo raccomandata a/r la sussistenza di una causa di risoluzione. Il Fornitore tratterrà in acconto sui maggiori danni subiti l’eventuale quota di Servizio pagata e non goduta dal Cliente.

10. CLAUSOLA COMPROMISSORIA

A pena di improcedibilità dell’azione giudiziaria, le Parti faranno del loro meglio per comporre bonariamente qualsiasi controversia dovesse insorgere in relazione al Servizio, utilizzando se del caso il servizio di conciliazione messo a disposizione dalla Camera di commercio di Milano.

11. LEGGE APPLICABILE E FORO COMPETENTE

Questo contratto è soggetto alla legge italiana. Se la conciliazione di cui all’articolo precedente dovesse avere esito negativo, competente in via esclusiva per ogni controversia relativa al Servizio è il foro di Milano, con espressa esclusione di ogni altro foro eventualmente configurabile.

12. INFORMATIVA SUL TRATTAMENTO DEI DATI PERSONALI

Ai sensi della vigente normativa in materia di dati personali nel quadro del Regolamento Ue 2016/679, il Fornitore tratta prevalentemente con mezzi elettronici i dati conferiti dal Cliente per gli scopi descritti nel presente contratto e li rende disponibili gratuitamente, in tutto o in parte, agli altri clienti. Può compiere aggregazioni ed elaborazioni statistiche e comunicare i dati a terzi anche per finalità di marketing diretto. Trattandosi di dati relativi allo svolgimento di attività economiche, ai sensi della vigente normativa in materia di dati personali, il trattamento non è subordinato al consenso dell'interessato. Con il conferimento dei dati all'atto dell'iscrizione, e in aggiunta con l’accettazione di queste condizioni generali, il Cliente accetta comunque il trattamento da parte della società, compreso l'utilizzo dei dati stessi per l'invio di comunicazioni commerciali dal parte del Fornitore o di terzi ai quali i dati stessi siano stati comunicati per le stesse finalità per le quali sono stati conferiti. Il Cliente potrà esercitare i propri diritti garantiti dalla vigente normativa in materia di dati personali rivolgendosi direttamente al Titolare del trattamento, presso la sede legale della SMART S.r.l. in Via Tortona, 33 20144 Milano oppure inviando una e-mail all’indirizzo privacy@paginemail.it con espresso avviso che la richiesta di cessazione del trattamento potrà avere come effetto l'impossibilità di fornitura dei servizi previsti da parte della Società, con le conseguenze di cui all’art.9 di queste condizioni generali. In caso di fusione o di trasferimento del Fornitore ad altra impresa, questa potrà subentrare nel trattamento con le medesime finalità. Fatti salvi quelli la cui conservazione è obbligatoria per legge (dati di fatturazione, pagamenti e quant’altro) i dati verranno conservati per la durata del Servizio e successivamente distrutti a cura del Fornitore.

13. ESCLUSIONE DELLO STATUS DI CONSUMATORE

Le Parti stipulano questo contratto nella rispettiva condizione di operatori professionali e pertanto attestano di non rivestire lo status di consumatore così come definito dal Codice del consumo.

+PRIVACY_POLICY

Note legali e privacy

INFORMATIVA SUL TRATTAMENTO DEI DATI PERSONALI

In questa pagina si descrivono le modalità di gestione del presente sito in riferimento al trattamento dei dati personali degli utenti che li consultano. Si tratta di un’informativa che è resa in conformità alla vigente normativa in materia dei dati personali per gli utenti che interagiscono con i servizi del presente sito nel quadro del Regolamento Ue 2016/679. L’informativa è resa solo per il presente sito e non anche per altri siti web eventualmente consultati dall’utente tramite i nostri link.

IL “TITOLARE” DEL TRATTAMENTO

A seguito della consultazione del sito possono essere trattati dati relativi a persone identificate o identificabili. Il “titolare” del loro trattamento è Smart srl, sede legale sita inVia Tortona, 33 20144 Milano - telefono 0289954040, www.paginemail.it, info@paginemail.it, PEC: paginemail@pec.it

LUOGO DI TRATTAMENTO DEI DATI

I trattamenti connessi ai servizi web e sono curati solo da personale tecnico dell’Ufficio incaricato del trattamento, oppure da eventuali incaricati di occasionali operazioni di manutenzione. Nessun dato derivante dal servizio web viene comunicato o diffuso.

FINALITÀ DEL TRATTAMENTO E BASE GIURIDICA DEL TRATTAMENTO

I dati personali forniti dagli utenti che inoltrano richieste o intendono utilizzare servizi o prodotti offerti tramite il sito nonché ricevere ulteriori specifici contenuti sono utilizzati al solo fine di dare riscontro alle richieste o eseguire il servizio o la prestazione richiesta e sono comunicati a terzi nel solo caso in cui ciò sia a tal fine necessario. Base giuridica di questi trattamenti è la necessità di dare riscontro alle richieste degli interessati o eseguire attività previste dagli accordi definiti con gli interessati. Con il consenso espresso dell’utente i dati potranno essere usati per attività di comunicazione commerciale relativi ad offerte di prodotti o servizi ulteriori del titolare. Base giuridica di questo trattamento è il consenso liberamente espresso dall’interessato. Al di fuori di queste ipotesi i dati di navigazione degli utenti vengono conservati per il tempo strettamente necessario alla gestione delle attività di trattamento nei limiti previsti dalla legge

TIPI DI DATI TRATTATI

DATI DI NAVIGAZIONE

I sistemi informatici e le procedure software preposte al funzionamento del sito acquisiscono, nel corso del loro normale esercizio, alcuni dati personali la cui trasmissione è implicita nell’uso dei protocolli di comunicazione di Internet. Si tratta di informazioni che non sono raccolte per essere associate a interessati identificati, ma che per loro stessa natura potrebbero, attraverso elaborazioni ed associazioni con dati detenuti da terzi, permettere di identificare gli utenti. In questa categoria di dati rientrano gli indirizzi IP o i nomi a dominio dei computer utilizzati dagli utenti che si connettono al sito, gli indirizzi in notazione URI (Uniform Resource Identifier) delle risorse richieste, l’orario della richiesta, il metodo utilizzato nel sottoporre la richiesta al server, la dimensione del file ottenuto in risposta, il codice numerico indicante lo stato della risposta data dal server (buon fine, errore, ecc.) ed altri parametri relativi al sistema operativo e all’ambiente informatico dell’utente. Questi dati vengono utilizzati al solo fine di ricavare informazioni statistiche anonime sull’uso del sito e per controllarne il corretto funzionamento e vengono cancellati dopo l’elaborazione. I dati potrebbero essere utilizzati per l’accertamento di responsabilità in caso di ipotetici reati informatici ai danni del sito.

DATI FORNITI VOLONTARIAMENTE DALL’UTENTE

L’invio facoltativo, esplicito e volontario di posta elettronica agli indirizzi indicati sul sito comporta la successiva acquisizione dell’indirizzo del mittente, necessario per rispondere alle richieste, nonché degli eventuali altri dati personali inseriti nella missiva. Specifiche informative di sintesi verranno progressivamente riportate o visualizzate nelle pagine del sito predisposte per particolari servizi a richiesta.

COOKIES

Per cookies si intende un elemento testuale che viene inserito nel disco fisso di un computer solo in seguito ad autorizzazione. I cookies hanno la funzione di snellire l’analisi del traffico su web o di segnalare quando un sito specifico viene visitato e consentono alle applicazioni web di inviare informazioni a singoli utenti. Nessun dato personale degli utenti viene in proposito acquisito dal sito. Non viene fatto uso di cookies per la trasmissione di informazioni di carattere personale, né vengono utilizzati c.d. cookies persistenti di alcun tipo, ovvero sistemi per il tracciamento degli utenti. L’uso di c.d. cookies di sessione è strettamente limitato alla trasmissione di identificativi di sessione (costituiti da numeri casuali generati dal server) necessari per consentire l’esplorazione sicura ed efficiente del sito. I c.d. cookies di sessione utilizzati nel sito evitano il ricorso ad altre tecniche informatiche potenzialmente pregiudizievoli per la riservatezza della navigazione degli utenti e non consentono l’acquisizione di dati personali identificativi dell’utente.

FACOLTATIVITÀ DEL CONFERIMENTO DEI DATI

A parte quanto specificato per i dati di navigazione, l’utente è libero di fornire i dati personali per richiedere i servizi offerti dal Titolare. Il loro mancato conferimento può comportare l’impossibilità di ottenere quanto richiesto.

MODALITÀ DEL TRATTAMENTO E TEMPI DI CONSERVAZIONE DEI DATI

I dati personali sono trattati con strumenti automatizzati per il tempo strettamente necessario a conseguire gli scopi per cui sono stati raccolti. Specifiche misure di sicurezza sono osservate per prevenire la perdita dei dati, usi illeciti o non corretti ed accessi non autorizzati. I dati sono conservati per il tempo strettamente necessario per il perseguimento delle finalità indicate nella presente informativa e saranno cancellati al termine di tale periodo, salvo che i dati stessi debbano essere conservati per obblighi di legge o per far valere un diritto in sede giudiziaria.

DIRITTI DEGLI INTERESSATI

Nei limiti e alle condizioni previste dalla legge, il titolare ha l’obbligo di rispondere alle richieste dell’interessato in merito ai dati personali che lo riguardano. In particolare, in base alla vigente normativa:

  1. L'interessato ha il diritto di ottenere dal titolare del trattamento la conferma che sia o meno in corso un trattamento di dati personali che lo riguardano e in tal caso, di ottenere l'accesso ai dati personali e alle seguenti informazioni: le finalità del trattamento; le categorie di dati personali in questione; i destinatari o le categorie di destinatari a cui i dati personali sono stati o saranno comunicati, in particolare se destinatari di paesi terzi o organizzazioni internazionali; quando possibile, il periodo di conservazione dei dati personali previsto oppure, se non è possibile, i criteri utilizzati per determinare tale periodo; l'esistenza del diritto dell'interessato di chiedere al titolare del trattamento la rettifica o la cancellazione dei dati personali o la limitazione del trattamento dei dati personali che lo riguardano o di opporsi al loro trattamento; il diritto di proporre reclamo a un'autorità di controllo; qualora i dati non siano raccolti presso l'interessato, tutte le informazioni disponibili sulla loro origine; l'esistenza di un processo decisionale automatizzato, compresa la profilazione

  2. L'interessato ha il diritto di ottenere dal titolare del trattamento la rettifica dei dati personali inesatti che lo riguardano senza ingiustificato ritardo. Tenuto conto delle finalità del trattamento, l'interessato ha il diritto di ottenere l'integrazione dei dati personali incompleti, anche fornendo una dichiarazione integrativa.

  3. L'interessato ha il diritto di ottenere dal titolare del trattamento la cancellazione dei dati personali che lo riguardano senza ingiustificato ritardo e il titolare del trattamento ha l'obbligo di cancellare senza ingiustificato ritardo i dati personali nei limiti e nei casi previsti dalla vigente normativa. Il titolare del trattamento comunica a ciascuno dei destinatari cui sono stati trasmessi i dati personali le eventuali rettifiche o cancellazioni o limitazioni del trattamento nei limiti e nelle forme previste dalla vigente normativa.

  4. L'interessato ha il diritto di ottenere dal titolare del trattamento la limitazione del trattamento.

  5. L'interessato ha il diritto di ricevere in un formato strutturato, di uso comune e leggibile da dispositivo automatico i dati personali che lo riguardano forniti a un titolare del trattamento e ha il diritto di trasmettere tali dati a un altro titolare del trattamento senza impedimenti da parte del titolare del trattamento cui li ha forniti.

Per esercitare i diritti sopra elencati, l’interessato dovrà presentare richiesta utilizzando i seguenti punti di contatto. Le richieste vanno rivolte al Titolare al seguente indirizzo Smart srl, sede legale sita in Via Tortona, 33 20144 Milano - telefono 0289954040, www.paginemail.it, info@paginemail.it, PEC: paginemail@pec.it La presente versione dell’informativa sul trattamento dei dati personali è stata aggiornata il giorno 07 maggio 2021.



Cookie policy

Il presente documento è redatto dal titolare del trattamento (di seguito “TITOLARE”), in qualità di titolare del trattamento dei dati personali derivanti dalla navigazione all’interno del presente sito web (di seguito il “Sito”).

TITOLARE intende informare l’utente che il Sito utilizza cookie tecnici per garantire un’ottimale esperienza di navigazione. La presente policy sui cookies (“Policy sui Cookies”), che deve essere letta ad integrazione delle informazioni rese nella Privacy Policy, serve per descrivere i tipi di cookies e altre tecnologie usate sul Sito, nonché i motivi e le condizioni di utilizzo dei cookies. Informiamo che alcuni cookies sono necessari per consentire la corretta navigazione del Sito e continuando a navigare si acconsente all’utilizzo di tali cookie. L’Utente può comunque evitare l’installazione di cookie configurando le impostazioni del suo browser oppure disabilitando l’uso dei siti tramite il browser direttamente, come specificato nel dettaglio di seguito.


Uso dei cookie

Il "Sito" utilizza i Cookie per rendere i propri servizi semplici e efficienti per l’utenza che visiona le pagine di livingwithnets.it. Gli utenti che visionano il Sito, vedranno inserite delle quantità minime di informazioni nei dispositivi in uso, che siano computer e periferiche mobili, in piccoli file di testo denominati “cookie” salvati nelle directory utilizzate dal browser web dell’Utente. Vi sono vari tipi di cookie, alcuni per rendere più efficace l’uso del Sito, altri per abilitare determinate funzionalità. Analizzandoli in maniera particolareggiata i nostri cookie permettono di:
• memorizzare le preferenze inserite;
• evitare di reinserire le stesse informazioni più volte durante la visita quali ad esempio nome utente e password;
• analizzare l’utilizzo dei servizi e dei contenuti forniti da livingwithnets.it per ottimizzarne l’esperienza di navigazione e i servizi offerti.


Tipologie di Cookie

Cookie tecnici
Questa tipologia di cookie permette il corretto funzionamento di alcune sezioni del Sito. Sono di due categorie: persistenti e di sessione:
• persistenti: una volta chiuso il browser non vengono distrutti ma rimangono fino ad una data di scadenza preimpostata
• di sessione: vengono distrutti ogni volta che il browser viene chiuso

Questi cookie, inviati sempre dal nostro dominio, sono necessari a visualizzare correttamente il sito e in relazione ai servizi tecnici offerti, verranno quindi sempre utilizzati e inviati, a meno che l’utenza non modifichi le impostazioni nel proprio browser (inficiando così la visualizzazione delle pagine del sito).

Titolare del trattamento

Titolare del trattamento dei dati è Smart srl, sede legale sita inVia Tortona, 33 20144 Milano - telefono 0289954040, www.paginemail.it, info@paginemail.it, PEC: smart-italia@pec.it
Ultimo aggiornamento 13 aprile 2023







Condizioni generali

1. VALIDITÀ DI PREMESSE ED ALLEGATI

Premesse ed allegati fanno patto.

2. DEFINIZIONI

Ove non espressamente specificato, i seguenti termini avranno il significato di seguito specificato: “Fornitore”: SMART S.r.l. p.i. 02216470845 sede in Via Tortona, 33 20144 Milano “Cliente”: la persona giuridica, società, ente, ditta individuale, libero professionista i cui dati sono presenti nel registro internet delle imprese italiane denominato “Paginemail Italia”. “Parti”: collettivamente, il Cliente e il Fornitore. “Paginemail”: il registro internet delle imprese italiane denominato “Paginemail Italia” di cui è proprietario e titolare del trattamento la SMART S.r.l. p.i. 02216470845 sede in Via Tortona, 33 20144 Milano “Servizio”: l’insieme delle prestazioni erogate dal Fornitore a favore del Cliente e meglio descritte nel successivo articolo 4 di queste condizioni generali.

3. OGGETTO DEL CONTRATTO

Assumendo un’obbligazione di mezzi, il Fornitore eroga al Cliente servizi di inserimento in anagrafiche consultabili via internet, comunicazione dei dati del Cliente alle altre aziende inserite nel database, la consultazione del database, invio della newsletter alle aziende che ne facciano richiesta e altri servizi che possono essere offerti durante il periodo di validità del contratto. indicizzazione e posizionamento nel motore di ricerca interno del Fornitore, indicizzazione nei motori di ricerca Google, Yahoo, Bing, Cuil ...

4. OBBLIGAZIONI A CARICO DEL FORNITORE

  • a. Inserimento dei dati del Cliente in PagineMail L’inserimento dei dati del Cliente in una scheda cliente di PagineMail comprende: ragione sociale - indirizzo, città, cap e provincia - settore merceologico - indirizzo mail - telefono, fax - url del proprio sito internet - descrizione aziendale - parole chiave - logo aziendale - foto fornite dal cliente - video fornito dal cliente - nome del Responsabile - Prodotti e Servizi trattati

  • b. Disponibilità del Servizio Salvi caso fortuito, forza maggiore, indisponibilità di accesso, fatto del terzo e interventi di manutenzione, il Servizio è disponibile 24 ore su 24.

  • c. Regime di circolazione dei dati del Cliente Fermo restando quanto previsto dall’informativa sul trattamento dei dati personali, il Fornitore, a fronte dell’esplicito consenso del Cliente potrà inviare a quest’ultimo delle comunicazioni commerciali, senza tuttavia cedere i dati in questione ad altri soggetti.

  • d. Sicurezza Il Fornitore tratta i dati del Cliente, inclusi quelli relativi al pagamento del Servizio, in conformità alle prescrizioni della normativa sul trattamento dei dati personali. Al fine di rispettare gli obblighi di sicurezza imposti dalla legge e di proteggere le proprie infrastrutture, il Fornitore potrà utilizzare sistemi antivirus, antispam, intrusion detection e quant’altro ritenuto necessario; allo stesso modo e per gli stessi fini, il Fornitore potrà sospendere cautelativamente l’accesso del Cliente al Servizio e/o la disponibilità del servizio stesso senza che il Cliente possa lamentare e/o richiedere danni derivanti da quanto stabilito in questo articolo.

  • e. Limitazioni di garanzia e responsabilità Il Fornitore assume un’obbligazione di mezzi e garantisce l’erogazione del servizio limitatamente a quanto sotto il suo diretto controllo; di conseguenza, vista anche la natura della rete internet, salvi i limiti inderogabili per legge il Fornitore declina ogni responsabilità e non presta garanzia alcuna per danni anche indiretti di qualsiasi tipo derivanti dalla indisponibilità del Servizio derivante da fatto del terzo (come, a titolo meramente esemplificativo e non esaustivo, interruzione di connettività, danneggiamento informatico) e/o derivanti dall’uso del Servizio da parte del Cliente e/o di terzi. Il Fornitore farà del proprio meglio per tenere aggiornati i dati del Cliente, pur spettando a quest’ultimo l’obbligo di comunicare al Fornitore ogni variazione rilevante ai fini dell’erogazione del Servizio. Il Fornitore non può garantire il permanere del posizionamento raggiunto dal Cliente nei motori di ricerca diversi da quello interno di PagineMail.

5. OBBLIGAZIONI A CARICO DEL CLIENTE

  • a. Predisposizione di locali e attrezzature Il Cliente predispone a proprie cura e spese tutto quanto necessario alla fruizione del Servizio (a titolo meramente esemplificativo: locali, attrezzature, linee internet, sistemi di sicurezza, verifica di accessibilità tramite terminali mobili e smartphone, cablaggi).

  • b. Rispetto obblighi di legge Il Cliente adotta, sempre a propria cura e spese, tutte le prescrizioni stabilite dalla normativa vigente per la fruizione del Servizio.

  • c. Adozione di misure di sicurezza Il Cliente protegge con adeguate misure di sicurezza tutte le informazioni relative al Servizio, ivi espressamente inclusi i codici per l’accesso alla propria pagina personale e segnala al Fornitore ogni evento anomalo, ivi espressamente compresa la presa di cognizione, anche accidentale, da parte di terzi delle informazioni in questione.

  • d. Accettazione valore probatorio dei log Il Cliente accetta sin d’ora il valore probatorio dei log (registri di collegamento) generati dai sistemi informatici nella disponibilità del Fornitore.

  • e. Titolarità, attendibilità e aggiornamento dei dati inseriti in PagineMail Il Cliente dichiara di avere il diritto di inserire i dati della propria ditta/azienda in PagineMail, che i dati in questione sono attendibili e costantemente aggiornati.

  • f. Scelta delle keyword Il Cliente è unico responsabile della scelta delle keyword per l’indicizzazione della propria attività e si obbliga a selezionarle nel pieno rispetto della normativa vigente, con particolare riferimento alla tutela dei segni distintivi, della reputazione e della concorrenza oltre che in materia di falsità e contraffazione. Il Cliente riconosce, in ogni caso, il diritto del Fornitore di non utilizzare, cancellare e di rifiutare l’utilizzo di keyword che il Fornitore ritenesse inappropriate, con particolare ma non esclusivo riferimento a parole sgradevoli o ingannevoli. Il Cliente accetta, altresì, che le stesse keyword potranno essere usate anche per altri Clienti del Fornitore.

  • g. Disponibilità a ricevere invii pubblicitari Il Cliente accetta di ricevere comunicazioni commerciali da parte del Fornitore o da terze parti che abbiano incaricato il Fornitore dell’invio.

  • h. Comunicazione di variazioni di dati e domicilio e indirizzo di posta elettronica Il Cliente comunica tempestivamente e in forma scritta ogni variazione dei dati relativi al proprio domicilio fiscale. In assenza della comunicazione di cui al punto precedente, il domicilio valido a ogni effetto di legge rimarrà quello precedentemente dichiarato e risultante dal Servizio.

6. DURATA IL CONTRATTO

Il contratto per la fornitura del Servizio ha durata di 1 (uno) anno dalla data di attivazione del Servizio e si intende tacitamente rinnovato di anno in anno, salvo disdetta da inviarsi a SMART Amministrazione, Via Tortona, 33 20144 Milano, con lettera raccomandata A.R. almeno 60 giorni prima rispetto alla scadenza naturale.

7. ASSENZA DI COSTI ECONOMICI

Il Servizio è erogato senza richiedere un corrispettivo economico al Cliente

8. RECESSO

Ai sensi dell'art. 1456 c.c. il Fornitore può recedere dal presente contratto nel caso in cui, a proprio insindacabile giudizio, ravvisi comportamenti del Cliente non conformi alla natura dei servizi o in qualsiasi modo lesivi della propria immagine o anche potenzialmente lesivi degli interessi degli altri clienti o comunque impropri rispetto alle finalità del servizio. Poiché i servizi sono resi a titolo gratuito a fini pubblicitari e/o promozionali il Fornitore si riserva in ogni caso il diritto di cessare la fornitura del Servizio quando vengano meno gli interessi pubblicitari e/o promozionali che costituiscono il fine del Servizio stesso senza che ciò possa fa sorgere in capo al Cliente qualsiasi diritto a chiedere indennizzi, risarcimenti e quant’altro assimilato e/o assimilabile. Le Parti possono altresì recedere anticipatamente dal presente Contratto con preavviso scritto, inviato via Raccomandata A/R o via e-mail ai rispettivi indirizzi, con un preavviso di 30 gg rispetto alla data di recesso richiesta. Nessun risarcimento danni potrà essere richiesto al Fornitore per danni diretti e/o indiretti causati dalla mancata utilizzazione dei servizi.

9. RISOLUZIONE DEL CONTRATTO

Fatto in ogni caso il diritto del Fornitore al risarcimento dei danni subiti, questo contratto si risolve di diritto ai sensi dell’art. 1456 C.c. nel caso di abuso del Servizio da parte del Cliente, comunicazione non autorizzata da legittimo titolare dei dati aziendali, comunicazione di dati falsi, mancato aggiornamento dei dati precedentemente comunicati. Il Fornitore comunicherà al Cliente a mezzo raccomandata a/r la sussistenza di una causa di risoluzione. Il Fornitore tratterrà in acconto sui maggiori danni subiti l’eventuale quota di Servizio pagata e non goduta dal Cliente.

10. CLAUSOLA COMPROMISSORIA

A pena di improcedibilità dell’azione giudiziaria, le Parti faranno del loro meglio per comporre bonariamente qualsiasi controversia dovesse insorgere in relazione al Servizio, utilizzando se del caso il servizio di conciliazione messo a disposizione dalla Camera di commercio di Milano.

11. LEGGE APPLICABILE E FORO COMPETENTE

Questo contratto è soggetto alla legge italiana. Se la conciliazione di cui all’articolo precedente dovesse avere esito negativo, competente in via esclusiva per ogni controversia relativa al Servizio è il foro di Milano, con espressa esclusione di ogni altro foro eventualmente configurabile.

12. INFORMATIVA SUL TRATTAMENTO DEI DATI PERSONALI

Ai sensi della vigente normativa in materia di dati personali nel quadro del Regolamento Ue 2016/679, il Fornitore tratta prevalentemente con mezzi elettronici i dati conferiti dal Cliente per gli scopi descritti nel presente contratto e li rende disponibili gratuitamente, in tutto o in parte, agli altri clienti. Può compiere aggregazioni ed elaborazioni statistiche e comunicare i dati a terzi anche per finalità di marketing diretto. Trattandosi di dati relativi allo svolgimento di attività economiche, ai sensi della vigente normativa in materia di dati personali, il trattamento non è subordinato al consenso dell'interessato. Con il conferimento dei dati all'atto dell'iscrizione, e in aggiunta con l’accettazione di queste condizioni generali, il Cliente accetta comunque il trattamento da parte della società, compreso l'utilizzo dei dati stessi per l'invio di comunicazioni commerciali dal parte del Fornitore o di terzi ai quali i dati stessi siano stati comunicati per le stesse finalità per le quali sono stati conferiti. Il Cliente potrà esercitare i propri diritti garantiti dalla vigente normativa in materia di dati personali rivolgendosi direttamente al Titolare del trattamento, presso la sede legale della SMART S.r.l. in Via Tortona, 33 20144 Milano oppure inviando una e-mail all’indirizzo privacy@paginemail.it con espresso avviso che la richiesta di cessazione del trattamento potrà avere come effetto l'impossibilità di fornitura dei servizi previsti da parte della Società, con le conseguenze di cui all’art.9 di queste condizioni generali. In caso di fusione o di trasferimento del Fornitore ad altra impresa, questa potrà subentrare nel trattamento con le medesime finalità. Fatti salvi quelli la cui conservazione è obbligatoria per legge (dati di fatturazione, pagamenti e quant’altro) i dati verranno conservati per la durata del Servizio e successivamente distrutti a cura del Fornitore.

13. ESCLUSIONE DELLO STATUS DI CONSUMATORE

Le Parti stipulano questo contratto nella rispettiva condizione di operatori professionali e pertanto attestano di non rivestire lo status di consumatore così come definito dal Codice del consumo.

+\. + + +-- +-- Name: banlist_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.banlist_id_seq', 1, true); + + +-- +-- Name: etichette_id_etichetta_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.etichette_id_etichetta_seq', 10, true); + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/apps/db/initial/3_seed_user.sql b/apps/db/initial/3_seed_user.sql new file mode 100644 index 0000000..2e61e13 --- /dev/null +++ b/apps/db/initial/3_seed_user.sql @@ -0,0 +1,21 @@ +INSERT INTO + PUBLIC.USERS ( + USERNAME, + EMAIL, + "isAdmin", + PASSWORD, + NOME, + COGNOME, + "isVerified", + SALT + ) +VALUES ( + 'Marco Pedone'::TEXT, + 'm.pedone98@gmail.com'::TEXT, + TRUE::BOOLEAN, + 'changeme'::TEXT, + 'Marco'::TEXT, + 'Pedone'::TEXT, + TRUE::BOOLEAN, + 'a'::TEXT + ); \ No newline at end of file diff --git a/apps/db/log_parser.sh b/apps/db/log_parser.sh new file mode 100644 index 0000000..8a59b31 --- /dev/null +++ b/apps/db/log_parser.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# Define the directory where PostgreSQL logs are stored +LOG_DIR="/c/Program Files/PostgreSQL/16/data/log" + +# Define the output file for extracted SQL commands +OUTPUT_FILE="migration.sql" + +# Define the AWK script file path +AWK_SCRIPT_FILE="filter_sql.awk" # Make sure this file is in the same directory as your bash script + +# Clear the output file if it exists, or create a new one +> "$OUTPUT_FILE" + +echo "Starting SQL command extraction from logs in: $LOG_DIR" +echo "Extracted commands will be saved to: $OUTPUT_FILE" +echo "----------------------------------------------------" + +# --- NEW PART: GET LAST GIT COMMIT DATE --- +GIT_LAST_COMMIT_DATE_MS="" # This will store the Git commit date in YYYY-MM-DD HH:MM:SS.000 format + +# Check if we are inside a Git repository +if git rev-parse --is-inside-work-tree &>/dev/null; then + # Get the last commit date in ISO 8601 strict format (e.g., 2025-07-31T16:21:44+02:00) + GIT_LAST_COMMIT_ISO=$(git log -1 --format=%cd --date=iso-strict) + + if [ -n "$GIT_LAST_COMMIT_ISO" ]; then + # Convert to YYYY-MM-DD HH:MM:SS.000 for comparison with log timestamps + # cut -d'.' -f1 gets "YYYY-MM-DDTHH:MM:SS" + # tr 'T' ' ' changes 'T' to space + # "\.000" appends milliseconds for consistent string comparison + GIT_LAST_COMMIT_DATE_MS=$(echo "$GIT_LAST_COMMIT_ISO" | cut -d'.' -f1 | tr 'T' ' ')"\.000" + echo "Git last commit date detected (for log cutoff): $GIT_LAST_COMMIT_DATE_MS" + else + echo "Warning: Could not get last Git commit date. Processing all log entries." + fi +else + echo "Not inside a Git repository. Processing all log entries." +fi + +# Regex to detect the start of a new log entry (used by awk) +NEW_LOG_ENTRY_REGEX="^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3}" + +# --- Check if the AWK script file exists --- +if [ ! -f "$AWK_SCRIPT_FILE" ]; then + echo "ERROR: AWK script file '$AWK_SCRIPT_FILE' not found!" + echo "Please create '$AWK_SCRIPT_FILE' with the AWK code from Step 1." + exit 1 +fi + +# Find all .log files in the specified directory and process them +find "$LOG_DIR" -type f -name "*.log" | while read -r logfile; do + echo "Processing log file: $logfile" + LC_ALL=C awk -v new_log_regex="$NEW_LOG_ENTRY_REGEX" \ + -v git_cutoff_date_str="$GIT_LAST_COMMIT_DATE_MS" \ + -f "$AWK_SCRIPT_FILE" "$logfile" >> "$OUTPUT_FILE" +done + +echo "SQL extraction complete" +echo "----------------------------------------------------" +echo "Final SQL output is in: '$OUTPUT_FILE'." \ No newline at end of file diff --git a/apps/db/migration.sql b/apps/db/migration.sql new file mode 100644 index 0000000..e69de29 diff --git a/apps/db/pg_dumper.sh b/apps/db/pg_dumper.sh new file mode 100644 index 0000000..e796f5a --- /dev/null +++ b/apps/db/pg_dumper.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Set the necessary environment variables +export PGHOST="localhost" +export PGPORT="5432" +export PGDATABASE="postgres" +export PGUSER="postgres" +export PGPASSWORD="rootpost" + +# Call pg_dump.exe to generate the SQL file +"C:/Program Files/PostgreSQL/16/bin/pg_dump.exe" -f "./initial/1_init.sql" --schema-only + +"C:/Program Files/PostgreSQL/16/bin/pg_dump.exe" -f "./initial/2_data.sql" --data-only -t prezziario -t banners -t etichette -t flags -t banlist -t testi_e_stringhe -t temp_tokens + +# Check if the pg_dump command was successful +if [ $? -eq 0 ]; then + echo "SQL file generated successfully." +else + echo "Failed to generate SQL file." +fi + +# Wait for user keypress +read -n 1 -s -r -p "Press any key to exit..." diff --git a/apps/infoalloggi/.docker_env b/apps/infoalloggi/.docker_env new file mode 100644 index 0000000..e023d73 --- /dev/null +++ b/apps/infoalloggi/.docker_env @@ -0,0 +1,25 @@ +#Api key for the mail service +SENDGRID_API_KEY='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' + +#Stripe keys +STRIPE_SECRET_KEY = "sk_test_51P4IY3ILe4KoQRqXJJLyn33Dvb4z3ajTrMsGD4y8g4DWXMbPQcoqOAcvedemB83xn0FIdVAMGX1hk8gXYog1BXl700cRUngUET" +NEXT_PUBLIC_STRIPE_PUBLIC_KEY = "pk_test_51P4IY3ILe4KoQRqXXUVDyiVEy9oiKdzDIB9xgDY054xVRyVZ5dfWoJlo1F5dXlQ6sEATwgylPp708PQEf2uhagUx00qcL0rRgq" +STRIPE_LIMITED_KEY = "rk_test_" +STRIPE_WEBHOOK_SECRET = "whsec_a1a62f5c31b2ade9237af6032e30392dda47f945e2eddd7e2f69579f1fb47118" + +#Fatture in Cloud keys +FIC_CLIENT_ID = "ggZlcim78qkRYrl5n2d8DpNoKGiqwRHa" +FIC_ACCESS_TOKEN = "a/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyZWYiOiJ2Z2VOWFhST0JyZUliN3dNMFFpM0NpdXFhb1VHTzBlciJ9.ewEBe0Qq4ATNyx03rTTynWHhhxYvjuCB-ra8XBJV_B0" +FIC_COMPANY_ID = "120838" + + +#ARUBA EMAIL +ARUBA_USER = "web@infoalloggi.it" +ARUBA_PASS = "we2023Info.1" + +#EXPOSED API AUTH +EXP_API_USER = "infoalloggi-admin" +EXP_API_PASS = "cyYk24u9fRn5DsqjFWpTV8GKBNwhQvEtbMmHxJeU73ZSaXrdCLAPg6NtDkC43ZQa9dVKHbxMv7fWpy65gFmAsEReXwuPYTL82jJnSUhrzcqGkqvsHPyxmEAFzYVSntGeQTr25dJb3UNCMuRpgwaDW69Zhc7Kj8LfB4ZCHR9kYfWVsGrx7tygqdvc82SFXj54Nhnpm6PEBLbKUuaMTQJeA3wDgPSCXwDVmhned6J8ZQ3qzNsr5bBuLtHxvFTAKGy74W2fY9pckjMRUEJYRkVPZwbvBtTKy2F8ULAseunzWj7G5d6Q3ExfmNCXqg4MDahH9cSruXyWxLNAsGQTPSFhD9HYVzB3Meg2rk5Cvacfq8mdZ6tUE4KRpwbn7jJAev7WRbVgPdncMLKxwm8yT9pQZ4DNUkaYj6ztXfhsBHqF5ErCu32Gcjb3H6KxvWsu9p5fkPrh7ZARXMLDdS82enFU4CqwztTayEmGNVgYJB" + + +JWT_SECRET = "335922ae76f8334dd11fa2614434624017ee21bffea95e355c0ac0a3b4e717193cdefbe4fadb5dac98939d6c4cd8b3158d530ebc8bb670281300efe5d5642fec" \ No newline at end of file diff --git a/apps/infoalloggi/.dockerignore b/apps/infoalloggi/.dockerignore new file mode 100644 index 0000000..59d82e0 --- /dev/null +++ b/apps/infoalloggi/.dockerignore @@ -0,0 +1,9 @@ +TODO +node_modules +.vscode +.next +.git +Dockerfile +.dockerignore +.env +.docker_env \ No newline at end of file diff --git a/apps/infoalloggi/.github/dependabot.yml b/apps/infoalloggi/.github/dependabot.yml new file mode 100644 index 0000000..895d9b0 --- /dev/null +++ b/apps/infoalloggi/.github/dependabot.yml @@ -0,0 +1,21 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: "npm" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "daily" + #ignore: + # - dependency-name: "react" + # - dependency-name: "react-dom" + # - dependency-name: "@next/eslint-plugin-next" + # versions: [">=14.2.23"] + # - dependency-name: "next" + # versions: [">=14.2.23"] + # - dependency-name: "eslint-config-next" + # versions: [">=14.2.23"] + open-pull-requests-limit: 50 diff --git a/apps/infoalloggi/.github/workflows/ci.yml b/apps/infoalloggi/.github/workflows/ci.yml new file mode 100644 index 0000000..7a26d2a --- /dev/null +++ b/apps/infoalloggi/.github/workflows/ci.yml @@ -0,0 +1,56 @@ +name: CI + +on: [push, pull_request] + +env: + INTERNAL_BASE_URL: "http://web:3000" + PGHOST: "localhost" + POSTGRES_USER: "test" + POSTGRES_DB: "test" + POSTGRES_PASSWORD: "test" + PGPORT: 123 + BACKENDSERVER_URL: "https://fake.com" + NEXT_PUBLIC_BASE_URL: "https://fake.com" + STRIPE_SECRET_KEY: "string" + STRIPE_WEBHOOK_SECRET: "string" + NEXT_PUBLIC_STRIPE_PUBLIC_KEY: "string" + STRIPE_LIMITED_KEY: "string" + FIC_CLIENT_ID: "string" + FIC_ACCESS_TOKEN: "string" + FIC_COMPANY_ID: "string" + NEXT_TELEMETRY_DISABLED: 1 + ARUBA_USER: "string" + ARUBA_PASS: "string" + EXP_API_USER: "string" + EXP_API_PASS: "string" + TILES_URL: "keydb://string" + KEYDB_URL: "keydb://string" + JWT_SECRET: "335922ae" +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + + - name: Install Dependencies + run: npm install + + - name: Typecheck + run: npm run types + + - name: Lint + run: npm run lint + + - name: Print Environment Variable + run: echo $MY_ENV_VAR + + #- name: Run knip + # run: npx knip --no-exit-code diff --git a/apps/infoalloggi/.kanelrc.js b/apps/infoalloggi/.kanelrc.js new file mode 100644 index 0000000..ff095f1 --- /dev/null +++ b/apps/infoalloggi/.kanelrc.js @@ -0,0 +1,24 @@ +const { makeKyselyHook } = require("kanel-kysely"); + +const ignoredTables = []; + +/** @type {import('kanel').Config} */ +module.exports = { + connection: { + host: "localhost", + user: "postgres", + database: "postgres", + password: "rootpost", + port: 5432, + }, + typeFilter: (pgType) => !ignoredTables.includes(pgType.name), + preDeleteOutputFolder: true, + outputPath: "./src/schemas", + + customTypeMap: { + "pg_catalog.tsvector": "string", + "pg_catalog.bpchar": "string", + //"pg_catalog.json": "string", + }, + preRenderHooks: [makeKyselyHook()], +}; diff --git a/apps/infoalloggi/.vscode/launch.json b/apps/infoalloggi/.vscode/launch.json new file mode 100644 index 0000000..ee3bdd7 --- /dev/null +++ b/apps/infoalloggi/.vscode/launch.json @@ -0,0 +1,28 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Next.js: debug server-side", + "type": "node-terminal", + "request": "launch", + "command": "npm run dev" + }, + { + "name": "Next.js: debug client-side", + "type": "chrome", + "request": "launch", + "url": "http://localhost:3000" + }, + { + "name": "Next.js: debug full stack", + "type": "node-terminal", + "request": "launch", + "command": "npm run dev", + "serverReadyAction": { + "pattern": "- Local:.+(https?://.+)", + "uriFormat": "%s", + "action": "debugWithChrome" + } + } + ] +} diff --git a/apps/infoalloggi/.vscode/settings.json b/apps/infoalloggi/.vscode/settings.json new file mode 100644 index 0000000..c635fab --- /dev/null +++ b/apps/infoalloggi/.vscode/settings.json @@ -0,0 +1,29 @@ +{ + "typescript.tsdk": "node_modules\\typescript\\lib", + "sqltools.connections": [ + { + "previewLimit": 50, + "server": "localhost", + "port": 5432, + "driver": "PostgreSQL", + "name": "DB", + "database": "postgres", + "username": "postgres", + "password": "rootpost" + } + ], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + } +} \ No newline at end of file diff --git a/apps/infoalloggi/Dockerfile b/apps/infoalloggi/Dockerfile new file mode 100644 index 0000000..720f841 --- /dev/null +++ b/apps/infoalloggi/Dockerfile @@ -0,0 +1,135 @@ +FROM node:lts-alpine AS base + +# Dependencies stage +# This stage is used to install dependencies and prepare the environment +FROM base AS deps +RUN apk add --no-cache libc6-compat openssl +WORKDIR /app +COPY package*.json package-lock.json* ./ +RUN npm ci + +# Builder stage +# This stage is used to build the application +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +ARG BASE_URL +ENV NEXT_PUBLIC_BASE_URL=$BASE_URL +ARG INTERNAL_BASE_URL +ENV INTERNAL_BASE_URL=$INTERNAL_BASE_URL +ARG POSTGRES_USER +ARG POSTGRES_PASSWORD +ARG POSTGRES_DB +ARG PGHOST +ARG PGPORT +ENV PGHOST=$PGHOST +ENV POSTGRES_DB=$POSTGRES_DB +ENV PGPORT=$PGPORT +ENV POSTGRES_USER=$POSTGRES_USER +ENV POSTGRES_PASSWORD=$POSTGRES_PASSWORD +ARG JWT_SECRET +ENV JWT_SECRET=$JWT_SECRET +ARG BACKENDSERVER_URL +ENV BACKENDSERVER_URL=$BACKENDSERVER_URL +ARG SENDGRID_API_KEY +ENV SENDGRID_API_KEY=$SENDGRID_API_KEY +ARG STRIPE_SECRET_KEY +ENV STRIPE_SECRET_KEY=$STRIPE_SECRET_KEY +ARG NEXT_PUBLIC_STRIPE_PUBLIC_KEY +ENV NEXT_PUBLIC_STRIPE_PUBLIC_KEY=$NEXT_PUBLIC_STRIPE_PUBLIC_KEY +ARG STRIPE_LIMITED_KEY +ENV STRIPE_LIMITED_KEY=$STRIPE_LIMITED_KEY +ARG STRIPE_WEBHOOK_SECRET +ENV STRIPE_WEBHOOK_SECRET=$STRIPE_WEBHOOK_SECRET +ARG FIC_CLIENT_ID +ENV FIC_CLIENT_ID=$FIC_CLIENT_ID +ARG FIC_ACCESS_TOKEN +ENV FIC_ACCESS_TOKEN=$FIC_ACCESS_TOKEN +ARG FIC_COMPANY_ID +ENV FIC_COMPANY_ID=$FIC_COMPANY_ID +ARG ARUBA_USER +ENV ARUBA_USER=$ARUBA_USER +ARG ARUBA_PASS +ENV ARUBA_PASS=$ARUBA_PASS +ARG EXP_API_USER +ENV EXP_API_USER=$EXP_API_USER +ARG EXP_API_PASS +ENV EXP_API_PASS=$EXP_API_PASS +ARG KEYDB_URL +ENV KEYDB_URL=$KEYDB_URL +ARG TILES_URL +ENV TILES_URL=$TILES_URL +ENV NEXT_TELEMETRY_DISABLED=1 + +RUN SKIP_ENV_VALIDATION=1 npm run build + +# Runner stage +# This stage is used to run the built application +FROM base AS runner +WORKDIR /app +ENV NODE_ENV=production +ARG BASE_URL +ENV NEXT_PUBLIC_BASE_URL=$BASE_URL +ARG INTERNAL_BASE_URL +ENV INTERNAL_BASE_URL=$INTERNAL_BASE_URL +ARG POSTGRES_USER +ARG POSTGRES_PASSWORD +ARG POSTGRES_DB +ARG PGHOST +ARG PGPORT +ENV PGHOST=$PGHOST +ENV POSTGRES_DB=$POSTGRES_DB +ENV PGPORT=$PGPORT +ENV POSTGRES_USER=$POSTGRES_USER +ENV POSTGRES_PASSWORD=$POSTGRES_PASSWORD +ARG JWT_SECRET +ENV JWT_SECRET=$JWT_SECRET +ARG BACKENDSERVER_URL +ENV BACKENDSERVER_URL=$BACKENDSERVER_URL +ARG SENDGRID_API_KEY +ENV SENDGRID_API_KEY=$SENDGRID_API_KEY +ARG STRIPE_SECRET_KEY +ENV STRIPE_SECRET_KEY=$STRIPE_SECRET_KEY +ARG NEXT_PUBLIC_STRIPE_PUBLIC_KEY +ENV NEXT_PUBLIC_STRIPE_PUBLIC_KEY=$NEXT_PUBLIC_STRIPE_PUBLIC_KEY +ARG STRIPE_LIMITED_KEY +ENV STRIPE_LIMITED_KEY=$STRIPE_LIMITED_KEY +ARG STRIPE_WEBHOOK_SECRET +ENV STRIPE_WEBHOOK_SECRET=$STRIPE_WEBHOOK_SECRET +ARG FIC_CLIENT_ID +ENV FIC_CLIENT_ID=$FIC_CLIENT_ID +ARG FIC_ACCESS_TOKEN +ENV FIC_ACCESS_TOKEN=$FIC_ACCESS_TOKEN +ARG FIC_COMPANY_ID +ENV FIC_COMPANY_ID=$FIC_COMPANY_ID +ARG ARUBA_USER +ENV ARUBA_USER=$ARUBA_USER +ARG ARUBA_PASS +ENV ARUBA_PASS=$ARUBA_PASS +ARG EXP_API_USER +ENV EXP_API_USER=$EXP_API_USER +ARG EXP_API_PASS +ENV EXP_API_PASS=$EXP_API_PASS +ARG KEYDB_URL +ENV KEYDB_URL=$KEYDB_URL +ARG TILES_URL +ENV TILES_URL=$TILES_URL +ENV NEXT_TELEMETRY_DISABLED=1 + +RUN addgroup -g 1001 -S nodejs +RUN adduser -S nextjs -u 1001 + +COPY --from=builder /app/public ./public + +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + +USER nextjs + +EXPOSE 3000 +ENV PORT=3000 + +CMD HOSTNAME="0.0.0.0" node server.js + diff --git a/apps/infoalloggi/TODO b/apps/infoalloggi/TODO new file mode 100644 index 0000000..4274431 --- /dev/null +++ b/apps/infoalloggi/TODO @@ -0,0 +1,59 @@ +NEW IDEA TODOS: + //TODO predere privacy policy sito vecchio e adattarla + + - trigger pag sucecss event from ordini tab and gen payment button in order detail + +Minimal Viable Product: + +- Msg and email queue. se è fuori orario il prop verrà notificato domani mattina + +- tab locazioni + +- GDPR Iubenda + +- Translations + +MVP Extras: + +- admin annunci salvati: Da admin vedere indirizzo e interno nella visualizzazione annunci salvati di immobile +- Admin annuncio link: se admin, in annuncio, collegamento rapido per copiare risposta x email con dati di tipologia, persone e decorrenza annuncio +- info annunci/pack icon: Info Annunci/pack su navbar, icona con casetta con forse numeretti tipocontatore icone con dropdown con n annunci salvati n annunci sbloccati +- Extensions: integrare estensioni copiare dati x miogest e packs ecc +- Provincie options in maiuscolo + +AFTER MVP: + +- TODO migrazione app router https://nextjs.org/docs/pages/building-your-application/upgrading/app-router-migration#migrating-from-pages-to-app +- Proprietari: Pagina proprietari e submit annuncio e Sezione "I miei annunci" con lista degli annunci inseriti dall'utente +- Sezione "La mia locazione" con i dati della locazione attuale dell'utente +- prenotazione visita, con data e ora, e conferma da parte del proprietario, con notifica a entrambi, tab con propietari, giorni e orari di disponibilità per annunci che offrono il servizio +- Tutorials +- lettura contatori +- Ricezione e Rilascio immobili +- consigli presa e rilascio appartamento +- Third party apps: Etra, add to calendario, scarica calendario pdf +- Report andamento props: Generate a Report with selected user review, analytics and other data for the apartment owner +- Infoalloggi.AI: Pagina area riservata "Infoalloggi.it AI" o "la mia ricerca Infoalloggi" robe cosí in cui il sistema fa una ricerca personalizzata, elemento marketizzabile +- Document scan: Document scan for upload + +- indirizzo autocomplete nomatim: + +``` +https://github.com/tomickigrzegorz/autocomplete +function nominatim(currentValue) { + const api = `https://nominatim.openstreetmap.org/search?format=geojson&limit=5&q=${encodeURI( + currentValue + )}`; + + return new Promise((resolve) => { + fetch(api) + .then((response) => response.json()) + .then((data) => { + resolve(data.features); + }) + .catch((error) => { + console.error(error); + }); + }); +} +``` diff --git a/apps/infoalloggi/TypeHelpers.type.ts b/apps/infoalloggi/TypeHelpers.type.ts new file mode 100644 index 0000000..a0f8d56 --- /dev/null +++ b/apps/infoalloggi/TypeHelpers.type.ts @@ -0,0 +1,45 @@ +/** + * @example + * ```ts + * interface BaseType = { + * a: string; b: number + * }; + * + * interface BiggerType extends BaseType = { + * c: string[] + * } + * type Bar = BiggerType; + * // Bar = BiggerType + * + * type Bar = Prettify; + * // Bar = { a: string; b: number; c: string[]; } + * ``` + */ +export type Prettify = { + [K in keyof T]: T[K]; +} & {}; +// + +export type PrettifyR = T extends object + ? T extends infer O + ? { [K in keyof O]: PrettifyR } + : never + : T; + +/** + * @example + * ```ts + * interface BaseType = { + * a: string; b: number + * }; + * + * interface NewType = { + * a: number + * } + * + * type Bar = Override; + * // Bar = { a: number; b: number; } + * + * ``` + * */ +export type Override = Omit & NewType; diff --git a/apps/infoalloggi/check-env-vars.js b/apps/infoalloggi/check-env-vars.js new file mode 100644 index 0000000..2904558 --- /dev/null +++ b/apps/infoalloggi/check-env-vars.js @@ -0,0 +1,50 @@ +const fs = require("node:fs"); +const YAML = require("yaml"); + +const ciFilepath = ".github/workflows/ci.yml"; +const envFilepath = "src/env.mjs"; + +const ignoreEnvs = ["NODE_ENV", "SKIP_ENV_VALIDATION"]; + +// ANSI escape codes for colors +const colors = { + red: "\x1b[31m%s\x1b[0m", + green: "\x1b[32m%s\x1b[0m", + yellow: "\x1b[33m%s\x1b[0m", +}; + +console.log(); +console.log(colors.yellow, "Environment variables checker:"); +// Read CI file content +try { + const ciContent = fs.readFileSync(ciFilepath, "utf8"); + const ciData = YAML.parse(ciContent); + + // Read env file content + const envContent = fs.readFileSync(envFilepath, "utf8"); + const envRegex = /process\.env\.([A-Z_0-9]+)/g; + const declaredEnvs = []; + + let match = envRegex.exec(envContent); + while (match !== null) { + declaredEnvs.push(match[1]); + match = envRegex.exec(envContent); // Re-assign at the end of the loop + } + + // Remove ignored environment variables from the list of declared environment variables + const filteredEnvs = declaredEnvs.filter((env) => !ignoreEnvs.includes(env)); + + // Check for missing env variables in CI file + const missingEnvs = filteredEnvs.filter((env) => !ciData.env[env]); + + if (missingEnvs.length > 0) { + console.error( + colors.red, + `Missing environment variables in ${ciFilepath}: ${missingEnvs.join(", ")}`, + ); + } else { + console.log(colors.green, "No missing environment variables found."); + } +} catch (error) { + console.error(colors.red, `Error processing files: ${error.message}`); +} diff --git a/apps/infoalloggi/components.json b/apps/infoalloggi/components.json new file mode 100644 index 0000000..aeceae7 --- /dev/null +++ b/apps/infoalloggi/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/styles/global.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "~/components", + "utils": "~/lib/utils", + "ui": "~/components/ui", + "lib": "~/lib", + "hooks": "~/hooks" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/apps/infoalloggi/dev_utils_compose.sh b/apps/infoalloggi/dev_utils_compose.sh new file mode 100644 index 0000000..461d63c --- /dev/null +++ b/apps/infoalloggi/dev_utils_compose.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# Start the pgAdmin service using its Docker Compose file +docker compose -p pgadmin -f pgadmin-docker-compose.yml up -d + +# Start the KeyDB service using its Docker Compose file +docker compose -p keydb -f keydb-docker-compose.yml up -d \ No newline at end of file diff --git a/apps/infoalloggi/docker-compose.yml b/apps/infoalloggi/docker-compose.yml new file mode 100644 index 0000000..bde8174 --- /dev/null +++ b/apps/infoalloggi/docker-compose.yml @@ -0,0 +1,63 @@ +services: + web: + platform: "linux/amd64" + build: + context: . + dockerfile: Dockerfile + args: + INTERNAL_BASE_URL: http://web:3000 + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + PGHOST: db + PGPORT: "5432" + BACKENDSERVER_URL: http://backend:1323 + TILES_URL: tiles:6379 + KEYDB_URL: keydb:6379 + BASE_URL: ${BASE_URL} + SENDGRID_API_KEY: ${SENDGRID_API_KEY} + STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY} + NEXT_PUBLIC_STRIPE_PUBLIC_KEY: ${NEXT_PUBLIC_STRIPE_PUBLIC_KEY} + STRIPE_LIMITED_KEY: ${STRIPE_LIMITED_KEY} + STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET} + FIC_CLIENT_ID: ${FIC_CLIENT_ID} + FIC_ACCESS_TOKEN: ${FIC_ACCESS_TOKEN} + FIC_COMPANY_ID: ${FIC_COMPANY_ID} + ARUBA_USER: ${ARUBA_USER} + ARUBA_PASS: ${ARUBA_PASS} + EXP_API_USER: ${EXP_API_USER} + EXP_API_PASS: ${EXP_API_PASS} + JWT_SECRET: ${JWT_SECRET} + working_dir: /app + environment: + INTERNAL_BASE_URL: http://web:3000 + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + PGHOST: db + PGPORT: "5432" + BACKENDSERVER_URL: http://backend:1323 + KEYDB_URL: keydb:6379 + TILES_URL: tiles:6379 + BASE_URL: ${BASE_URL} + SENDGRID_API_KEY: ${SENDGRID_API_KEY} + STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY} + NEXT_PUBLIC_STRIPE_PUBLIC_KEY: ${NEXT_PUBLIC_STRIPE_PUBLIC_KEY} + STRIPE_LIMITED_KEY: ${STRIPE_LIMITED_KEY} + STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET} + FIC_CLIENT_ID: ${FIC_CLIENT_ID} + FIC_ACCESS_TOKEN: ${FIC_ACCESS_TOKEN} + FIC_COMPANY_ID: ${FIC_COMPANY_ID} + ARUBA_USER: ${ARUBA_USER} + ARUBA_PASS: ${ARUBA_PASS} + EXP_API_USER: ${EXP_API_USER} + EXP_API_PASS: ${EXP_API_PASS} + JWT_SECRET: ${JWT_SECRET} + networks: + - dokploy-network + ports: + - "3000" + +networks: + dokploy-network: + external: true diff --git a/apps/infoalloggi/emails/VerificaEmail.tsx b/apps/infoalloggi/emails/VerificaEmail.tsx new file mode 100644 index 0000000..4ef8edc --- /dev/null +++ b/apps/infoalloggi/emails/VerificaEmail.tsx @@ -0,0 +1,40 @@ +import { Button, Heading, Row, Section, Text } from "@react-email/components"; +import Base from "./base"; +export type VerificaEmail_NewMail = { + mailType: "verificaEmail"; + props: VerificaEmailProps; +}; + +type VerificaEmailProps = { + token: string; + userId: string; + redirect?: string; +}; + +const VerificaEmail = ({ token, userId, redirect }: VerificaEmailProps) => { + return ( + + <> + + Verifica la tua email + +
+ + + Clicca sul pulsante qui sotto per verificare la tua email. + + + + +
+ + + ); +}; + +export default VerificaEmail; diff --git a/apps/infoalloggi/emails/base.tsx b/apps/infoalloggi/emails/base.tsx new file mode 100644 index 0000000..9f06ec7 --- /dev/null +++ b/apps/infoalloggi/emails/base.tsx @@ -0,0 +1,81 @@ +import { + Body, + Container, + Head, + Html, + Preview, + Section, + Text, + Tailwind, + Img, + Hr, +} from "@react-email/components"; +import type { JSX } from "react"; + +const Base = ({ + children, + preview, + noreply, +}: { + children: JSX.Element; + preview: string; + noreply?: boolean; +}) => { + return ( + + + + + {preview} + + + Infoalloggi.it + +
+
+
{children}
+ +
+ {noreply && ( + + Questo è un messaggio automatico, per favore non rispondere + a questa email. + + )} +
+
+ + Arcenia S.r.l. Sede legale: Via Beata Giovanna 1, Bassano del + Grappa (VI) + +
+
+
+ + +
+ ); +}; +export default Base; diff --git a/apps/infoalloggi/emails/contatto.tsx b/apps/infoalloggi/emails/contatto.tsx new file mode 100644 index 0000000..3b16d3c --- /dev/null +++ b/apps/infoalloggi/emails/contatto.tsx @@ -0,0 +1,44 @@ +import { Heading, Row, Section, Text } from "@react-email/components"; +import Base from "./base"; + +export type ContattoAdmin_NewMail = { + mailType: "contattoAdminEmail"; + props: ContattoAdminEmailProps; +}; + +type ContattoAdminEmailProps = { + nome: string; + cognome: string; + email: string; + telefono: string; + messaggio: string; +}; +const ContattoAdminEmail = ({ + nome, + cognome, + email, + telefono, + messaggio, +}: ContattoAdminEmailProps) => { + return ( + + <> + + Richiesta di contatto + + +
+ + Data: {new Date().toLocaleString()} + Nome: {nome} + Cognome: {cognome} + Email: {email} + Telefono: {telefono} + Messaggio: {messaggio} + +
+ + + ); +}; +export default ContattoAdminEmail; diff --git a/apps/infoalloggi/emails/contatto_annuncio.tsx b/apps/infoalloggi/emails/contatto_annuncio.tsx new file mode 100644 index 0000000..0470e84 --- /dev/null +++ b/apps/infoalloggi/emails/contatto_annuncio.tsx @@ -0,0 +1,52 @@ +import { Button, Heading, Row, Section, Text } from "@react-email/components"; +import Base from "./base"; + +export type ContattoAnnuncio_NewMail = { + mailType: "contattoAnnuncioEmail"; + props: ContattoAnnuncioEmailProps; +}; + +type ContattoAnnuncioEmailProps = { + nome: string; + codice: string; + email: string; + telefono: string; + messaggio: string; +}; +const ContattoAnnuncioEmail = ({ + nome, + codice, + email, + telefono, + messaggio, +}: ContattoAnnuncioEmailProps) => { + return ( + + <> + + Richiesta di contatto + + +
+ + Data: {new Date().toLocaleString()} + Nome: {nome} + Annuncio: {codice} + Telefono: {telefono} + Email: {email} + Messaggio: {messaggio} + +
+
+ +
+ + + ); +}; +export default ContattoAnnuncioEmail; diff --git a/apps/infoalloggi/emails/email-interessato.tsx b/apps/infoalloggi/emails/email-interessato.tsx new file mode 100644 index 0000000..a5b2635 --- /dev/null +++ b/apps/infoalloggi/emails/email-interessato.tsx @@ -0,0 +1,71 @@ +import { Heading, Row, Section, Text } from "@react-email/components"; +import Base from "./base"; +export type ContattoInteressato_NewMail = { + mailType: "emailContattoInteressato"; + props: EmailContattoInteressatoProps; +}; +type EmailContattoInteressatoProps = { + nome_cognome: string; + nome_cognome_utente: string; + telefono: string; + indirizzo: string | null; + sesso: string | null; +}; + +const EmailContattoInteressato = ({ + nome_cognome, + nome_cognome_utente, + telefono, + indirizzo, + sesso, +}: EmailContattoInteressatoProps) => { + const sig = sesso + ? sesso == "M" + ? "Il Sig." + : "La Sig.ra" + : "Il/La Sig./Sig.ra"; + return ( + + <> + + Richiesta di contatto + +
+ + + Gentile proprietario {nome_cognome}, le comunichiamo che a breve + la contatterà {sig} {nome_cognome_utente} (tel: {telefono}), + cliente Arca abbonato tramite il nostro servizio online + Infoalloggi.it interessato a vedere il Suo immobile{" "} + {indirizzo ? "di " + indirizzo : ""}. + + + Per ulteriori informazioni e chiarimenti non esiti a contattarci + all'indirizzo{" "} + + web@infoalloggi.it + {" "} + oppure tramite tel. 04241760915. + + Cordiali saluti +
+ + {" "} + Le informazioni contenute in questo messaggio di posta elettronica + sono riservate confidenziali e ne è vietata la diffusione in + qualunque modo eseguita. Qualora Lei non fosse la persona a cui il + presente messaggio è destinato, La invitiamo gentilmente ad + eliminarlo dopo averne dato tempestiva comunicazione al mittente e + a non utilizzare in alcun caso il suo contenuto. Qualsiasi + utilizzo non autorizzato di questo messaggio e dei suoi eventuali + allegati espone il responsabile alle relative conseguenze civili e + penali. + +
+
+ + + ); +}; + +export default EmailContattoInteressato; diff --git a/apps/infoalloggi/emails/gereric-email.tsx b/apps/infoalloggi/emails/gereric-email.tsx new file mode 100644 index 0000000..455c4c0 --- /dev/null +++ b/apps/infoalloggi/emails/gereric-email.tsx @@ -0,0 +1,48 @@ +import { Button, Heading, Row, Section, Text } from "@react-email/components"; +import Base from "./base"; +export type Generic_NewMail = { + mailType: "generic"; + props: GenericProps; +}; + +type GenericProps = { + title: string; + noreply?: boolean; + testo: string; + link?: { + href: string; + label?: string; + }; +}; + +const Generic = ({ + title, + noreply = false, + testo, + link = undefined, +}: GenericProps) => { + return ( + + <> + {title} +
+ + {testo} + + {link && ( +
+ +
+ )} +
+ + + ); +}; + +export default Generic; diff --git a/apps/infoalloggi/emails/onboarding-servizio.tsx b/apps/infoalloggi/emails/onboarding-servizio.tsx new file mode 100644 index 0000000..a002363 --- /dev/null +++ b/apps/infoalloggi/emails/onboarding-servizio.tsx @@ -0,0 +1,102 @@ +import { + Button, + Heading, + Img, + Link, + Row, + Section, + Text, +} from "@react-email/components"; +import Base from "./base"; +export type OnboardingServizio_NewMail = { + mailType: "onboardingServizio"; + props: OnboardingServizioProps; +}; + +type OnboardingServizioProps = { + token: string; + nome: string; + annunci?: { + titolo: string | null; + immagine: string | null; + codice: string; + prezzo: number; + }[]; +}; + +const OnboardingServizio = ({ + token, + nome, + annunci, +}: OnboardingServizioProps) => { + return ( + + <> + + Procedi ora su Infoalloggi.it + +
+ + + Ciao {nome},
+ Accedi ora al servizio di ricerca Infoalloggi, dove potrai andare + a contattare direttamente i proprietari degli immobili + disponibili. +
+
+
+ +
+
+ {annunci?.map((annuncio, index) => ( + <> + + Annunci selezionati per te: + +
+ + {`Annuncio + + +
+ Codice: {annuncio.codice} +
+ + {annuncio.titolo || "N/A"} + + + Prezzo: € + {(annuncio.prezzo / 1e2).toFixed(2)} + + + Scheda dell'annuncio → + +
+
+ + ))} +
+
+ + + ); +}; + +export default OnboardingServizio; diff --git a/apps/infoalloggi/emails/pagamento-conferma.tsx b/apps/infoalloggi/emails/pagamento-conferma.tsx new file mode 100644 index 0000000..690c6d8 --- /dev/null +++ b/apps/infoalloggi/emails/pagamento-conferma.tsx @@ -0,0 +1,42 @@ +import { Button, Heading, Row, Section, Text } from "@react-email/components"; +import Base from "./base"; +export type PagamentoConferma_NewMail = { + mailType: "pagamentoConferma"; + props: PagamentoConfermaProps; +}; + +type PagamentoConfermaProps = { + receiptHref: string; +}; + +const PagamentoConferma = ({ receiptHref }: PagamentoConfermaProps) => { + return ( + + <> + + Conferma Pagamento + +
+ + + Gentile Cliente, la informiamo che il pagamento è stato confermato + con successo. Procederemo ad attivare i servizi acquistati se non + lo fossero già. Può controllare lo stato del suo account nella + sezione dedicata. + + +
+ +
+
+ + + ); +}; + +export default PagamentoConferma; diff --git a/apps/infoalloggi/emails/pagamento-errore.tsx b/apps/infoalloggi/emails/pagamento-errore.tsx new file mode 100644 index 0000000..1c96305 --- /dev/null +++ b/apps/infoalloggi/emails/pagamento-errore.tsx @@ -0,0 +1,36 @@ +import { Button, Heading, Row, Section, Text } from "@react-email/components"; +import Base from "./base"; +export type PagamentoErrore_NewMail = { + mailType: "pagamentoErrore"; +}; + +const PagamentoErrore = () => { + return ( + + <> + + Errore Pagamento + +
+ + + Gentile Cliente, la informiamo che il pagamento non è andato a + buon fine. Si prega di riprovare o contattare il nostro servizio + clienti per ulteriori informazioni. + + +
+ +
+
+ + + ); +}; + +export default PagamentoErrore; diff --git a/apps/infoalloggi/emails/pagamento-ricezione.tsx b/apps/infoalloggi/emails/pagamento-ricezione.tsx new file mode 100644 index 0000000..d795eff --- /dev/null +++ b/apps/infoalloggi/emails/pagamento-ricezione.tsx @@ -0,0 +1,36 @@ +import { Button, Heading, Row, Section, Text } from "@react-email/components"; +import Base from "./base"; +export type PagamentoRicezione_NewMail = { + mailType: "pagamentoRicezione"; +}; + +const PagamentoRicezione = () => { + return ( + + <> + + Ricezione Pagamento + +
+ + + Gentile Cliente, le confermiamo la ricezione del pagamento. Le + invieremo una mail di conferma quando il pagamento sarà stato + processato. + + +
+ +
+
+ + + ); +}; + +export default PagamentoRicezione; diff --git a/apps/infoalloggi/emails/pw-reset-link.tsx b/apps/infoalloggi/emails/pw-reset-link.tsx new file mode 100644 index 0000000..9fa4b99 --- /dev/null +++ b/apps/infoalloggi/emails/pw-reset-link.tsx @@ -0,0 +1,39 @@ +import { Heading, Row, Section, Text, Button } from "@react-email/components"; +import Base from "./base"; +export type PwResetLink_NewMail = { + mailType: "pwResetLink"; + props: PwResetLinkProps; +}; + +type PwResetLinkProps = { + resetlink: string; +}; +const PwResetLink = ({ resetlink }: PwResetLinkProps) => { + return ( + + <> + + Link Reset Password + +
+ + + Abbiamo ricevuto la tua richiesta di reset password, clicca sul + link sottostante per procedere. + + +
+ +
+
+ + + ); +}; + +export default PwResetLink; diff --git a/apps/infoalloggi/emails/recesso.tsx b/apps/infoalloggi/emails/recesso.tsx new file mode 100644 index 0000000..ff8d0ee --- /dev/null +++ b/apps/infoalloggi/emails/recesso.tsx @@ -0,0 +1,39 @@ +import { Heading, Row, Section, Text } from "@react-email/components"; +import Base from "./base"; +export type Recesso_NewMail = { + mailType: "recesso"; +}; +const Recesso = () => { + return ( + + <> + + Richiesta di recesso + +
+ + + Gentile cliente, abbiamo ricevuto la tua richiesta di recesso. + Procederemo ad elaborare la richiesta e termineremo i servizi + attualemte attivi nel tuo account. + + + Per ulteriori informazioni e chiarimenti non esiti a contattarci + all'indirizzo{" "} + + amministrazione@infoalloggi.it{" "} + + + Cordiali saluti +
+
+
+ + + ); +}; + +export default Recesso; diff --git a/apps/infoalloggi/emails/registrazione-avvenuta.tsx b/apps/infoalloggi/emails/registrazione-avvenuta.tsx new file mode 100644 index 0000000..5ca80e3 --- /dev/null +++ b/apps/infoalloggi/emails/registrazione-avvenuta.tsx @@ -0,0 +1,35 @@ +import { Button, Heading, Row, Section, Text } from "@react-email/components"; +import Base from "./base"; +export type RegistrazioneAvvenuta_NewMail = { + mailType: "registrazioneAvvenuta"; +}; + +const RegistrazioneAvvenuta = () => { + return ( + + <> + + Registrazione avvenuta + +
+ + + La tua registrazione è avvenuta con successo! Ora puoi accedere al + nostro sito con le tue credenziali. + + +
+ +
+
+ + + ); +}; + +export default RegistrazioneAvvenuta; diff --git a/apps/infoalloggi/emails/static/Infoalloggi.png b/apps/infoalloggi/emails/static/Infoalloggi.png new file mode 100644 index 0000000000000000000000000000000000000000..e235477f3eaf0f37237e585e9500a0cafe252607 GIT binary patch literal 6168 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 I+adb@0F5ind;kCd literal 0 HcmV?d00001 diff --git a/apps/infoalloggi/eslint.config.mjs b/apps/infoalloggi/eslint.config.mjs new file mode 100644 index 0000000..62f73be --- /dev/null +++ b/apps/infoalloggi/eslint.config.mjs @@ -0,0 +1,152 @@ +import react from "eslint-plugin-react"; +import typescriptEslint from "@typescript-eslint/eslint-plugin"; +import pluginQuery from "@tanstack/eslint-plugin-query"; +import kyselyRules from "./kyselyRules/plugin.js"; +import tsParser from "@typescript-eslint/parser"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import noRelativeImportPaths from "eslint-plugin-no-relative-import-paths"; +import { FlatCompat } from "@eslint/eslintrc"; +import jsxA11y from "eslint-plugin-jsx-a11y"; +import eslintPluginBetterTailwindcss from "eslint-plugin-better-tailwindcss"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}); + +export default [ + ...pluginQuery.configs["flat/recommended"], + + { + ignores: [ + "**/.next", + "**/out", + "**/public", + "**/node_modules/", + "**/check-env-vars.js", + "**/headers/", + "**/schemas/", + "**/kyselyRules/", + "prettier.config.cjs", + "postcss.config.cjs", + ".kanelrc.js", + ], + }, + ...compat.extends( + "eslint:recommended", + "plugin:react/recommended", + "plugin:@next/next/recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-type-checked", + "plugin:@typescript-eslint/stylistic-type-checked", + "plugin:jsx-a11y/recommended", + ), + { + plugins: { + react, + "@typescript-eslint": typescriptEslint, + "better-tailwindcss": eslintPluginBetterTailwindcss, + "jsx-a11y": jsxA11y, + kyselyRules: kyselyRules, + //"no-relative-import-paths": noRelativeImportPaths, + }, + + languageOptions: { + parser: tsParser, + ecmaVersion: 5, + sourceType: "script", + + parserOptions: { + project: true, + tsconfigRootDir: "./", + }, + }, + linterOptions: { + reportUnusedDisableDirectives: true, + }, + + settings: { + react: { + version: "detect", + }, + + "import/resolver": { + typescript: { + alwaysTryTypes: true, + project: "./tsconfig.json", + }, + }, + "better-tailwindcss": { + entryPoint: "src/styles/globals.css", + }, + }, + + rules: { + "react/react-in-jsx-scope": "off", + "react-hooks/exhaustive-deps": "off", + "react/prop-types": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/array-type": "off", + "@typescript-eslint/no-redundant-type-constituents": "warn", + "@typescript-eslint/consistent-type-definitions": "off", + "@typescript-eslint/prefer-optional-chain": "off", + "@typescript-eslint/prefer-nullish-coalescing": "off", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/unbound-method": "off", + "@typescript-eslint/consistent-type-imports": [ + "warn", + { + prefer: "type-imports", + fixStyle: "inline-type-imports", + }, + ], + + "@typescript-eslint/no-unused-vars": [ + "warn", + { + argsIgnorePattern: "^_", + }, + ], + + "@typescript-eslint/require-await": "off", + "@typescript-eslint/switch-exhaustiveness-check": "warn", + + "@typescript-eslint/no-misused-promises": [ + "error", + { + checksVoidReturn: { + attributes: false, + }, + }, + ], + + "@next/next/no-img-element": "warn", + "kyselyRules/enforce-select": "error", + "kyselyRules/enforce-where": "error", + "kyselyRules/enforce-null": "error", + ...eslintPluginBetterTailwindcss.configs["recommended-warn"]?.rules, + ...eslintPluginBetterTailwindcss.configs["recommended-error"]?.rules, + "better-tailwindcss/enforce-consistent-line-wrapping": "off", + "better-tailwindcss/enforce-consistent-class-order": "off", + }, + }, + { + //ignores: ["**/emails/**/*.tsx", "next.config.js"], + files: ["src/**/*.tsx", "src/**/*.ts"], + plugins: { + "no-relative-import-paths": noRelativeImportPaths, + }, + rules: { + "no-relative-import-paths/no-relative-import-paths": [ + "warn", + { rootDir: "src", prefix: "~" }, + ], + }, + }, +]; diff --git a/apps/infoalloggi/headers/dev-https.js b/apps/infoalloggi/headers/dev-https.js new file mode 100644 index 0000000..e7aa3b4 --- /dev/null +++ b/apps/infoalloggi/headers/dev-https.js @@ -0,0 +1,13 @@ +console.log( + "\x1b[34m%s\x1b[0m", + ` + ____ _______ __ _ _ _____ _____ ____ ____ + | _ \\| ____\\ \\ / / | | | |_ _|_ _| _ \\/ ___| + | | | | _| \\ \\ / / | |_| | | | | | | |_) \\___ \\ + | |_| | |___ \\ V / | _ | | | | | | __/ ___) | + |____/|_____| \\_/ |_| |_| |_| |_| |_| |____/ + + +🩺 Running Development... +`, +); diff --git a/apps/infoalloggi/headers/dev.js b/apps/infoalloggi/headers/dev.js new file mode 100644 index 0000000..880d469 --- /dev/null +++ b/apps/infoalloggi/headers/dev.js @@ -0,0 +1,13 @@ +console.log( + "\x1b[32m%s\x1b[0m", + ` + ____ _______ __ + | _ \\| ____\\ \\ / / + | | | | _| \\ \\ / / + | |_| | |___ \\ V / + |____/|_____| \\_/ + + +🩺 Running Development... +`, +); diff --git a/apps/infoalloggi/headers/lint.js b/apps/infoalloggi/headers/lint.js new file mode 100644 index 0000000..fed41b4 --- /dev/null +++ b/apps/infoalloggi/headers/lint.js @@ -0,0 +1,13 @@ +console.log( + "\x1b[33m%s\x1b[0m", + ` + _ _ _ +| | (_) | | +| | _ _ __ | |_ +| | | | '_ \\| __| +| |____| | | | | |_ +\\_____/|_|_| |_|\\__| + +🔍 Linting and Env Checks... +`, +); diff --git a/apps/infoalloggi/headers/pg-typegen.js b/apps/infoalloggi/headers/pg-typegen.js new file mode 100644 index 0000000..f999d5e --- /dev/null +++ b/apps/infoalloggi/headers/pg-typegen.js @@ -0,0 +1,13 @@ +console.log( + "\x1b[36m%s\x1b[0m", + ` + ____ ____ _____ + | _ \\ / ___| |_ _| _ _ __ ___ __ _ ___ _ __ + | |_) | | _ | || | | | \'_ \\ / _ \\/ _\` |/ _ \\ \'_ \\ + | __/| |_| | | || |_| | |_) | __/ (_| | __/ | | | + |_| \\____| |_| \\__, | .__/ \\___|\\__, |\\___|_| |_| + |___/|_| |___/ + +📢 Importing Postgres schema... +`, +); diff --git a/apps/infoalloggi/headers/type.js b/apps/infoalloggi/headers/type.js new file mode 100644 index 0000000..7f65a15 --- /dev/null +++ b/apps/infoalloggi/headers/type.js @@ -0,0 +1,13 @@ +console.log( + "\x1b[31m%s\x1b[0m", + ` + _____ ____ _ _ + |_ _| _ _ __ ___ / ___| |__ ___ ___| | __ + | || | | | \'_ \\ / _ \\ | | | \'_ \\ / _ \\/ __| |/ / + | || |_| | |_) | __/ | |___| | | | __/ (__| < + |_| \\__, | .__/ \\___| \\____|_| |_|\\___|\\___|_|\\_\\ + |___/|_| + +🌶️ Typescript type check... +`, +); diff --git a/apps/infoalloggi/keydb-docker-compose.yml b/apps/infoalloggi/keydb-docker-compose.yml new file mode 100644 index 0000000..791520a --- /dev/null +++ b/apps/infoalloggi/keydb-docker-compose.yml @@ -0,0 +1,21 @@ +services: + tiles: + image: eqalpha/keydb:latest + volumes: + - tiles-data:/data + ports: + - "6379:6379" + command: keydb-server /etc/keydb/keydb.conf --maxmemory 100mb --maxmemory-policy volatile-lru --maxmemory-samples 5 + restart: unless-stopped + keydb: + image: eqalpha/keydb:latest + volumes: + - keydb-data:/data + ports: + - "6380:6379" + + restart: unless-stopped + +volumes: + tiles-data: + keydb-data: diff --git a/apps/infoalloggi/knip.json b/apps/infoalloggi/knip.json new file mode 100644 index 0000000..955e4eb --- /dev/null +++ b/apps/infoalloggi/knip.json @@ -0,0 +1,57 @@ +{ + "$schema": "https://unpkg.com/knip@5/schema.json", + "project": [ + "src/**", + "**", + "!src/schemas/public/*.ts", + "!emails/**" + ], + "ignore": [ + ".kanelrc.js", + ".eslintrc.json", + "TypeHelpers.type.ts", + "src/utils/api.ts", + "src/server/api/trpc.ts", + "check-env-vars.js", + "src/components/ui/*", + "src/hooks/coordDistance.ts", + "src/hooks/useMobile.tsx", + "src/lib/nossr.tsx", + "src/lib/useIsTyping.ts", + "src/middlewares/apis_middleware.ts", + "src/server/auth.ts", + "src/utils/get-media-url.ts", + "src/utils/utils.ts" + ], + "ignoreBinaries": [ + "stripe" + ], + "ignoreDependencies": [ + "kysely-plugin-serialize", + "sharp", + "uuid", + "@react-email/components", + "@eslint/compat", + "@next/eslint-plugin-next", + "@prettier/sync", + "@types/eslint", + "@types/uuid", + "eslint-config-next", + "eslint-import-resolver-typescript", + "eslint-plugin-import", + "eslint-plugin-react-hooks", + "kanel-kysely", + "npm-run-all", + "typescript-eslint", + "@react-email/preview-server", + "@tailwindcss/forms", + "@tailwindcss/typography", + "tailwind-scrollbar", + "tw-animate-css", + "@radix-ui/react-dialog", + "@radix-ui/react-label", + "@radix-ui/react-slot", + "@radix-ui/react-tooltip", + "@radix-ui/react-popover" + ] +} \ No newline at end of file diff --git a/apps/infoalloggi/kyselyRules/plugin.js b/apps/infoalloggi/kyselyRules/plugin.js new file mode 100644 index 0000000..bfd8258 --- /dev/null +++ b/apps/infoalloggi/kyselyRules/plugin.js @@ -0,0 +1,15 @@ +const plugin = { + meta: { + name: "kyselyRules", + version: "1.0.0", + }, + configs: {}, + rules: { + "enforce-select": require("./rules/select"), + "enforce-where": require("./rules/where"), + "enforce-null": require("./rules/null"), + }, + processors: {}, +}; + +module.exports = plugin; diff --git a/apps/infoalloggi/kyselyRules/rules/null.js b/apps/infoalloggi/kyselyRules/rules/null.js new file mode 100644 index 0000000..384ccb9 --- /dev/null +++ b/apps/infoalloggi/kyselyRules/rules/null.js @@ -0,0 +1,107 @@ +//@ts-nocheck +module.exports = { + meta: { + type: "problem", + docs: { + description: + "Ensure that all where condition that thest for null values utilize the correct operators.", + }, + fixable: "code", + schema: [], // no options + }, + create(context) { + const sourceCode = context.sourceCode; + const reportedNodes = new Set(); + if (!/\.where\(/.test(sourceCode.text)) { + // Skip + return {}; + } + + return { + ExpressionStatement(node) { + evaluate(node.expression, sourceCode.getTokens(node)); + }, + AwaitExpression(node) { + evaluate(node.argument, sourceCode.getTokens(node)); + }, + }; + + function Check(expression, operator) { + const forbiddenOperators = [ + "'='", + "'=='", + "'!='", + "'!=='", + '"="', + '"=="', + '"!="', + '"!=="', + ]; + + if (forbiddenOperators.includes(operator.value)) { + const message = `The where condition is testing for null using the ${operator.value} operator. Ensure this is intentional and uses the correct operator.`; + + context.report({ + node: expression, + message, + fix: (fixer) => { + const correctOperator = + operator.value === "'='" || + operator.value === "'=='" || + operator.value === '"="' || + operator.value === '"=="' + ? "'is'" + : "'is not'"; + return fixer.replaceText(operator, correctOperator); + }, + }); + } + } + function findNodes(expression, node, nodes) { + const nullNodes = nodes.filter((token) => token.value === "null"); + if (nullNodes.length === 0) { + return; + } + for (let i = 0; i < nullNodes.length; i++) { + const nullNode = nullNodes[i]; + + // Avoid duplicate reports + if (reportedNodes.has(nullNode)) { + continue; + } + reportedNodes.add(nullNode); + + const operator = sourceCode.getTokensBefore(nullNode, 2)[0]; + + if (!operator) { + return; + } + Check(expression, operator); + } + } + + function evaluate(expression, nodes) { + if (!expression || expression.type !== "CallExpression") { + return true; + } + + const whereNodes = nodes.filter((token) => token.value === "where"); + + if (whereNodes.length === 0 || !whereNodes) { + return; + } + + if (whereNodes.length === 1) { + findNodes(expression, whereNodes[0], nodes); + + return; + } + + for (let i = 0; i < whereNodes.length; i++) { + const whereNode = whereNodes[i]; + findNodes(expression, whereNode, nodes); + } + return; + } + }, +}; diff --git a/apps/infoalloggi/kyselyRules/rules/null.test.js b/apps/infoalloggi/kyselyRules/rules/null.test.js new file mode 100644 index 0000000..964c4b8 --- /dev/null +++ b/apps/infoalloggi/kyselyRules/rules/null.test.js @@ -0,0 +1,55 @@ +const { RuleTester } = require("eslint"); +const rule = require("./null"); + +const ruleTester = new RuleTester({ + languageOptions: { ecmaVersion: 2015 }, +}); + +ruleTester.run( + "enforce-null", // rule name + rule, + { + valid: [ + { + code: "trx.selectFrom('name').select(['field']).where('something', 'is', null).execute()", + }, + { + code: "trx.selectFrom('name').select(['field']).where('something', 'is not', null).execute()", + }, + ], + invalid: [ + { + code: "trx.selectFrom('name').select(['field']).where('something', '=', null).execute()", + errors: 1, + output: + "trx.selectFrom('name').select(['field']).where('something', 'is', null).execute()", + }, + { + code: "trx.selectFrom('name').select(['field']).where('something', '==', null).execute()", + errors: 1, + output: + "trx.selectFrom('name').select(['field']).where('something', 'is', null).execute()", + }, + { + code: "trx.selectFrom('name').select(['field']).where('something', '!=', null).execute()", + errors: 1, + output: + "trx.selectFrom('name').select(['field']).where('something', 'is not', null).execute()", + }, + { + code: "trx.selectFrom('name').select(['field']).where('something', '!==', null).execute()", + errors: 1, + output: + "trx.selectFrom('name').select(['field']).where('something', 'is not', null).execute()", + }, + { + code: "trx.selectFrom('name').select(['field']).where('something', 'is', null).where('something2', '=', null).execute()", + errors: 1, + output: + "trx.selectFrom('name').select(['field']).where('something', 'is', null).where('something2', 'is', null).execute()", + }, + ], + }, +); + +console.log("EnforceNull: All tests passed!"); diff --git a/apps/infoalloggi/kyselyRules/rules/select.js b/apps/infoalloggi/kyselyRules/rules/select.js new file mode 100644 index 0000000..f811a1f --- /dev/null +++ b/apps/infoalloggi/kyselyRules/rules/select.js @@ -0,0 +1,61 @@ +//@ts-nocheck +module.exports = { + meta: { + type: "suggestion", + docs: { + description: "Description of the rule", + }, + fixable: "code", + schema: [], // no options + }, + create(context) { + const sourceCode = context.sourceCode; + if (!/\.selectFrom\(/.test(sourceCode.text)) { + // Skip + return {}; + } + function evaluate(expression, nodes) { + if (!expression || expression.type !== "CallExpression") { + return true; + } + + const hasSelectFrom = nodes.some((token) => token.value === "selectFrom"); + + if (hasSelectFrom) { + const hasSelect = nodes.some( + (token) => token.value === "select" || token.value === "selectAll", + ); + + if (!hasSelect) { + let closingParenthesisNode = null; + const selectNodeIndex = nodes.findIndex( + (token) => token.value === "selectFrom", + ); + if (selectNodeIndex !== -1) { + closingParenthesisNode = nodes + .slice(selectNodeIndex) + .find((token) => token.value === ")"); + } + context.report({ + node: expression, + message: `Call chains containing "selectFrom" must also include a "select" or "selectAll" clause.`, + fix: (fixer) => { + return fixer.insertTextAfter( + closingParenthesisNode || nodes[6], + ".selectAll()", + ); + }, + }); + } + } + } + return { + ExpressionStatement(node) { + evaluate(node.expression, sourceCode.getTokens(node)); + }, + AwaitExpression(node) { + evaluate(node.argument, sourceCode.getTokens(node)); + }, + }; + }, +}; diff --git a/apps/infoalloggi/kyselyRules/rules/select.test.js b/apps/infoalloggi/kyselyRules/rules/select.test.js new file mode 100644 index 0000000..99ce5bc --- /dev/null +++ b/apps/infoalloggi/kyselyRules/rules/select.test.js @@ -0,0 +1,31 @@ +const { RuleTester } = require("eslint"); +const rule = require("./select"); + +const ruleTester = new RuleTester({ + languageOptions: { ecmaVersion: 2015 }, +}); + +ruleTester.run( + "enforce-select", // rule name + rule, + { + valid: [ + { + code: "trx.selectFrom('name').select(['field']).where('something', '=', something).execute()", + }, + { + code: "trx.selectFrom('name').selectAll().where('something', '=', something).execute()", + }, + ], + invalid: [ + { + code: "trx.selectFrom('name').where('something', '=', something).execute()", + errors: 1, + output: + "trx.selectFrom('name').selectAll().where('something', '=', something).execute()", + }, + ], + }, +); + +console.log("EnforceSelect: All tests passed!"); diff --git a/apps/infoalloggi/kyselyRules/rules/where.js b/apps/infoalloggi/kyselyRules/rules/where.js new file mode 100644 index 0000000..63d3359 --- /dev/null +++ b/apps/infoalloggi/kyselyRules/rules/where.js @@ -0,0 +1,52 @@ +//@ts-nocheck +module.exports = { + meta: { + type: "problem", + docs: { + description: + "Ensures that any call chain which affects a table also includes a 'where' clause.", + }, + fixable: "code", + schema: [], // no options + }, + create(context) { + const sourceCode = context.sourceCode; + + if (!/\.updateTable\(|\.deleteFrom\(/.test(sourceCode.text)) { + // Skip + return {}; + } + + return { + ExpressionStatement(node) { + evaluate(node.expression, sourceCode.getTokens(node)); + }, + AwaitExpression(node) { + evaluate(node.argument, sourceCode.getTokens(node)); + }, + }; + + function evaluate(expression, nodes) { + if (!expression || expression.type !== "CallExpression") { + return true; + } + + const hasUpdateOrDelete = nodes.some( + (token) => + token.value === "updateTable" || token.value === "deleteFrom", + ); + + if (hasUpdateOrDelete) { + const hasWhere = nodes.some((token) => token.value === "where"); + + if (!hasWhere) { + const message = `Call chains containing "updateTable" or "deleteFrom" must also include a "where" clause.`; + context.report({ + node: expression, + message, + }); + } + } + } + }, +}; diff --git a/apps/infoalloggi/kyselyRules/rules/where.test.js b/apps/infoalloggi/kyselyRules/rules/where.test.js new file mode 100644 index 0000000..4af9fba --- /dev/null +++ b/apps/infoalloggi/kyselyRules/rules/where.test.js @@ -0,0 +1,26 @@ +const { RuleTester } = require("eslint"); +const rule = require("./where"); + +const ruleTester = new RuleTester({ + languageOptions: { ecmaVersion: 2015 }, +}); + +ruleTester.run( + "enforce-where", // rule name + rule, + { + valid: [ + { + code: "trx.updateTable('name').set({foo:bar}).where('something', '=', something).execute()", + }, + ], + invalid: [ + { + code: "trx.updateTable('name').set({foo:bar}).execute()", + errors: 1, + }, + ], + }, +); + +console.log("EnforceWhere: All tests passed!"); diff --git a/apps/infoalloggi/next.config.mjs b/apps/infoalloggi/next.config.mjs new file mode 100644 index 0000000..379eddd --- /dev/null +++ b/apps/infoalloggi/next.config.mjs @@ -0,0 +1,88 @@ +/** + * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. + * This is especially useful for Docker builds. + */ + +import { env } from "node:process"; + +/** @type {import("next").NextConfig} */ +const nextConfig = { + output: env.NODE_ENV === "production" ? "standalone" : undefined, // This is for docker builds + reactStrictMode: true, + i18n: { + locales: ["it", "en"], + defaultLocale: "it", + }, + images: { + remotePatterns: [ + { + protocol: "https", + hostname: "*.googleusercontent.com", + port: "", + pathname: "**", + }, + { + hostname: env.BACKENDSERVER_URL || "localhost:1323", + }, + ], + minimumCacheTTL: 86400, // 1 day in seconds + }, + + typescript: { + ignoreBuildErrors: true, + }, + eslint: { + ignoreDuringBuilds: true, + }, + transpilePackages: ["jotai-devtools"], + devIndicators: false, + rewrites: async () => { + return [ + { + source: "/go-api/images/get/:slug*", + destination: env.BACKENDSERVER_URL + "/images/get/:slug*", + }, + { + source: "/go-api/storage/get/:slug*", + destination: env.BACKENDSERVER_URL + "/storage/get/:slug*", + has: [ + { type: "cookie", key: "access_token" }, + { + type: "query", + key: "token", + value: + "(?^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)", + }, + ], + }, + { + source: "/go-api/storage/upload:slug*", + destination: env.BACKENDSERVER_URL + "/storage/upload:slug*", + has: [ + { type: "cookie", key: "access_token" }, + { + type: "query", + key: "token", + value: + "(?^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)", + }, + ], + }, + ]; + }, + headers: async () => { + return [ + { + source: "/:path*", + headers: [ + { + key: "X-Frame-Options", + value: "", + }, + ], + }, + ]; + }, +}; + +export default nextConfig; diff --git a/apps/infoalloggi/package-lock.json b/apps/infoalloggi/package-lock.json new file mode 100644 index 0000000..bb977be --- /dev/null +++ b/apps/infoalloggi/package-lock.json @@ -0,0 +1,19903 @@ +{ + "name": "infoalloggi2", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "infoalloggi2", + "version": "0.1.0", + "dependencies": { + "@fattureincloud/fattureincloud-ts-sdk": "^2.1.1", + "@hookform/resolvers": "^5.1.1", + "@radix-ui/react-popover": "^1.1.14", + "@radix-ui/react-scroll-area": "^1.2.9", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-toggle-group": "^1.1.10", + "@react-email/components": "^0.3.2", + "@react-email/render": "^1.1.3", + "@stripe/react-stripe-js": "^3.7.0", + "@stripe/stripe-js": "^7.5.0", + "@tanstack/react-query": "^5.74.4", + "@tanstack/react-table": "^8.21.3", + "@tanstack/react-virtual": "^3.13.12", + "@tiptap/extension-underline": "^2.23.0", + "@tiptap/pm": "^2.25.0", + "@tiptap/react": "^2.23.0", + "@tiptap/starter-kit": "^2.25.0", + "@trpc/client": "^11.1.0", + "@trpc/next": "^11.4.3", + "@trpc/react-query": "^11.1.0", + "@trpc/server": "^11.1.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "cookies-next": "^5.1.0", + "date-fns": "^4.1.0", + "embla-carousel-react": "^8.6.0", + "framer-motion": "^12.8.0", + "frimousse": "^0.3.0", + "ioredis": "^5.6.1", + "jose": "^6.0.12", + "js-cookie": "^3.0.5", + "kysely": "^0.28.2", + "kysely-plugin-serialize": "^0.8.2", + "leaflet": "^1.9.4", + "leaflet-defaulticon-compatibility": "^0.1.2", + "lucide-react": "^0.525.0", + "next": "^15.3.4", + "next-themes": "^0.4.6", + "nodemailer": "^7.0.5", + "nodemailer-html-to-text": "^3.2.0", + "nuqs": "^2.4.3", + "pg": "^8.16.3", + "radix-ui": "^1.4.2", + "react": "^19.1.0", + "react-colorful": "^5.6.1", + "react-day-picker": "^9.8.0", + "react-dom": "^19.1.0", + "react-email": "^4.2.3", + "react-hook-form": "^7.60.0", + "react-hot-toast": "^2.5.2", + "react-is": "^19.1.0", + "react-leaflet": "^5.0.0", + "react-phone-number-input": "^3.4.12", + "react-reverse-portal": "^2.3.0", + "react-select": "^5.10.2", + "react-to-print": "^3.1.1", + "react-use": "^17.6.0", + "recharts": "^2.15.4", + "sharp": "^0.34.3", + "stripe": "^18.3.0", + "superjson": "2.2.2", + "tailwind-merge": "2.4", + "trpc-ui": "^1.0.15", + "type-fest": "^4.41.0", + "uuid": "^11.1.0", + "vaul": "^1.1.2", + "yaml": "^2.8.0", + "zod": "^3.25.76" + }, + "devDependencies": { + "@eslint/compat": "^1.3.1", + "@eslint/eslintrc": "^3.3.0", + "@eslint/js": "^9.30.0", + "@hookform/devtools": "^4.4.0", + "@next/eslint-plugin-next": "^15.3.4", + "@prettier/sync": "^0.6.1", + "@react-email/preview-server": "^4.2.3", + "@tailwindcss/forms": "^0.5.10", + "@tailwindcss/postcss": "^4.1.11", + "@tailwindcss/typography": "^0.5.16", + "@tanstack/eslint-plugin-query": "^5.81.2", + "@total-typescript/ts-reset": "^0.6.1", + "@types/eslint": "^9.6.1", + "@types/eslint-plugin-jsx-a11y": "^6.10.0", + "@types/js-cookie": "^3.0.6", + "@types/leaflet": "^1.9.20", + "@types/node": "^24.0.7", + "@types/nodemailer": "^6.4.17", + "@types/nodemailer-html-to-text": "^3.1.3", + "@types/pg": "^8.15.4", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@types/react-is": "^19.0.0", + "@types/uuid": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^8.28.0", + "@typescript-eslint/parser": "^8.31.0", + "cross-env": "^7.0.3", + "eslint": "^9.30.1", + "eslint-config-next": "^15.3.4", + "eslint-import-resolver-typescript": "^4.4.4", + "eslint-plugin-better-tailwindcss": "^3.5.1", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-no-relative-import-paths": "^1.6.1", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^5.2.0", + "jiti": "^2.4.2", + "kanel": "^3.14.1", + "kanel-kysely": "^0.7.1", + "knip": "^5.62.0", + "npm-run-all": "^4.1.5", + "postcss": "^8.5.3", + "prettier": "^3.6.2", + "prettier-plugin-classnames": "^0.8.1", + "prettier-plugin-tailwindcss": "^0.6.14", + "tailwind-scrollbar": "^4.0.2", + "tailwindcss": "^4.1.11", + "tw-animate-css": "^1.3.5", + "typescript": "^5.8.3", + "typescript-eslint": "^8.35.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/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/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", + "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@date-fns/tz": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.2.0.tgz", + "integrity": "sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==", + "license": "MIT" + }, + "node_modules/@electric-sql/pglite": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.2.17.tgz", + "integrity": "sha512-qEpKRT2oUaWDH6tjRxLHjdzMqRUGYDnGZlKrnL4dJ77JVMcP2Hpo3NYnOSPKdZdeec57B6QPprCUFg0picx5Pw==", + "dev": true + }, + "node_modules/@emnapi/core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", + "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.4.tgz", + "integrity": "sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", + "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", + "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", + "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", + "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", + "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", + "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", + "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", + "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", + "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", + "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", + "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", + "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", + "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", + "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", + "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", + "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", + "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", + "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", + "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", + "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", + "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", + "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", + "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", + "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", + "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", + "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", + "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "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==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/compat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.3.1.tgz", + "integrity": "sha512-k8MHony59I5EPic6EQTCNOuPoVBnoYXkP+20xvwFjN7t0qI3ImyvyBgg+hIVPwC8JaxVjjUZld+cLfBLFDLucg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.40 || 9" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "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==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/css-tree": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@eslint/css-tree/-/css-tree-3.6.1.tgz", + "integrity": "sha512-5DIsBME23tUQD5zHD+T38lC2DG4jB8x8JRa+yDncLne2TIZA0VuCpcSazOX1EC+sM/q8w24qeevXfmfsIxAeqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.21.0", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/@eslint/css-tree/node_modules/mdn-data": { + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.21.0.tgz", + "integrity": "sha512-+ZKPQezM5vYJIkCxaC+4DTnRrVZR1CgsKLu5zsQERQx6Tea8Y+wMx5A24rq8A8NepCeatIQufVAekKNgiBMsGQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "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.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.1.tgz", + "integrity": "sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "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==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz", + "integrity": "sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.15.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@fattureincloud/fattureincloud-ts-sdk": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fattureincloud/fattureincloud-ts-sdk/-/fattureincloud-ts-sdk-2.1.1.tgz", + "integrity": "sha512-cW0+MrFpOL1Pmg3338sHDR4iMZu/U4mepWCWo9yy+6IFr1Z1IS8z3QIGg8SuJN+QzIiJblLNVE/qH0CaujOH4Q==", + "license": "MIT", + "dependencies": { + "axios": "^1.6.1", + "form-data": "^4.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.13", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" + }, + "node_modules/@hookform/devtools": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@hookform/devtools/-/devtools-4.4.0.tgz", + "integrity": "sha512-Mtlic+uigoYBPXlfvPBfiYYUZuyMrD3pTjDpVIhL6eCZTvQkHsKBSKeZCvXWUZr8fqrkzDg27N+ZuazLKq6Vmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emotion/react": "^11.1.5", + "@emotion/styled": "^11.3.0", + "@types/lodash": "^4.14.168", + "little-state-machine": "^4.1.0", + "lodash": "^4.17.21", + "react-simple-animate": "^3.3.12", + "use-deep-compare-effect": "^1.8.1", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19", + "react-dom": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/@hookform/devtools/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==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@hookform/resolvers": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.1.1.tgz", + "integrity": "sha512-J/NVING3LMAEvexJkyTLjruSm7aOFx7QX21pzkiJfMoNG0wl5aFEjLTl7ay7IQb9EWY6AkrBy7tHL2Alijpdcg==", + "license": "MIT", + "dependencies": { + "@standard-schema/utils": "^0.3.0" + }, + "peerDependencies": { + "react-hook-form": "^7.55.0" + } + }, + "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==", + "dev": true, + "license": "Apache-2.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==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.0" + } + }, + "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==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.0" + } + }, + "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==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "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==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "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==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "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==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "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==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "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==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "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==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "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==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "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==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "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==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.0" + } + }, + "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==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.0" + } + }, + "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==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.0" + } + }, + "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==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.0" + } + }, + "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==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.0" + } + }, + "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==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.0" + } + }, + "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==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.0" + } + }, + "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==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.4.4" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.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==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.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==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.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==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", + "license": "MIT" + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.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==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", + "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "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==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kristiandupont/recase": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@kristiandupont/recase/-/recase-1.4.1.tgz", + "integrity": "sha512-e5t4YqhnRGbS9sU4N52cQgTn37qKwTsxDDcIuIkgPvX0UmnL+7eoOR6oFXeCib5zYuw03vYKpR55NBq+W43j1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ramda": "^0.30.0" + } + }, + "node_modules/@lottiefiles/dotlottie-react": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.13.3.tgz", + "integrity": "sha512-V4FfdYlqzjBUX7f0KV6vfQOOI0Cp+3XeG/ZqSDFSEVg5P7fpROpDv5/I9aTM8sOCESK1SWT96Fem+QVUnBV1wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lottiefiles/dotlottie-web": "0.42.0" + }, + "peerDependencies": { + "react": "^17 || ^18 || ^19" + } + }, + "node_modules/@lottiefiles/dotlottie-web": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-web/-/dotlottie-web-0.42.0.tgz", + "integrity": "sha512-Zr2LCaOAoPCsdAQgeLyCSiQ1+xrAJtRCyuEYDj0qR5heUwpc+Pxbb88JyTVumcXFfKOBMOMmrlsTScLz2mrvQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@monaco-editor/loader": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.5.0.tgz", + "integrity": "sha512-hKoGSM+7aAc7eRTRjpqAZucPmoNOC4UUbknb/VNoTkEIkCPhqV8LfbsgM1webRM7S/z21eHEx9Fkwx8Z/C/+Xw==", + "license": "MIT", + "dependencies": { + "state-local": "^1.0.6" + } + }, + "node_modules/@monaco-editor/react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.7.0.tgz", + "integrity": "sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==", + "license": "MIT", + "dependencies": { + "@monaco-editor/loader": "^1.5.0" + }, + "peerDependencies": { + "monaco-editor": ">= 0.25.0 < 1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.17.1.tgz", + "integrity": "sha512-OcZj+cs6EfUD39IoPBOgN61zf1XFVY+imsGoBDwXeSq2UHJZE3N59zzBOVjclck91Ne3e9gudONOeILvHCIhUA==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/material": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.17.1.tgz", + "integrity": "sha512-2B33kQf+GmPnrvXXweWAx+crbiUEsxCdCN979QDYnlH9ox4pd+0/IBriWLV+l6ORoBF60w39cWjFnJYGFdzXcw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/core-downloads-tracker": "^5.17.1", + "@mui/system": "^5.17.1", + "@mui/types": "~7.2.15", + "@mui/utils": "^5.17.1", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^19.0.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.17.1.tgz", + "integrity": "sha512-XMxU0NTYcKqdsG8LRmSoxERPXwMbp16sIXPcLVgLGII/bVNagX0xaheWAwFv8+zDK7tI3ajllkuD3GZZE++ICQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.17.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.14.tgz", + "integrity": "sha512-UAiMPZABZ7p8mUW4akDV6O7N3+4DatStpXMZwPlt+H/dA0lt67qawN021MNND+4QTpjaiMYxbhKZeQcyWCbuKw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.23.9", + "@emotion/cache": "^11.13.5", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.17.1.tgz", + "integrity": "sha512-aJrmGfQpyF0U4D4xYwA6ueVtQcEMebET43CUmKMP7e7iFh3sMIF3sBR0l8Urb4pqx1CBjHAaWgB0ojpND4Q3Jg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.17.1", + "@mui/styled-engine": "^5.16.14", + "@mui/types": "~7.2.15", + "@mui/utils": "^5.17.1", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.24", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.24.tgz", + "integrity": "sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==", + "license": "MIT", + "peer": true, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.17.1.tgz", + "integrity": "sha512-jEZ8FTqInt2WzxDV8bhImWBqeQRD99c/id/fq83H0ER9tFl+sfZlaAoCdznGvbSQQ9ividMxqSV2c7cC1vBcQg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/types": "~7.2.15", + "@types/prop-types": "^15.7.12", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^19.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz", + "integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==", + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@next/env": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.4.1.tgz", + "integrity": "sha512-DXQwFGAE2VH+f2TJsKepRXpODPU+scf5fDbKOME8MMyeyswe4XwgRdiiIYmBfkXU+2ssliLYznajTrOQdnLR5A==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "15.3.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.4.tgz", + "integrity": "sha512-lBxYdj7TI8phbJcLSAqDt57nIcobEign5NYIKCiy0hXQhrUbTqLqOaSDi568U6vFg4hJfBdZYsG4iP/uKhCqgg==", + "dev": true, + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.4.1.tgz", + "integrity": "sha512-L+81yMsiHq82VRXS2RVq6OgDwjvA4kDksGU8hfiDHEXP+ncKIUhUsadAVB+MRIp2FErs/5hpXR0u2eluWPAhig==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.4.1.tgz", + "integrity": "sha512-jfz1RXu6SzL14lFl05/MNkcN35lTLMJWPbqt7Xaj35+ZWAX342aePIJrN6xBdGeKl6jPXJm0Yqo3Xvh3Gpo3Uw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.4.1.tgz", + "integrity": "sha512-k0tOFn3dsnkaGfs6iQz8Ms6f1CyQe4GacXF979sL8PNQxjYS1swx9VsOyUQYaPoGV8nAZ7OX8cYaeiXGq9ahPQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.4.1.tgz", + "integrity": "sha512-4ogGQ/3qDzbbK3IwV88ltihHFbQVq6Qr+uEapzXHXBH1KsVBZOB50sn6BWHPcFjwSoMX2Tj9eH/fZvQnSIgc3g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.4.1.tgz", + "integrity": "sha512-Jj0Rfw3wIgp+eahMz/tOGwlcYYEFjlBPKU7NqoOkTX0LY45i5W0WcDpgiDWSLrN8KFQq/LW7fZq46gxGCiOYlQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.4.1.tgz", + "integrity": "sha512-9WlEZfnw1vFqkWsTMzZDgNL7AUI1aiBHi0S2m8jvycPyCq/fbZjtE/nDkhJRYbSjXbtRHYLDBlmP95kpjEmJbw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.4.1.tgz", + "integrity": "sha512-WodRbZ9g6CQLRZsG3gtrA9w7Qfa9BwDzhFVdlI6sV0OCPq9JrOrJSp9/ioLsezbV8w9RCJ8v55uzJuJ5RgWLZg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.4.1.tgz", + "integrity": "sha512-y+wTBxelk2xiNofmDOVU7O5WxTHcvOoL3srOM0kxTzKDjQ57kPU0tpnPJ/BWrRnsOwXEv0+3QSbGR7hY4n9LkQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@oxc-resolver/binding-android-arm-eabi": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm-eabi/-/binding-android-arm-eabi-11.5.2.tgz", + "integrity": "sha512-g3Dh0uN8E1fJAi+m5LxDU1frUz5q4ox/arqXGpEmt+u7wRXBpXnGsxDV/GFB59AmVWbQAiyhVCiM2GymkaxwwQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@oxc-resolver/binding-android-arm64": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm64/-/binding-android-arm64-11.5.2.tgz", + "integrity": "sha512-bij8HIMXYGsxdxuvycpkgvTfBpj6tv5jKaZ4tcPKPJjewH5WYIaSAT4PJYlAidP/0m8jyPu5GGkslF7/qPUhAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@oxc-resolver/binding-darwin-arm64": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-11.5.2.tgz", + "integrity": "sha512-C2hjujTOPgyi4sgc4UL+JHlEiClTNncLUdwiilMnwjiEcxSe7ubBmeZRENUd9bx8P9DbS1ApaBjwv13ZngrZRw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxc-resolver/binding-darwin-x64": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-11.5.2.tgz", + "integrity": "sha512-Llf2qMBzs4PdbnrA7s3tVjW7MXnjUXepfqQkEXM2klxIggcbtbIESe3KupYHoo0Q0p6hLHwWoadyM32Ho2hLzA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxc-resolver/binding-freebsd-x64": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-11.5.2.tgz", + "integrity": "sha512-dKCHhqgKW3eqnJBlgLC03qoDSVeZSZJVcSVpyomu0XrrNha3wVyv6aJjN7A8HnjUCqJDibbZfTtD3/gnsm30eQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@oxc-resolver/binding-linux-arm-gnueabihf": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-11.5.2.tgz", + "integrity": "sha512-AMV4MbHdUvwA6oBLk90/gPo3gPMZl9+DHeas8BxRdq/uX1BFQ05s+mhy9ATGElGQsRVVOPya9qczOdb8eAlM6w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-arm-musleabihf": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-11.5.2.tgz", + "integrity": "sha512-hTCkii4HwQushiD3L86cefvojTY6OSDzcrQZHVaUmrtkL0OQnRT9qUff83lJIQhb94rjaEfQsgUdVl1bvuUK/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-arm64-gnu": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-11.5.2.tgz", + "integrity": "sha512-EXkMvem90Pdw0bw0TlOhAHFAGLopb1LaVwsxF+iSc/zQtuR62kl2jGMQRvsW4NHaF+nUN29H8IYQDzox4gxsRw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-arm64-musl": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-11.5.2.tgz", + "integrity": "sha512-UvA2QZB73XPXmFweDRyXyUchN1YnEx+cca7a/ojdhT+stDe0WKMK32y27oabWokJJsZZOd+W40dD7sxjzx7K/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-ppc64-gnu": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-11.5.2.tgz", + "integrity": "sha512-0rllGQIAmeb+vAtmco0PnTzqlMs0DQs+QvHu/8AQAmgrlKBZDJJmRvLqMv6EXgTrLlWxoM0o9oNf7mZ0tEenUQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-riscv64-gnu": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-11.5.2.tgz", + "integrity": "sha512-kfE5ALnGsxEyz/e6lZbNUyPjZwTIuExTVJLVzjT/RjvaltSZ6J0u/6/CKsVFD3t686yqse1fnXuydUsgAFmuXg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-riscv64-musl": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-11.5.2.tgz", + "integrity": "sha512-O6lbEl+heEd3QS2GOwm+iDGMqEWA18X/b9JNodzEHe2TJeOJAV/5xJ7jQTGA2seoy6/REhW744O35DyPFxZ2aQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-s390x-gnu": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-11.5.2.tgz", + "integrity": "sha512-6ZASmeqVq+xEQZz/EH+U4j1hPeqVQ8Eo58oYrt9FGJhseowAh6TAOHXe80HAJH6HQTcws1fhS/A7I4hm6NOgZA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-x64-gnu": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-11.5.2.tgz", + "integrity": "sha512-MYTtU3sKGZfvOYVpUfFHFcxLGOI8WN5BIQeWgNnNDEBHasthEDnyeNYpj6QbLd3XMz84gGA1G+mKMm/lVUF6hA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-x64-musl": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-11.5.2.tgz", + "integrity": "sha512-7u1ANU1jkDUbC5ZxGXWDs0OLuUvV3DzqHUI+g41wHdz0iLoVSJ7rR+hl/crHIm4PpFkYbpU+joRslM5OLxeKlw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-wasm32-wasi": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-11.5.2.tgz", + "integrity": "sha512-2tOsCVH+THg9b9h6MiTymTrveSUWAOaQGj2CPQ4XJncxECsZY6MfxKLul+XsW4KLpstE89KBemRIQi6Il0Twew==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-resolver/binding-win32-arm64-msvc": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-11.5.2.tgz", + "integrity": "sha512-NmpFIoT86wD2cNAweoEMLKZ4aaGzbYzmeMcYK65Ml9PbH53YXe5XZOXdzVExLKGJ3Rorf055n/67pRRvpIm/sQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxc-resolver/binding-win32-ia32-msvc": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-11.5.2.tgz", + "integrity": "sha512-1EwjnPP5sEKdQl4+3edw+8xMZ79qk7iPXOJRUtdE0jLEdlFmzpnLBfsz54G7mOiQvnc6uR8YePBQb1iCRnysNA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxc-resolver/binding-win32-x64-msvc": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-11.5.2.tgz", + "integrity": "sha512-eB8eV8SdO+OpbJJ3dvTgSPOsDsW7SJp+ih5WIBWt7pWMlVbQyjBwDgTI8gGTqg2iwdEEUVqlfivEEs22hKnxRw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz", + "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@prettier/sync": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@prettier/sync/-/sync-0.6.1.tgz", + "integrity": "sha512-yF9G8vK/LYUTF3Cijd7VC9La3b20F20/J/fgoR4H0B8JGOWnZVZX6+I6+vODPosjmMcpdlUV+gUqJQZp3kLOcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "make-synchronized": "^0.8.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier-synchronized?sponsor=1" + }, + "peerDependencies": { + "prettier": "*" + } + }, + "node_modules/@radix-ui/colors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/colors/-/colors-3.0.0.tgz", + "integrity": "sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@radix-ui/number": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz", + "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-accessible-icon": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accessible-icon/-/react-accessible-icon-1.1.7.tgz", + "integrity": "sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.11.tgz", + "integrity": "sha512-l3W5D54emV2ues7jjeG1xcyN7S3jnK3zE2zHqgn0CmMsy9lNJwmgcrmaxS+7ipw15FAivzKNzH3d5EcGoFKw0A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collapsible": "1.1.11", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.14.tgz", + "integrity": "sha512-IOZfZ3nPvN6lXpJTBCunFQPRSvK8MDgSc1FB85xnIpUKOw9en0dJj8JmCAxV7BiZdtYlUpmrQjoTFkVYtdoWzQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dialog": "1.1.14", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "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", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-aspect-ratio": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz", + "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz", + "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.2.tgz", + "integrity": "sha512-yd+dI56KZqawxKZrJ31eENUwqc1QSqg4OZ15rybGjF2ZNwMO+wCyHzAVLRp9qoYJf7kYy0YpZ2b0JCzJ42HZpA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.11.tgz", + "integrity": "sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "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", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "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-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "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-context-menu": { + "version": "2.2.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.15.tgz", + "integrity": "sha512-UsQUMjcYTsBjTSXw0P3GO0werEQvUY2plgRQuKoCTtkNr45q1DiL51j4m7gxhABzZ0BadoXNsIbg7F3KwiUBbw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-menu": "2.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz", + "integrity": "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "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", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "license": "MIT", + "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-dismissable-layer": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz", + "integrity": "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.15.tgz", + "integrity": "sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz", + "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==", + "license": "MIT", + "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-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-form": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-form/-/react-form-0.1.7.tgz", + "integrity": "sha512-IXLKFnaYvFg/KkeV5QfOX7tRnwHXp127koOFUjLWMTrRv5Rny3DQcAtIFFeA/Cli4HHM8DuJCXAUsgnFVJndlw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-label": "2.1.7", + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-hover-card": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.14.tgz", + "integrity": "sha512-CPYZ24Mhirm+g6D8jArmLzjYu4Eyg3TTUHswR26QgzXBHBe64BO/RHOJKzmF/Dxb4y4f9PKyJdwm/O/AhNkb+Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "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-label": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz", + "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.15.tgz", + "integrity": "sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "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", + "integrity": "sha512-Z71C7LGD+YDYo3TV81paUs8f3Zbmkvg6VLRQpKYfzioOE6n7fOhA3ApK/V/2Odolxjoc4ENk8AYCjohCNayd5A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.13.tgz", + "integrity": "sha512-WG8wWfDiJlSF5hELjwfjSGOXcBR/ZMhBFCGYe8vERpC39CQYZeq1PQ2kaYHdye3V95d06H89KGMsVCIE4LWo3g==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-one-time-password-field": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-one-time-password-field/-/react-one-time-password-field-0.1.7.tgz", + "integrity": "sha512-w1vm7AGI8tNXVovOK7TYQHrAGpRF7qQL+ENpT1a743De5Zmay2RbWGKAiYDKIyIuqptns+znCKwNztE2xl1n0Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-password-toggle-field": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-password-toggle-field/-/react-password-toggle-field-0.1.2.tgz", + "integrity": "sha512-F90uYnlBsLPU1UbSLciLsWQmk8+hdWa6SFw4GXaIdNWxFxI5ITKVdAG64f+Twaa9ic6xE7pqxPyUmodrGjT4pQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-is-hydrated": "0.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.14.tgz", + "integrity": "sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "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", + "integrity": "sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz", + "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "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", + "integrity": "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.7.tgz", + "integrity": "sha512-9w5XhD0KPOrm92OTTE0SysH3sYzHsSTHNvZgUBo/VZ80VdYyB5RneDbc0dKpURS24IxkoFRu/hI0i4XyfFwY6g==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.10.tgz", + "integrity": "sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.9.tgz", + "integrity": "sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.5.tgz", + "integrity": "sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "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", + "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.5.tgz", + "integrity": "sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "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-switch": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.5.tgz", + "integrity": "sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.12.tgz", + "integrity": "sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.14.tgz", + "integrity": "sha512-nAP5FBxBJGQ/YfUB+r+O6USFVkWq3gAInkxyEnmvEV5jtSbfDhfa4hwX8CraCnbjMLsE7XSf/K75l9xXY7joWg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.9.tgz", + "integrity": "sha512-ZoFkBBz9zv9GWer7wIjvdRxmh2wyc2oKWw6C6CseWd6/yq1DK/l5lJ+wnsmFwJZbBYqr02mrf8A2q/CVCuM3ZA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.10.tgz", + "integrity": "sha512-kiU694Km3WFLTC75DdqgM/3Jauf3rD9wxeS9XtyWFKsBUeZA337lC+6uUazT7I1DhanZ5gyD5Stf8uf2dbQxOQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-toggle": "1.1.9", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toolbar": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.10.tgz", + "integrity": "sha512-jiwQsduEL++M4YBIurjSa+voD86OIytCod0/dbIxFZDLD8NfO1//keXYMfsW8BPcfqwoNjt+y06XcJqAb4KR7A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-separator": "1.1.7", + "@radix-ui/react-toggle-group": "1.1.10" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.7.tgz", + "integrity": "sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "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", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "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-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "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-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "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-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "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-is-hydrated": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", + "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.5.0" + }, + "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-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "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-previous": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "license": "MIT", + "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-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "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-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "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-visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, + "node_modules/@react-email/body": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/body/-/body-0.0.11.tgz", + "integrity": "sha512-ZSD2SxVSgUjHGrB0Wi+4tu3MEpB4fYSbezsFNEJk2xCWDBkFiOeEsjTmR5dvi+CxTK691hQTQlHv0XWuP7ENTg==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/button": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.2.0.tgz", + "integrity": "sha512-8i+v6cMxr2emz4ihCrRiYJPp2/sdYsNNsBzXStlcA+/B9Umpm5Jj3WJKYpgTPM+aeyiqlG/MMI1AucnBm4f1oQ==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/code-block": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@react-email/code-block/-/code-block-0.1.0.tgz", + "integrity": "sha512-jSpHFsgqnQXxDIssE4gvmdtFncaFQz5D6e22BnVjcCPk/udK+0A9jRwGFEG8JD2si9ZXBmU4WsuqQEczuZn4ww==", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/code-inline": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@react-email/code-inline/-/code-inline-0.0.5.tgz", + "integrity": "sha512-MmAsOzdJpzsnY2cZoPHFPk6uDO/Ncpb4Kh1hAt9UZc1xOW3fIzpe1Pi9y9p6wwUmpaeeDalJxAxH6/fnTquinA==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/column": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@react-email/column/-/column-0.0.13.tgz", + "integrity": "sha512-Lqq17l7ShzJG/d3b1w/+lVO+gp2FM05ZUo/nW0rjxB8xBICXOVv6PqjDnn3FXKssvhO5qAV20lHM6S+spRhEwQ==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/components": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.3.2.tgz", + "integrity": "sha512-nVbo0KtBdZbj19lvfFpe0ZhjKPh6LE229+NyQLuTDt6dfaLzNRpSu/rHP+jlvdWBAk93slsoGyWDRldbqklpaA==", + "license": "MIT", + "dependencies": { + "@react-email/body": "0.0.11", + "@react-email/button": "0.2.0", + "@react-email/code-block": "0.1.0", + "@react-email/code-inline": "0.0.5", + "@react-email/column": "0.0.13", + "@react-email/container": "0.0.15", + "@react-email/font": "0.0.9", + "@react-email/head": "0.0.12", + "@react-email/heading": "0.0.15", + "@react-email/hr": "0.0.11", + "@react-email/html": "0.0.11", + "@react-email/img": "0.0.11", + "@react-email/link": "0.0.12", + "@react-email/markdown": "0.0.15", + "@react-email/preview": "0.0.13", + "@react-email/render": "1.1.3", + "@react-email/row": "0.0.12", + "@react-email/section": "0.0.16", + "@react-email/tailwind": "1.2.2", + "@react-email/text": "0.1.5" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/container": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@react-email/container/-/container-0.0.15.tgz", + "integrity": "sha512-Qo2IQo0ru2kZq47REmHW3iXjAQaKu4tpeq/M8m1zHIVwKduL2vYOBQWbC2oDnMtWPmkBjej6XxgtZByxM6cCFg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/font": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@react-email/font/-/font-0.0.9.tgz", + "integrity": "sha512-4zjq23oT9APXkerqeslPH3OZWuh5X4crHK6nx82mVHV2SrLba8+8dPEnWbaACWTNjOCbcLIzaC9unk7Wq2MIXw==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/head": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@react-email/head/-/head-0.0.12.tgz", + "integrity": "sha512-X2Ii6dDFMF+D4niNwMAHbTkeCjlYYnMsd7edXOsi0JByxt9wNyZ9EnhFiBoQdqkE+SMDcu8TlNNttMrf5sJeMA==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/heading": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@react-email/heading/-/heading-0.0.15.tgz", + "integrity": "sha512-xF2GqsvBrp/HbRHWEfOgSfRFX+Q8I5KBEIG5+Lv3Vb2R/NYr0s8A5JhHHGf2pWBMJdbP4B2WHgj/VUrhy8dkIg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/hr": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/hr/-/hr-0.0.11.tgz", + "integrity": "sha512-S1gZHVhwOsd1Iad5IFhpfICwNPMGPJidG/Uysy1AwmspyoAP5a4Iw3OWEpINFdgh9MHladbxcLKO2AJO+cA9Lw==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/html": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/html/-/html-0.0.11.tgz", + "integrity": "sha512-qJhbOQy5VW5qzU74AimjAR9FRFQfrMa7dn4gkEXKMB/S9xZN8e1yC1uA9C15jkXI/PzmJ0muDIWmFwatm5/+VA==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/img": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/img/-/img-0.0.11.tgz", + "integrity": "sha512-aGc8Y6U5C3igoMaqAJKsCpkbm1XjguQ09Acd+YcTKwjnC2+0w3yGUJkjWB2vTx4tN8dCqQCXO8FmdJpMfOA9EQ==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/link": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@react-email/link/-/link-0.0.12.tgz", + "integrity": "sha512-vF+xxQk2fGS1CN7UPQDbzvcBGfffr+GjTPNiWM38fhBfsLv6A/YUfaqxWlmL7zLzVmo0K2cvvV9wxlSyNba1aQ==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/markdown": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@react-email/markdown/-/markdown-0.0.15.tgz", + "integrity": "sha512-UQA9pVm5sbflgtg3EX3FquUP4aMBzmLReLbGJ6DZQZnAskBF36aI56cRykDq1o+1jT+CKIK1CducPYziaXliag==", + "dependencies": { + "md-to-react-email": "^5.0.5" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/preview": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@react-email/preview/-/preview-0.0.13.tgz", + "integrity": "sha512-F7j9FJ0JN/A4d7yr+aw28p4uX7VLWs7hTHtLo7WRyw4G+Lit6Zucq4UWKRxJC8lpsUdzVmG7aBJnKOT+urqs/w==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/preview-server": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@react-email/preview-server/-/preview-server-4.2.3.tgz", + "integrity": "sha512-WM6L8AkZLUaaNjA53zGFUBNm7zX73ngjchwPfAP9FPyyS57X41Lszw9sxuqiSJf8BECiFECEjaqJWbOK0WP0hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.26.10", + "@babel/parser": "7.27.0", + "@babel/traverse": "7.27.0", + "@lottiefiles/dotlottie-react": "0.13.3", + "@radix-ui/colors": "3.0.0", + "@radix-ui/react-collapsible": "1.1.7", + "@radix-ui/react-dropdown-menu": "2.1.10", + "@radix-ui/react-popover": "1.1.10", + "@radix-ui/react-slot": "1.2.0", + "@radix-ui/react-tabs": "1.1.7", + "@radix-ui/react-toggle-group": "1.1.6", + "@radix-ui/react-tooltip": "1.2.3", + "@types/node": "22.14.1", + "@types/normalize-path": "3.0.2", + "@types/react": "19.0.10", + "@types/react-dom": "19.0.4", + "@types/webpack": "5.28.5", + "autoprefixer": "10.4.21", + "chalk": "4.1.2", + "clsx": "2.1.1", + "esbuild": "0.25.0", + "framer-motion": "12.7.5", + "json5": "2.2.3", + "log-symbols": "4.1.0", + "module-punycode": "npm:punycode@2.3.1", + "next": "15.4.1", + "node-html-parser": "7.0.1", + "ora": "5.4.1", + "pretty-bytes": "6.1.1", + "prism-react-renderer": "2.4.1", + "react": "19.0.0", + "react-dom": "19.0.0", + "sharp": "0.34.1", + "socket.io-client": "4.8.1", + "sonner": "2.0.3", + "source-map-js": "1.2.1", + "spamc": "0.0.5", + "stacktrace-parser": "0.1.11", + "tailwind-merge": "3.2.0", + "tailwindcss": "3.4.0", + "use-debounce": "10.0.4", + "zod": "3.24.3" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.1.tgz", + "integrity": "sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.1.0" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-darwin-x64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.1.tgz", + "integrity": "sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.1.0" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", + "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", + "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", + "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", + "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", + "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", + "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", + "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", + "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", + "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-linux-arm": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.1.tgz", + "integrity": "sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.1.0" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-linux-arm64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.1.tgz", + "integrity": "sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.1.0" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-linux-s390x": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.1.tgz", + "integrity": "sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.1.0" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-linux-x64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.1.tgz", + "integrity": "sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.1.0" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.1.tgz", + "integrity": "sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.1.tgz", + "integrity": "sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.1.0" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-wasm32": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.1.tgz", + "integrity": "sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.4.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-win32-ia32": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.1.tgz", + "integrity": "sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@react-email/preview-server/node_modules/@img/sharp-win32-x64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.1.tgz", + "integrity": "sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-arrow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.4.tgz", + "integrity": "sha512-qz+fxrqgNxG0dYew5l7qR3c7wdgRu1XVUHGnGYX7rg5HM4p9SWaRmJwfgR3J0SgyUKayLmzQIun+N6rWRgiRKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-collapsible": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.7.tgz", + "integrity": "sha512-zGFsPcFJNdQa/UNd6MOgF40BS054FIGj32oOWBllixz42f+AkQg3QJ1YT9pw7vs+Ai+EgWkh839h69GEK8oH2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.3", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-collection": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.4.tgz", + "integrity": "sha512-cv4vSf7HttqXilDnAnvINd53OTl1/bjUYVZrkFnA7nwmY9Ob2POUy0WY0sfqBAe1s5FyKsyceQlqiEGPYNTadg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-slot": "1.2.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.7.tgz", + "integrity": "sha512-j5+WBUdhccJsmH5/H0K6RncjDtoALSEr6jbkaZu+bjw6hOPOhHycr6vEUujl+HBK8kjUfWcoCJXxP6e4lUlMZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.10.tgz", + "integrity": "sha512-8qnILty92BmXbxKugWX3jgEeFeMoxtdggeCCxb/aB7l34QFAKB23IhJfnwyVMbRnAUJiT5LOay4kUS22+AWuRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.10", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.4.tgz", + "integrity": "sha512-r2annK27lIW5w9Ho5NyQgqs0MmgZSTIKXWpVCJaLC1q2kZrZkcqnmHkCHMEmv8XLvsLlurKMPT+kbKkRkm/xVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-menu": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.10.tgz", + "integrity": "sha512-OupA+1PrVf2H0K4jIwkDyA+rsJ7vF1y/VxLEO43dmZ68GtCjvx9K1/B/QscPZM3jIeFNK/wPd0HmiLjT36hVcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.7", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.4", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.4", + "@radix-ui/react-portal": "1.1.6", + "@radix-ui/react-presence": "1.1.3", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-roving-focus": "1.1.6", + "@radix-ui/react-slot": "1.2.0", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-popover": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.10.tgz", + "integrity": "sha512-IZN7b3sXqajiPsOzKuNJBSP9obF4MX5/5UhTgWNofw4r1H+eATWb0SyMlaxPD/kzA4vadFgy1s7Z1AEJ6WMyHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.7", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.4", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.4", + "@radix-ui/react-portal": "1.1.6", + "@radix-ui/react-presence": "1.1.3", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-slot": "1.2.0", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-popper": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.4.tgz", + "integrity": "sha512-3p2Rgm/a1cK0r/UVkx5F/K9v/EplfjAeIFCGOPYPO4lZ0jtg4iSQXt/YGTSLWaf4x7NG6Z4+uKFcylcTZjeqDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-portal": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.6.tgz", + "integrity": "sha512-XmsIl2z1n/TsYFLIdYam2rmFwf9OC/Sh2avkbmVMDuBZIe7hSpM0cYnWPAo7nHOVx8zTuwDZGByfcqLdnzp3Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-presence": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.3.tgz", + "integrity": "sha512-IrVLIhskYhH3nLvtcBLQFZr61tBG7wx7O3kEmdzcYwRGAEBmBicGGL7ATzNgruYJ3xBTbuzEEq9OXJM3PAX3tA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-primitive": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.0.tgz", + "integrity": "sha512-/J/FhLdK0zVcILOwt5g+dH4KnkonCtkVJsa2G6JmvbbtZfBEI1gMsO3QMjseL4F/SwfAMt1Vc/0XKYKq+xJ1sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.6.tgz", + "integrity": "sha512-D2ReXCuIueKf5L2f1ks/wTj3bWck1SvK1pjLmEHPbwksS1nOHBsvgY0b9Hypt81FczqBqSyLHQxn/vbsQ0gDHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-slot": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.0.tgz", + "integrity": "sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==", + "dev": true, + "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/@react-email/preview-server/node_modules/@radix-ui/react-tabs": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.7.tgz", + "integrity": "sha512-sawt4HkD+6haVGjYOC3BMIiCumBpqTK6o407n6zN/6yReed2EN7bXyykNrpqg+xCfudpBUZg7Y2cJBd/x/iybA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.3", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-roving-focus": "1.1.6", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-toggle": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.6.tgz", + "integrity": "sha512-3SeJxKeO3TO1zVw1Nl++Cp0krYk6zHDHMCUXXVkosIzl6Nxcvb07EerQpyD2wXQSJ5RZajrYAmPaydU8Hk1IyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-toggle-group": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.6.tgz", + "integrity": "sha512-XOBq9VqC+mIn5hzjGdJLhQbvQeiOpV5ExNE6qMQQPvFsCT44QUcxFzYytTWVoyWg9XKfgrleKmTeEyu6aoTPhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-roving-focus": "1.1.6", + "@radix-ui/react-toggle": "1.1.6", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-tooltip": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.3.tgz", + "integrity": "sha512-0KX7jUYFA02np01Y11NWkk6Ip6TqMNmD4ijLelYAzeIndl2aVeltjJFJ2gwjNa1P8U/dgjQ+8cr9Y3Ni+ZNoRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.4", + "@radix-ui/react-portal": "1.1.6", + "@radix-ui/react-presence": "1.1.3", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-slot": "1.2.0", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.0.tgz", + "integrity": "sha512-rQj0aAWOpCdCMRbI6pLQm8r7S2BM3YhTa0SzOYD55k+hJA8oo9J+H+9wLM9oMlZWOX/wJWPTzfDfmZkf7LvCfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/@types/node": { + "version": "22.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", + "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@react-email/preview-server/node_modules/@types/react": { + "version": "19.0.10", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.10.tgz", + "integrity": "sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@react-email/preview-server/node_modules/@types/react-dom": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz", + "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@react-email/preview-server/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-email/preview-server/node_modules/framer-motion": { + "version": "12.7.5", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.7.5.tgz", + "integrity": "sha512-iD+vBOLn8E8bwBAFUQ1DYXjivm+cGGPgQUQ4Doleq7YP/zHdozUVwAMBJwOOfCTbtM8uOooMi77noD261Kxiyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "motion-dom": "^12.7.5", + "motion-utils": "^12.7.5", + "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/@react-email/preview-server/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/@react-email/preview-server/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-email/preview-server/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==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/@react-email/preview-server/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-email/preview-server/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==", + "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" + } + }, + "node_modules/@react-email/preview-server/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-email/preview-server/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/@react-email/preview-server/node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/@react-email/preview-server/node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/@react-email/preview-server/node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/@react-email/preview-server/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-email/preview-server/node_modules/react": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-email/preview-server/node_modules/react-dom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "scheduler": "^0.25.0" + }, + "peerDependencies": { + "react": "^19.0.0" + } + }, + "node_modules/@react-email/preview-server/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-email/preview-server/node_modules/scheduler": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@react-email/preview-server/node_modules/sharp": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.1.tgz", + "integrity": "sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.7.1" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.1", + "@img/sharp-darwin-x64": "0.34.1", + "@img/sharp-libvips-darwin-arm64": "1.1.0", + "@img/sharp-libvips-darwin-x64": "1.1.0", + "@img/sharp-libvips-linux-arm": "1.1.0", + "@img/sharp-libvips-linux-arm64": "1.1.0", + "@img/sharp-libvips-linux-ppc64": "1.1.0", + "@img/sharp-libvips-linux-s390x": "1.1.0", + "@img/sharp-libvips-linux-x64": "1.1.0", + "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", + "@img/sharp-libvips-linuxmusl-x64": "1.1.0", + "@img/sharp-linux-arm": "0.34.1", + "@img/sharp-linux-arm64": "0.34.1", + "@img/sharp-linux-s390x": "0.34.1", + "@img/sharp-linux-x64": "0.34.1", + "@img/sharp-linuxmusl-arm64": "0.34.1", + "@img/sharp-linuxmusl-x64": "0.34.1", + "@img/sharp-wasm32": "0.34.1", + "@img/sharp-win32-ia32": "0.34.1", + "@img/sharp-win32-x64": "0.34.1" + } + }, + "node_modules/@react-email/preview-server/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/@react-email/preview-server/node_modules/tailwind-merge": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.2.0.tgz", + "integrity": "sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/@react-email/preview-server/node_modules/tailwindcss": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz", + "integrity": "sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@react-email/preview-server/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@react-email/preview-server/node_modules/zod": { + "version": "3.24.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.3.tgz", + "integrity": "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@react-email/render": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.1.3.tgz", + "integrity": "sha512-TjjF1tdTmOqYEIWWg9wMx5q9JbQRbWmnG7owQbSGEHkNfc/c/vBu7hjfrki907lgQEAkYac9KPTyIjOKhvhJCg==", + "license": "MIT", + "dependencies": { + "html-to-text": "^9.0.5", + "prettier": "^3.5.3", + "react-promise-suspense": "^0.3.4" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/row": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@react-email/row/-/row-0.0.12.tgz", + "integrity": "sha512-HkCdnEjvK3o+n0y0tZKXYhIXUNPDx+2vq1dJTmqappVHXS5tXS6W5JOPZr5j+eoZ8gY3PShI2LWj5rWF7ZEtIQ==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/section": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@react-email/section/-/section-0.0.16.tgz", + "integrity": "sha512-FjqF9xQ8FoeUZYKSdt8sMIKvoT9XF8BrzhT3xiFKdEMwYNbsDflcjfErJe3jb7Wj/es/lKTbV5QR1dnLzGpL3w==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/tailwind": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-1.2.2.tgz", + "integrity": "sha512-heO9Khaqxm6Ulm6p7HQ9h01oiiLRrZuuEQuYds/O7Iyp3c58sMVHZGIxiRXO/kSs857NZQycpjewEVKF3jhNTw==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/text": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@react-email/text/-/text-0.1.5.tgz", + "integrity": "sha512-o5PNHFSE085VMXayxH+SJ1LSOtGsTv+RpNKnTiJDrJUwoBu77G3PlKOsZZQHCNyD28WsQpl9v2WcJLbQudqwPg==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-leaflet/core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-3.0.0.tgz", + "integrity": "sha512-3EWmekh4Nz+pGcr+xjf0KNyYfC3U2JjnkWsh0zcqaexYqmmB5ZhH37kz41JXGmKzpaMZCnPofBBm64i+YrEvGQ==", + "license": "Hippocratic-2.1", + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + } + }, + "node_modules/@remirror/core-constants": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz", + "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==", + "license": "MIT" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz", + "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@selderee/plugin-htmlparser2": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", + "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "selderee": "^0.11.0" + }, + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@stoplight/json-schema-sampler": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@stoplight/json-schema-sampler/-/json-schema-sampler-0.3.0.tgz", + "integrity": "sha512-G7QImi2xr9+8iPEg0D9YUi1BWhIiiEm19aMb91oWBSdxuhezOAqqRP3XNY6wczHV9jLWW18f+KkghTy9AG0BQA==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.7", + "json-pointer": "^0.6.1" + } + }, + "node_modules/@stripe/react-stripe-js": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-3.7.0.tgz", + "integrity": "sha512-PYls/2S9l0FF+2n0wHaEJsEU8x7CmBagiH7zYOsxbBlLIHEsqUIQ4MlIAbV9Zg6xwT8jlYdlRIyBTHmO3yM7kQ==", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "@stripe/stripe-js": ">=1.44.1 <8.0.0", + "react": ">=16.8.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" + } + }, + "node_modules/@stripe/stripe-js": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-7.5.0.tgz", + "integrity": "sha512-Cq3KKe+G1o7PSBMbmrgpT2JgBeyH2THHr3RdIX2MqF7AnBuspIMgtZ3ktcCgP7kZsTMvnmWymr7zZCT1zeWbMw==", + "license": "MIT", + "engines": { + "node": ">=12.16" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz", + "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz", + "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "lightningcss": "1.30.1", + "magic-string": "^0.30.17", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.11" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz", + "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.11", + "@tailwindcss/oxide-darwin-arm64": "4.1.11", + "@tailwindcss/oxide-darwin-x64": "4.1.11", + "@tailwindcss/oxide-freebsd-x64": "4.1.11", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.11", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.11", + "@tailwindcss/oxide-linux-x64-musl": "4.1.11", + "@tailwindcss/oxide-wasm32-wasi": "4.1.11", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.11" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz", + "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz", + "integrity": "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz", + "integrity": "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz", + "integrity": "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz", + "integrity": "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz", + "integrity": "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz", + "integrity": "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz", + "integrity": "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz", + "integrity": "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz", + "integrity": "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@emnapi/wasi-threads": "^1.0.2", + "@napi-rs/wasm-runtime": "^0.2.11", + "@tybys/wasm-util": "^0.9.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz", + "integrity": "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz", + "integrity": "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.11.tgz", + "integrity": "sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.11", + "@tailwindcss/oxide": "4.1.11", + "postcss": "^8.4.41", + "tailwindcss": "4.1.11" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz", + "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" + } + }, + "node_modules/@tanstack/eslint-plugin-query": { + "version": "5.81.2", + "resolved": "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.81.2.tgz", + "integrity": "sha512-h4k6P6fm5VhKP5NkK+0TTVpGGyKQdx6tk7NYYG7J7PkSu7ClpLgBihw7yzK8N3n5zPaF3IMyErxfoNiXWH/3/A==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^8.18.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.81.5", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.81.5.tgz", + "integrity": "sha512-ZJOgCy/z2qpZXWaj/oxvodDx07XcQa9BF92c0oINjHkoqUPsmm3uG08HpTaviviZ/N9eP1f9CM7mKSEkIo7O1Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.81.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.81.5.tgz", + "integrity": "sha512-lOf2KqRRiYWpQT86eeeftAGnjuTR35myTP8MXyvHa81VlomoAWNEd8x5vkcAfQefu0qtYCvyqLropFZqgI2EQw==", + "dependencies": { + "@tanstack/query-core": "5.81.5" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@tanstack/react-table": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.21.3.tgz", + "integrity": "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==", + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "8.21.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/@tanstack/react-virtual": { + "version": "3.13.12", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.12.tgz", + "integrity": "sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==", + "dependencies": { + "@tanstack/virtual-core": "3.13.12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", + "integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.13.12", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.12.tgz", + "integrity": "sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tiptap/core": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.25.0.tgz", + "integrity": "sha512-pTLV0+g+SBL49/Y5A9ii7oHwlzIzpgroJVI3AcBk7/SeR7554ZzjxxtJmZkQ9/NxJO+k1jQp9grXaqqOLqC7cA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-blockquote": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.25.0.tgz", + "integrity": "sha512-W+sVPlV9XmaNPUkxV2BinNEbk2hr4zw8VgKjqKQS9O0k2YIVRCfQch+4DudSAwBVMrVW97zVAKRNfictGFQ8vQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-bold": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.25.0.tgz", + "integrity": "sha512-3cBX2EtdFR3+EDTkIshhpQpXoZQbFUzxf6u86Qm0qD49JnVOjX9iexnUp8MydXPZA6NVsKeEfMhf18gV7oxTEw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-bubble-menu": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.23.0.tgz", + "integrity": "sha512-4CZxcVj/0ZetEiWgiP31xTHgaQ7Hr3Ad36cAEza/nGYifaztuPjLO2Y9qdnC1iJHIxttnX6GVRnCMRmZMfhgHg==", + "dependencies": { + "tippy.js": "^6.3.7" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-bullet-list": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.25.0.tgz", + "integrity": "sha512-KD+q/q6KIU2anedjtjG8vELkL5rYFdNHWc5XcUJgQoxbOCK3/sBuOgcn9mnFA2eAS6UkraN9Yx0BXEDbXX2HOw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-code": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.25.0.tgz", + "integrity": "sha512-rRp6X2aNNnvo7Fbqc3olZ0vLb52FlCPPfetr9gy6/M9uQdVYDhJcFOPuRuXtZ8M8X+WpCZBV29BvZFeDqfw8bw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-code-block": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.25.0.tgz", + "integrity": "sha512-T4kXbZNZ/NyklzQ/FWmUnjD4hgmJPrIBazzCZ/E/rF/Ag2IvUsztBT0PN3vTa+DAZ+IbM61TjlIpyJs1R7OdbQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-document": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.25.0.tgz", + "integrity": "sha512-3gEZlQKUSIRrC6Az8QS7SJi4CvhMWrA7RBChM1aRl9vMNN8Ul7dZZk5StYJGPjL/koTiceMqx9pNmTCBprsbvQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-dropcursor": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.25.0.tgz", + "integrity": "sha512-eSHqp+iUI2mGVwvIyENP02hi5TSyQ+bdwNwIck6bdzjRvXakm72+8uPfVSLGxRKAQZ0RFtmux8ISazgUqF/oSw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-floating-menu": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.23.0.tgz", + "integrity": "sha512-MvwDMhO5o5NciE+wc6B9dQgTFzmPjtB1o3S+HTdlGzGFGgx9PsNikK5BkqMit9j2NnrqyHnOf88QK/wZR5fqGA==", + "dependencies": { + "tippy.js": "^6.3.7" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-gapcursor": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.25.0.tgz", + "integrity": "sha512-s/3WDbgkvLac88h5iYJLPJCDw8tMhlss1hk9GAo+zzP4h0xfazYie09KrA0CBdfaSOFyeJK3wedzjKZBtdgX4w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-hard-break": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.25.0.tgz", + "integrity": "sha512-h8be5Zdtsl5GQHxRXvYlGfIJsLvdbexflSTr12gr4kvcQqTdtrsqyu2eksfAK+p2szbiwP2G4VZlH0LNS47UXQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-heading": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.25.0.tgz", + "integrity": "sha512-IrRKRRr7Bhpnq5aue1v5/e5N/eNdVV/THsgqqpLZO48pgN8Wv+TweOZe1Ntg/v8L4QSBC8iGMxxhiJZT8AzSkA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-history": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.25.0.tgz", + "integrity": "sha512-y3uJkJv+UngDaDYfcVJ4kx8ivc3Etk5ow6N+47AMCRjUUweQ/CLiJwJ2C7nL7L82zOzVbb/NoR/B3UeE4ts/wQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-horizontal-rule": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.25.0.tgz", + "integrity": "sha512-bZovyhdOexB3Cv9ddUogWT+cd3KbnenMIZKhgrJ+R0J27rlOtzeUD9TeIjn4V8Of9mTxm3XDKUZGLgPiriN8Ww==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-italic": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.25.0.tgz", + "integrity": "sha512-FZHmNqvWJ5SHYlUi+Qg3b2C0ZBt82DUDUqM+bqcQqSQu6B0c4IEc3+VHhjAJwEUIO9wX7xk/PsdM4Z5Ex4Lr3w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-list-item": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.25.0.tgz", + "integrity": "sha512-HLstO/R+dNjIFMXN15bANc8i/+CDpEgtEQhZNHqvSUJH9xQ5op0S05m5VvFI10qnwXNjwwXdhxUYwwjIDCiAgg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-ordered-list": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.25.0.tgz", + "integrity": "sha512-Hlid16nQdDFOGOx6mJT+zPEae2t1dGlJ18pqCqaVMuDnIpNIWmQutJk5QYxGVxr9awd2SpHTpQtdBTqcufbHtw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-paragraph": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.25.0.tgz", + "integrity": "sha512-53gpWMPedkWVDp3u/1sLt6vnr3BWz4vArGCmmabLucCI2Yl4R6S/AQ9yj/+jOHvWbXCroCbKtmmwxJl32uGN2w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-strike": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.25.0.tgz", + "integrity": "sha512-Z5YBKnv4N6MMD1LEo9XbmWnmdXavZKOOJt/OkXYFZ3KgzB52Z3q3DDfH+NyeCtKKSWqWVxbBHKLnsojDerSf2g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-text": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.25.0.tgz", + "integrity": "sha512-HlZL86rihpP/R8+dqRrvzSRmiPpx6ctlAKM9PnWT/WRMeI4Y1AUq6PSHLz74wtYO1LH4PXys1ws3n+pLP4Mo6g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-text-style": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-2.25.0.tgz", + "integrity": "sha512-MKAXqDATEbuFEB1SeeAFy2VbefUMJ9jxQyybpaHjDX+Ik0Ddu+aYuJP/njvLuejXCqhrkS/AorxzmHUC4HNPbQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-underline": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.23.0.tgz", + "integrity": "sha512-90sV1QwazRvNeJRc7RS1347YN0deKCqe07feBACR/p2qdVbeiG1VPxOTQ0UJdN6t+ypH/dM+JmYMryu1zCw9MA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/pm": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.25.0.tgz", + "integrity": "sha512-vuzU0pLGQyHqtikAssHn9V61aXLSQERQtn3MUtaJ36fScQg7RClAK5gnIbBt3Ul3VFof8o4xYmcidARc0X/E5A==", + "dependencies": { + "prosemirror-changeset": "^2.3.0", + "prosemirror-collab": "^1.3.1", + "prosemirror-commands": "^1.6.2", + "prosemirror-dropcursor": "^1.8.1", + "prosemirror-gapcursor": "^1.3.2", + "prosemirror-history": "^1.4.1", + "prosemirror-inputrules": "^1.4.0", + "prosemirror-keymap": "^1.2.2", + "prosemirror-markdown": "^1.13.1", + "prosemirror-menu": "^1.2.4", + "prosemirror-model": "^1.23.0", + "prosemirror-schema-basic": "^1.2.3", + "prosemirror-schema-list": "^1.4.1", + "prosemirror-state": "^1.4.3", + "prosemirror-tables": "^1.6.4", + "prosemirror-trailing-node": "^3.0.0", + "prosemirror-transform": "^1.10.2", + "prosemirror-view": "^1.37.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/react": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-2.23.0.tgz", + "integrity": "sha512-HiEIMYXa4/JWJq1USm0BWXDX0nrXUyG3T1UwZXwFCWZWaRBXmBRv+X5GkyP7fYuuiTTcqmTO3bBhb9CGNDr+AA==", + "dependencies": { + "@tiptap/extension-bubble-menu": "^2.23.0", + "@tiptap/extension-floating-menu": "^2.23.0", + "@types/use-sync-external-store": "^0.0.6", + "fast-deep-equal": "^3", + "use-sync-external-store": "^1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tiptap/starter-kit": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.25.0.tgz", + "integrity": "sha512-MWt6gEdQ2LPuCqbvNGmS0uA+6rtMGRh3vC0WBNp6rJPAvwS8OPcpraLz61cWjgzeKZBUKODpNA5IZ6gDRyH9LQ==", + "dependencies": { + "@tiptap/core": "^2.25.0", + "@tiptap/extension-blockquote": "^2.25.0", + "@tiptap/extension-bold": "^2.25.0", + "@tiptap/extension-bullet-list": "^2.25.0", + "@tiptap/extension-code": "^2.25.0", + "@tiptap/extension-code-block": "^2.25.0", + "@tiptap/extension-document": "^2.25.0", + "@tiptap/extension-dropcursor": "^2.25.0", + "@tiptap/extension-gapcursor": "^2.25.0", + "@tiptap/extension-hard-break": "^2.25.0", + "@tiptap/extension-heading": "^2.25.0", + "@tiptap/extension-history": "^2.25.0", + "@tiptap/extension-horizontal-rule": "^2.25.0", + "@tiptap/extension-italic": "^2.25.0", + "@tiptap/extension-list-item": "^2.25.0", + "@tiptap/extension-ordered-list": "^2.25.0", + "@tiptap/extension-paragraph": "^2.25.0", + "@tiptap/extension-strike": "^2.25.0", + "@tiptap/extension-text": "^2.25.0", + "@tiptap/extension-text-style": "^2.25.0", + "@tiptap/pm": "^2.25.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@total-typescript/ts-reset": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@total-typescript/ts-reset/-/ts-reset-0.6.1.tgz", + "integrity": "sha512-cka47fVSo6lfQDIATYqb/vO1nvFfbPw7uWLayIXIhGETj0wcOOlrlkobOMDNQOFr9QOafegUPq13V2+6vtD7yg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@trpc/client": { + "version": "11.4.3", + "resolved": "https://registry.npmjs.org/@trpc/client/-/client-11.4.3.tgz", + "integrity": "sha512-i2suttUCfColktXT8bqex5kHW5jpT15nwUh0hGSDiW1keN621kSUQKcLJ095blqQAUgB+lsmgSqSMmB4L9shQQ==", + "funding": [ + "https://trpc.io/sponsor" + ], + "peerDependencies": { + "@trpc/server": "11.4.3", + "typescript": ">=5.7.2" + } + }, + "node_modules/@trpc/next": { + "version": "11.4.3", + "resolved": "https://registry.npmjs.org/@trpc/next/-/next-11.4.3.tgz", + "integrity": "sha512-/AqPpzlrQy8ylLEdBAemRU1xmdqJVaXrXI/ZUYl3Oz1Id36gvGMdn5uxm0wgKPpZneM2EICvYcrsLSsdtddW4w==", + "funding": [ + "https://trpc.io/sponsor" + ], + "peerDependencies": { + "@tanstack/react-query": "^5.59.15", + "@trpc/client": "11.4.3", + "@trpc/react-query": "11.4.3", + "@trpc/server": "11.4.3", + "next": "*", + "react": ">=16.8.0", + "react-dom": ">=16.8.0", + "typescript": ">=5.7.2" + }, + "peerDependenciesMeta": { + "@tanstack/react-query": { + "optional": true + }, + "@trpc/react-query": { + "optional": true + } + } + }, + "node_modules/@trpc/react-query": { + "version": "11.4.3", + "resolved": "https://registry.npmjs.org/@trpc/react-query/-/react-query-11.4.3.tgz", + "integrity": "sha512-z+jhAiOBD22NNhHtvF0iFp9hO36YFA7M8AiUu/XtNmMxyLd3Y9/d1SMjMwlTdnGqxEGPo41VEWBrdhDUGtUuHg==", + "funding": [ + "https://trpc.io/sponsor" + ], + "peerDependencies": { + "@tanstack/react-query": "^5.80.3", + "@trpc/client": "11.4.3", + "@trpc/server": "11.4.3", + "react": ">=18.2.0", + "react-dom": ">=18.2.0", + "typescript": ">=5.7.2" + } + }, + "node_modules/@trpc/server": { + "version": "11.4.3", + "resolved": "https://registry.npmjs.org/@trpc/server/-/server-11.4.3.tgz", + "integrity": "sha512-wnWq3wiLlMOlYkaIZz+qbuYA5udPTLS4GVVRyFkr6aT83xpdCHyVtURT+u4hSoIrOXQM9OPCNXSXsAujWZDdaw==", + "funding": [ + "https://trpc.io/sponsor" + ], + "peerDependencies": { + "typescript": ">=5.7.2" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "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/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-plugin-jsx-a11y": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@types/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz", + "integrity": "sha512-TGKmk2gO6DrvTVADNOGQMqn3SzqcFcJILFnXNllQA34us9uClS3/AsL/cERPz6jS9ePI3bx+1q8/d2GZsxPVYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "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==", + "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/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "dev": true, + "license": "MIT" + }, + "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/html-to-text": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@types/html-to-text/-/html-to-text-9.0.4.tgz", + "integrity": "sha512-pUY3cKH/Nm2yYrEmDlPR1mR7yszjGx4DrwPjQ702C4/D5CwHuZTgZdIdwPkRbcuhs7BAh2L5rg3CL5cbRiGTCQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/js-cookie": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz", + "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==", + "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", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/leaflet": { + "version": "1.9.20", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.20.tgz", + "integrity": "sha512-rooalPMlk61LCaLOvBF2VIf9M47HgMQqi5xQ9QRi7c8PkdIe0WrIi5IxXUXQjAdL0c+vcQ01mYWbthzmp9GHWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.16", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.16.tgz", + "integrity": "sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "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/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "license": "MIT" + }, + "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": "24.0.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.7.tgz", + "integrity": "sha512-YIEUUr4yf8q8oQoXPpSlnvKNVKDQlPMWrmOcgzoduo7kvA2UF0/BwJ/eMKFTiTtkNL17I0M6Xe2tvwFU7be6iw==", + "dependencies": { + "undici-types": "~7.8.0" + } + }, + "node_modules/@types/nodemailer": { + "version": "6.4.17", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.17.tgz", + "integrity": "sha512-I9CCaIp6DTldEg7vyUTZi8+9Vo0hi1/T8gv3C89yk1rSAAzoKQ8H8ki/jBYJSFoH/BisgLP8tkZMlQ91CIquww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/nodemailer-html-to-text": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/nodemailer-html-to-text/-/nodemailer-html-to-text-3.1.3.tgz", + "integrity": "sha512-Oo3UfBz/jscdgltyp7HABiSHd7aiUuQKxqklPea1san3hNN4w79PEf4S27NQ04JdLO0sU5ZDGK9S+tMHj15vcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/html-to-text": "*", + "@types/nodemailer": "*" + } + }, + "node_modules/@types/normalize-path": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/normalize-path/-/normalize-path-3.0.2.tgz", + "integrity": "sha512-DO++toKYPaFn0Z8hQ7Tx+3iT9t77IJo/nDiqTXilgEP+kPNIYdpS9kh3fXuc53ugqwp9pxC1PVjCpV1tQDyqMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/pg": { + "version": "8.15.4", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.15.4.tgz", + "integrity": "sha512-I6UNVBAoYbvuWkkU3oosC8yxqH21f4/Jc4DK71JLG3dT2mdlGe1z+ep/LQGXaKaOgcvUrsQoPRqfgtMcvZiJhg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/prismjs": { + "version": "1.26.5", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", + "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/react": { + "version": "19.1.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", + "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", + "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", + "devOptional": true, + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@types/react-is": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-71dSZeeJ0t3aoPyY9x6i+JNSvg5m9EF2i2OlSZI5QoJuI8Ocgor610i+4A10TQmURR+0vLwcVCEYFpXdzM1Biw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@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/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/webpack": { + "version": "5.28.5", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.5.tgz", + "integrity": "sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "tapable": "^2.2.0", + "webpack": "^5" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.0.tgz", + "integrity": "sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.35.0", + "@typescript-eslint/type-utils": "8.35.0", + "@typescript-eslint/utils": "8.35.0", + "@typescript-eslint/visitor-keys": "8.35.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.35.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.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==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.0.tgz", + "integrity": "sha512-6sMvZePQrnZH2/cJkwRpkT7DxoAWh+g6+GFRK6bV3YQo7ogi3SX5rgF6099r5Q53Ma5qeT7LGmOmuIutF4t3lA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.35.0", + "@typescript-eslint/types": "8.35.0", + "@typescript-eslint/typescript-estree": "8.35.0", + "@typescript-eslint/visitor-keys": "8.35.0", + "debug": "^4.3.4" + }, + "engines": { + "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", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.0.tgz", + "integrity": "sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.35.0", + "@typescript-eslint/types": "^8.35.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.0.tgz", + "integrity": "sha512-+AgL5+mcoLxl1vGjwNfiWq5fLDZM1TmTPYs2UkyHfFhgERxBbqHlNjRzhThJqz+ktBqTChRYY6zwbMwy0591AA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.35.0", + "@typescript-eslint/visitor-keys": "8.35.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.0.tgz", + "integrity": "sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.0.tgz", + "integrity": "sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.35.0", + "@typescript-eslint/utils": "8.35.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "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", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.0.tgz", + "integrity": "sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.0.tgz", + "integrity": "sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==", + "dev": true, + "dependencies": { + "@typescript-eslint/project-service": "8.35.0", + "@typescript-eslint/tsconfig-utils": "8.35.0", + "@typescript-eslint/types": "8.35.0", + "@typescript-eslint/visitor-keys": "8.35.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" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "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==", + "dev": true, + "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_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==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.0.tgz", + "integrity": "sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.35.0", + "@typescript-eslint/types": "8.35.0", + "@typescript-eslint/typescript-estree": "8.35.0" + }, + "engines": { + "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", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.0.tgz", + "integrity": "sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.35.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/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, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/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/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.9.2.tgz", + "integrity": "sha512-tS+lqTU3N0kkthU+rYp0spAYq15DU8ld9kXkaKg9sbQqJNF+WPMuNHZQGCgdxrUOEO0j22RKMwRVhF1HTl+X8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.9.2.tgz", + "integrity": "sha512-MffGiZULa/KmkNjHeuuflLVqfhqLv1vZLm8lWIyeADvlElJ/GLSOkoUX+5jf4/EGtfwrNFcEaB8BRas03KT0/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.2.tgz", + "integrity": "sha512-dzJYK5rohS1sYl1DHdJ3mwfwClJj5BClQnQSyAgEfggbUwA9RlROQSSbKBLqrGfsiC/VyrDPtbO8hh56fnkbsQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.9.2.tgz", + "integrity": "sha512-gaIMWK+CWtXcg9gUyznkdV54LzQ90S3X3dn8zlh+QR5Xy7Y+Efqw4Rs4im61K1juy4YNb67vmJsCDAGOnIeffQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.9.2.tgz", + "integrity": "sha512-S7QpkMbVoVJb0xwHFwujnwCAEDe/596xqY603rpi/ioTn9VDgBHnCCxh+UFrr5yxuMH+dliHfjwCZJXOPJGPnw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.9.2.tgz", + "integrity": "sha512-+XPUMCuCCI80I46nCDFbGum0ZODP5NWGiwS3Pj8fOgsG5/ctz+/zzuBlq/WmGa+EjWZdue6CF0aWWNv84sE1uw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.9.2.tgz", + "integrity": "sha512-sqvUyAd1JUpwbz33Ce2tuTLJKM+ucSsYpPGl2vuFwZnEIg0CmdxiZ01MHQ3j6ExuRqEDUCy8yvkDKvjYFPb8Zg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.9.2.tgz", + "integrity": "sha512-UYA0MA8ajkEDCFRQdng/FVx3F6szBvk3EPnkTTQuuO9lV1kPGuTB+V9TmbDxy5ikaEgyWKxa4CI3ySjklZ9lFA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.9.2.tgz", + "integrity": "sha512-P/CO3ODU9YJIHFqAkHbquKtFst0COxdphc8TKGL5yCX75GOiVpGqd1d15ahpqu8xXVsqP4MGFP2C3LRZnnL5MA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.9.2.tgz", + "integrity": "sha512-uKStFlOELBxBum2s1hODPtgJhY4NxYJE9pAeyBgNEzHgTqTiVBPjfTlPFJkfxyTjQEuxZbbJlJnMCrRgD7ubzw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.9.2.tgz", + "integrity": "sha512-LkbNnZlhINfY9gK30AHs26IIVEZ9PEl9qOScYdmY2o81imJYI4IMnJiW0vJVtXaDHvBvxeAgEy5CflwJFIl3tQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.9.2.tgz", + "integrity": "sha512-vI+e6FzLyZHSLFNomPi+nT+qUWN4YSj8pFtQZSFTtmgFoxqB6NyjxSjAxEC1m93qn6hUXhIsh8WMp+fGgxCoRg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.9.2.tgz", + "integrity": "sha512-sSO4AlAYhSM2RAzBsRpahcJB1msc6uYLAtP6pesPbZtptF8OU/CbCPhSRW6cnYOGuVmEmWVW5xVboAqCnWTeHQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.9.2.tgz", + "integrity": "sha512-jkSkwch0uPFva20Mdu8orbQjv2A3G88NExTN2oPTI1AJ+7mZfYW3cDCTyoH6OnctBKbBVeJCEqh0U02lTkqD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.9.2.tgz", + "integrity": "sha512-Uk64NoiTpQbkpl+bXsbeyOPRpUoMdcUqa+hDC1KhMW7aN1lfW8PBlBH4mJ3n3Y47dYE8qi0XTxy1mBACruYBaw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.9.2.tgz", + "integrity": "sha512-EpBGwkcjDicjR/ybC0g8wO5adPNdVuMrNalVgYcWi+gYtC1XYNuxe3rufcO7dA76OHGeVabcO6cSkPJKVcbCXQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.9.2.tgz", + "integrity": "sha512-EdFbGn7o1SxGmN6aZw9wAkehZJetFPao0VGZ9OMBwKx6TkvDuj6cNeLimF/Psi6ts9lMOe+Dt6z19fZQ9Ye2fw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.9.2.tgz", + "integrity": "sha512-JY9hi1p7AG+5c/dMU8o2kWemM8I6VZxfGwn1GCtf3c5i+IKcMo2NQ8OjZ4Z3/itvY/Si3K10jOBQn7qsD/whUA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.9.2.tgz", + "integrity": "sha512-ryoo+EB19lMxAd80ln9BVf8pdOAxLb97amrQ3SFN9OCRn/5M5wvwDgAe4i8ZjhpbiHoDeP8yavcTEnpKBo7lZg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xobotyi/scrollbar-width": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", + "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==", + "license": "MIT" + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "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", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "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", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "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/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "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", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "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", + "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/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", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cmdk": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz", + "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "^1.1.1", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-id": "^1.1.0", + "@radix-ui/react-primitive": "^2.0.2" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "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==", + "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", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "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": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cookies-next": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cookies-next/-/cookies-next-5.1.0.tgz", + "integrity": "sha512-9Ekne+q8hfziJtnT9c1yDUBqT0eDMGgPrfPl4bpR3xwQHLTd/8gbSf6+IEkP/pjGsDZt1TGbC6emYmFYRbIXwQ==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1" + }, + "peerDependencies": { + "next": ">=15.0.0", + "react": ">= 16.8.0" + } + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "license": "MIT", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/country-flag-icons": { + "version": "1.5.19", + "resolved": "https://registry.npmjs.org/country-flag-icons/-/country-flag-icons-1.5.19.tgz", + "integrity": "sha512-D/ZkRyj+ywJC6b2IrAN3/tpbReMUqmuRLlcKFoY/o0+EPQN9Ev/e8tV+D3+9scvu/tarxwLErNwS73C3yzxs/g==", + "license": "MIT" + }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "license": "MIT" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-in-js-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz", + "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==", + "license": "MIT", + "dependencies": { + "hyphenate-style-name": "^1.0.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-2.0.0.tgz", + "integrity": "sha512-xRetU6gL1VJbs85Mc4FoEGSjQxzpdxRyFhe3lmWFyy2EzydIcD4xzUvRJMD+NPDfMwKNhxa3PvsIOU32luIWeA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "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==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/decode-named-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz", + "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", + "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", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "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-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "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", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.189", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.189.tgz", + "integrity": "sha512-y9D1ntS1ruO/pZ/V2FtLE+JXLQe28XoRpZ7QCCo0T8LdQladzdcOVQZH/IWLVJvCw12OGMb6hYOeOAjntCmJRQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/embla-carousel": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", + "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", + "license": "MIT" + }, + "node_modules/embla-carousel-react": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.6.0.tgz", + "integrity": "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==", + "license": "MIT", + "dependencies": { + "embla-carousel": "8.6.0", + "embla-carousel-reactive-utils": "8.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/embla-carousel-reactive-utils": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz", + "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/engine.io": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", + "license": "MIT", + "dependencies": { + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.7.2", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz", + "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.1.1" + } + }, + "node_modules/engine.io-client/node_modules/debug": { + "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" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", + "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "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", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.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", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" + }, + "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", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "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" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", + "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.0", + "@esbuild/android-arm": "0.25.0", + "@esbuild/android-arm64": "0.25.0", + "@esbuild/android-x64": "0.25.0", + "@esbuild/darwin-arm64": "0.25.0", + "@esbuild/darwin-x64": "0.25.0", + "@esbuild/freebsd-arm64": "0.25.0", + "@esbuild/freebsd-x64": "0.25.0", + "@esbuild/linux-arm": "0.25.0", + "@esbuild/linux-arm64": "0.25.0", + "@esbuild/linux-ia32": "0.25.0", + "@esbuild/linux-loong64": "0.25.0", + "@esbuild/linux-mips64el": "0.25.0", + "@esbuild/linux-ppc64": "0.25.0", + "@esbuild/linux-riscv64": "0.25.0", + "@esbuild/linux-s390x": "0.25.0", + "@esbuild/linux-x64": "0.25.0", + "@esbuild/netbsd-arm64": "0.25.0", + "@esbuild/netbsd-x64": "0.25.0", + "@esbuild/openbsd-arm64": "0.25.0", + "@esbuild/openbsd-x64": "0.25.0", + "@esbuild/sunos-x64": "0.25.0", + "@esbuild/win32-arm64": "0.25.0", + "@esbuild/win32-ia32": "0.25.0", + "@esbuild/win32-x64": "0.25.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.1.tgz", + "integrity": "sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.30.1", + "@eslint/plugin-kit": "^0.3.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", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-next": { + "version": "15.3.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.4.tgz", + "integrity": "sha512-WqeumCq57QcTP2lYlV6BRUySfGiBYEXlQ1L0mQ+u4N4X4ZhUVSSQ52WtjqHv60pJ6dD7jn+YZc0d1/ZSsxccvg==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "15.3.4", + "@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", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^5.0.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "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==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-import-context": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz", + "integrity": "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==", + "dev": true, + "dependencies": { + "get-tsconfig": "^4.10.1", + "stable-hash-x": "^0.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-context" + }, + "peerDependencies": { + "unrs-resolver": "^1.0.0" + }, + "peerDependenciesMeta": { + "unrs-resolver": { + "optional": true + } + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.4.tgz", + "integrity": "sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==", + "dev": true, + "dependencies": { + "debug": "^4.4.1", + "eslint-import-context": "^0.1.8", + "get-tsconfig": "^4.10.1", + "is-bun-module": "^2.0.0", + "stable-hash-x": "^0.2.0", + "tinyglobby": "^0.2.14", + "unrs-resolver": "^1.7.11" + }, + "engines": { + "node": "^16.17.0 || >=18.6.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "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-better-tailwindcss": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-better-tailwindcss/-/eslint-plugin-better-tailwindcss-3.5.1.tgz", + "integrity": "sha512-AN/3Ey6aoHpwRt21WlsKtgSkzHG1Tk42fqss4VGJwhZ3OtFAykyMRRvd4wLkt2DC5sbwREvNnnuvIF7dsqHCmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/css-tree": "^3.6.1", + "enhanced-resolve": "^5.18.2", + "jiti": "^2.4.2", + "postcss": "^8.5.6", + "postcss-import": "^16.1.1", + "synckit": "^0.11.8", + "tailwind-csstree": "^0.1.1" + }, + "engines": { + "node": "^20.11.0 || >=21.2.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", + "tailwindcss": "^3.3.0 || ^4.1.6" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-no-relative-import-paths": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-relative-import-paths/-/eslint-plugin-no-relative-import-paths-1.6.1.tgz", + "integrity": "sha512-YZNeOnsOrJcwhFw0X29MXjIzu2P/f5X2BZDPWw1R3VUYBRFxNIh77lyoL/XrMU9ewZNQPcEvAgL/cBOT1P330A==", + "dev": true, + "license": "ISC" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "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==", + "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" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "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, + "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==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "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", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/exsolve": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", + "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", + "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/extract-pg-schema": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/extract-pg-schema/-/extract-pg-schema-5.7.1.tgz", + "integrity": "sha512-8SuJFS8LXLmAsEqfzBFTYN1X2ojpgwhQoq6CwAZW8p/2/4VxEaEURXEOgcZlHBmNoZn7v5vIDSyZzg/cQv92bA==", + "dev": true, + "dependencies": { + "knex": "3.1.0", + "knex-pglite": "^0.11.0", + "pg": "8.16.0", + "pg-query-emscripten": "^5.1.0", + "ramda": "^0.30.0", + "tagged-comment-parser": "^1.3.3" + }, + "bin": { + "extract-pg-schema": "bin/extract-pg-schema" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/extract-pg-schema/node_modules/pg": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.0.tgz", + "integrity": "sha512-7SKfdvP8CTNXjMUzfcVTaI+TDzBEeaUnVwiVGZQD1Hh33Kpev7liQba9uLd4CfN8r9mCVsD0JIpq03+Unpz+kg==", + "dev": true, + "dependencies": { + "pg-connection-string": "^2.9.0", + "pg-pool": "^3.10.0", + "pg-protocol": "^1.10.0", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.2.5" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/extract-pg-schema/node_modules/pg-connection-string": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", + "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-equals": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", + "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "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.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-shallow-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz", + "integrity": "sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastest-stable-stringify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz", + "integrity": "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==", + "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==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fd-package-json/-/fd-package-json-2.0.0.tgz", + "integrity": "sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "walk-up-path": "^4.0.0" + } + }, + "node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreach": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", + "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", + "license": "MIT" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formatly": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/formatly/-/formatly-0.2.4.tgz", + "integrity": "sha512-lIN7GpcvX/l/i24r/L9bnJ0I8Qn01qijWpQpDDvTLL29nKqSaJJu4h20+7VJ6m2CAhQ2/En/GbxDiHCzq/0MyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fd-package-json": "^2.0.0" + }, + "bin": { + "formatly": "bin/index.mjs" + }, + "engines": { + "node": ">=18.3.0" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "12.8.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.8.0.tgz", + "integrity": "sha512-EarL75miCDcKLEAQLJ+6Zfwdj+KQsVlbHGGlygZ/TigKBj7NLPkyDKk4WLFUScjAs2xNpfMRLBM6VsCJq9Roxg==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.8.0", + "motion-utils": "^12.7.5", + "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/frimousse": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/frimousse/-/frimousse-0.3.0.tgz", + "integrity": "sha512-kO6LMoKY/cLAYEhXXtqLRaLIE6L/DagpFPrUZaLv3LsUa1/8Iza3HhwZcgN8eZ+weXnhv69eoclNUPohcCa/IQ==", + "license": "MIT", + "workspaces": [ + ".", + "site" + ], + "peerDependencies": { + "react": "^18 || ^19", + "typescript": ">=5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuzzysort": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fuzzysort/-/fuzzysort-2.0.4.tgz", + "integrity": "sha512-Api1mJL+Ad7W7vnDZnWq5pGaXJjyencT+iKGia2PlHUcSsSzWwIQ3S1isiMpwpavjYtGd2FzhUIhnnhOULZgDw==", + "license": "MIT" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "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", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/getopts": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz", + "integrity": "sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==", + "dev": true + }, + "node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/goober": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.16.tgz", + "integrity": "sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==", + "license": "MIT", + "peerDependencies": { + "csstype": "^3.0.10" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "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/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "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/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "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/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/html-to-text": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", + "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", + "license": "MIT", + "dependencies": { + "@selderee/plugin-htmlparser2": "^0.11.0", + "deepmerge": "^4.3.1", + "dom-serializer": "^2.0.0", + "htmlparser2": "^8.0.2", + "selderee": "^0.11.0" + }, + "engines": { + "node": ">=14" + } + }, + "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/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/hyphenate-style-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", + "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==", + "license": "BSD-3-Clause" + }, + "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/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "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.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, + "node_modules/inline-style-prefixer": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-7.0.1.tgz", + "integrity": "sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==", + "license": "MIT", + "dependencies": { + "css-in-js-utils": "^3.1.0" + } + }, + "node_modules/input-format": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/input-format/-/input-format-0.3.14.tgz", + "integrity": "sha512-gHMrgrbCgmT4uK5Um5eVDUohuV9lcs95ZUUN9Px2Y0VIfjTzT2wF8Q3Z4fwLFm7c5Z2OXCm53FHoovj6SlOKdg==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=18.1.0", + "react-dom": ">=18.1.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ioredis": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.6.1.tgz", + "integrity": "sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==", + "license": "MIT", + "dependencies": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "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", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "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", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "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", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/jose": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.0.12.tgz", + "integrity": "sha512-T8xypXs8CpmiIi78k0E+Lk7T2zlK4zDyg+o1CZ4AkOHgDg98ogdP2BeZ61lTFKFyoEwJ9RgAgN+SdM3iPgNonQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-pointer": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", + "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", + "license": "MIT", + "dependencies": { + "foreach": "^2.0.4" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/kanel": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/kanel/-/kanel-3.14.1.tgz", + "integrity": "sha512-8CFMpZfsJ47zH9I/437bTSuMyGf+ZxuutbudrhY0RtmgeSLiIPr3sIuZ7hJ0TexUnhw1/J1CdepthsOi7zPEhA==", + "dev": true, + "dependencies": { + "@kristiandupont/recase": "^1.2.1", + "chalk": "4.1.2", + "cli-progress": "^3.11.2", + "extract-pg-schema": "^5.5.1", + "optionator": "^0.9.1", + "pg": "^8.10.0", + "ramda": "^0.30.0", + "rimraf": "^6.0.0", + "tagged-comment-parser": "^1.3.5" + }, + "bin": { + "kanel": "bin/kanel" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/kanel-kysely": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/kanel-kysely/-/kanel-kysely-0.7.1.tgz", + "integrity": "sha512-2PqWYszHw/LytJ6EbrfIDIEXAlRgXzW9GWTkWQyR2oMUM69DRtCnpogDcKe4g4zl6NSOL/0Jy1jhhhr9Gnu6mQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@kristiandupont/recase": "^1.2.1" + } + }, + "node_modules/kanel/node_modules/rimraf": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/knex": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/knex/-/knex-3.1.0.tgz", + "integrity": "sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw==", + "dev": true, + "dependencies": { + "colorette": "2.0.19", + "commander": "^10.0.0", + "debug": "4.3.4", + "escalade": "^3.1.1", + "esm": "^3.2.25", + "get-package-type": "^0.1.0", + "getopts": "2.3.0", + "interpret": "^2.2.0", + "lodash": "^4.17.21", + "pg-connection-string": "2.6.2", + "rechoir": "^0.8.0", + "resolve-from": "^5.0.0", + "tarn": "^3.0.2", + "tildify": "2.0.0" + }, + "bin": { + "knex": "bin/cli.js" + }, + "engines": { + "node": ">=16" + }, + "peerDependenciesMeta": { + "better-sqlite3": { + "optional": true + }, + "mysql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/knex-pglite": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/knex-pglite/-/knex-pglite-0.11.0.tgz", + "integrity": "sha512-Z3v+vaF8C/VMJll7J2NHqFZo31ijLfYBsHMKU8jTnjfIF0edUonAB3sbAZYmUbSeJDDGfZdJPsvcB4ZyGBERcA==", + "dev": true, + "dependencies": { + "@electric-sql/pglite": "^0.2.14", + "knex": "3.1.0" + } + }, + "node_modules/knex/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/knex/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/knex/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/knip": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/knip/-/knip-5.62.0.tgz", + "integrity": "sha512-hfTUVzmrMNMT1khlZfAYmBABeehwWUUrizLQoLamoRhSFkygsGIXWx31kaWKBgEaIVL77T3Uz7IxGvSw+CvQ6A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/webpro" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/knip" + }, + { + "type": "polar", + "url": "https://polar.sh/webpro-nl" + } + ], + "license": "ISC", + "dependencies": { + "@nodelib/fs.walk": "^1.2.3", + "fast-glob": "^3.3.3", + "formatly": "^0.2.4", + "jiti": "^2.4.2", + "js-yaml": "^4.1.0", + "minimist": "^1.2.8", + "oxc-resolver": "^11.1.0", + "picocolors": "^1.1.1", + "picomatch": "^4.0.1", + "smol-toml": "^1.3.4", + "strip-json-comments": "5.0.2", + "zod": "^3.22.4", + "zod-validation-error": "^3.0.3" + }, + "bin": { + "knip": "bin/knip.js", + "knip-bun": "bin/knip-bun.js" + }, + "engines": { + "node": ">=18.18.0" + }, + "peerDependencies": { + "@types/node": ">=18", + "typescript": ">=5.0.4" + } + }, + "node_modules/knip/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==", + "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_modules/knip/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/knip/node_modules/strip-json-comments": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.2.tgz", + "integrity": "sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/kysely": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.28.2.tgz", + "integrity": "sha512-4YAVLoF0Sf0UTqlhgQMFU9iQECdah7n+13ANkiuVfRvlK+uI0Etbgd7bVP36dKlG+NXWbhGua8vnGt+sdhvT7A==", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/kysely-plugin-serialize": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/kysely-plugin-serialize/-/kysely-plugin-serialize-0.8.2.tgz", + "integrity": "sha512-81nyTvDPGNHTzs9/Si+GW69YkcQgy2PMlkCieihEyF9EmlGY/TURUZMhVRrLV1k3Hsit+AWCfoEOLJczbK3hDw==", + "license": "MIT", + "peerDependencies": { + "kysely": ">=0.26" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/leac": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz", + "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==", + "license": "MIT", + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", + "license": "BSD-2-Clause" + }, + "node_modules/leaflet-defaulticon-compatibility": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/leaflet-defaulticon-compatibility/-/leaflet-defaulticon-compatibility-0.1.2.tgz", + "integrity": "sha512-IrKagWxkTwzxUkFIumy/Zmo3ksjuAu3zEadtOuJcKzuXaD76Gwvg2Z1mLyx7y52ykOzM8rAH5ChBs4DnfdGa6Q==", + "license": "BSD-2-Clause" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libphonenumber-js": { + "version": "1.12.10", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.10.tgz", + "integrity": "sha512-E91vHJD61jekHHR/RF/E83T/CMoaLXT7cwYA75T4gim4FZjnM6hbJjVIGg7chqlSqRsSvQ3izGmOjHy1SQzcGQ==", + "license": "MIT" + }, + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/little-state-machine": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/little-state-machine/-/little-state-machine-4.8.1.tgz", + "integrity": "sha512-liPHqaWMQ7rzZryQUDnbZ1Gclnnai3dIyaJ0nAgwZRXMzqbYrydrlCI0NDojRUbE5VYh5vu6hygEUZiH77nQkQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "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", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "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==", + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/lru-cache": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/lucide-react": { + "version": "0.525.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.525.0.tgz", + "integrity": "sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-synchronized": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/make-synchronized/-/make-synchronized-0.8.0.tgz", + "integrity": "sha512-DZu4lwc0ffoFz581BSQa/BJl+1ZqIkoRQ+VejMlH0VrP4E86StAODnZujZ4sepumQj8rcP7wUnUBGM8Gu+zKUA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/fisker/make-synchronized?sponsor=1" + } + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/marked": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/marked/-/marked-7.0.4.tgz", + "integrity": "sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 16" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md-to-react-email": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/md-to-react-email/-/md-to-react-email-5.0.5.tgz", + "integrity": "sha512-OvAXqwq57uOk+WZqFFNCMZz8yDp8BD3WazW1wAKHUrPbbdr89K9DWS6JXY09vd9xNdPNeurI8DU/X4flcfaD8A==", + "dependencies": { + "marked": "7.0.4" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "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.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "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/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "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/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", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/module-punycode": { + "name": "punycode", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/monaco-editor": { + "version": "0.52.2", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.52.2.tgz", + "integrity": "sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==", + "license": "MIT", + "peer": true + }, + "node_modules/motion-dom": { + "version": "12.8.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.8.0.tgz", + "integrity": "sha512-YsfUE1F8Ycv9th1V0YJ6LOx9U2EMe/8P3RXK1o6NZhRbdFiWvzBLvxqp2X6Fn3rbJbwWkSEfnpe14ZU9Oz1d1Q==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.7.5" + } + }, + "node_modules/motion-utils": { + "version": "12.7.5", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.7.5.tgz", + "integrity": "sha512-JIgrmEq7Vw1x0AUrjvkRp7oMMQkGqSUMT50O/Ag6RRCQWG3gRRTkOI+BirBAJT6m+GIPoiyxkJ1u98GgF/a6TQ==", + "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==", + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nano-css": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.6.2.tgz", + "integrity": "sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==", + "license": "Unlicense", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "css-tree": "^1.1.2", + "csstype": "^3.1.2", + "fastest-stable-stringify": "^2.0.2", + "inline-style-prefixer": "^7.0.1", + "rtl-css-js": "^1.16.1", + "stacktrace-js": "^2.0.2", + "stylis": "^4.3.0" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/nano-css/node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-postinstall": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.5.tgz", + "integrity": "sha512-kmsgUvCRIJohHjbZ3V8avP0I1Pekw329MVAMDzVxsrkjgdnqiwvMX5XwR+hWV66vsAtZ+iM+fVnq8RTQawUmCQ==", + "dev": true, + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/next/-/next-15.4.1.tgz", + "integrity": "sha512-eNKB1q8C7o9zXF8+jgJs2CzSLIU3T6bQtX6DcTnCq1sIR1CJ0GlSyRs1BubQi3/JgCnr9Vr+rS5mOMI38FFyQw==", + "license": "MIT", + "dependencies": { + "@next/env": "15.4.1", + "@swc/helpers": "0.5.15", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.4.1", + "@next/swc-darwin-x64": "15.4.1", + "@next/swc-linux-arm64-gnu": "15.4.1", + "@next/swc-linux-arm64-musl": "15.4.1", + "@next/swc-linux-x64-gnu": "15.4.1", + "@next/swc-linux-x64-musl": "15.4.1", + "@next/swc-win32-arm64-msvc": "15.4.1", + "@next/swc-win32-x64-msvc": "15.4.1", + "sharp": "^0.34.3" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.51.1", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next-themes": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", + "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-html-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-7.0.1.tgz", + "integrity": "sha512-KGtmPY2kS0thCWGK0VuPyOS+pBKhhe8gXztzA2ilAOhbUbxa9homF1bOyKvhGzMLXUoRds9IOmr/v5lr/lqNmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nodemailer": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.5.tgz", + "integrity": "sha512-nsrh2lO3j4GkLLXoeEksAMgAOqxOv6QumNRVQTJwKH4nuiww6iC2y7GyANs9kRAxCexg3+lTWM3PZ91iLlVjfg==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nodemailer-html-to-text": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nodemailer-html-to-text/-/nodemailer-html-to-text-3.2.0.tgz", + "integrity": "sha512-RJUC6640QV1PzTHHapOrc6IzrAJUZtk2BdVdINZ9VTLm+mcQNyBO9LYyhrnufkzqiD9l8hPLJ97rSyK4WanPNg==", + "license": "MIT", + "dependencies": { + "html-to-text": "7.1.1" + }, + "engines": { + "node": ">= 10.23.0" + } + }, + "node_modules/nodemailer-html-to-text/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/nodemailer-html-to-text/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/nodemailer-html-to-text/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/nodemailer-html-to-text/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/nodemailer-html-to-text/node_modules/html-to-text": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-7.1.1.tgz", + "integrity": "sha512-c9QWysrfnRZevVpS8MlE7PyOdSuIOjg8Bt8ZE10jMU/BEngA6j3llj4GRfAmtQzcd1FjKE0sWu5IHXRUH9YxIQ==", + "license": "MIT", + "dependencies": { + "deepmerge": "^4.2.2", + "he": "^1.2.0", + "htmlparser2": "^6.1.0", + "minimist": "^1.2.5" + }, + "bin": { + "html-to-text": "bin/cli.js" + }, + "engines": { + "node": ">=10.23.2" + } + }, + "node_modules/nodemailer-html-to-text/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/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/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "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==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nuqs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/nuqs/-/nuqs-2.4.3.tgz", + "integrity": "sha512-BgtlYpvRwLYiJuWzxt34q2bXu/AIS66sLU1QePIMr2LWkb+XH0vKXdbLSgn9t6p7QKzwI7f38rX3Wl9llTXQ8Q==", + "license": "MIT", + "dependencies": { + "mitt": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/franky47" + }, + "peerDependencies": { + "@remix-run/react": ">=2", + "next": ">=14.2.0", + "react": ">=18.2.0 || ^19.0.0-0", + "react-router": "^6 || ^7", + "react-router-dom": "^6 || ^7" + }, + "peerDependenciesMeta": { + "@remix-run/react": { + "optional": true + }, + "next": { + "optional": true + }, + "react-router": { + "optional": true + }, + "react-router-dom": { + "optional": true + } + } + }, + "node_modules/nypm": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.0.tgz", + "integrity": "sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "pathe": "^2.0.3", + "pkg-types": "^2.0.0", + "tinyexec": "^0.3.2" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "license": "MIT" + }, + "node_modules/ora/node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/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==", + "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/ora/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/orderedmap": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", + "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==", + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/oxc-resolver": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/oxc-resolver/-/oxc-resolver-11.5.2.tgz", + "integrity": "sha512-mYkOsrgvlm4OLPCgSR2XCMkJ203PwSOASxzHYzW7Kz3GXONVbe2VTpgwL/yBo0igSUwlZWTUKEbRJLscJ6N5QQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-resolver/binding-android-arm-eabi": "11.5.2", + "@oxc-resolver/binding-android-arm64": "11.5.2", + "@oxc-resolver/binding-darwin-arm64": "11.5.2", + "@oxc-resolver/binding-darwin-x64": "11.5.2", + "@oxc-resolver/binding-freebsd-x64": "11.5.2", + "@oxc-resolver/binding-linux-arm-gnueabihf": "11.5.2", + "@oxc-resolver/binding-linux-arm-musleabihf": "11.5.2", + "@oxc-resolver/binding-linux-arm64-gnu": "11.5.2", + "@oxc-resolver/binding-linux-arm64-musl": "11.5.2", + "@oxc-resolver/binding-linux-ppc64-gnu": "11.5.2", + "@oxc-resolver/binding-linux-riscv64-gnu": "11.5.2", + "@oxc-resolver/binding-linux-riscv64-musl": "11.5.2", + "@oxc-resolver/binding-linux-s390x-gnu": "11.5.2", + "@oxc-resolver/binding-linux-x64-gnu": "11.5.2", + "@oxc-resolver/binding-linux-x64-musl": "11.5.2", + "@oxc-resolver/binding-wasm32-wasi": "11.5.2", + "@oxc-resolver/binding-win32-arm64-msvc": "11.5.2", + "@oxc-resolver/binding-win32-ia32-msvc": "11.5.2", + "@oxc-resolver/binding-win32-x64-msvc": "11.5.2" + } + }, + "node_modules/oxc-resolver/node_modules/napi-postinstall": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.0.tgz", + "integrity": "sha512-M7NqKyhODKV1gRLdkwE7pDsZP2/SC2a2vHkOYh9MCpKMbWVfyVfUw5MaH83Fv6XMjxr5jryUp3IDDL9rlxsTeA==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "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-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseley": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", + "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", + "license": "MIT", + "dependencies": { + "leac": "^0.6.0", + "peberminta": "^0.9.0" + }, + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "license": "MIT", + "dependencies": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/peberminta": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", + "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", + "license": "MIT", + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/pg": { + "version": "8.16.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", + "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", + "dependencies": { + "pg-connection-string": "^2.9.1", + "pg-pool": "^3.10.1", + "pg-protocol": "^1.10.3", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "engines": { + "node": ">= 16.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.2.7" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", + "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==", + "dev": true + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", + "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==" + }, + "node_modules/pg-query-emscripten": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/pg-query-emscripten/-/pg-query-emscripten-5.1.0.tgz", + "integrity": "sha512-H1ZWOzLRddmHuE4GZqFjjo55hA9zMiePz/WDDGANA/EnvILCJps9pcRucyGd+MFvapeYOy6TWSYz6DbtBOaxRQ==", + "dev": true + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg/node_modules/pg-connection-string": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", + "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==" + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "license": "MIT", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.2.0.tgz", + "integrity": "sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.1.1.tgz", + "integrity": "sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-classnames": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-classnames/-/prettier-plugin-classnames-0.8.1.tgz", + "integrity": "sha512-7RHvJ+10N4zcz3dTCGDFXTy+/EMCSZf1V5O9iFEsWe8TYUQ8slh0FeeIjW9j2tn7+gSjKtfhp+vGyG2DTSlxZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "zod": "3.22.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "prettier": "^3", + "prettier-plugin-astro": "*", + "prettier-plugin-svelte": "*" + }, + "peerDependenciesMeta": { + "prettier-plugin-astro": { + "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + } + } + }, + "node_modules/prettier-plugin-classnames/node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/prettier-plugin-tailwindcss": { + "version": "0.6.14", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.14.tgz", + "integrity": "sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "@ianvs/prettier-plugin-sort-imports": "*", + "@prettier/plugin-hermes": "*", + "@prettier/plugin-oxc": "*", + "@prettier/plugin-pug": "*", + "@shopify/prettier-plugin-liquid": "*", + "@trivago/prettier-plugin-sort-imports": "*", + "@zackad/prettier-plugin-twig": "*", + "prettier": "^3.0", + "prettier-plugin-astro": "*", + "prettier-plugin-css-order": "*", + "prettier-plugin-import-sort": "*", + "prettier-plugin-jsdoc": "*", + "prettier-plugin-marko": "*", + "prettier-plugin-multiline-arrays": "*", + "prettier-plugin-organize-attributes": "*", + "prettier-plugin-organize-imports": "*", + "prettier-plugin-sort-imports": "*", + "prettier-plugin-style-order": "*", + "prettier-plugin-svelte": "*" + }, + "peerDependenciesMeta": { + "@ianvs/prettier-plugin-sort-imports": { + "optional": true + }, + "@prettier/plugin-hermes": { + "optional": true + }, + "@prettier/plugin-oxc": { + "optional": true + }, + "@prettier/plugin-pug": { + "optional": true + }, + "@shopify/prettier-plugin-liquid": { + "optional": true + }, + "@trivago/prettier-plugin-sort-imports": { + "optional": true + }, + "@zackad/prettier-plugin-twig": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + }, + "prettier-plugin-css-order": { + "optional": true + }, + "prettier-plugin-import-sort": { + "optional": true + }, + "prettier-plugin-jsdoc": { + "optional": true + }, + "prettier-plugin-marko": { + "optional": true + }, + "prettier-plugin-multiline-arrays": { + "optional": true + }, + "prettier-plugin-organize-attributes": { + "optional": true + }, + "prettier-plugin-organize-imports": { + "optional": true + }, + "prettier-plugin-sort-imports": { + "optional": true + }, + "prettier-plugin-style-order": { + "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + } + } + }, + "node_modules/pretty-bytes": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", + "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", + "license": "MIT", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prism-react-renderer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", + "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prismjs": "^1.26.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.0.0" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/property-information": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", + "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/prosemirror-changeset": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.3.1.tgz", + "integrity": "sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==", + "dependencies": { + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-collab": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz", + "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-commands": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz", + "integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.10.2" + } + }, + "node_modules/prosemirror-dropcursor": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz", + "integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "node_modules/prosemirror-gapcursor": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz", + "integrity": "sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==", + "license": "MIT", + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.1.tgz", + "integrity": "sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.31.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-inputrules": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.5.0.tgz", + "integrity": "sha512-K0xJRCmt+uSw7xesnHmcn72yBGTbY45vm8gXI4LZXbx2Z0jwh5aF9xrGQgrVPu0WbyFVFF3E/o9VhJYz6SQWnA==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz", + "integrity": "sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-markdown": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.2.tgz", + "integrity": "sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==", + "license": "MIT", + "dependencies": { + "@types/markdown-it": "^14.0.0", + "markdown-it": "^14.0.0", + "prosemirror-model": "^1.25.0" + } + }, + "node_modules/prosemirror-menu": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.5.tgz", + "integrity": "sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==", + "license": "MIT", + "dependencies": { + "crelt": "^1.0.0", + "prosemirror-commands": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.1.tgz", + "integrity": "sha512-AUvbm7qqmpZa5d9fPKMvH1Q5bqYQvAZWOGRvxsB6iFLyycvC9MwNemNVjHVrWgjaoxAfY8XVg7DbvQ/qxvI9Eg==", + "license": "MIT", + "dependencies": { + "orderedmap": "^2.0.0" + } + }, + "node_modules/prosemirror-schema-basic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz", + "integrity": "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.25.0" + } + }, + "node_modules/prosemirror-schema-list": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz", + "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.7.3" + } + }, + "node_modules/prosemirror-state": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz", + "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.27.0" + } + }, + "node_modules/prosemirror-tables": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.7.1.tgz", + "integrity": "sha512-eRQ97Bf+i9Eby99QbyAiyov43iOKgWa7QCGly+lrDt7efZ1v8NWolhXiB43hSDGIXT1UXgbs4KJN3a06FGpr1Q==", + "license": "MIT", + "dependencies": { + "prosemirror-keymap": "^1.2.2", + "prosemirror-model": "^1.25.0", + "prosemirror-state": "^1.4.3", + "prosemirror-transform": "^1.10.3", + "prosemirror-view": "^1.39.1" + } + }, + "node_modules/prosemirror-trailing-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz", + "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==", + "license": "MIT", + "dependencies": { + "@remirror/core-constants": "3.0.0", + "escape-string-regexp": "^4.0.0" + }, + "peerDependencies": { + "prosemirror-model": "^1.22.1", + "prosemirror-state": "^1.4.2", + "prosemirror-view": "^1.33.8" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.4.tgz", + "integrity": "sha512-pwDy22nAnGqNR1feOQKHxoFkkUtepoFAd3r2hbEDsnf4wp57kKA36hXsB3njA9FtONBEwSDnDeCiJe+ItD+ykw==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.21.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.39.2", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.39.2.tgz", + "integrity": "sha512-BmOkml0QWNob165gyUxXi5K5CVUgVPpqMEAAml/qzgKn9boLUWVPzQ6LtzXw8Cn1GtRQX4ELumPxqtLTDaAKtg==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.20.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/radix-ui": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/radix-ui/-/radix-ui-1.4.2.tgz", + "integrity": "sha512-fT/3YFPJzf2WUpqDoQi005GS8EpCi+53VhcLaHUj5fwkPYiZAjk1mSxFvbMA8Uq71L03n+WysuYC+mlKkXxt/Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-accessible-icon": "1.1.7", + "@radix-ui/react-accordion": "1.2.11", + "@radix-ui/react-alert-dialog": "1.1.14", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-aspect-ratio": "1.1.7", + "@radix-ui/react-avatar": "1.1.10", + "@radix-ui/react-checkbox": "1.3.2", + "@radix-ui/react-collapsible": "1.1.11", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-context-menu": "2.2.15", + "@radix-ui/react-dialog": "1.1.14", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-dropdown-menu": "2.1.15", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-form": "0.1.7", + "@radix-ui/react-hover-card": "1.1.14", + "@radix-ui/react-label": "2.1.7", + "@radix-ui/react-menu": "2.1.15", + "@radix-ui/react-menubar": "1.1.15", + "@radix-ui/react-navigation-menu": "1.2.13", + "@radix-ui/react-one-time-password-field": "0.1.7", + "@radix-ui/react-password-toggle-field": "0.1.2", + "@radix-ui/react-popover": "1.1.14", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-progress": "1.1.7", + "@radix-ui/react-radio-group": "1.3.7", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-scroll-area": "1.2.9", + "@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-switch": "1.2.5", + "@radix-ui/react-tabs": "1.1.12", + "@radix-ui/react-toast": "1.2.14", + "@radix-ui/react-toggle": "1.1.9", + "@radix-ui/react-toggle-group": "1.1.10", + "@radix-ui/react-toolbar": "1.1.10", + "@radix-ui/react-tooltip": "1.2.7", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-escape-keydown": "1.1.1", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/ramda": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.30.1.tgz", + "integrity": "sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-colorful": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", + "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/react-day-picker": { + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.8.0.tgz", + "integrity": "sha512-E0yhhg7R+pdgbl/2toTb0xBhsEAtmAx1l7qjIWYfcxOy8w4rTSVfbtBoSzVVhPwKP/5E9iL38LivzoE3AQDhCQ==", + "license": "MIT", + "dependencies": { + "@date-fns/tz": "1.2.0", + "date-fns": "4.1.0", + "date-fns-jalali": "4.1.0-0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-email": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/react-email/-/react-email-4.2.3.tgz", + "integrity": "sha512-LUKyk9nNVFuTqAyp4yCEQFQjBe+s8nl3VauMWuOhBZ4VhGnimbrnv01U8yD2YwzaHKtytS0U659x5dc/0+xu+Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.0", + "@babel/traverse": "^7.27.0", + "chalk": "^5.0.0", + "chokidar": "^4.0.3", + "commander": "^13.0.0", + "debounce": "^2.0.0", + "esbuild": "^0.25.0", + "glob": "^11.0.0", + "jiti": "2.4.2", + "log-symbols": "^7.0.0", + "mime-types": "^3.0.0", + "normalize-path": "^3.0.0", + "nypm": "0.6.0", + "ora": "^8.0.0", + "prompts": "2.4.2", + "socket.io": "^4.8.1", + "tsconfig-paths": "4.2.0" + }, + "bin": { + "email": "dist/index.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/react-email/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/react-email/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/react-email/node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/react-email/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/react-email/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/react-email/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/react-email/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==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/react-email/node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/react-hook-form": { + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.60.0.tgz", + "integrity": "sha512-SBrYOvMbDB7cV8ZfNpaiLcgjH/a1c7aK0lK+aNigpf4xWLO8q+o4tcvVurv3c4EOyzn/3dCsYt4GKD42VvJ/+A==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-hot-toast": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.5.2.tgz", + "integrity": "sha512-Tun3BbCxzmXXM7C+NI4qiv6lT0uwGh4oAfeJyNOjYUejTsm35mK9iCaYLGv8cBz9L5YxZLx/2ii7zsIwPtPUdw==", + "license": "MIT", + "dependencies": { + "csstype": "^3.1.3", + "goober": "^2.1.16" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, + "node_modules/react-is": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz", + "integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==", + "license": "MIT" + }, + "node_modules/react-leaflet": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-5.0.0.tgz", + "integrity": "sha512-CWbTpr5vcHw5bt9i4zSlPEVQdTVcML390TjeDG0cK59z1ylexpqC6M1PJFjV8jD7CF+ACBFsLIDs6DRMoLEofw==", + "license": "Hippocratic-2.1", + "dependencies": { + "@react-leaflet/core": "^3.0.0" + }, + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + } + }, + "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-phone-number-input": { + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/react-phone-number-input/-/react-phone-number-input-3.4.12.tgz", + "integrity": "sha512-Raob77KdtLGm49iC6nuOX9qy6Mg16idkgC7Y1mHmvG2WBYoauHpzxYNlfmFskQKeiztrJIwPhPzBhjFwjenNCA==", + "license": "MIT", + "dependencies": { + "classnames": "^2.5.1", + "country-flag-icons": "^1.5.17", + "input-format": "^0.3.10", + "libphonenumber-js": "^1.11.20", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-promise-suspense": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/react-promise-suspense/-/react-promise-suspense-0.3.4.tgz", + "integrity": "sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^2.0.1" + } + }, + "node_modules/react-promise-suspense/node_modules/fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", + "license": "MIT" + }, + "node_modules/react-remove-scroll": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz", + "integrity": "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-reverse-portal": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-reverse-portal/-/react-reverse-portal-2.3.0.tgz", + "integrity": "sha512-kvbPfLPKg6Y3S6tVq83us2RghvDpOS4GcJxbI7cZ0V0tuzUaSzblRIhVnKLOucfqF4lN/i9oWvEmpEi6bAOYlQ==", + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-select": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.10.2.tgz", + "integrity": "sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-simple-animate": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/react-simple-animate/-/react-simple-animate-3.5.3.tgz", + "integrity": "sha512-Ob+SmB5J1tXDEZyOe2Hf950K4M8VaWBBmQ3cS2BUnTORqHjhK0iKG8fB+bo47ZL15t8d3g/Y0roiqH05UBjG7A==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react-dom": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-smooth": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", + "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", + "license": "MIT", + "dependencies": { + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-to-print": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/react-to-print/-/react-to-print-3.1.1.tgz", + "integrity": "sha512-N0MUMhpl8nkGri13BjP7zusj3B/j+1eMOTt8N8PYuhBYGzA4PqTXqcihJ9cZw996dvhV6mBdwafIQCg3Ap5bKg==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ~19" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/react-universal-interface": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", + "integrity": "sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==", + "peerDependencies": { + "react": "*", + "tslib": "*" + } + }, + "node_modules/react-use": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/react-use/-/react-use-17.6.0.tgz", + "integrity": "sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g==", + "license": "Unlicense", + "dependencies": { + "@types/js-cookie": "^2.2.6", + "@xobotyi/scrollbar-width": "^1.9.5", + "copy-to-clipboard": "^3.3.1", + "fast-deep-equal": "^3.1.3", + "fast-shallow-equal": "^1.0.0", + "js-cookie": "^2.2.1", + "nano-css": "^5.6.2", + "react-universal-interface": "^0.6.2", + "resize-observer-polyfill": "^1.5.1", + "screenfull": "^5.1.0", + "set-harmonic-interval": "^1.0.1", + "throttle-debounce": "^3.0.1", + "ts-easing": "^0.2.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/react-use/node_modules/@types/js-cookie": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz", + "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==", + "license": "MIT" + }, + "node_modules/react-use/node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", + "license": "MIT" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-cache/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/recharts": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz", + "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^18.3.1", + "react-smooth": "^4.0.4", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "license": "MIT", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, + "node_modules/recharts/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "license": "MIT", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rope-sequence": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", + "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", + "license": "MIT" + }, + "node_modules/rtl-css-js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", + "integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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": { + "queue-microtask": "^1.2.2" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "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", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/schema-utils": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/screenfull": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz", + "integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/selderee": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", + "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", + "license": "MIT", + "dependencies": { + "parseley": "^0.12.0" + }, + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "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==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-harmonic-interval": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz", + "integrity": "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==", + "license": "Unlicense", + "engines": { + "node": ">=6.9" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.4", + "semver": "^7.7.2" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.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" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "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" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/smol-toml": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.4.1.tgz", + "integrity": "sha512-CxdwHXyYTONGHThDbq5XdwbFsuY4wlClRGejfE2NtwUtiHYsP1QtNsHb/hnj31jKYSchztJsaA8pSQoVzkfCFg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "license": "MIT", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-client": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", + "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-client/node_modules/debug": { + "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" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sonner": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.3.tgz", + "integrity": "sha512-njQ4Hht92m0sMqqHVDL32V2Oun9W1+PHO9NDv9FHfJjT3JT22IG4Jpo3FPQy+mouRKCXFWO+r67v6MrHX2zeIA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "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/spamc": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/spamc/-/spamc-0.0.5.tgz", + "integrity": "sha512-jYXItuZuiWZyG9fIdvgTUbp2MNRuyhuSwvvhhpPJd4JK/9oSZxkD7zAj53GJtowSlXwCJzLg6sCKAoE9wXsKgg==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/stable-hash-x": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz", + "integrity": "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT" + }, + "node_modules/stacktrace-gps": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", + "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", + "license": "MIT", + "dependencies": { + "source-map": "0.5.6", + "stackframe": "^1.3.4" + } + }, + "node_modules/stacktrace-gps/node_modules/source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stacktrace-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", + "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", + "license": "MIT", + "dependencies": { + "error-stack-parser": "^2.0.6", + "stack-generator": "^2.0.5", + "stacktrace-gps": "^3.0.4" + } + }, + "node_modules/stacktrace-parser": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", + "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", + "license": "MIT" + }, + "node_modules/state-local": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", + "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==", + "license": "MIT" + }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-byte-length": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/string-byte-length/-/string-byte-length-1.6.0.tgz", + "integrity": "sha512-h9KzyolUa+9q6yHPCGzvPOta0VpWqG0/x0o1on22PZL0t+8txWXl0JCkRG/Gvi58HnyDvT1YCzDH2bAOpEc++g==", + "license": "MIT", + "engines": { + "node": ">=14.18.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "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==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/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==", + "license": "MIT" + }, + "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==", + "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", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "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", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stripe": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-18.3.0.tgz", + "integrity": "sha512-FkxrTUUcWB4CVN2yzgsfF/YHD6WgYHduaa7VmokCy5TLCgl5UNJkwortxcedrxSavQ8Qfa4Ir4JxcbIYiBsyLg==", + "license": "MIT", + "dependencies": { + "qs": "^6.11.0" + }, + "engines": { + "node": ">=12.*" + }, + "peerDependencies": { + "@types/node": ">=12.x.x" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/style-to-js": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.16.tgz", + "integrity": "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.8" + } + }, + "node_modules/style-to-object": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/sucrase/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz", + "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.4" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tagged-comment-parser": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/tagged-comment-parser/-/tagged-comment-parser-1.3.8.tgz", + "integrity": "sha512-HYkOQ/8ha113ln/Vp48wiDTPtbB59AWOdU44AXjhLyJLJjWWfn2kjnXUcyWLQepwbixA/mEeo1iW2Z9OwaBClQ==", + "dev": true + }, + "node_modules/tailwind-csstree": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/tailwind-csstree/-/tailwind-csstree-0.1.1.tgz", + "integrity": "sha512-Tv5IXRHtlb7LanNXjmGg0vu84Iu+/sKDqTLJBO0kP/rggfjJDKnS/HV+e0qn8yIrRByhGg+908rSOxT/7o1diw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/tailwind-merge": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.4.0.tgz", + "integrity": "sha512-49AwoOQNKdqKPd9CViyH5wJoSKsCDjUlzL8DxuGp3P1FsGY36NJDAa18jLZcaHAUUuTj+JB8IAo8zWgBNvBF7A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwind-scrollbar": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/tailwind-scrollbar/-/tailwind-scrollbar-4.0.2.tgz", + "integrity": "sha512-wAQiIxAPqk0MNTPptVe/xoyWi27y+NRGnTwvn4PQnbvB9kp8QUBiGl/wsfoVBHnQxTmhXJSNt9NHTmcz9EivFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "prism-react-renderer": "^2.4.1" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "tailwindcss": "4.x" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz", + "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tarn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", + "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/terser": { + "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.14.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throttle-debounce": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", + "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/tildify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", + "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tippy.js": { + "version": "6.3.7", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", + "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", + "dependencies": { + "@popperjs/core": "^2.9.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", + "license": "MIT" + }, + "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/trpc-ui": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/trpc-ui/-/trpc-ui-1.0.15.tgz", + "integrity": "sha512-bM+cBeQgFFrDD1TNuvbsre+WXuLYbxsEoI6W4Zg402dqpMdeWD9NxEr/K4ZVaZGzbV+RAUqUZSlS4X8AMmbUpA==", + "license": "ISC", + "dependencies": { + "@monaco-editor/react": "^4.7.0", + "@stoplight/json-schema-sampler": "^0.3.0", + "@textea/json-viewer": "^3.0.0", + "clsx": "^2.1.1", + "fuzzysort": "^2.0.4", + "nuqs": "^2.2.1", + "path": "^0.12.7", + "pretty-bytes": "^6.1.0", + "pretty-ms": "^8.0.0", + "react-markdown": "^9.0.1", + "string-byte-length": "^1.6.0", + "tailwind-merge": "^2.5.5", + "url": "^0.11.0", + "zod-to-json-schema": "^3.20.0" + }, + "peerDependencies": { + "@trpc/server": "^11.0.0-next-beta.264", + "zod": "^3.19.1" + } + }, + "node_modules/trpc-ui/node_modules/@textea/json-viewer": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@textea/json-viewer/-/json-viewer-3.5.0.tgz", + "integrity": "sha512-codh4YXkWPtMjucpn1krGxyJLQA2QhpfM0y3Sur7D/mONOnESoI5ZLmX3ZFo9heXPndDQgzCHsjpErvkN5+hxw==", + "license": "MIT", + "dependencies": { + "clsx": "^2.1.1", + "copy-to-clipboard": "^3.3.3", + "zustand": "^4.5.5" + }, + "peerDependencies": { + "@emotion/react": "^11", + "@emotion/styled": "^11", + "@mui/material": "^5", + "react": "^17 || ^18", + "react-dom": "^17 || ^18" + } + }, + "node_modules/trpc-ui/node_modules/parse-ms": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", + "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/trpc-ui/node_modules/pretty-ms": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", + "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", + "license": "MIT", + "dependencies": { + "parse-ms": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/trpc-ui/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trpc-ui/node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/trpc-ui/node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/trpc-ui/node_modules/tailwind-merge": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", + "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-easing": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", + "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==", + "license": "Unlicense" + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tw-animate-css": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.3.5.tgz", + "integrity": "sha512-t3u+0YNoloIhj1mMXs779P6MO9q3p3mvGn4k1n3nJPqJw/glZcuijG2qTSN4z4mgNRfW5ZC3aXJFLwDtiipZXA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Wombosvideo" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "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", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.35.0.tgz", + "integrity": "sha512-uEnz70b7kBz6eg/j0Czy6K5NivaYopgxRjsnAJ2Fx5oTLo3wefTHIbL7AkQr1+7tJCRVpTs/wiM8JR/11Loq9A==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.35.0", + "@typescript-eslint/parser": "8.35.0", + "@typescript-eslint/utils": "8.35.0" + }, + "engines": { + "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", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==" + }, + "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.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "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.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/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unrs-resolver": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.9.2.tgz", + "integrity": "sha512-VUyWiTNQD7itdiMuJy+EuLEErLj3uwX/EpHQF8EOf33Dq3Ju6VW1GXm+swk6+1h7a49uv9fKZ+dft9jU7esdLA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "napi-postinstall": "^0.2.4" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.9.2", + "@unrs/resolver-binding-android-arm64": "1.9.2", + "@unrs/resolver-binding-darwin-arm64": "1.9.2", + "@unrs/resolver-binding-darwin-x64": "1.9.2", + "@unrs/resolver-binding-freebsd-x64": "1.9.2", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.9.2", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.9.2", + "@unrs/resolver-binding-linux-arm64-gnu": "1.9.2", + "@unrs/resolver-binding-linux-arm64-musl": "1.9.2", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.9.2", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.9.2", + "@unrs/resolver-binding-linux-riscv64-musl": "1.9.2", + "@unrs/resolver-binding-linux-s390x-gnu": "1.9.2", + "@unrs/resolver-binding-linux-x64-gnu": "1.9.2", + "@unrs/resolver-binding-linux-x64-musl": "1.9.2", + "@unrs/resolver-binding-wasm32-wasi": "1.9.2", + "@unrs/resolver-binding-win32-arm64-msvc": "1.9.2", + "@unrs/resolver-binding-win32-ia32-msvc": "1.9.2", + "@unrs/resolver-binding-win32-x64-msvc": "1.9.2" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "license": "MIT" + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-debounce": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-10.0.4.tgz", + "integrity": "sha512-6Cf7Yr7Wk7Kdv77nnJMf6de4HuDE4dTxKij+RqE9rufDsI6zsbjyAxcH5y2ueJCQAnfgKbzXbZHYlkFwmBlWkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16.0.0" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/use-deep-compare-effect": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/use-deep-compare-effect/-/use-deep-compare-effect-1.8.1.tgz", + "integrity": "sha512-kbeNVZ9Zkc0RFGpfMN3MNfaKNvcLNyxOAAd9O4CBZ+kCBXXscn9s/4I+8ytUER4RDpEYs5+O6Rs4PqiZ+rHr5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "dequal": "^2.0.2" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "react": ">=16.13" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.0.tgz", + "integrity": "sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "license": "MIT", + "dependencies": { + "inherits": "2.0.3" + } + }, + "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/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vaul": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz", + "integrity": "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "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", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" + }, + "node_modules/walk-up-path": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", + "integrity": "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/watchpack": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.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/webpack": { + "version": "5.100.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.2.tgz", + "integrity": "sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.2", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "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==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.5", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", + "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + }, + "node_modules/zod-validation-error": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.4.0.tgz", + "integrity": "sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.18.0" + } + }, + "node_modules/zustand": { + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.6.tgz", + "integrity": "sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "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/apps/infoalloggi/package.json b/apps/infoalloggi/package.json new file mode 100644 index 0000000..826102e --- /dev/null +++ b/apps/infoalloggi/package.json @@ -0,0 +1,146 @@ +{ + "name": "infoalloggi2", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "next build", + "dev": "node ./headers/dev.js && next dev", + "dev-https": "node ./headers/dev-https.js && cross-env NEXT_PUBLIC_BASE_URL='https://localhost:3000' INTERNAL_BASE_URL='https://localhost:3000' next dev --experimental-https", + "idev": "cross-env NODE_OPTIONS='--inspect' next dev", + "lint": "node ./headers/lint.js && next lint && node check-env-vars.js", + "start": "next start", + "types": "node ./headers/type.js && tsc --noEmit", + "pg-typegen": "node ./headers/pg-typegen.js && npx kanel", + "email": "cross-env NEXT_PUBLIC_BASE_URL='https://localhost:3000' email dev --port 3500", + "test": "npm run lint && npm run types", + "knip": "knip --no-exit-code", + "stripe-dev": "stripe listen --forward-to http://localhost:3000/api/stripe-webhook", + "d": "npm run-p dev stripe-dev -cl", + "test-kr": "node ./kyselyRules/rules/select.test.js && node ./kyselyRules/rules/where.test.js&& node ./kyselyRules/rules/null.test.js" + }, + "dependencies": { + "@fattureincloud/fattureincloud-ts-sdk": "^2.1.1", + "@hookform/resolvers": "^5.1.1", + "@radix-ui/react-popover": "^1.1.14", + "@radix-ui/react-scroll-area": "^1.2.9", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-toggle-group": "^1.1.10", + "@react-email/components": "^0.3.2", + "@react-email/render": "^1.1.3", + "@stripe/react-stripe-js": "^3.7.0", + "@stripe/stripe-js": "^7.5.0", + "@tanstack/react-query": "^5.74.4", + "@tanstack/react-table": "^8.21.3", + "@tanstack/react-virtual": "^3.13.12", + "@tiptap/extension-underline": "^2.23.0", + "@tiptap/pm": "^2.25.0", + "@tiptap/react": "^2.23.0", + "@tiptap/starter-kit": "^2.25.0", + "@trpc/client": "^11.1.0", + "@trpc/next": "^11.4.3", + "@trpc/react-query": "^11.1.0", + "@trpc/server": "^11.1.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "cookies-next": "^5.1.0", + "date-fns": "^4.1.0", + "embla-carousel-react": "^8.6.0", + "framer-motion": "^12.8.0", + "frimousse": "^0.3.0", + "ioredis": "^5.6.1", + "jose": "^6.0.12", + "js-cookie": "^3.0.5", + "kysely": "^0.28.2", + "kysely-plugin-serialize": "^0.8.2", + "leaflet": "^1.9.4", + "leaflet-defaulticon-compatibility": "^0.1.2", + "lucide-react": "^0.525.0", + "next": "^15.3.4", + "next-themes": "^0.4.6", + "nodemailer": "^7.0.5", + "nodemailer-html-to-text": "^3.2.0", + "nuqs": "^2.4.3", + "pg": "^8.16.3", + "radix-ui": "^1.4.2", + "react": "^19.1.0", + "react-colorful": "^5.6.1", + "react-day-picker": "^9.8.0", + "react-dom": "^19.1.0", + "react-email": "^4.2.3", + "react-hook-form": "^7.60.0", + "react-hot-toast": "^2.5.2", + "react-is": "^19.1.0", + "react-leaflet": "^5.0.0", + "react-phone-number-input": "^3.4.12", + "react-reverse-portal": "^2.3.0", + "react-select": "^5.10.2", + "react-to-print": "^3.1.1", + "react-use": "^17.6.0", + "recharts": "^2.15.4", + "sharp": "^0.34.3", + "stripe": "^18.3.0", + "superjson": "2.2.2", + "tailwind-merge": "2.4", + "trpc-ui": "^1.0.15", + "type-fest": "^4.41.0", + "uuid": "^11.1.0", + "vaul": "^1.1.2", + "yaml": "^2.8.0", + "zod": "^3.25.76" + }, + "devDependencies": { + "@eslint/compat": "^1.3.1", + "@eslint/eslintrc": "^3.3.0", + "@eslint/js": "^9.30.0", + "@hookform/devtools": "^4.4.0", + "@next/eslint-plugin-next": "^15.3.4", + "@prettier/sync": "^0.6.1", + "@react-email/preview-server": "^4.2.3", + "@tailwindcss/forms": "^0.5.10", + "@tailwindcss/postcss": "^4.1.11", + "@tailwindcss/typography": "^0.5.16", + "@tanstack/eslint-plugin-query": "^5.81.2", + "@total-typescript/ts-reset": "^0.6.1", + "@types/eslint": "^9.6.1", + "@types/eslint-plugin-jsx-a11y": "^6.10.0", + "@types/js-cookie": "^3.0.6", + "@types/leaflet": "^1.9.20", + "@types/node": "^24.0.7", + "@types/nodemailer": "^6.4.17", + "@types/nodemailer-html-to-text": "^3.1.3", + "@types/pg": "^8.15.4", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@types/react-is": "^19.0.0", + "@types/uuid": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^8.28.0", + "@typescript-eslint/parser": "^8.31.0", + "cross-env": "^7.0.3", + "eslint": "^9.30.1", + "eslint-config-next": "^15.3.4", + "eslint-import-resolver-typescript": "^4.4.4", + "eslint-plugin-better-tailwindcss": "^3.5.1", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-no-relative-import-paths": "^1.6.1", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^5.2.0", + "jiti": "^2.4.2", + "kanel": "^3.14.1", + "kanel-kysely": "^0.7.1", + "knip": "^5.62.0", + "npm-run-all": "^4.1.5", + "postcss": "^8.5.3", + "prettier": "^3.6.2", + "prettier-plugin-classnames": "^0.8.1", + "prettier-plugin-tailwindcss": "^0.6.14", + "tailwind-scrollbar": "^4.0.2", + "tailwindcss": "^4.1.11", + "tw-animate-css": "^1.3.5", + "typescript": "^5.8.3", + "typescript-eslint": "^8.35.0" + }, + "ct3aMetadata": { + "initVersion": "7.9.0" + } +} \ No newline at end of file diff --git a/apps/infoalloggi/pgadmin-docker-compose.yml b/apps/infoalloggi/pgadmin-docker-compose.yml new file mode 100644 index 0000000..3cbfd9d --- /dev/null +++ b/apps/infoalloggi/pgadmin-docker-compose.yml @@ -0,0 +1,15 @@ +services: + pgadmin: + image: dpage/pgadmin4:latest + container_name: pgadmin + environment: + PGADMIN_DEFAULT_EMAIL: m.pedone98@gmail.com + PGADMIN_DEFAULT_PASSWORD: rootpost + ports: + - "5050:80" + volumes: + - pgadmin_data:/var/lib/pgadmin + restart: unless-stopped + +volumes: + pgadmin_data: diff --git a/apps/infoalloggi/postcss.config.cjs b/apps/infoalloggi/postcss.config.cjs new file mode 100644 index 0000000..1f58cdd --- /dev/null +++ b/apps/infoalloggi/postcss.config.cjs @@ -0,0 +1,9 @@ +/* eslint-env node */ + +const config = { + plugins: { + "@tailwindcss/postcss": {}, + }, +}; + +module.exports = config; diff --git a/apps/infoalloggi/prettier.config.cjs b/apps/infoalloggi/prettier.config.cjs new file mode 100644 index 0000000..0bc588f --- /dev/null +++ b/apps/infoalloggi/prettier.config.cjs @@ -0,0 +1,10 @@ +/* eslint-env node */ +/** @type {import("prettier").Config & import('prettier-plugin-tailwindcss').PluginOptions} */ +const config = { + printWidth: 80, + plugins: ["prettier-plugin-classnames", "prettier-plugin-tailwindcss"], + customAttributes: ["className"], + customFunctions: ["classNames"], +}; + +module.exports = config; diff --git a/apps/infoalloggi/public/Hero.svg b/apps/infoalloggi/public/Hero.svg new file mode 100644 index 0000000..10e614b --- /dev/null +++ b/apps/infoalloggi/public/Hero.svg @@ -0,0 +1,100 @@ + + + + + + Business_SVG + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/infoalloggi/public/Infoalloggi.png b/apps/infoalloggi/public/Infoalloggi.png new file mode 100644 index 0000000000000000000000000000000000000000..e235477f3eaf0f37237e585e9500a0cafe252607 GIT binary patch literal 6168 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 I+adb@0F5ind;kCd literal 0 HcmV?d00001 diff --git a/apps/infoalloggi/public/aptm.webp b/apps/infoalloggi/public/aptm.webp new file mode 100644 index 0000000000000000000000000000000000000000..3d362eda5fa099a3f6f98c6dc9f97b7cc85cd854 GIT binary patch literal 197734 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