diff --git a/.env b/.env index 701c60a10..a0844b47b 100644 --- a/.env +++ b/.env @@ -292,6 +292,7 @@ SOKETI_SECRET=__CHANGE_ME_A8PRgk5qpfLxkfLU NOVU_VERSION=2.1.0 +NOVU_APPLICATION_IDENTIFIER= NOVU_API_HOST=api-novu.${PHRASEA_DOMAIN}${HTTPS_PORT_PREFIX} NOVU_API_URL="${NOVU_API_URL:-https://${NOVU_API_HOST}}" NOVU_DASHBOARD_URL=https://novu.${PHRASEA_DOMAIN}${HTTPS_PORT_PREFIX} diff --git a/bin/vars.sh b/bin/vars.sh index 33d2d88fc..94035913e 100644 --- a/bin/vars.sh +++ b/bin/vars.sh @@ -43,6 +43,7 @@ lib/js/core lib/js/i18n lib/js/liform-react lib/js/navigation +lib/js/notification lib/js/phrasea-ui lib/js/react-auth lib/js/react-form diff --git a/databox/client/config-compiler.js b/databox/client/config-compiler.js index 85f4fc6e1..e506803f6 100644 --- a/databox/client/config-compiler.js +++ b/databox/client/config-compiler.js @@ -81,5 +81,8 @@ window.config.muiTheme = ${stackConfig.theme.replace(/^export\s+const\s+themeOpt sentryRelease: env.SENTRY_RELEASE, pusherHost: env.SOKETI_HOST, pusherKey: env.SOKETI_KEY, + novuAppIdentifier: env.NOVU_APPLICATION_IDENTIFIER, + novuSocketUrl: env.NOVU_WS_URL, + novuApiUrl: env.NOVU_API_URL, }; }); diff --git a/databox/client/package.json b/databox/client/package.json index 3b3eea8bb..f7fc4357b 100644 --- a/databox/client/package.json +++ b/databox/client/package.json @@ -8,6 +8,7 @@ "@alchemy/core": "workspace:*", "@alchemy/i18n": "workspace:*", "@alchemy/navigation": "workspace:*", + "@alchemy/notification": "workspace:*", "@alchemy/phrasea-ui": "workspace:*", "@alchemy/react-auth": "workspace:*", "@alchemy/react-form": "workspace:*", @@ -27,6 +28,7 @@ "@mui/material": "^5.16.7", "@mui/x-tree-view": "^6.17.0", "@novu/framework": "^2.5.2", + "@novu/react": "^2.6.2", "@tanstack/react-query": "^5.59.0", "@toast-ui/react-image-editor": "^3.15.2", "ace-builds": "^1.36.2", diff --git a/databox/client/src/components/Layout/MainAppBar.tsx b/databox/client/src/components/Layout/MainAppBar.tsx index abc02defb..8cb15128e 100644 --- a/databox/client/src/components/Layout/MainAppBar.tsx +++ b/databox/client/src/components/Layout/MainAppBar.tsx @@ -17,6 +17,7 @@ import {ThemeEditorContext} from '@alchemy/theme-editor'; import config from '../../config'; import {keycloakClient} from '../../api/api-client'; import {DashboardMenu} from '@alchemy/react-ps'; +import {Notifications} from '@alchemy/notification'; import {useModals} from '@alchemy/navigation'; import ChangeTheme from './ChangeTheme'; import ThemeEditor from './ThemeEditor'; @@ -125,7 +126,19 @@ export default function MainAppBar({onToggleLeftPanel}: Props) { }} > - + {user ? + + : null} +
{!user ? ( {t('menu.sign_in', 'Sign in')} @@ -186,7 +199,7 @@ export default function MainAppBar({onToggleLeftPanel}: Props) { ]} /> )} - +
{config.displayServicesMenu && (
diff --git a/docker-compose.yml b/docker-compose.yml index d18f843a0..a07db0565 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -94,6 +94,9 @@ services: - CONFIGURATOR_S3_REGION=${S3_REGION} - CONFIGURATOR_S3_BUCKET_NAME - CONFIGURATOR_S3_USE_PATH_STYLE_ENDPOINT=${S3_USE_PATH_STYLE_ENDPOINT} + - NOVU_APPLICATION_IDENTIFIER + - NOVU_WS_URL + - NOVU_API_URL volumes: - ./configs:/configs labels: @@ -1160,6 +1163,7 @@ services: REDIS_CACHE_SERVICE_HOST: ${NOVU_REDIS_CACHE_SERVICE_HOST} REDIS_CACHE_SERVICE_PORT: ${NOVU_REDIS_CACHE_SERVICE_PORT} NOVU_SECRET_KEY: ${NOVU_SECRET_KEY} + STORE_ENCRYPTION_KEY: ${NOVU_STORE_ENCRYPTION_KEY} extra_hosts: - ws-novu.${PHRASEA_DOMAIN}:${PS_GATEWAY_IP} - bridge-novu.${PHRASEA_DOMAIN}:${PS_GATEWAY_IP} @@ -1184,6 +1188,7 @@ services: REDIS_PASSWORD: ${NOVU_REDIS_PASSWORD} JWT_SECRET: ${NOVU_JWT_SECRET} NOVU_SECRET_KEY: ${NOVU_SECRET_KEY} + NOVU_API_URL: ${NOVU_API_URL} labels: - "traefik.enable=true" - "traefik.project_name=${COMPOSE_PROJECT_NAME}" @@ -1226,9 +1231,11 @@ services: - internal environment: - NOVU_SECRET_KEY + - NOVU_API_URL - NEXT_PUBLIC_NOVU_SECRET_KEY=${NOVU_SECRET_KEY} - NEXT_PUBLIC_NOVU_APPLICATION_IDENTIFIER=${NOVU_APPLICATION_IDENTIFIER} - NEXT_PUBLIC_NOVU_SUBSCRIBER_ID=${NOVU_SUBSCRIBER_ID} + - NEXT_PUBLIC_NOVU_API_URL=${NOVU_API_URL} labels: - "traefik.enable=true" - "traefik.project_name=${COMPOSE_PROJECT_NAME}" diff --git a/lib/js/core/src/types.ts b/lib/js/core/src/types.ts index a40c2d653..79702b79e 100644 --- a/lib/js/core/src/types.ts +++ b/lib/js/core/src/types.ts @@ -24,6 +24,9 @@ export type WindowConfig = { pusherHost?: Readonly; pusherKey?: Readonly; logo: Readonly; + novuAppIdentifier?: Readonly; + novuSocketUrl?: Readonly; + novuApiUrl?: Readonly; } export type SentryConfig = Pick(null); + + const handlePopoverOpen = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handlePopoverClose = () => { + setAnchorEl(null); + }; + const open = Boolean(anchorEl); + const popoverId = 'mouse-over-popover'; + + return <> + + + + + + + + + + +} diff --git a/lib/js/notification/index.ts b/lib/js/notification/index.ts new file mode 100644 index 000000000..f97b9d717 --- /dev/null +++ b/lib/js/notification/index.ts @@ -0,0 +1,5 @@ +import Notifications from './components/Notifications' + +export { + Notifications, +}; diff --git a/lib/js/notification/package.json b/lib/js/notification/package.json new file mode 100644 index 000000000..4f6ab8338 --- /dev/null +++ b/lib/js/notification/package.json @@ -0,0 +1,20 @@ +{ + "name": "@alchemy/notification", + "version": "1.0.0", + "public": true, + "main": "index.ts", + "dependencies": { + "@novu/react": "^2.6.2" + }, + "peerDependencies": { + "react": "^18.2.0", + "@mui/icons-material": "^5.16.7", + "@mui/material": "^5.16.7" + }, + "devDependencies": { + "@types/react": "^18.3.11", + "react": "^18.3.1", + "@mui/icons-material": "^5.16.7", + "@mui/material": "^5.16.7" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b24d7675..ca7b5bd0e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,6 +105,9 @@ importers: '@alchemy/navigation': specifier: workspace:* version: link:../../lib/js/navigation + '@alchemy/notification': + specifier: workspace:* + version: link:../../lib/js/notification '@alchemy/phrasea-ui': specifier: workspace:* version: link:../../lib/js/phrasea-ui @@ -162,6 +165,9 @@ importers: '@novu/framework': specifier: ^2.5.2 version: 2.5.2(encoding@0.1.13)(express@4.21.0)(zod-to-json-schema@3.23.5(zod@3.23.8))(zod@3.23.8) + '@novu/react': + specifier: ^2.6.2 + version: 2.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-query': specifier: ^5.59.0 version: 5.59.0(react@18.3.1) @@ -792,6 +798,25 @@ importers: specifier: ^14.1.3 version: 14.1.3(i18next@23.15.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + lib/js/notification: + dependencies: + '@novu/react': + specifier: ^2.6.2 + version: 2.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + devDependencies: + '@mui/icons-material': + specifier: ^5.16.7 + version: 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.11)(react@18.3.1) + '@mui/material': + specifier: ^5.16.7 + version: 5.16.7(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/react': + specifier: ^18.3.11 + version: 18.3.11 + react: + specifier: ^18.3.1 + version: 18.3.1 + lib/js/phrasea-ui: dependencies: styled-components: @@ -2744,6 +2769,24 @@ packages: peerDependencies: react: '>=16' + '@motionone/animation@10.18.0': + resolution: {integrity: sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==} + + '@motionone/dom@10.18.0': + resolution: {integrity: sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==} + + '@motionone/easing@10.18.0': + resolution: {integrity: sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==} + + '@motionone/generators@10.18.0': + resolution: {integrity: sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==} + + '@motionone/types@10.17.1': + resolution: {integrity: sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==} + + '@motionone/utils@10.18.0': + resolution: {integrity: sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==} + '@mui/base@5.0.0-beta.40': resolution: {integrity: sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==} engines: {node: '>=12.0.0'} @@ -2887,6 +2930,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@novu/client@2.0.3': + resolution: {integrity: sha512-qlojnRO9MmppUijZcHL/tDJGgGzRfNGE09IM73hA2UP3GdOJJjFog1Mj2CC8fuAYO9AEE5T2WNbjb/zCF6ID1Q==} + engines: {node: '>=10'} + '@novu/framework@2.5.2': resolution: {integrity: sha512-NM4TF2/CkZ34met2Kp5I+mt3IGKIhEwz+Xhusagqzng4DnwUhRXQY9AzNGYJnNmsbud4S127DIWTWYBGu9tJuQ==} peerDependencies: @@ -2922,10 +2969,22 @@ packages: zod-to-json-schema: optional: true + '@novu/js@2.6.3': + resolution: {integrity: sha512-1Z+taBN4xz9WJyA1d/1xcwD068bbHNxX/nhurQe59O9wruzJAuAq59r8O7x60713IyPPpomkAl0n3BFRlBGStw==} + '@novu/ntfr-client@0.0.4': resolution: {integrity: sha512-/9q+qGFHHFwMsuqoLwTADMjSx2JPagpJpm7jOZRzQZgSEDg9kwNAhADneRzVYhMyjdEXIQyjTmX/oP8ABAavFw==} engines: {node: '>=18.0.0'} + '@novu/react@2.6.2': + resolution: {integrity: sha512-44XOuwjI5CkBWUthPG/zrvoDl+WxykBPCDKzvRQt5jiiLP7MPU66IkMaf/8TtBGAz6W5R2cz1piVB81zPbHmZQ==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + peerDependenciesMeta: + react-dom: + optional: true + '@novu/shared@2.1.4': resolution: {integrity: sha512-yWsCXnFqOuuChUDROkcGibJMuFG1ufX+6NyISpQaDS1Lcix7unUof4yegc4jPTIccpgjX0ypESNE6c4rxrN7Uw==} @@ -3709,6 +3768,29 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@socket.io/component-emitter@3.1.2': + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + + '@solid-primitives/props@3.1.11': + resolution: {integrity: sha512-jZAKWwvDRHjiydIumDgMj68qviIbowQ1ci7nkEAgzgvanNkhKSQV8iPgR2jMk1uv7S2ZqXYHslVQTgJel/TEyg==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/refs@1.0.8': + resolution: {integrity: sha512-+jIsWG8/nYvhaCoG2Vg6CJOLgTmPKFbaCrNQKWfChalgUf9WrVxWw0CdJb3yX15n5lUcQ0jBo6qYtuVVmBLpBw==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/transition-group@1.0.5': + resolution: {integrity: sha512-G3FuqvL13kQ55WzWPX2ewiXdZ/1iboiX53195sq7bbkDbXqP6TYKiadwEdsaDogW5rPnPYAym3+xnsNplQJRKQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/utils@6.2.3': + resolution: {integrity: sha512-CqAwKb2T5Vi72+rhebSsqNZ9o67buYRdEJrIFzRXz3U59QqezuuxPsyzTSVCacwS5Pf109VRsgCJQoxKRoECZQ==} + peerDependencies: + solid-js: ^1.6.12 + '@storybook/addon-actions@7.6.20': resolution: {integrity: sha512-c/GkEQ2U9BC/Ew/IMdh+zvsh4N6y6n7Zsn2GIhJgcu9YEAa5aF2a9/pNgEGBMOABH959XE8DAOMERw/5qiLR8g==} @@ -5705,6 +5787,9 @@ packages: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + classcat@5.0.5: resolution: {integrity: sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==} @@ -6613,6 +6698,13 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + engine.io-client@6.5.4: + resolution: {integrity: sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==} + + engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} + engines: {node: '>=10.0.0'} + enhanced-resolve@5.17.1: resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} @@ -7645,6 +7737,9 @@ packages: resolution: {integrity: sha512-49TaQzK+Ic7ZVTq4i1UZxRUJEmAilTk8hz7q4I0WNUaTclLR8ArJV5B3A1fe1xF2HtsDTr2gYKLaVTof/Lt84Q==} engines: {node: '>=0.10.0'} + hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + highlight.js@9.18.5: resolution: {integrity: sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==} deprecated: Support has ended for 9.x series. Upgrade to @latest @@ -9285,6 +9380,9 @@ packages: mitt@1.1.3: resolution: {integrity: sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==} + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mixin-deep@1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} @@ -11225,6 +11323,16 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + seroval-plugins@1.1.1: + resolution: {integrity: sha512-qNSy1+nUj7hsCOon7AO4wdAIo9P0jrzAMp18XhiOzA6/uO5TKtP7ScozVJ8T293oRIvi5wyCHSM4TrJo/c/GJA==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + + seroval@1.1.1: + resolution: {integrity: sha512-rqEO6FZk8mv7Hyv4UCj3FD3b6Waqft605TLfsCe/BiaylRpyyMC0b+uA5TJKawX3KzMrdi3wsLbCaLplrQmBvQ==} + engines: {node: '>=10'} + serve-static@1.16.2: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} @@ -11370,6 +11478,14 @@ packages: snapsvg@0.5.1: resolution: {integrity: sha512-CjwWYsL7+CCk1vCk9BBKGYS4WJVDfJAOMWU+Zhzf8wf6pAm/xT34wnpaMPAgcgCNkxuU6OkQPPd8wGuRCY9aNw==} + socket.io-client@4.7.2: + resolution: {integrity: sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==} + engines: {node: '>=10.0.0'} + + socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + socks-proxy-agent@8.0.4: resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} engines: {node: '>= 14'} @@ -11378,6 +11494,22 @@ packages: resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + solid-floating-ui@0.3.1: + resolution: {integrity: sha512-o/QmGsWPS2Z3KidAxP0nDvN7alI7Kqy0kU+wd85Fz+au5SYcnYm7I6Fk3M60Za35azsPX0U+5fEtqfOuk6Ao0Q==} + engines: {node: '>=10'} + peerDependencies: + '@floating-ui/dom': ^1.5 + solid-js: ^1.8 + + solid-js@1.9.3: + resolution: {integrity: sha512-5ba3taPoZGt9GY3YlsCB24kCg0Lv/rie/HTD4kG6h4daZZz7+yK02xn8Vx8dLYBc9i6Ps5JwAbEiqjmKaLB3Ag==} + + solid-motionone@1.0.2: + resolution: {integrity: sha512-nMdfTZND5FzZSD5gcaSmjjgF7aldMmk4PHC88rUSSdUcrCP/LlVl0xMoy/qncQihgkqHRW0ywewbpE/+ToEibA==} + engines: {node: '>=20', pnpm: '>=9.0.0'} + peerDependencies: + solid-js: ^1.8.0 + sortobject@4.17.0: resolution: {integrity: sha512-gzx7USv55AFRQ7UCWJHHauwD/ptUHF9MLXCGO3f5M9zauDPZ/4a9H6/VVbOXefdpEoI1unwB/bArHIVMbWBHmA==} engines: {node: '>=10'} @@ -11723,6 +11855,9 @@ packages: tabbable@1.1.2: resolution: {integrity: sha512-77oqsKEPrxIwgRcXUwipkj9W5ItO97L6eUT1Ar7vh+El16Zm4M6V+YU1cbipHEa6q0Yjw8O3Hoh8oRgatV5s7A==} + tailwind-merge@2.5.5: + resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==} + tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -12824,6 +12959,18 @@ packages: utf-8-validate: optional: true + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + 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 + ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -12865,6 +13012,10 @@ packages: xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + xmlhttprequest-ssl@2.0.0: + resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} + engines: {node: '>=0.4.0'} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -14615,6 +14766,41 @@ snapshots: '@bundled-es-modules/pdfjs-dist': 2.16.106 react: 18.3.1 + '@motionone/animation@10.18.0': + dependencies: + '@motionone/easing': 10.18.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + tslib: 2.7.0 + + '@motionone/dom@10.18.0': + dependencies: + '@motionone/animation': 10.18.0 + '@motionone/generators': 10.18.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + hey-listen: 1.0.8 + tslib: 2.7.0 + + '@motionone/easing@10.18.0': + dependencies: + '@motionone/utils': 10.18.0 + tslib: 2.7.0 + + '@motionone/generators@10.18.0': + dependencies: + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + tslib: 2.7.0 + + '@motionone/types@10.17.1': {} + + '@motionone/utils@10.18.0': + dependencies: + '@motionone/types': 10.17.1 + hey-listen: 1.0.8 + tslib: 2.7.0 + '@mui/base@5.0.0-beta.40(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 @@ -14765,6 +14951,10 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@novu/client@2.0.3': + dependencies: + '@novu/shared': 2.1.4 + '@novu/framework@2.5.2(encoding@0.1.13)(express@4.21.0)(zod-to-json-schema@3.23.5(zod@3.23.8))(zod@3.23.8)': dependencies: '@novu/shared': 2.1.4 @@ -14783,6 +14973,23 @@ snapshots: transitivePeerDependencies: - encoding + '@novu/js@2.6.3': + dependencies: + '@floating-ui/dom': 1.6.11 + '@novu/client': 2.0.3 + class-variance-authority: 0.7.1 + clsx: 2.1.1 + mitt: 3.0.1 + socket.io-client: 4.7.2 + solid-floating-ui: 0.3.1(@floating-ui/dom@1.6.11)(solid-js@1.9.3) + solid-js: 1.9.3 + solid-motionone: 1.0.2(solid-js@1.9.3) + tailwind-merge: 2.5.5 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + '@novu/ntfr-client@0.0.4': dependencies: https: 1.0.0 @@ -14796,6 +15003,17 @@ snapshots: - supports-color - utf-8-validate + '@novu/react@2.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@novu/js': 2.6.3 + react: 18.3.1 + optionalDependencies: + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + '@novu/shared@2.1.4': {} '@octokit/auth-token@2.5.0': @@ -15679,6 +15897,26 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@socket.io/component-emitter@3.1.2': {} + + '@solid-primitives/props@3.1.11(solid-js@1.9.3)': + dependencies: + '@solid-primitives/utils': 6.2.3(solid-js@1.9.3) + solid-js: 1.9.3 + + '@solid-primitives/refs@1.0.8(solid-js@1.9.3)': + dependencies: + '@solid-primitives/utils': 6.2.3(solid-js@1.9.3) + solid-js: 1.9.3 + + '@solid-primitives/transition-group@1.0.5(solid-js@1.9.3)': + dependencies: + solid-js: 1.9.3 + + '@solid-primitives/utils@6.2.3(solid-js@1.9.3)': + dependencies: + solid-js: 1.9.3 + '@storybook/addon-actions@7.6.20': dependencies: '@storybook/core-events': 7.6.20 @@ -18386,6 +18624,10 @@ snapshots: isobject: 3.0.1 static-extend: 0.1.2 + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + classcat@5.0.5: {} classnames@2.5.1: {} @@ -19324,6 +19566,20 @@ snapshots: dependencies: once: 1.4.0 + engine.io-client@6.5.4: + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7(supports-color@5.5.0) + engine.io-parser: 5.2.3 + ws: 8.17.1 + xmlhttprequest-ssl: 2.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + engine.io-parser@5.2.3: {} + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 @@ -20697,6 +20953,8 @@ snapshots: fs-exists-sync: 0.1.0 remarkable: 1.7.4 + hey-listen@1.0.8: {} + highlight.js@9.18.5: {} hoist-non-react-statics@3.3.2: @@ -22718,6 +22976,8 @@ snapshots: mitt@1.1.3: {} + mitt@3.0.1: {} + mixin-deep@1.3.2: dependencies: for-in: 1.0.2 @@ -24758,6 +25018,12 @@ snapshots: dependencies: randombytes: 2.1.0 + seroval-plugins@1.1.1(seroval@1.1.1): + dependencies: + seroval: 1.1.1 + + seroval@1.1.1: {} + serve-static@1.16.2: dependencies: encodeurl: 2.0.0 @@ -24924,6 +25190,24 @@ snapshots: dependencies: eve: 0.5.4 + socket.io-client@4.7.2: + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7(supports-color@5.5.0) + engine.io-client: 6.5.4 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socket.io-parser@4.2.4: + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + socks-proxy-agent@8.0.4: dependencies: agent-base: 7.1.1 @@ -24937,6 +25221,27 @@ snapshots: ip-address: 9.0.5 smart-buffer: 4.2.0 + solid-floating-ui@0.3.1(@floating-ui/dom@1.6.11)(solid-js@1.9.3): + dependencies: + '@floating-ui/dom': 1.6.11 + solid-js: 1.9.3 + + solid-js@1.9.3: + dependencies: + csstype: 3.1.3 + seroval: 1.1.1 + seroval-plugins: 1.1.1(seroval@1.1.1) + + solid-motionone@1.0.2(solid-js@1.9.3): + dependencies: + '@motionone/dom': 10.18.0 + '@motionone/utils': 10.18.0 + '@solid-primitives/props': 3.1.11(solid-js@1.9.3) + '@solid-primitives/refs': 1.0.8(solid-js@1.9.3) + '@solid-primitives/transition-group': 1.0.5(solid-js@1.9.3) + csstype: 3.1.3 + solid-js: 1.9.3 + sortobject@4.17.0: {} source-map-js@1.2.1: {} @@ -25286,6 +25591,8 @@ snapshots: tabbable@1.1.2: {} + tailwind-merge@2.5.5: {} + tapable@2.2.1: {} tar-fs@2.1.1: @@ -26546,6 +26853,8 @@ snapshots: ws@7.5.10: optional: true + ws@8.17.1: {} + ws@8.18.0: {} xdg-basedir@3.0.0: {} @@ -26567,6 +26876,8 @@ snapshots: xmlchars@2.2.0: {} + xmlhttprequest-ssl@2.0.0: {} + xtend@4.0.2: {} y18n@3.2.2: {}