├── apps ├── admin │ ├── public │ │ ├── .gitkeep │ │ └── favicon.ico │ ├── src │ │ ├── components │ │ │ ├── admin │ │ │ │ └── pages │ │ │ │ │ ├── security │ │ │ │ │ └── index.ts │ │ │ │ │ └── signatures │ │ │ │ │ └── index.ts │ │ │ ├── ui │ │ │ │ ├── aspect-ratio.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── collapsible.tsx │ │ │ │ ├── spinner.tsx │ │ │ │ ├── DocumentVaultAnimation.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── kbd.tsx │ │ │ │ ├── sonner.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── hover-card.tsx │ │ │ │ └── tooltip.tsx │ │ │ └── dashboard │ │ │ │ ├── hooks │ │ │ │ ├── index.ts │ │ │ │ ├── useOnClickOutside.ts │ │ │ │ └── useHeaderDropdowns.ts │ │ │ │ └── types.ts │ │ ├── app │ │ │ ├── api │ │ │ │ └── hello │ │ │ │ │ └── route.ts │ │ │ ├── dashboard │ │ │ │ ├── page.tsx │ │ │ │ ├── activity │ │ │ │ │ └── page.tsx │ │ │ │ ├── roles │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── [id] │ │ │ │ │ │ └── page.tsx │ │ │ │ ├── users │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── [id] │ │ │ │ │ │ └── page.tsx │ │ │ │ ├── templates │ │ │ │ │ ├── [id] │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── permissions │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── [id] │ │ │ │ │ │ └── page.tsx │ │ │ │ └── layout.tsx │ │ │ ├── admin │ │ │ │ └── dashboard │ │ │ │ │ ├── page.tsx │ │ │ │ │ ├── activity │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── roles │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── users │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── onboarding │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── [id] │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── permissions │ │ │ │ │ └── page.tsx │ │ │ │ │ └── layout.tsx │ │ │ └── layout.tsx │ │ ├── lib │ │ │ ├── utils.ts │ │ │ └── pdf │ │ │ │ └── fonts.ts │ │ ├── contexts │ │ │ └── scroll │ │ │ │ └── ScrollContext.tsx │ │ └── hooks │ │ │ └── use-mobile.tsx │ ├── index.d.ts │ ├── vercel.json │ ├── next-env.d.ts │ ├── specs │ │ └── index.spec.tsx │ ├── eslint.config.mjs │ ├── jest.config.cts │ ├── postcss.config.js │ ├── components.json │ ├── tsconfig.spec.json │ ├── .swcrc │ ├── next.config.js │ ├── .env.example │ └── .env ├── api │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ └── app │ │ │ ├── emails │ │ │ └── templates │ │ │ │ └── index.ts │ │ │ ├── app.service.ts │ │ │ ├── prisma │ │ │ ├── prisma.module.ts │ │ │ └── prisma.service.ts │ │ │ ├── app.controller.ts │ │ │ ├── users │ │ │ └── user.module.ts │ │ │ ├── otp │ │ │ └── otp.module.ts │ │ │ ├── auth │ │ │ └── auth.module.ts │ │ │ ├── security │ │ │ └── security.module.ts │ │ │ ├── documents │ │ │ └── documents.module.ts │ │ │ ├── dashboard │ │ │ └── dashboard.module.ts │ │ │ ├── onboarding │ │ │ └── onboarding.module.ts │ │ │ ├── admin │ │ │ └── admin.module.ts │ │ │ ├── app.service.spec.ts │ │ │ ├── app.controller.spec.ts │ │ │ └── graphql │ │ │ └── graphql.module.ts │ ├── eslint.config.mjs │ ├── tsconfig.json │ ├── tsconfig.tsbuildinfo │ ├── .spec.swcrc │ ├── jest.config.cts │ ├── package.json │ ├── tsconfig.spec.json │ ├── project.json │ └── tsconfig.app.json ├── nuo-nx │ ├── public │ │ ├── .gitkeep │ │ └── favicon.ico │ ├── src │ │ ├── components │ │ │ ├── dashboard │ │ │ │ ├── index.ts │ │ │ │ ├── signatures │ │ │ │ │ └── index.ts │ │ │ │ ├── hooks │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── useOnClickOutside.ts │ │ │ │ │ ├── useStats.ts │ │ │ │ │ └── useHeaderDropdowns.ts │ │ │ │ └── pages │ │ │ │ │ └── documents │ │ │ │ │ ├── TemplateGallery.tsx │ │ │ │ │ └── signage │ │ │ │ │ ├── DocumentSignHeader.tsx │ │ │ │ │ └── DocumentSignEmpty.tsx │ │ │ ├── ui │ │ │ │ ├── aspect-ratio.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── collapsible.tsx │ │ │ │ ├── spinner.tsx │ │ │ │ ├── DocumentVaultAnimation.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── kbd.tsx │ │ │ │ ├── sonner.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── hover-card.tsx │ │ │ │ └── tooltip.tsx │ │ │ └── main │ │ │ │ └── layout │ │ │ │ └── footer │ │ │ │ └── ConditionalFooter.tsx │ │ ├── app │ │ │ ├── favicon.ico │ │ │ ├── api │ │ │ │ ├── hello │ │ │ │ │ └── route.ts │ │ │ │ └── graphql │ │ │ │ │ └── route.ts │ │ │ ├── (main) │ │ │ │ ├── (marketing) │ │ │ │ │ └── (client) │ │ │ │ │ │ ├── security │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── services │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ ├── bank-setup │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── ip-protection │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── incorporation │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── careers │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── incorporate │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── about │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── contact │ │ │ │ │ │ └── page.tsx │ │ │ │ ├── (policies) │ │ │ │ │ ├── privacy-policy │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── terms-of-service │ │ │ │ │ │ └── page.tsx │ │ │ │ ├── (auth) │ │ │ │ │ └── login │ │ │ │ │ │ └── page.tsx │ │ │ │ └── (documentation) │ │ │ │ │ └── docs │ │ │ │ │ └── layout.tsx │ │ │ ├── (dashboard) │ │ │ │ └── dashboard │ │ │ │ │ ├── documents │ │ │ │ │ ├── drafts │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── signage │ │ │ │ │ │ └── [documentId] │ │ │ │ │ │ │ └── edit │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── storage │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── [id] │ │ │ │ │ │ └── edit │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── profile │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── account │ │ │ │ │ ├── info │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── billing │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── support │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── users │ │ │ │ │ ├── manage │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── permissions │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── trademarks │ │ │ │ │ ├── list │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── register │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── onboarding │ │ │ │ │ ├── page.tsx │ │ │ │ │ ├── new │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── [id] │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ ├── compliance │ │ │ │ │ └── calendar │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── companies │ │ │ │ │ ├── list │ │ │ │ │ └── page.tsx │ │ │ │ │ └── register │ │ │ │ │ └── page.tsx │ │ │ ├── (employee) │ │ │ │ └── employee-dashboard │ │ │ │ │ ├── tasks │ │ │ │ │ ├── page.tsx │ │ │ │ │ ├── projects │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── team │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── calendar │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── kanban │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── profile │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── reports │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── calendar │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── time-tracking │ │ │ │ │ └── page.tsx │ │ │ │ │ └── page.tsx │ │ │ ├── page.tsx │ │ │ ├── providers.tsx │ │ │ └── example │ │ │ │ └── page.tsx │ │ ├── lib │ │ │ ├── utils.ts │ │ │ └── pdf │ │ │ │ └── fonts.ts │ │ ├── contexts │ │ │ └── scroll │ │ │ │ └── ScrollContext.tsx │ │ └── hooks │ │ │ ├── use-mobile.ts │ │ │ └── use-mobile.tsx │ ├── vercel.json │ ├── index.d.ts │ ├── next-env.d.ts │ ├── specs │ │ └── index.spec.tsx │ ├── eslint.config.mjs │ ├── jest.config.cts │ ├── postcss.config.js │ ├── components.json │ ├── tsconfig.spec.json │ ├── .swcrc │ └── next.config.js ├── worker │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── app │ │ │ ├── app.service.ts │ │ │ ├── app.module.ts │ │ │ ├── app.controller.ts │ │ │ ├── app.service.spec.ts │ │ │ ├── app.controller.spec.ts │ │ │ └── jobs │ │ │ │ └── example.job.ts │ │ └── main.ts │ ├── eslint.config.mjs │ ├── tsconfig.json │ ├── .spec.swcrc │ ├── tsconfig.spec.json │ ├── jest.config.cts │ ├── webpack.config.js │ └── tsconfig.app.json ├── admin-e2e │ ├── package.json │ ├── src │ │ └── example.spec.ts │ ├── eslint.config.mjs │ └── tsconfig.json ├── api-e2e │ ├── eslint.config.mjs │ ├── src │ │ ├── api │ │ │ └── api.spec.ts │ │ └── support │ │ │ ├── test-setup.ts │ │ │ ├── global-teardown.ts │ │ │ └── global-setup.ts │ ├── tsconfig.json │ ├── package.json │ ├── .spec.swcrc │ └── jest.config.cts ├── nuo-nx-e2e │ ├── package.json │ ├── src │ │ └── example.spec.ts │ ├── eslint.config.mjs │ └── tsconfig.json ├── nuo-dashboard-ui │ ├── public │ │ ├── apple-icon.png │ │ ├── placeholder.jpg │ │ ├── icon-dark-32x32.png │ │ ├── icon-light-32x32.png │ │ ├── placeholder-logo.png │ │ ├── placeholder-user.jpg │ │ ├── placeholder-user.png │ │ └── icon.svg │ ├── pnpm-lock.yaml │ ├── postcss.config.mjs │ ├── lib │ │ └── utils.ts │ ├── next.config.mjs │ ├── app │ │ ├── page.tsx │ │ └── layout.tsx │ ├── components │ │ ├── ui │ │ │ ├── aspect-ratio.tsx │ │ │ ├── skeleton.tsx │ │ │ ├── spinner.tsx │ │ │ ├── use-mobile.tsx │ │ │ ├── sonner.tsx │ │ │ ├── label.tsx │ │ │ ├── separator.tsx │ │ │ ├── textarea.tsx │ │ │ ├── progress.tsx │ │ │ ├── toaster.tsx │ │ │ ├── collapsible.tsx │ │ │ ├── kbd.tsx │ │ │ ├── input.tsx │ │ │ ├── switch.tsx │ │ │ ├── avatar.tsx │ │ │ └── checkbox.tsx │ │ ├── theme-provider.tsx │ │ └── dashboard │ │ │ └── quick-actions.tsx │ ├── components.json │ ├── hooks │ │ └── use-mobile.ts │ └── tsconfig.json └── worker-e2e │ ├── eslint.config.mjs │ ├── src │ ├── worker │ │ └── worker.spec.ts │ └── support │ │ ├── test-setup.ts │ │ ├── global-teardown.ts │ │ └── global-setup.ts │ ├── tsconfig.json │ ├── .spec.swcrc │ ├── package.json │ └── jest.config.cts ├── .prettierrc ├── packages ├── types │ ├── src │ │ ├── index.ts │ │ └── lib │ │ │ └── types.ts │ ├── README.md │ ├── tsconfig.json │ ├── tsconfig.lib.json │ └── package.json ├── utils │ ├── src │ │ ├── index.ts │ │ └── lib │ │ │ └── utils.ts │ ├── README.md │ ├── tsconfig.json │ ├── tsconfig.lib.json │ └── package.json ├── auth │ ├── .env │ ├── src │ │ ├── lib │ │ │ ├── auth.ts │ │ │ ├── types.ts │ │ │ ├── jwt.ts │ │ │ └── middleware │ │ │ │ └── tenant.ts │ │ └── index.ts │ ├── README.md │ ├── tsconfig.json │ ├── tsconfig.lib.json │ └── package.json ├── ui │ ├── src │ │ ├── index.ts │ │ └── lib │ │ │ ├── ui.tsx │ │ │ └── components │ │ │ └── base.tsx │ ├── README.md │ ├── tsconfig.json │ ├── .babelrc │ ├── tailwind.config.js │ ├── package.json │ └── tsconfig.lib.json ├── config │ ├── src │ │ └── index.ts │ ├── README.md │ ├── tsconfig.json │ ├── tsconfig.lib.json │ └── package.json ├── prisma │ ├── src │ │ ├── lib │ │ │ ├── prisma.ts │ │ │ ├── server-only.ts │ │ │ └── client.ts │ │ └── index.ts │ ├── README.md │ ├── migrations │ │ └── migration_lock.toml │ ├── tsconfig.json │ ├── prisma.config.ts │ ├── tsconfig.lib.json │ └── .env.example ├── storage │ ├── src │ │ └── index.ts │ ├── tsconfig.lib.json │ ├── tsconfig.json │ └── package.json ├── graphql │ ├── src │ │ ├── lib │ │ │ ├── graphql.ts │ │ │ ├── schema.ts │ │ │ ├── schema.graphql │ │ │ ├── typeDefs.ts │ │ │ └── codegen.ts │ │ └── index.ts │ ├── README.md │ ├── tsconfig.json │ ├── tsconfig.lib.json │ └── package.json ├── generated │ └── nuo-prisma │ │ ├── wasm-worker-loader.mjs │ │ └── wasm-edge-light-loader.mjs └── document-utils │ ├── src │ ├── index.ts │ ├── pdf │ │ └── fonts.ts │ └── types │ │ └── packages.d.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ └── package.json ├── jest.preset.js ├── .prettierignore ├── jest.config.ts ├── vercel.json ├── .vscode └── extensions.json ├── .editorconfig ├── prisma.config.ts ├── eslint.config.mjs ├── tsconfig.json ├── tsconfig.base.json └── .gitignore /apps/admin/public/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/api/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/nuo-nx/public/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/worker/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true 3 | } 4 | -------------------------------------------------------------------------------- /packages/types/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/types.js'; 2 | -------------------------------------------------------------------------------- /packages/utils/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/utils.js'; 2 | -------------------------------------------------------------------------------- /packages/auth/.env: -------------------------------------------------------------------------------- 1 | JWT_SECRET=1Ewe9920 2 | JWT_EXPIRES_IN=1d 3 | -------------------------------------------------------------------------------- /packages/ui/src/index.ts: -------------------------------------------------------------------------------- 1 | // Export all UI components 2 | export * from './lib/ui'; -------------------------------------------------------------------------------- /packages/config/src/index.ts: -------------------------------------------------------------------------------- 1 | export { loadEnv, getEnv, type Env } from "./lib/env"; 2 | -------------------------------------------------------------------------------- /packages/auth/src/lib/auth.ts: -------------------------------------------------------------------------------- 1 | export function auth(): string { 2 | return 'auth'; 3 | } 4 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/components/dashboard/index.ts: -------------------------------------------------------------------------------- 1 | // Types and data 2 | export * from './types'; 3 | -------------------------------------------------------------------------------- /packages/types/src/lib/types.ts: -------------------------------------------------------------------------------- 1 | export function types(): string { 2 | return 'types'; 3 | } 4 | -------------------------------------------------------------------------------- /packages/utils/src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | export function utils(): string { 2 | return 'utils'; 3 | } 4 | -------------------------------------------------------------------------------- /packages/prisma/src/lib/prisma.ts: -------------------------------------------------------------------------------- 1 | export function prisma(): string { 2 | return 'prisma'; 3 | } 4 | -------------------------------------------------------------------------------- /packages/storage/src/index.ts: -------------------------------------------------------------------------------- 1 | // S3 storage exports 2 | export * from './s3/document-storage.js'; 3 | -------------------------------------------------------------------------------- /packages/graphql/src/lib/graphql.ts: -------------------------------------------------------------------------------- 1 | export function graphql(): string { 2 | return 'graphql'; 3 | } 4 | -------------------------------------------------------------------------------- /apps/admin/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/disruption-hub/nuonx/main/apps/admin/public/favicon.ico -------------------------------------------------------------------------------- /apps/nuo-nx/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/disruption-hub/nuonx/main/apps/nuo-nx/public/favicon.ico -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/disruption-hub/nuonx/main/apps/nuo-nx/src/app/favicon.ico -------------------------------------------------------------------------------- /jest.preset.js: -------------------------------------------------------------------------------- 1 | const nxPreset = require('@nx/jest/preset').default; 2 | 3 | module.exports = { ...nxPreset }; 4 | -------------------------------------------------------------------------------- /apps/admin-e2e/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nuo-nx/admin-e2e", 3 | "version": "0.0.1", 4 | "private": true 5 | } 6 | -------------------------------------------------------------------------------- /apps/api/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from '../../eslint.config.mjs'; 2 | 3 | export default [...baseConfig]; 4 | -------------------------------------------------------------------------------- /apps/api-e2e/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from '../../eslint.config.mjs'; 2 | 3 | export default [...baseConfig]; 4 | -------------------------------------------------------------------------------- /apps/nuo-nx-e2e/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nuo-nx/nuo-nx-e2e", 3 | "version": "0.0.1", 4 | "private": true 5 | } 6 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/components/dashboard/signatures/index.ts: -------------------------------------------------------------------------------- 1 | export { SignatureDashboard } from './SignatureDashboard'; 2 | 3 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Add files here to ignore them from prettier formatting 2 | /dist 3 | /coverage 4 | /.nx/cache 5 | /.nx/workspace-data -------------------------------------------------------------------------------- /apps/admin/src/components/admin/pages/security/index.ts: -------------------------------------------------------------------------------- 1 | export { AdminSecuritySettingsPage } from './AdminSecuritySettingsPage'; 2 | 3 | -------------------------------------------------------------------------------- /apps/worker/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from "../../eslint.config.mjs"; 2 | 3 | export default [ 4 | ...baseConfig 5 | ]; 6 | -------------------------------------------------------------------------------- /packages/config/README.md: -------------------------------------------------------------------------------- 1 | # Config Library 2 | 3 | Environment configuration with Zod validation for type-safe environment variables. 4 | -------------------------------------------------------------------------------- /apps/admin/src/app/api/hello/route.ts: -------------------------------------------------------------------------------- 1 | export async function GET(request: Request) { 2 | return new Response('Hello, from API!'); 3 | } 4 | -------------------------------------------------------------------------------- /apps/admin/src/components/admin/pages/signatures/index.ts: -------------------------------------------------------------------------------- 1 | export { AdminSignatureReportsPage } from './AdminSignatureReportsPage'; 2 | 3 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/public/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/disruption-hub/nuonx/main/apps/nuo-dashboard-ui/public/apple-icon.png -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/api/hello/route.ts: -------------------------------------------------------------------------------- 1 | export async function GET(request: Request) { 2 | return new Response('Hello, from API!'); 3 | } 4 | -------------------------------------------------------------------------------- /apps/worker-e2e/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from "../../eslint.config.mjs"; 2 | 3 | export default [ 4 | ...baseConfig 5 | ]; 6 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/public/placeholder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/disruption-hub/nuonx/main/apps/nuo-dashboard-ui/public/placeholder.jpg -------------------------------------------------------------------------------- /packages/graphql/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/typeDefs.js'; 2 | export * from './lib/resolvers.js'; 3 | export * from './lib/schema.js'; 4 | -------------------------------------------------------------------------------- /apps/api/src/app/emails/templates/index.ts: -------------------------------------------------------------------------------- 1 | export * from './otp-verification.template'; 2 | export * from './signature-invitation.template'; 3 | 4 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/public/icon-dark-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/disruption-hub/nuonx/main/apps/nuo-dashboard-ui/public/icon-dark-32x32.png -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/public/icon-light-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/disruption-hub/nuonx/main/apps/nuo-dashboard-ui/public/icon-light-32x32.png -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/public/placeholder-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/disruption-hub/nuonx/main/apps/nuo-dashboard-ui/public/placeholder-logo.png -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/public/placeholder-user.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/disruption-hub/nuonx/main/apps/nuo-dashboard-ui/public/placeholder-user.jpg -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/public/placeholder-user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/disruption-hub/nuonx/main/apps/nuo-dashboard-ui/public/placeholder-user.png -------------------------------------------------------------------------------- /packages/auth/README.md: -------------------------------------------------------------------------------- 1 | # auth 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Building 6 | 7 | Run `nx build auth` to build the library. 8 | -------------------------------------------------------------------------------- /packages/types/README.md: -------------------------------------------------------------------------------- 1 | # types 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Building 6 | 7 | Run `nx build types` to build the library. 8 | -------------------------------------------------------------------------------- /packages/utils/README.md: -------------------------------------------------------------------------------- 1 | # utils 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Building 6 | 7 | Run `nx build utils` to build the library. 8 | -------------------------------------------------------------------------------- /packages/graphql/README.md: -------------------------------------------------------------------------------- 1 | # graphql 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Building 6 | 7 | Run `nx build graphql` to build the library. 8 | -------------------------------------------------------------------------------- /packages/prisma/README.md: -------------------------------------------------------------------------------- 1 | # prisma 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Building 6 | 7 | Run `nx build prisma` to build the library. 8 | -------------------------------------------------------------------------------- /packages/graphql/src/lib/schema.ts: -------------------------------------------------------------------------------- 1 | import { typeDefs } from './typeDefs.js'; 2 | 3 | // Re-export typeDefs as schema for backward compatibility 4 | export { typeDefs as schema }; 5 | -------------------------------------------------------------------------------- /apps/nuo-nx/vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildCommand": "npx nx build nuo-nx", 3 | "outputDirectory": ".next", 4 | "installCommand": "npm install", 5 | "framework": "nextjs" 6 | } 7 | 8 | -------------------------------------------------------------------------------- /packages/prisma/migrations/migration_lock.toml: -------------------------------------------------------------------------------- 1 | # Please do not edit this file manually 2 | # It should be added in your version-control system (e.g., Git) 3 | provider = "postgresql" 4 | -------------------------------------------------------------------------------- /packages/ui/src/lib/ui.tsx: -------------------------------------------------------------------------------- 1 | // Base UI components 2 | export { NuoNxUi } from './components/base'; 3 | 4 | // Export all components here as they are added 5 | export * from './components/base'; -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(main)/(marketing)/(client)/security/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | // Security page temporarily disabled per request 3 | export default function Page() { 4 | return null; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /apps/admin/index.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-explicit-any */ 2 | declare module '*.svg' { 3 | const content: any; 4 | export const ReactComponent: any; 5 | export default content; 6 | } 7 | -------------------------------------------------------------------------------- /apps/nuo-nx/index.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-explicit-any */ 2 | declare module '*.svg' { 3 | const content: any; 4 | export const ReactComponent: any; 5 | export default content; 6 | } 7 | -------------------------------------------------------------------------------- /packages/ui/src/lib/components/base.tsx: -------------------------------------------------------------------------------- 1 | export function NuoNxUi() { 2 | return ( 3 |
4 |

Welcome to NuoNxUi!

5 |
6 | ); 7 | } 8 | 9 | export default NuoNxUi; 10 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | '@tailwindcss/postcss': {}, 5 | }, 6 | } 7 | 8 | export default config 9 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /jest.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'jest'; 2 | import { getJestProjectsAsync } from '@nx/jest'; 3 | 4 | export default async (): Promise => ({ 5 | projects: await getJestProjectsAsync(), 6 | }); 7 | -------------------------------------------------------------------------------- /apps/admin/src/app/dashboard/page.tsx: -------------------------------------------------------------------------------- 1 | import { AdminDashboardPage } from "../../components/admin/pages/AdminDashboardPage"; 2 | 3 | export default function Dashboard() { 4 | return ; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /packages/ui/README.md: -------------------------------------------------------------------------------- 1 | # @nuo-nx/ui 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test @nuo-nx/ui` to execute the unit tests via [Jest](https://jestjs.io). 8 | -------------------------------------------------------------------------------- /packages/ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "include": [], 4 | "references": [ 5 | { 6 | "path": "./tsconfig.lib.json" 7 | } 8 | ], 9 | "extends": "../../tsconfig.base.json" 10 | } 11 | -------------------------------------------------------------------------------- /apps/admin/src/components/ui/aspect-ratio.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio" 4 | 5 | const AspectRatio = AspectRatioPrimitive.Root 6 | 7 | export { AspectRatio } 8 | -------------------------------------------------------------------------------- /apps/api/src/app/app.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | 3 | @Injectable() 4 | export class AppService { 5 | getData(): { message: string } { 6 | return { message: 'Hello API' }; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from 'clsx' 2 | import { twMerge } from 'tailwind-merge' 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/components/ui/aspect-ratio.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio" 4 | 5 | const AspectRatio = AspectRatioPrimitive.Root 6 | 7 | export { AspectRatio } 8 | -------------------------------------------------------------------------------- /packages/auth/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.lib.json" 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /packages/config/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.lib.json" 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /packages/prisma/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.lib.json" 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /packages/types/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.lib.json" 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /packages/utils/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.lib.json" 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /apps/worker/src/app/app.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | 3 | @Injectable() 4 | export class AppService { 5 | getData(): { message: string } { 6 | return ({ message: 'Hello API' }); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /apps/admin/src/app/admin/dashboard/page.tsx: -------------------------------------------------------------------------------- 1 | import { AdminDashboardPage } from '@/components/admin/pages/AdminDashboardPage'; 2 | 3 | export default function AdminDashboard() { 4 | return ; 5 | } 6 | 7 | 8 | -------------------------------------------------------------------------------- /apps/admin/src/app/dashboard/activity/page.tsx: -------------------------------------------------------------------------------- 1 | import { AdminActivityPage } from '@/components/admin/pages/activity/AdminActivityPage'; 2 | 3 | export default function ActivityPage() { 4 | return ; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(main)/(marketing)/(client)/services/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { ServicesPage } from "@/components/main/pages/ServicesPage"; 3 | export default function Page() { 4 | return ; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /packages/ui/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "@nx/react/babel", 5 | { 6 | "runtime": "automatic", 7 | "useBuiltIns": "usage" 8 | } 9 | ] 10 | ], 11 | "plugins": [] 12 | } 13 | -------------------------------------------------------------------------------- /apps/admin/src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/documents/drafts/page.tsx: -------------------------------------------------------------------------------- 1 | import { DraftsList } from '@/components/dashboard/pages/documents/DraftsList'; 2 | 3 | export default function DraftsPage() { 4 | return ; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(main)/(marketing)/(client)/careers/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { CareersPage } from "@/components/main/pages/CareersPage"; 4 | 5 | export default function Page() { 6 | return ; 7 | } 8 | 9 | -------------------------------------------------------------------------------- /apps/admin/src/app/admin/dashboard/activity/page.tsx: -------------------------------------------------------------------------------- 1 | import { AdminActivityPage } from '@/components/admin/pages/activity/AdminActivityPage'; 2 | 3 | export default function ActivityPage() { 4 | return ; 5 | } 6 | 7 | 8 | -------------------------------------------------------------------------------- /apps/admin/src/app/dashboard/roles/page.tsx: -------------------------------------------------------------------------------- 1 | import { AdminRoleManagementPage } from '@/components/admin/pages/roles/AdminRoleManagementPage'; 2 | 3 | export default function RolesPage() { 4 | return ; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /packages/generated/nuo-prisma/wasm-worker-loader.mjs: -------------------------------------------------------------------------------- 1 | 2 | /* !!! This is code generated by Prisma. Do not edit directly. !!! 3 | /* eslint-disable */ 4 | // biome-ignore-all lint: generated file 5 | export default import('./query_compiler_bg.wasm') -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildCommand": "npx nx build nuo-nx", 3 | "outputDirectory": "apps/nuo-nx/.next", 4 | "installCommand": "npm install && npx prisma generate --schema=packages/prisma/schema.prisma", 5 | "framework": "nextjs" 6 | } 7 | 8 | -------------------------------------------------------------------------------- /apps/admin/src/app/dashboard/users/page.tsx: -------------------------------------------------------------------------------- 1 | import { AdminUserManagementPage } from '../../../components/admin/pages/users/AdminUserManagementPage'; 2 | 3 | export default function UsersPage() { 4 | return ; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "nrwl.angular-console", 4 | "esbenp.prettier-vscode", 5 | "dbaeumer.vscode-eslint", 6 | "ms-playwright.playwright", 7 | "firsttris.vscode-jest-runner" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /apps/admin/src/app/admin/dashboard/roles/page.tsx: -------------------------------------------------------------------------------- 1 | import { AdminRoleManagementPage } from '@/components/admin/pages/roles/AdminRoleManagementPage'; 2 | 3 | export default function RolesPage() { 4 | return ; 5 | } 6 | 7 | 8 | -------------------------------------------------------------------------------- /apps/admin/src/app/admin/dashboard/users/page.tsx: -------------------------------------------------------------------------------- 1 | import { AdminUserManagementPage } from '@/components/admin/pages/users/AdminUserManagementPage'; 2 | 3 | export default function UsersPage() { 4 | return ; 5 | } 6 | 7 | 8 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/profile/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { ProfilePage } from '@/components/dashboard/profile/ProfilePage'; 4 | 5 | export default function ProfilePageRoute() { 6 | return ; 7 | } 8 | 9 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(employee)/employee-dashboard/tasks/page.tsx: -------------------------------------------------------------------------------- 1 | import { EmployeeTasksPage } from '@/components/employee/dashboard/pages/EmployeeTasksPage'; 2 | 3 | export default function EmployeeTasks() { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(main)/(policies)/privacy-policy/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { PrivacyPolicyPage } from "@/components/main/pages/PrivacyPolicyPage"; 4 | 5 | export default function Page() { 6 | return ; 7 | } 8 | 9 | -------------------------------------------------------------------------------- /packages/auth/src/lib/types.ts: -------------------------------------------------------------------------------- 1 | export interface AuthUser { 2 | id: string; 3 | email: string; 4 | tenantId: string; 5 | name?: string; 6 | } 7 | 8 | export interface AuthContext { 9 | user?: AuthUser; 10 | tenantId?: string; 11 | } 12 | -------------------------------------------------------------------------------- /packages/generated/nuo-prisma/wasm-edge-light-loader.mjs: -------------------------------------------------------------------------------- 1 | 2 | /* !!! This is code generated by Prisma. Do not edit directly. !!! 3 | /* eslint-disable */ 4 | // biome-ignore-all lint: generated file 5 | export default import('./query_compiler_bg.wasm?module') -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/account/info/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { AccountInfo } from '@/components/dashboard/pages/account/AccountInfo'; 4 | 5 | export default function AccountInfoPage() { 6 | return ; 7 | } 8 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/support/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { SupportSection } from '@/components/dashboard/pages/support/SupportSection'; 4 | 5 | export default function SupportPage() { 6 | return ; 7 | } 8 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(main)/(marketing)/(client)/services/bank-setup/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { BankSetupPage } from "@/components/main/pages/BankSetupPage"; 4 | 5 | export default function Page() { 6 | return ; 7 | } 8 | 9 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(main)/(policies)/terms-of-service/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { TermsOfServicePage } from "@/components/main/pages/TermsOfServicePage"; 4 | 5 | export default function Page() { 6 | return ; 7 | } 8 | 9 | -------------------------------------------------------------------------------- /packages/prisma/src/index.ts: -------------------------------------------------------------------------------- 1 | // Export Prisma client instance 2 | export { prisma, default as prismaClient } from './lib/client.js'; 3 | 4 | // Re-export all Prisma generated types from the generated client TypeScript files 5 | export * from '@prisma/client'; -------------------------------------------------------------------------------- /apps/admin/src/app/dashboard/templates/[id]/page.tsx: -------------------------------------------------------------------------------- 1 | import { TemplateEditorPage } from '../../../../components/admin/pages/templates/TemplateEditorPage'; 2 | 3 | export default function TemplateEditPage() { 4 | return ; 5 | } 6 | 7 | 8 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(main)/(marketing)/(client)/incorporate/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { IncorporationFormPage } from "@/components/main/pages/IncorporationFormPage"; 3 | export default function Page() { 4 | return ; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(main)/(marketing)/(client)/services/ip-protection/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { IPProtectionPage } from "@/components/main/pages/IPProtectionPage"; 3 | 4 | export default function Page() { 5 | return ; 6 | } 7 | 8 | -------------------------------------------------------------------------------- /apps/admin/vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildCommand": "cd ../.. && npx nx build admin", 3 | "outputDirectory": ".next", 4 | "installCommand": "cd ../.. && npm install && npx prisma generate --schema=packages/prisma/schema.prisma", 5 | "framework": "nextjs" 6 | } 7 | 8 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/users/manage/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { UserManagement } from '@/components/dashboard/pages/users/UserManagement'; 4 | 5 | export default function UserManagementPage() { 6 | return ; 7 | } 8 | -------------------------------------------------------------------------------- /apps/admin/src/app/dashboard/templates/page.tsx: -------------------------------------------------------------------------------- 1 | import { AdminTemplateManagementPage } from '../../../components/admin/pages/templates/AdminTemplateManagementPage'; 2 | 3 | export default function TemplatesPage() { 4 | return ; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | typescript: { 4 | ignoreBuildErrors: true, 5 | }, 6 | images: { 7 | unoptimized: true, 8 | }, 9 | } 10 | 11 | export default nextConfig 12 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/account/billing/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { AccountBilling } from '@/components/dashboard/pages/account/AccountBilling'; 4 | 5 | export default function AccountBillingPage() { 6 | return ; 7 | } 8 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/users/permissions/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { UserPermissions } from '@/components/dashboard/pages/users/UserPermissions'; 4 | 5 | export default function UserPermissionsPage() { 6 | return ; 7 | } 8 | -------------------------------------------------------------------------------- /packages/auth/src/index.ts: -------------------------------------------------------------------------------- 1 | // JWT utilities 2 | export * from './lib/jwt.js'; 3 | 4 | // Middleware 5 | export * from './lib/middleware/tenant.js'; 6 | 7 | // Guards (NestJS) 8 | export * from './lib/guards.js'; 9 | 10 | // Types 11 | export * from './lib/types.js'; -------------------------------------------------------------------------------- /apps/admin/src/app/admin/dashboard/onboarding/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { AdminOnboardingPage } from '@/components/admin/pages/onboarding/AdminOnboardingPage'; 4 | 5 | export default function AdminOnboardingPageRoute() { 6 | return ; 7 | } 8 | 9 | -------------------------------------------------------------------------------- /apps/admin/src/app/dashboard/permissions/page.tsx: -------------------------------------------------------------------------------- 1 | import { AdminPermissionManagementPage } from '../../../components/admin/pages/permissions/AdminPermissionManagementPage'; 2 | 3 | export default function PermissionsPage() { 4 | return ; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/trademarks/list/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { TrademarksSection } from '@/components/dashboard/pages/trademarks/TrademarksSection'; 4 | 5 | export default function TrademarksListPage() { 6 | return ; 7 | } 8 | -------------------------------------------------------------------------------- /apps/worker/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.app.json" 8 | }, 9 | { 10 | "path": "./tsconfig.spec.json" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /apps/admin-e2e/src/example.spec.ts: -------------------------------------------------------------------------------- 1 | import { test, expect } from '@playwright/test'; 2 | 3 | test('has title', async ({ page }) => { 4 | await page.goto('/'); 5 | 6 | // Expect h1 to contain a substring. 7 | expect(await page.locator('h1').innerText()).toContain('Welcome'); 8 | }); 9 | -------------------------------------------------------------------------------- /apps/admin/src/app/admin/dashboard/permissions/page.tsx: -------------------------------------------------------------------------------- 1 | import { AdminPermissionManagementPage } from '@/components/admin/pages/permissions/AdminPermissionManagementPage'; 2 | 3 | export default function PermissionsPage() { 4 | return ; 5 | } 6 | 7 | 8 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/onboarding/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { OnboardingRequestsPage } from '@/components/dashboard/onboarding/OnboardingRequestsPage'; 4 | 5 | export default function OnboardingPage() { 6 | return ; 7 | } 8 | 9 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/page.tsx: -------------------------------------------------------------------------------- 1 | import { DashboardPageWrapper } from '@/components/dashboard/pages/DashboardPageWrapper'; 2 | 3 | export const dynamic = 'force-dynamic'; 4 | 5 | export default async function Dashboard() { 6 | return ; 7 | } 8 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(main)/(marketing)/(client)/services/incorporation/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { IncorporationServicesPage } from "@/components/main/pages/IncorporationServicesPage"; 3 | 4 | export default function Page() { 5 | return ; 6 | } 7 | 8 | -------------------------------------------------------------------------------- /apps/nuo-nx-e2e/src/example.spec.ts: -------------------------------------------------------------------------------- 1 | import { test, expect } from '@playwright/test'; 2 | 3 | test('has title', async ({ page }) => { 4 | await page.goto('/'); 5 | 6 | // Expect h1 to contain a substring. 7 | expect(await page.locator('h1').innerText()).toContain('Welcome'); 8 | }); 9 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(main)/(marketing)/(client)/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { ReactNode } from 'react' 2 | 3 | export default function ClientLayout({ children }: { children: ReactNode }) { 4 | return ( 5 |
6 | {children} 7 |
8 | ) 9 | } 10 | -------------------------------------------------------------------------------- /packages/graphql/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "baseUrl": "../.." 5 | }, 6 | "files": [], 7 | "include": [], 8 | "references": [ 9 | { 10 | "path": "./tsconfig.lib.json" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /apps/admin/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | import "./.next/dev/types/routes.d.ts"; 4 | 5 | // NOTE: This file should not be edited 6 | // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. 7 | -------------------------------------------------------------------------------- /apps/api/src/app/prisma/prisma.module.ts: -------------------------------------------------------------------------------- 1 | import { Global, Module } from '@nestjs/common'; 2 | import { PrismaService } from './prisma.service.js'; 3 | 4 | @Global() 5 | @Module({ 6 | providers: [PrismaService], 7 | exports: [PrismaService], 8 | }) 9 | export class PrismaModule {} 10 | -------------------------------------------------------------------------------- /apps/nuo-nx/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | import "./.next/dev/types/routes.d.ts"; 4 | 5 | // NOTE: This file should not be edited 6 | // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. 7 | -------------------------------------------------------------------------------- /packages/ui/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | './src/**/*.{ts,tsx,js,jsx,html}', 5 | '!./src/**/*.{stories,spec}.{ts,tsx,js,jsx,html}', 6 | ], 7 | theme: { 8 | extend: {}, 9 | }, 10 | plugins: [], 11 | }; 12 | -------------------------------------------------------------------------------- /packages/prisma/src/lib/server-only.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Server-only Prisma client for Next.js 3 | * Use this import in Next.js server components, API routes, and server actions 4 | */ 5 | import 'server-only'; 6 | import { prisma } from './client.js'; 7 | 8 | export { prisma }; 9 | export default prisma; 10 | -------------------------------------------------------------------------------- /apps/admin/src/app/dashboard/roles/[id]/page.tsx: -------------------------------------------------------------------------------- 1 | import { AdminRoleDetailPage } from '../../../../components/admin/pages/roles/AdminRoleDetailPage'; 2 | 3 | export default function RoleDetailPage({ params }: { params: Promise<{ id: string }> }) { 4 | return ; 5 | } 6 | 7 | 8 | -------------------------------------------------------------------------------- /apps/admin/src/app/dashboard/users/[id]/page.tsx: -------------------------------------------------------------------------------- 1 | import { AdminUserDetailPage } from '../../../../components/admin/pages/users/AdminUserDetailPage'; 2 | 3 | export default function UserDetailPage({ params }: { params: Promise<{ id: string }> }) { 4 | return ; 5 | } 6 | 7 | 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /apps/api-e2e/src/api/api.spec.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | describe('GET /api', () => { 4 | it('should return a message', async () => { 5 | const res = await axios.get(`/api`); 6 | 7 | expect(res.status).toBe(200); 8 | expect(res.data).toEqual({ message: 'Hello API' }); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /apps/worker/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { AppController } from './app.controller'; 3 | import { AppService } from './app.service'; 4 | 5 | @Module({ 6 | imports: [], 7 | controllers: [AppController], 8 | providers: [AppService], 9 | }) 10 | export class AppModule {} 11 | -------------------------------------------------------------------------------- /apps/worker-e2e/src/worker/worker.spec.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | describe('GET /api', () => { 4 | it('should return a message', async () => { 5 | const res = await axios.get(`/api`); 6 | 7 | expect(res.status).toBe(200); 8 | expect(res.data).toEqual({ message: 'Hello API' }); 9 | }); 10 | }) 11 | -------------------------------------------------------------------------------- /apps/admin/src/app/dashboard/layout.tsx: -------------------------------------------------------------------------------- 1 | import { AdminDashboardLayout } from '../../components/admin/layout/AdminDashboardLayout'; 2 | 3 | export default function AdminLayout({ 4 | children, 5 | }: { 6 | children: React.ReactNode; 7 | }) { 8 | return {children}; 9 | } 10 | 11 | -------------------------------------------------------------------------------- /apps/api-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "out-tsc/@nuo-nx/api-e2e", 5 | "esModuleInterop": true, 6 | "noUnusedLocals": false, 7 | "noImplicitAny": false 8 | }, 9 | "include": ["jest.config.ts", "src/**/*.ts"], 10 | "references": [] 11 | } 12 | -------------------------------------------------------------------------------- /apps/api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "baseUrl": "../.." 5 | }, 6 | "files": [], 7 | "include": [], 8 | "references": [ 9 | { 10 | "path": "./tsconfig.app.json" 11 | }, 12 | { 13 | "path": "./tsconfig.spec.json" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /apps/admin/specs/index.spec.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from '@testing-library/react'; 3 | import Page from '../src/app/page'; 4 | 5 | describe('Page', () => { 6 | it('should render successfully', () => { 7 | const { baseElement } = render(); 8 | expect(baseElement).toBeTruthy(); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /apps/admin/src/app/dashboard/permissions/[id]/page.tsx: -------------------------------------------------------------------------------- 1 | import { AdminPermissionDetailPage } from '../../../../components/admin/pages/permissions/AdminPermissionDetailPage'; 2 | 3 | export default function PermissionDetailPage({ params }: { params: Promise<{ id: string }> }) { 4 | return ; 5 | } 6 | 7 | 8 | -------------------------------------------------------------------------------- /apps/api-e2e/src/support/test-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | import axios from 'axios'; 3 | 4 | module.exports = async function () { 5 | // Configure axios for tests to use. 6 | const host = process.env.HOST ?? 'localhost'; 7 | const port = process.env.PORT ?? '3000'; 8 | axios.defaults.baseURL = `http://${host}:${port}`; 9 | }; 10 | -------------------------------------------------------------------------------- /apps/nuo-nx/specs/index.spec.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from '@testing-library/react'; 3 | import Page from '../src/app/page'; 4 | 5 | describe('Page', () => { 6 | it('should render successfully', () => { 7 | const { baseElement } = render(); 8 | expect(baseElement).toBeTruthy(); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/compliance/calendar/page.tsx: -------------------------------------------------------------------------------- 1 | import { ComplianceCalendar } from '@/components/dashboard/pages/compliance/calendar/ComplianceCalendar'; 2 | 3 | export default function ComplianceCalendarPage() { 4 | return ( 5 |
6 | 7 |
8 | ); 9 | } 10 | -------------------------------------------------------------------------------- /apps/worker-e2e/src/support/test-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | import axios from 'axios'; 3 | 4 | module.exports = async function() { 5 | // Configure axios for tests to use. 6 | const host = process.env.HOST ?? 'localhost'; 7 | const port = process.env.PORT ?? '3000'; 8 | axios.defaults.baseURL = `http://${host}:${port}`; 9 | }; 10 | -------------------------------------------------------------------------------- /apps/admin/src/components/dashboard/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export { useOnClickOutside } from './useOnClickOutside'; 2 | export { useUserData } from './useUserData'; 3 | export { useNotifications } from './useNotifications'; 4 | export { useHeaderNavigation } from './useHeaderNavigation'; 5 | export { useHeaderDropdowns } from './useHeaderDropdowns'; 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /apps/api/src/app/app.controller.ts: -------------------------------------------------------------------------------- 1 | import { Controller, Get } from '@nestjs/common'; 2 | import { AppService } from './app.service'; 3 | 4 | @Controller() 5 | export class AppController { 6 | constructor(private readonly appService: AppService) {} 7 | 8 | @Get() 9 | getData() { 10 | return this.appService.getData(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(main)/(marketing)/(client)/about/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { AboutPage } from "@/components/main/pages/AboutPage"; 3 | import { useLanguage } from "@/contexts/lang/LanguageContext"; 4 | 5 | export default function Page() { 6 | const { language } = useLanguage(); 7 | return ; 8 | } 9 | 10 | -------------------------------------------------------------------------------- /apps/worker/src/app/app.controller.ts: -------------------------------------------------------------------------------- 1 | import { Controller, Get } from '@nestjs/common'; 2 | import { AppService } from './app.service'; 3 | 4 | @Controller() 5 | export class AppController { 6 | constructor(private readonly appService: AppService) {} 7 | 8 | @Get() 9 | getData() { 10 | return this.appService.getData(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/graphql/src/lib/schema.graphql: -------------------------------------------------------------------------------- 1 | type Query { 2 | hello: String! 3 | users: [User!]! 4 | } 5 | 6 | type Mutation { 7 | createUser(email: String!, name: String): User! 8 | } 9 | 10 | type User { 11 | id: ID! 12 | email: String! 13 | name: String 14 | tenantId: ID! 15 | createdAt: String! 16 | updatedAt: String! 17 | } 18 | -------------------------------------------------------------------------------- /apps/admin-e2e/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import playwright from 'eslint-plugin-playwright'; 2 | import baseConfig from '../../eslint.config.mjs'; 3 | 4 | export default [ 5 | playwright.configs['flat/recommended'], 6 | ...baseConfig, 7 | { 8 | files: ['**/*.ts', '**/*.js'], 9 | // Override or add rules here 10 | rules: {}, 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /apps/admin/src/app/admin/dashboard/layout.tsx: -------------------------------------------------------------------------------- 1 | import { AdminDashboardLayout } from '@/components/admin/layout/AdminDashboardLayout'; 2 | 3 | export default function AdminDashboardLayoutWrapper({ 4 | children, 5 | }: { 6 | children: React.ReactNode; 7 | }) { 8 | return {children}; 9 | } 10 | 11 | 12 | -------------------------------------------------------------------------------- /apps/nuo-nx-e2e/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import playwright from 'eslint-plugin-playwright'; 2 | import baseConfig from '../../eslint.config.mjs'; 3 | 4 | export default [ 5 | playwright.configs['flat/recommended'], 6 | ...baseConfig, 7 | { 8 | files: ['**/*.ts', '**/*.js'], 9 | // Override or add rules here 10 | rules: {}, 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /apps/api/tsconfig.tsbuildinfo: -------------------------------------------------------------------------------- 1 | {"fileNames":[],"fileInfos":[],"root":[],"options":{"composite":true,"declarationMap":true,"emitDeclarationOnly":true,"importHelpers":true,"module":99,"noEmitOnError":true,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUnusedLocals":true,"skipLibCheck":true,"strict":true,"target":9},"version":"5.9.3"} -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/app/page.tsx: -------------------------------------------------------------------------------- 1 | import { DashboardLayout } from "@/components/dashboard/dashboard-layout" 2 | import { DashboardOverview } from "@/components/dashboard/dashboard-overview" 3 | 4 | export default function DashboardPage() { 5 | return ( 6 | 7 | 8 | 9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(main)/(marketing)/(client)/contact/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { ContactPage } from "@/components/main/pages/ContactPage"; 3 | import { useLanguage } from "@/contexts/lang/LanguageContext"; 4 | 5 | export default function Page() { 6 | const { language } = useLanguage(); 7 | return ; 8 | } 9 | 10 | -------------------------------------------------------------------------------- /apps/admin/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /apps/worker-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "out-tsc/@nuo-nx/worker-e2e", 5 | "esModuleInterop": true, 6 | "noUnusedLocals": false, 7 | "noImplicitAny": false 8 | }, 9 | "include": [ 10 | "jest.config.ts", 11 | "src/**/*.ts" 12 | ], 13 | "references": [] 14 | } 15 | -------------------------------------------------------------------------------- /packages/ui/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nuo-nx/ui", 3 | "version": "0.0.1", 4 | "main": "./src/index.ts", 5 | "types": "./src/index.ts", 6 | "exports": { 7 | ".": { 8 | "types": "./src/index.ts", 9 | "import": "./src/index.ts", 10 | "default": "./src/index.ts" 11 | }, 12 | "./package.json": "./package.json" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/components/ui/aspect-ratio.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio' 4 | 5 | function AspectRatio({ 6 | ...props 7 | }: React.ComponentProps) { 8 | return 9 | } 10 | 11 | export { AspectRatio } 12 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from '@/lib/utils' 2 | 3 | function Skeleton({ className, ...props }: React.ComponentProps<'div'>) { 4 | return ( 5 |
10 | ) 11 | } 12 | 13 | export { Skeleton } 14 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/onboarding/new/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { OnboardingRequestForm } from '@/components/dashboard/onboarding/OnboardingRequestForm'; 4 | 5 | export default function NewOnboardingRequestPage() { 6 | return ( 7 |
8 | 9 |
10 | ); 11 | } 12 | 13 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/components/theme-provider.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import * as React from 'react' 4 | import { 5 | ThemeProvider as NextThemesProvider, 6 | type ThemeProviderProps, 7 | } from 'next-themes' 8 | 9 | export function ThemeProvider({ children, ...props }: ThemeProviderProps) { 10 | return {children} 11 | } 12 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/onboarding/[id]/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { OnboardingRequestDetail } from '@/components/dashboard/onboarding/OnboardingRequestDetail'; 4 | 5 | export default function OnboardingRequestDetailPage({ 6 | params, 7 | }: { 8 | params: { id: string }; 9 | }) { 10 | return ; 11 | } 12 | 13 | -------------------------------------------------------------------------------- /apps/admin/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import nextEslintPluginNext from '@next/eslint-plugin-next'; 2 | import nx from '@nx/eslint-plugin'; 3 | import baseConfig from '../../eslint.config.mjs'; 4 | 5 | export default [ 6 | { plugins: { '@next/next': nextEslintPluginNext } }, 7 | ...baseConfig, 8 | ...nx.configs['flat/react-typescript'], 9 | { 10 | ignores: ['.next/**/*', '**/out-tsc'], 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /apps/admin/src/app/admin/dashboard/onboarding/[id]/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { AdminOnboardingRequestDetail } from '@/components/admin/pages/onboarding/AdminOnboardingRequestDetail'; 4 | 5 | export default function AdminOnboardingRequestDetailPage({ 6 | params, 7 | }: { 8 | params: { id: string }; 9 | }) { 10 | return ; 11 | } 12 | 13 | -------------------------------------------------------------------------------- /apps/admin/src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import './global.css'; 2 | 3 | export const metadata = { 4 | title: 'Welcome to admin', 5 | description: 'Generated by create-nx-workspace', 6 | }; 7 | 8 | export default function RootLayout({ 9 | children, 10 | }: { 11 | children: React.ReactNode; 12 | }) { 13 | return ( 14 | 15 | {children} 16 | 17 | ); 18 | } 19 | -------------------------------------------------------------------------------- /apps/nuo-nx/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import nextEslintPluginNext from '@next/eslint-plugin-next'; 2 | import nx from '@nx/eslint-plugin'; 3 | import baseConfig from '../../eslint.config.mjs'; 4 | 5 | export default [ 6 | { plugins: { '@next/next': nextEslintPluginNext } }, 7 | ...baseConfig, 8 | ...nx.configs['flat/react-typescript'], 9 | { 10 | ignores: ['.next/**/*', '**/out-tsc'], 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /packages/graphql/src/lib/typeDefs.ts: -------------------------------------------------------------------------------- 1 | export const typeDefs = ` 2 | type Query { 3 | hello: String! 4 | users: [User!]! 5 | } 6 | 7 | type Mutation { 8 | createUser(email: String!, name: String): User! 9 | } 10 | 11 | type User { 12 | id: ID! 13 | email: String! 14 | name: String 15 | tenantId: ID! 16 | createdAt: String! 17 | updatedAt: String! 18 | } 19 | `; 20 | -------------------------------------------------------------------------------- /apps/admin/src/components/ui/collapsible.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" 4 | 5 | const Collapsible = CollapsiblePrimitive.Root 6 | 7 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger 8 | 9 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent 10 | 11 | export { Collapsible, CollapsibleTrigger, CollapsibleContent } 12 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/components/ui/collapsible.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" 4 | 5 | const Collapsible = CollapsiblePrimitive.Root 6 | 7 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger 8 | 9 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent 10 | 11 | export { Collapsible, CollapsibleTrigger, CollapsibleContent } 12 | -------------------------------------------------------------------------------- /apps/api/src/app/users/user.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { UserController } from './user.controller.js'; 3 | import { UserService } from './user.service.js'; 4 | import { UserRepository } from './user.repository.js'; 5 | 6 | @Module({ 7 | controllers: [UserController], 8 | providers: [UserService, UserRepository], 9 | exports: [UserService], 10 | }) 11 | export class UserModule { } 12 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(main)/(auth)/login/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { Suspense } from "react"; 3 | import { LoginPage } from "@/components/main/auth/login/LoginPage"; 4 | 5 | function LoginPageWrapper() { 6 | return ; 7 | } 8 | 9 | export default function Page() { 10 | return ( 11 | Loading...
}> 12 | 13 | 14 | ); 15 | } 16 | 17 | -------------------------------------------------------------------------------- /packages/document-utils/src/index.ts: -------------------------------------------------------------------------------- 1 | // PDF exports 2 | export * from './pdf/export.js'; 3 | export * from './pdf/simple-pdf.js'; 4 | export * from './pdf/parse.js'; 5 | export * from './pdf/signature-manager.js'; 6 | export * from './pdf/fonts.js'; 7 | export * from './pdf/styles.js'; 8 | export * from './pdf/hyphenation.js'; 9 | 10 | // Document utilities 11 | export * from './transformers.js'; 12 | export * from './utils.js'; 13 | -------------------------------------------------------------------------------- /packages/graphql/src/lib/codegen.ts: -------------------------------------------------------------------------------- 1 | import type { CodegenConfig } from '@graphql-codegen/cli'; 2 | 3 | const config: CodegenConfig = { 4 | schema: './src/lib/schema.graphql', 5 | generates: { 6 | './src/generated/graphql.ts': { 7 | plugins: ['typescript', 'typescript-resolvers'], 8 | config: { 9 | useIndexSignature: true, 10 | }, 11 | }, 12 | }, 13 | }; 14 | 15 | export default config; 16 | -------------------------------------------------------------------------------- /apps/admin/src/components/ui/spinner.tsx: -------------------------------------------------------------------------------- 1 | import { Loader2Icon } from "lucide-react" 2 | 3 | import { cn } from "@/lib/utils" 4 | 5 | function Spinner({ className, ...props }: React.ComponentProps<"svg">) { 6 | return ( 7 | 13 | ) 14 | } 15 | 16 | export { Spinner } 17 | -------------------------------------------------------------------------------- /apps/api/src/app/otp/otp.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { OtpController } from './otp.controller.js'; 3 | import { OtpService } from './otp.service.js'; 4 | import { PrismaModule } from '../prisma/prisma.module.js'; 5 | 6 | @Module({ 7 | imports: [PrismaModule], 8 | controllers: [OtpController], 9 | providers: [OtpService], 10 | exports: [OtpService], 11 | }) 12 | export class OtpModule {} 13 | 14 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/components/ui/spinner.tsx: -------------------------------------------------------------------------------- 1 | import { Loader2Icon } from "lucide-react" 2 | 3 | import { cn } from "@/lib/utils" 4 | 5 | function Spinner({ className, ...props }: React.ComponentProps<"svg">) { 6 | return ( 7 | 13 | ) 14 | } 15 | 16 | export { Spinner } 17 | -------------------------------------------------------------------------------- /apps/api/src/app/auth/auth.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { AuthController } from './auth.controller.js'; 3 | import { AuthService } from './auth.service.js'; 4 | import { PrismaModule } from '../prisma/prisma.module.js'; 5 | 6 | @Module({ 7 | imports: [PrismaModule], 8 | controllers: [AuthController], 9 | providers: [AuthService], 10 | exports: [AuthService], 11 | }) 12 | export class AuthModule {} 13 | 14 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/components/ui/spinner.tsx: -------------------------------------------------------------------------------- 1 | import { Loader2Icon } from 'lucide-react' 2 | 3 | import { cn } from '@/lib/utils' 4 | 5 | function Spinner({ className, ...props }: React.ComponentProps<'svg'>) { 6 | return ( 7 | 13 | ) 14 | } 15 | 16 | export { Spinner } 17 | -------------------------------------------------------------------------------- /apps/api-e2e/src/support/global-teardown.ts: -------------------------------------------------------------------------------- 1 | import { killPort } from '@nx/node/utils'; 2 | /* eslint-disable */ 3 | 4 | module.exports = async function () { 5 | // Put clean up logic here (e.g. stopping services, docker-compose, etc.). 6 | // Hint: `globalThis` is shared between setup and teardown. 7 | const port = process.env.PORT ? Number(process.env.PORT) : 3000; 8 | await killPort(port); 9 | console.log(globalThis.__TEARDOWN_MESSAGE__); 10 | }; 11 | -------------------------------------------------------------------------------- /apps/worker-e2e/src/support/global-teardown.ts: -------------------------------------------------------------------------------- 1 | import { killPort } from '@nx/node/utils'; 2 | /* eslint-disable */ 3 | 4 | module.exports = async function() { 5 | // Put clean up logic here (e.g. stopping services, docker-compose, etc.). 6 | // Hint: `globalThis` is shared between setup and teardown. 7 | const port = process.env.PORT ? Number(process.env.PORT) : 3000; 8 | await killPort(port); 9 | console.log(globalThis.__TEARDOWN_MESSAGE__); 10 | }; 11 | -------------------------------------------------------------------------------- /packages/prisma/prisma.config.ts: -------------------------------------------------------------------------------- 1 | import path from 'node:path'; 2 | import { defineConfig, PrismaConfig } from 'prisma/config'; 3 | import { config } from 'dotenv'; 4 | 5 | // Load environment variables from .env file 6 | config({ path: path.join(__dirname, '../../.env') }); 7 | 8 | export default defineConfig({ 9 | schema: path.join(__dirname, 'schema.prisma'), 10 | datasource: { 11 | url: process.env.DATABASE_URL || '', 12 | }, 13 | }) as PrismaConfig; 14 | -------------------------------------------------------------------------------- /apps/admin/src/components/ui/DocumentVaultAnimation.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export function DocumentVaultAnimation() { 4 | return ( 5 |
6 |
7 |
8 |

Loading documents...

9 |
10 |
11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /apps/api-e2e/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nuo-nx/api-e2e", 3 | "version": "0.0.1", 4 | "private": true, 5 | "nx": { 6 | "targets": { 7 | "e2e": { 8 | "executor": "@nx/jest:jest", 9 | "outputs": [ 10 | "{projectRoot}/test-output/jest/coverage" 11 | ], 12 | "options": { 13 | "jestConfig": "apps/api-e2e/jest.config.cts", 14 | "passWithNoTests": true 15 | } 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/components/ui/DocumentVaultAnimation.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export function DocumentVaultAnimation() { 4 | return ( 5 |
6 |
7 |
8 |

Loading documents...

9 |
10 |
11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /packages/storage/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "rootDir": "src", 6 | "outDir": "dist", 7 | "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", 8 | "emitDeclarationOnly": false, 9 | "module": "nodenext", 10 | "moduleResolution": "nodenext", 11 | "forceConsistentCasingInFileNames": true, 12 | "types": ["node"] 13 | }, 14 | "include": ["src/**/*.ts"] 15 | } 16 | -------------------------------------------------------------------------------- /apps/api/src/app/security/security.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { SecurityController } from './security.controller.js'; 3 | import { SecurityService } from './security.service.js'; 4 | import { PrismaModule } from '../prisma/prisma.module.js'; 5 | 6 | @Module({ 7 | imports: [PrismaModule], 8 | controllers: [SecurityController], 9 | providers: [SecurityService], 10 | exports: [SecurityService], 11 | }) 12 | export class SecurityModule {} 13 | 14 | -------------------------------------------------------------------------------- /apps/api/src/app/documents/documents.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { DocumentsController } from './documents.controller.js'; 3 | import { DocumentsService } from './documents.service.js'; 4 | import { PrismaModule } from '../prisma/prisma.module.js'; 5 | 6 | @Module({ 7 | imports: [PrismaModule], 8 | controllers: [DocumentsController], 9 | providers: [DocumentsService], 10 | exports: [DocumentsService], 11 | }) 12 | export class DocumentsModule {} 13 | -------------------------------------------------------------------------------- /apps/api/src/app/dashboard/dashboard.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { DashboardController } from './dashboard.controller.js'; 3 | import { DashboardService } from './dashboard.service.js'; 4 | import { PrismaModule } from '../prisma/prisma.module.js'; 5 | 6 | @Module({ 7 | imports: [PrismaModule], 8 | controllers: [DashboardController], 9 | providers: [DashboardService], 10 | exports: [DashboardService], 11 | }) 12 | export class DashboardModule {} 13 | 14 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/components/dashboard/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export { useDashboardData } from './useDashboardData'; 2 | export { useStats } from './useStats'; 3 | export { useRecentActivities } from './useRecentActivities'; 4 | export { useOnClickOutside } from './useOnClickOutside'; 5 | export { useUserData } from './useUserData'; 6 | export { useNotifications } from './useNotifications'; 7 | export { useHeaderNavigation } from './useHeaderNavigation'; 8 | export { useHeaderDropdowns } from './useHeaderDropdowns'; 9 | -------------------------------------------------------------------------------- /packages/config/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "rootDir": "src", 6 | "outDir": "dist", 7 | "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", 8 | "emitDeclarationOnly": false, 9 | "module": "esnext", 10 | "moduleResolution": "bundler", 11 | "forceConsistentCasingInFileNames": true, 12 | "types": ["node"] 13 | }, 14 | "include": ["src/**/*.ts"], 15 | "references": [] 16 | } 17 | -------------------------------------------------------------------------------- /apps/api/.spec.swcrc: -------------------------------------------------------------------------------- 1 | { 2 | "jsc": { 3 | "target": "es2017", 4 | "parser": { 5 | "syntax": "typescript", 6 | "decorators": true, 7 | "dynamicImport": true 8 | }, 9 | "transform": { 10 | "decoratorMetadata": true, 11 | "legacyDecorator": true 12 | }, 13 | "keepClassNames": true, 14 | "externalHelpers": true, 15 | "loose": true 16 | }, 17 | "module": { 18 | "type": "es6" 19 | }, 20 | "sourceMaps": true, 21 | "exclude": [] 22 | } 23 | -------------------------------------------------------------------------------- /apps/api/src/app/onboarding/onboarding.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { OnboardingController } from './onboarding.controller.js'; 3 | import { OnboardingService } from './onboarding.service.js'; 4 | import { PrismaModule } from '../prisma/prisma.module.js'; 5 | 6 | @Module({ 7 | imports: [PrismaModule], 8 | controllers: [OnboardingController], 9 | providers: [OnboardingService], 10 | exports: [OnboardingService], 11 | }) 12 | export class OnboardingModule {} 13 | 14 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/trademarks/register/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import TrademarkRegister from '@/components/dashboard/pages/trademarks/TrademarkRegister'; 4 | import { useRouter } from 'next/navigation'; 5 | 6 | export default function TrademarkRegistrationPage() { 7 | const router = useRouter(); 8 | const onNavigateToList = () => { 9 | router.push('/dashboard/trademarks/list'); 10 | } 11 | return ; 12 | } 13 | -------------------------------------------------------------------------------- /packages/types/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "rootDir": "src", 6 | "outDir": "dist", 7 | "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", 8 | "emitDeclarationOnly": false, 9 | "module": "nodenext", 10 | "moduleResolution": "nodenext", 11 | "forceConsistentCasingInFileNames": true, 12 | "types": ["node"] 13 | }, 14 | "include": ["src/**/*.ts"], 15 | "references": [] 16 | } 17 | -------------------------------------------------------------------------------- /packages/utils/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "rootDir": "src", 6 | "outDir": "dist", 7 | "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", 8 | "emitDeclarationOnly": false, 9 | "module": "nodenext", 10 | "moduleResolution": "nodenext", 11 | "forceConsistentCasingInFileNames": true, 12 | "types": ["node"] 13 | }, 14 | "include": ["src/**/*.ts"], 15 | "references": [] 16 | } 17 | -------------------------------------------------------------------------------- /apps/api-e2e/.spec.swcrc: -------------------------------------------------------------------------------- 1 | { 2 | "jsc": { 3 | "target": "es2017", 4 | "parser": { 5 | "syntax": "typescript", 6 | "decorators": true, 7 | "dynamicImport": true 8 | }, 9 | "transform": { 10 | "decoratorMetadata": true, 11 | "legacyDecorator": true 12 | }, 13 | "keepClassNames": true, 14 | "externalHelpers": true, 15 | "loose": true 16 | }, 17 | "module": { 18 | "type": "es6" 19 | }, 20 | "sourceMaps": true, 21 | "exclude": [] 22 | } 23 | -------------------------------------------------------------------------------- /apps/worker-e2e/.spec.swcrc: -------------------------------------------------------------------------------- 1 | { 2 | "jsc": { 3 | "target": "es2017", 4 | "parser": { 5 | "syntax": "typescript", 6 | "decorators": true, 7 | "dynamicImport": true 8 | }, 9 | "transform": { 10 | "decoratorMetadata": true, 11 | "legacyDecorator": true 12 | }, 13 | "keepClassNames": true, 14 | "externalHelpers": true, 15 | "loose": true 16 | }, 17 | "module": { 18 | "type": "es6" 19 | }, 20 | "sourceMaps": true, 21 | "exclude": [] 22 | } 23 | -------------------------------------------------------------------------------- /apps/worker/.spec.swcrc: -------------------------------------------------------------------------------- 1 | { 2 | "jsc": { 3 | "target": "es2017", 4 | "parser": { 5 | "syntax": "typescript", 6 | "decorators": true, 7 | "dynamicImport": true 8 | }, 9 | "transform": { 10 | "decoratorMetadata": true, 11 | "legacyDecorator": true 12 | }, 13 | "keepClassNames": true, 14 | "externalHelpers": true, 15 | "loose": true 16 | }, 17 | "module": { 18 | "type": "es6" 19 | }, 20 | "sourceMaps": true, 21 | "exclude": [] 22 | } 23 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/companies/list/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { CompaniesList } from '@/components/dashboard/pages/companies/CompaniesList'; 4 | import { useRouter } from 'next/navigation'; 5 | export default function CompaniesListPage() { 6 | const router = useRouter(); 7 | const onNavigateToRegister = () => { 8 | router.push('/dashboard/companies/register'); 9 | } 10 | return ; 11 | } 12 | -------------------------------------------------------------------------------- /packages/storage/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "ESNext", 5 | "moduleResolution": "bundler", 6 | "target": "ES2020", 7 | "lib": ["ES2020"], 8 | "declaration": true, 9 | "outDir": "./dist", 10 | "rootDir": "./src", 11 | "composite": true, 12 | "declarationMap": true, 13 | "sourceMap": true 14 | }, 15 | "include": ["src/**/*"], 16 | "exclude": ["node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] 17 | } 18 | -------------------------------------------------------------------------------- /apps/api/src/app/prisma/prisma.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common'; 2 | import { prisma } from '@nuo-nx/prisma'; 3 | 4 | @Injectable() 5 | export class PrismaService implements OnModuleInit, OnModuleDestroy { 6 | get client() { 7 | return prisma; 8 | } 9 | 10 | async onModuleInit() { 11 | // Optional: Verify database connection 12 | await prisma.$connect(); 13 | } 14 | 15 | async onModuleDestroy() { 16 | await prisma.$disconnect(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/(dashboard)/dashboard/companies/register/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { CompanyRegistrationWizard } from '@/components/dashboard/pages/companies/CompanyRegistrationWizard'; 4 | import { useRouter } from 'next/navigation'; 5 | 6 | export default function CompanyRegistrationPage() { 7 | const router = useRouter(); 8 | const onNavigateToList = () => { 9 | router.push('/dashboard/companies/list'); 10 | } 11 | return ; 12 | } 13 | -------------------------------------------------------------------------------- /prisma.config.ts: -------------------------------------------------------------------------------- 1 | import 'dotenv/config'; 2 | import { defineConfig, env } from 'prisma/config'; 3 | 4 | export default defineConfig({ 5 | // The main entry for your schema 6 | schema: 'packages/prisma/schema.prisma', 7 | 8 | // Where migrations should be generated 9 | migrations: { 10 | path: 'packages/prisma/migrations', 11 | seed: 'tsx packages/prisma/seed.ts', 12 | }, 13 | 14 | // The database URL from environment variables 15 | datasource: { 16 | url: env('DATABASE_URL'), 17 | }, 18 | }); 19 | -------------------------------------------------------------------------------- /apps/admin/src/contexts/scroll/ScrollContext.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { createContext, useContext } from 'react'; 4 | 5 | // Create context for scroll function 6 | const ScrollContext = createContext<(() => void) | null>(null); 7 | 8 | export const useScrollToForm = () => { 9 | const scrollToForm = useContext(ScrollContext); 10 | if (!scrollToForm) { 11 | throw new Error('useScrollToForm must be used within a ScrollContext.Provider'); 12 | } 13 | return scrollToForm; 14 | }; 15 | 16 | export { ScrollContext }; 17 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/contexts/scroll/ScrollContext.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { createContext, useContext } from 'react'; 4 | 5 | // Create context for scroll function 6 | const ScrollContext = createContext<(() => void) | null>(null); 7 | 8 | export const useScrollToForm = () => { 9 | const scrollToForm = useContext(ScrollContext); 10 | if (!scrollToForm) { 11 | throw new Error('useScrollToForm must be used within a ScrollContext.Provider'); 12 | } 13 | return scrollToForm; 14 | }; 15 | 16 | export { ScrollContext }; 17 | -------------------------------------------------------------------------------- /apps/admin/jest.config.cts: -------------------------------------------------------------------------------- 1 | const nextJest = require('next/jest.js'); 2 | 3 | const createJestConfig = nextJest({ 4 | dir: './', 5 | }); 6 | 7 | const config = { 8 | displayName: '@nuo-nx/admin', 9 | preset: '../../jest.preset.js', 10 | transform: { 11 | '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': '@nx/react/plugins/jest', 12 | }, 13 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], 14 | coverageDirectory: '../../coverage/apps/admin', 15 | testEnvironment: 'jsdom', 16 | }; 17 | 18 | module.exports = createJestConfig(config); 19 | -------------------------------------------------------------------------------- /apps/api/src/app/admin/admin.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { AdminController } from './admin.controller.js'; 3 | import { AdminService } from './admin.service.js'; 4 | import { PrismaModule } from '../prisma/prisma.module.js'; 5 | import { OnboardingModule } from '../onboarding/onboarding.module.js'; 6 | 7 | @Module({ 8 | imports: [PrismaModule, OnboardingModule], 9 | controllers: [AdminController], 10 | providers: [AdminService], 11 | exports: [AdminService], 12 | }) 13 | export class AdminModule {} 14 | 15 | -------------------------------------------------------------------------------- /apps/nuo-nx/jest.config.cts: -------------------------------------------------------------------------------- 1 | const nextJest = require('next/jest.js'); 2 | 3 | const createJestConfig = nextJest({ 4 | dir: './', 5 | }); 6 | 7 | const config = { 8 | displayName: '@nuo-nx/nuo-nx', 9 | preset: '../../jest.preset.js', 10 | transform: { 11 | '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': '@nx/react/plugins/jest', 12 | }, 13 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], 14 | coverageDirectory: '../../coverage/apps/nuo-nx', 15 | testEnvironment: 'jsdom', 16 | }; 17 | 18 | module.exports = createJestConfig(config); 19 | -------------------------------------------------------------------------------- /apps/admin/postcss.config.js: -------------------------------------------------------------------------------- 1 | const { join } = require('path'); 2 | 3 | // Note: If you use library-specific PostCSS/Tailwind configuration then you should remove the `postcssConfig` build 4 | // option from your application's configuration (i.e. project.json). 5 | // 6 | // See: https://nx.dev/guides/using-tailwind-css-in-react#step-4:-applying-configuration-to-libraries 7 | 8 | module.exports = { 9 | plugins: { 10 | tailwindcss: { 11 | config: join(__dirname, 'tailwind.config.js'), 12 | }, 13 | autoprefixer: {}, 14 | }, 15 | }; 16 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "", 8 | "css": "app/globals.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils", 16 | "ui": "@/components/ui", 17 | "lib": "@/lib", 18 | "hooks": "@/hooks" 19 | }, 20 | "iconLibrary": "lucide" 21 | } 22 | -------------------------------------------------------------------------------- /apps/nuo-nx/postcss.config.js: -------------------------------------------------------------------------------- 1 | const { join } = require('path'); 2 | 3 | // Note: If you use library-specific PostCSS/Tailwind configuration then you should remove the `postcssConfig` build 4 | // option from your application's configuration (i.e. project.json). 5 | // 6 | // See: https://nx.dev/guides/using-tailwind-css-in-react#step-4:-applying-configuration-to-libraries 7 | 8 | module.exports = { 9 | plugins: { 10 | tailwindcss: { 11 | config: join(__dirname, 'tailwind.config.js'), 12 | }, 13 | autoprefixer: {}, 14 | }, 15 | }; 16 | -------------------------------------------------------------------------------- /apps/admin/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.js", 8 | "css": "src/app/global.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "iconLibrary": "lucide", 14 | "aliases": { 15 | "components": "@/components", 16 | "utils": "@/lib/utils", 17 | "ui": "@/components/ui", 18 | "lib": "@/lib", 19 | "hooks": "@/hooks" 20 | } 21 | } 22 | 23 | -------------------------------------------------------------------------------- /apps/nuo-nx/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.js", 8 | "css": "src/app/globals.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "iconLibrary": "lucide", 14 | "aliases": { 15 | "components": "@/components", 16 | "utils": "@/lib/utils", 17 | "ui": "@/components/ui", 18 | "lib": "@/lib", 19 | "hooks": "@/hooks" 20 | } 21 | } 22 | 23 | -------------------------------------------------------------------------------- /packages/types/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nuo-nx/types", 3 | "version": "0.0.1", 4 | "private": true, 5 | "type": "module", 6 | "main": "./dist/index.js", 7 | "module": "./dist/index.js", 8 | "types": "./dist/index.d.ts", 9 | "exports": { 10 | "./package.json": "./package.json", 11 | ".": { 12 | "@nuo-nx/source": "./src/index.ts", 13 | "types": "./dist/index.d.ts", 14 | "import": "./dist/index.js", 15 | "default": "./dist/index.js" 16 | } 17 | }, 18 | "dependencies": { 19 | "tslib": "^2.3.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/utils/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nuo-nx/utils", 3 | "version": "0.0.1", 4 | "private": true, 5 | "type": "module", 6 | "main": "./dist/index.js", 7 | "module": "./dist/index.js", 8 | "types": "./dist/index.d.ts", 9 | "exports": { 10 | "./package.json": "./package.json", 11 | ".": { 12 | "@nuo-nx/source": "./src/index.ts", 13 | "types": "./dist/index.d.ts", 14 | "import": "./dist/index.js", 15 | "default": "./dist/index.js" 16 | } 17 | }, 18 | "dependencies": { 19 | "tslib": "^2.3.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/components/dashboard/pages/documents/TemplateGallery.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { AnimatePresence } from 'framer-motion'; 4 | import { TemplateGrid } from './TemplateGrid'; 5 | 6 | interface TemplateGalleryProps { 7 | tenantId: string | null; 8 | onClose: () => void; 9 | } 10 | 11 | export function TemplateGallery({ tenantId, onClose }: TemplateGalleryProps) { 12 | 13 | return ( 14 | 15 | 19 | 20 | ); 21 | } -------------------------------------------------------------------------------- /packages/auth/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "rootDir": "src", 6 | "outDir": "dist", 7 | "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", 8 | "emitDeclarationOnly": false, 9 | "module": "nodenext", 10 | "moduleResolution": "nodenext", 11 | "forceConsistentCasingInFileNames": true, 12 | "types": ["node"] 13 | }, 14 | "include": ["src/**/*.ts"], 15 | "references": [ 16 | { 17 | "path": "../config/tsconfig.lib.json" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /packages/prisma/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "rootDir": "src", 6 | "outDir": "dist", 7 | "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", 8 | "emitDeclarationOnly": false, 9 | "module": "nodenext", 10 | "moduleResolution": "nodenext", 11 | "forceConsistentCasingInFileNames": true, 12 | "types": ["node"] 13 | }, 14 | "include": ["src/**/*.ts"], 15 | "references": [ 16 | { 17 | "path": "../config/tsconfig.lib.json" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /packages/config/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nuo-nx/config", 3 | "version": "0.0.1", 4 | "private": true, 5 | "type": "module", 6 | "main": "./dist/index.js", 7 | "module": "./dist/index.js", 8 | "types": "./dist/index.d.ts", 9 | "exports": { 10 | "./package.json": "./package.json", 11 | ".": { 12 | "@nuo-nx/source": "./src/index.ts", 13 | "types": "./dist/index.d.ts", 14 | "import": "./dist/index.js", 15 | "default": "./dist/index.js" 16 | } 17 | }, 18 | "dependencies": { 19 | "tslib": "^2.3.0", 20 | "zod": "^3.22.4" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /apps/api/src/app/app.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test } from '@nestjs/testing'; 2 | import { AppService } from './app.service'; 3 | 4 | describe('AppService', () => { 5 | let service: AppService; 6 | 7 | beforeAll(async () => { 8 | const app = await Test.createTestingModule({ 9 | providers: [AppService], 10 | }).compile(); 11 | 12 | service = app.get(AppService); 13 | }); 14 | 15 | describe('getData', () => { 16 | it('should return "Hello API"', () => { 17 | expect(service.getData()).toEqual({ message: 'Hello API' }); 18 | }); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /apps/worker/src/app/app.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test } from '@nestjs/testing'; 2 | import { AppService } from './app.service'; 3 | 4 | describe('AppService', () => { 5 | let service: AppService; 6 | 7 | beforeAll(async () => { 8 | const app = await Test.createTestingModule({ 9 | providers: [AppService], 10 | }).compile(); 11 | 12 | service = app.get(AppService); 13 | }); 14 | 15 | describe('getData', () => { 16 | it('should return "Hello API"', () => { 17 | expect(service.getData()).toEqual({message: 'Hello API'}); 18 | }); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /apps/admin-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "outDir": "out-tsc/playwright", 6 | "sourceMap": false 7 | }, 8 | "include": [ 9 | "**/*.ts", 10 | "**/*.js", 11 | "playwright.config.ts", 12 | "src/**/*.spec.ts", 13 | "src/**/*.spec.js", 14 | "src/**/*.test.ts", 15 | "src/**/*.test.js", 16 | "src/**/*.d.ts" 17 | ], 18 | "exclude": [ 19 | "out-tsc", 20 | "test-output", 21 | "eslint.config.js", 22 | "eslint.config.mjs", 23 | "eslint.config.cjs" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /apps/nuo-nx-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "outDir": "out-tsc/playwright", 6 | "sourceMap": false 7 | }, 8 | "include": [ 9 | "**/*.ts", 10 | "**/*.js", 11 | "playwright.config.ts", 12 | "src/**/*.spec.ts", 13 | "src/**/*.spec.js", 14 | "src/**/*.test.ts", 15 | "src/**/*.test.js", 16 | "src/**/*.d.ts" 17 | ], 18 | "exclude": [ 19 | "out-tsc", 20 | "test-output", 21 | "eslint.config.js", 22 | "eslint.config.mjs", 23 | "eslint.config.cjs" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/components/dashboard/pages/documents/signage/DocumentSignHeader.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | export function DocumentSignHeader() { 4 | return ( 5 |
6 |

Document Signing Center

7 |

8 | Manage document signatures, track signing progress, and ensure all parties complete their required signatures. 9 | Documents can be signed electronically with digital signatures and comments. 10 |

11 |
12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /apps/worker/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "./out-tsc/jest", 5 | "types": [ 6 | "jest", 7 | "node" 8 | ], 9 | "module": "nodenext", 10 | "moduleResolution": "nodenext", 11 | "experimentalDecorators": true, 12 | "emitDecoratorMetadata": true 13 | }, 14 | "include": [ 15 | "jest.config.ts", 16 | "jest.config.cts", 17 | "src/**/*.test.ts", 18 | "src/**/*.spec.ts", 19 | "src/**/*.d.ts" 20 | ], 21 | "references": [ 22 | { 23 | "path": "./tsconfig.app.json" 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /apps/admin/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "./out-tsc/jest", 5 | "jsx": "preserve", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "jest.config.ts", 10 | "jest.config.cts", 11 | "src/**/*.test.ts", 12 | "src/**/*.spec.ts", 13 | "src/**/*.test.tsx", 14 | "src/**/*.spec.tsx", 15 | "src/**/*.test.js", 16 | "src/**/*.spec.js", 17 | "src/**/*.test.jsx", 18 | "src/**/*.spec.jsx", 19 | "src/**/*.d.ts" 20 | ], 21 | "references": [ 22 | { 23 | "path": "./tsconfig.json" 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /apps/nuo-nx/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "./out-tsc/jest", 5 | "jsx": "preserve", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "jest.config.ts", 10 | "jest.config.cts", 11 | "src/**/*.test.ts", 12 | "src/**/*.spec.ts", 13 | "src/**/*.test.tsx", 14 | "src/**/*.spec.tsx", 15 | "src/**/*.test.js", 16 | "src/**/*.spec.js", 17 | "src/**/*.test.jsx", 18 | "src/**/*.spec.jsx", 19 | "src/**/*.d.ts" 20 | ], 21 | "references": [ 22 | { 23 | "path": "./tsconfig.json" 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /apps/worker/src/main.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This is not a production server yet! 3 | * This is only a minimal backend to get started. 4 | */ 5 | 6 | import { Logger } from '@nestjs/common'; 7 | import { NestFactory } from '@nestjs/core'; 8 | import { AppModule } from './app/app.module'; 9 | 10 | async function bootstrap() { 11 | const app = await NestFactory.create(AppModule); 12 | const globalPrefix = 'api'; 13 | app.setGlobalPrefix(globalPrefix); 14 | const port = process.env.PORT || 3000; 15 | await app.listen(port); 16 | Logger.log(`🚀 Application is running on: http://localhost:${port}/${globalPrefix}`); 17 | } 18 | 19 | bootstrap(); 20 | -------------------------------------------------------------------------------- /apps/api-e2e/src/support/global-setup.ts: -------------------------------------------------------------------------------- 1 | import { waitForPortOpen } from '@nx/node/utils'; 2 | 3 | /* eslint-disable */ 4 | var __TEARDOWN_MESSAGE__: string; 5 | 6 | module.exports = async function () { 7 | // Start services that that the app needs to run (e.g. database, docker-compose, etc.). 8 | console.log('\nSetting up...\n'); 9 | 10 | const host = process.env.HOST ?? 'localhost'; 11 | const port = process.env.PORT ? Number(process.env.PORT) : 3000; 12 | await waitForPortOpen(port, { host }); 13 | 14 | // Hint: Use `globalThis` to pass variables to global teardown. 15 | globalThis.__TEARDOWN_MESSAGE__ = '\nTearing down...\n'; 16 | }; 17 | -------------------------------------------------------------------------------- /apps/worker-e2e/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nuo-nx/worker-e2e", 3 | "version": "0.0.1", 4 | "private": true, 5 | "nx": { 6 | "implicitDependencies": [ 7 | "worker" 8 | ], 9 | "targets": { 10 | "e2e": { 11 | "executor": "@nx/jest:jest", 12 | "outputs": [ 13 | "{projectRoot}/test-output/jest/coverage" 14 | ], 15 | "options": { 16 | "jestConfig": "apps/worker-e2e/jest.config.cts", 17 | "passWithNoTests": true 18 | }, 19 | "dependsOn": [ 20 | "worker:build", 21 | "worker:serve" 22 | ] 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /apps/admin/src/components/dashboard/types.ts: -------------------------------------------------------------------------------- 1 | export interface Notification { 2 | id: string; 3 | type: string; 4 | title: string; 5 | message: string; 6 | isRead: boolean; 7 | relatedItemId?: string; 8 | relatedItemType?: string; 9 | createdAt: string; 10 | } 11 | 12 | export interface User { 13 | id: string; 14 | firstName?: string | null; 15 | lastName?: string | null; 16 | email: string; 17 | role?: { 18 | id: string; 19 | name: string; 20 | } | string; 21 | permissions?: string[]; 22 | roles?: string[]; 23 | isActive?: boolean; 24 | emailVerified?: boolean; 25 | createdAt?: string | Date; 26 | } 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /apps/worker-e2e/src/support/global-setup.ts: -------------------------------------------------------------------------------- 1 | import { waitForPortOpen } from '@nx/node/utils'; 2 | 3 | /* eslint-disable */ 4 | var __TEARDOWN_MESSAGE__: string; 5 | 6 | module.exports = async function() { 7 | // Start services that that the app needs to run (e.g. database, docker-compose, etc.). 8 | console.log('\nSetting up...\n'); 9 | 10 | const host = process.env.HOST ?? 'localhost'; 11 | const port = process.env.PORT ? Number(process.env.PORT) : 3000; 12 | await waitForPortOpen(port, { host }); 13 | 14 | // Hint: Use `globalThis` to pass variables to global teardown. 15 | globalThis.__TEARDOWN_MESSAGE__ = '\nTearing down...\n'; 16 | }; 17 | 18 | -------------------------------------------------------------------------------- /packages/storage/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nuo-nx/storage", 3 | "version": "0.0.1", 4 | "private": true, 5 | "type": "module", 6 | "main": "./dist/index.js", 7 | "module": "./dist/index.js", 8 | "types": "./dist/index.d.ts", 9 | "exports": { 10 | "./package.json": "./package.json", 11 | ".": { 12 | "@nuo-nx/source": "./src/index.ts", 13 | "types": "./dist/index.d.ts", 14 | "import": "./dist/index.js", 15 | "default": "./dist/index.js" 16 | } 17 | }, 18 | "dependencies": { 19 | "tslib": "^2.3.0", 20 | "@aws-sdk/client-s3": "^3.0.0", 21 | "@aws-sdk/s3-request-presigner": "^3.0.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /apps/admin/src/hooks/use-mobile.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | const MOBILE_BREAKPOINT = 768 4 | 5 | export function useIsMobile() { 6 | const [isMobile, setIsMobile] = React.useState(undefined) 7 | 8 | React.useEffect(() => { 9 | const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`) 10 | const onChange = () => { 11 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 12 | } 13 | mql.addEventListener("change", onChange) 14 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 15 | return () => mql.removeEventListener("change", onChange) 16 | }, []) 17 | 18 | return !!isMobile 19 | } 20 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/hooks/use-mobile.ts: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | const MOBILE_BREAKPOINT = 768 4 | 5 | export function useIsMobile() { 6 | const [isMobile, setIsMobile] = React.useState(undefined) 7 | 8 | React.useEffect(() => { 9 | const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`) 10 | const onChange = () => { 11 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 12 | } 13 | mql.addEventListener("change", onChange) 14 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 15 | return () => mql.removeEventListener("change", onChange) 16 | }, []) 17 | 18 | return !!isMobile 19 | } 20 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/hooks/use-mobile.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | const MOBILE_BREAKPOINT = 768 4 | 5 | export function useIsMobile() { 6 | const [isMobile, setIsMobile] = React.useState(undefined) 7 | 8 | React.useEffect(() => { 9 | const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`) 10 | const onChange = () => { 11 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 12 | } 13 | mql.addEventListener("change", onChange) 14 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 15 | return () => mql.removeEventListener("change", onChange) 16 | }, []) 17 | 18 | return !!isMobile 19 | } 20 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/hooks/use-mobile.ts: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | 3 | const MOBILE_BREAKPOINT = 768 4 | 5 | export function useIsMobile() { 6 | const [isMobile, setIsMobile] = React.useState(undefined) 7 | 8 | React.useEffect(() => { 9 | const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`) 10 | const onChange = () => { 11 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 12 | } 13 | mql.addEventListener('change', onChange) 14 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 15 | return () => mql.removeEventListener('change', onChange) 16 | }, []) 17 | 18 | return !!isMobile 19 | } 20 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/components/ui/use-mobile.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | 3 | const MOBILE_BREAKPOINT = 768 4 | 5 | export function useIsMobile() { 6 | const [isMobile, setIsMobile] = React.useState(undefined) 7 | 8 | React.useEffect(() => { 9 | const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`) 10 | const onChange = () => { 11 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 12 | } 13 | mql.addEventListener('change', onChange) 14 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 15 | return () => mql.removeEventListener('change', onChange) 16 | }, []) 17 | 18 | return !!isMobile 19 | } 20 | -------------------------------------------------------------------------------- /packages/document-utils/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "ESNext", 5 | "moduleResolution": "bundler", 6 | "target": "ES2020", 7 | "lib": ["ES2020", "DOM"], 8 | "jsx": "react", 9 | "declaration": true, 10 | "outDir": "./dist", 11 | "rootDir": "./src", 12 | "composite": true, 13 | "declarationMap": true, 14 | "sourceMap": true 15 | }, 16 | "include": ["src/**/*"], 17 | "exclude": ["node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"], 18 | "references": [ 19 | { 20 | "path": "../prisma" 21 | }, 22 | { 23 | "path": "../storage" 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /packages/graphql/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "rootDir": "src", 6 | "outDir": "dist", 7 | "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", 8 | "emitDeclarationOnly": false, 9 | "module": "nodenext", 10 | "moduleResolution": "nodenext", 11 | "forceConsistentCasingInFileNames": true, 12 | "types": ["node"], 13 | "esModuleInterop": true, 14 | "allowSyntheticDefaultImports": true, 15 | "resolveJsonModule": true 16 | }, 17 | "include": ["src/**/*.ts"], 18 | "references": [ 19 | { 20 | "path": "../prisma/tsconfig.lib.json" 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /apps/admin/.swcrc: -------------------------------------------------------------------------------- 1 | { 2 | "jsc": { 3 | "target": "es2017", 4 | "parser": { 5 | "syntax": "typescript", 6 | "decorators": true, 7 | "dynamicImport": true 8 | }, 9 | "transform": { 10 | "decoratorMetadata": true, 11 | "legacyDecorator": true 12 | }, 13 | "keepClassNames": true, 14 | "externalHelpers": true, 15 | "loose": true 16 | }, 17 | "module": { 18 | "type": "commonjs" 19 | }, 20 | "sourceMaps": true, 21 | "exclude": [ 22 | "jest.config.[ct]s", 23 | ".*\\.spec.tsx?$", 24 | ".*\\.test.tsx?$", 25 | "./src/jest-setup.ts$", 26 | "./**/jest-setup.ts$", 27 | ".*.js$", 28 | ".*.d.ts$" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /apps/nuo-nx/.swcrc: -------------------------------------------------------------------------------- 1 | { 2 | "jsc": { 3 | "target": "es2017", 4 | "parser": { 5 | "syntax": "typescript", 6 | "decorators": true, 7 | "dynamicImport": true 8 | }, 9 | "transform": { 10 | "decoratorMetadata": true, 11 | "legacyDecorator": true 12 | }, 13 | "keepClassNames": true, 14 | "externalHelpers": true, 15 | "loose": true 16 | }, 17 | "module": { 18 | "type": "commonjs" 19 | }, 20 | "sourceMaps": true, 21 | "exclude": [ 22 | "jest.config.[ct]s", 23 | ".*\\.spec.tsx?$", 24 | ".*\\.test.tsx?$", 25 | "./src/jest-setup.ts$", 26 | "./**/jest-setup.ts$", 27 | ".*.js$", 28 | ".*.d.ts$" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /apps/api/jest.config.cts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | const { readFileSync } = require('fs'); 3 | 4 | // Reading the SWC compilation config for the spec files 5 | const swcJestConfig = JSON.parse( 6 | readFileSync(`${__dirname}/.spec.swcrc`, 'utf-8') 7 | ); 8 | 9 | // Disable .swcrc look-up by SWC core because we're passing in swcJestConfig ourselves 10 | swcJestConfig.swcrc = false; 11 | 12 | module.exports = { 13 | displayName: '@nuo-nx/api', 14 | preset: '../../jest.preset.js', 15 | testEnvironment: 'node', 16 | transform: { 17 | '^.+\\.[tj]s$': ['@swc/jest', swcJestConfig], 18 | }, 19 | moduleFileExtensions: ['ts', 'js', 'html'], 20 | coverageDirectory: 'test-output/jest/coverage', 21 | }; 22 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/components/ui/sonner.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import { useTheme } from 'next-themes' 4 | import { Toaster as Sonner, ToasterProps } from 'sonner' 5 | 6 | const Toaster = ({ ...props }: ToasterProps) => { 7 | const { theme = 'system' } = useTheme() 8 | 9 | return ( 10 | 22 | ) 23 | } 24 | 25 | export { Toaster } 26 | -------------------------------------------------------------------------------- /apps/worker/jest.config.cts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | const { readFileSync } = require('fs') 3 | 4 | // Reading the SWC compilation config for the spec files 5 | const swcJestConfig = JSON.parse( 6 | readFileSync(`${__dirname}/.spec.swcrc`, 'utf-8') 7 | ); 8 | 9 | // Disable .swcrc look-up by SWC core because we're passing in swcJestConfig ourselves 10 | swcJestConfig.swcrc = false; 11 | 12 | module.exports = { 13 | displayName: '@nuo-nx/worker', 14 | preset: '../../jest.preset.js', 15 | testEnvironment: 'node', 16 | transform: { 17 | '^.+\\.[tj]s$': ['@swc/jest', swcJestConfig] 18 | }, 19 | moduleFileExtensions: ['ts', 'js', 'html'], 20 | coverageDirectory: 'test-output/jest/coverage' 21 | }; 22 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/app/page.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import { Hero } from "@/components/main/pages/Hero" 4 | import { BusinessInfrastructure } from "@/components/main/pages/BusinessInfrastructure" 5 | import { Markets } from "@/components/main/pages/markets/MarketsPage" 6 | import { CTA } from "@/components/main/pages/CTA" 7 | import { useLanguage } from "@/contexts/lang/LanguageContext" 8 | 9 | export default function HomePage() { 10 | const { language } = useLanguage(); 11 | return ( 12 |
13 | 14 | 15 | 16 | 17 |
18 | ) 19 | } 20 | 21 | -------------------------------------------------------------------------------- /apps/api/src/app/app.controller.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { AppController } from './app.controller'; 3 | import { AppService } from './app.service'; 4 | 5 | describe('AppController', () => { 6 | let app: TestingModule; 7 | 8 | beforeAll(async () => { 9 | app = await Test.createTestingModule({ 10 | controllers: [AppController], 11 | providers: [AppService], 12 | }).compile(); 13 | }); 14 | 15 | describe('getData', () => { 16 | it('should return "Hello API"', () => { 17 | const appController = app.get(AppController); 18 | expect(appController.getData()).toEqual({ message: 'Hello API' }); 19 | }); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /apps/worker/src/app/app.controller.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { AppController } from './app.controller'; 3 | import { AppService } from './app.service'; 4 | 5 | describe('AppController', () => { 6 | let app: TestingModule; 7 | 8 | beforeAll(async () => { 9 | app = await Test.createTestingModule({ 10 | controllers: [AppController], 11 | providers: [AppService], 12 | }).compile(); 13 | }); 14 | 15 | describe('getData', () => { 16 | it('should return "Hello API"', () => { 17 | const appController = app.get(AppController); 18 | expect(appController.getData()).toEqual({message: 'Hello API'}); 19 | }); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["dom", "dom.iterable", "esnext"], 4 | "allowJs": true, 5 | "target": "ES6", 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "preserve", 15 | "incremental": true, 16 | "plugins": [ 17 | { 18 | "name": "next" 19 | } 20 | ], 21 | "paths": { 22 | "@/*": ["./*"] 23 | } 24 | }, 25 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 26 | "exclude": ["node_modules"] 27 | } 28 | -------------------------------------------------------------------------------- /apps/nuo-dashboard-ui/components/ui/label.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import * as React from 'react' 4 | import * as LabelPrimitive from '@radix-ui/react-label' 5 | 6 | import { cn } from '@/lib/utils' 7 | 8 | function Label({ 9 | className, 10 | ...props 11 | }: React.ComponentProps) { 12 | return ( 13 | 21 | ) 22 | } 23 | 24 | export { Label } 25 | -------------------------------------------------------------------------------- /apps/worker/webpack.config.js: -------------------------------------------------------------------------------- 1 | const { NxAppWebpackPlugin } = require('@nx/webpack/app-plugin'); 2 | const { join } = require('path'); 3 | 4 | module.exports = { 5 | output: { 6 | path: join(__dirname, 'dist'), 7 | clean: true, 8 | ...(process.env.NODE_ENV !== 'production' && { 9 | devtoolModuleFilenameTemplate: '[absolute-resource-path]', 10 | }), 11 | }, 12 | plugins: [ 13 | new NxAppWebpackPlugin({ 14 | target: 'node', 15 | compiler: 'tsc', 16 | main: './src/main.ts', 17 | tsConfig: './tsconfig.app.json', 18 | assets: ["./src/assets"], 19 | optimization: false, 20 | outputHashing: 'none', 21 | generatePackageJson: true, 22 | sourceMaps: true, 23 | }) 24 | ], 25 | }; 26 | -------------------------------------------------------------------------------- /packages/document-utils/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "rootDir": "src", 6 | "outDir": "dist", 7 | "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", 8 | "emitDeclarationOnly": false, 9 | "module": "nodenext", 10 | "moduleResolution": "nodenext", 11 | "forceConsistentCasingInFileNames": true, 12 | "jsx": "react-jsx", 13 | "skipLibCheck": true, 14 | "types": ["node"] 15 | }, 16 | "include": ["src/**/*.ts", "src/**/*.tsx", "src/types/**/*.d.ts"], 17 | "references": [ 18 | { 19 | "path": "../storage/tsconfig.lib.json" 20 | }, 21 | { 22 | "path": "../prisma/tsconfig.lib.json" 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /apps/api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nuo-nx/api", 3 | "version": "0.0.1", 4 | "private": true, 5 | "dependencies": { 6 | "@nestjs/common": "^11.0.0", 7 | "@nestjs/core": "^11.0.0", 8 | "@nestjs/platform-express": "^11.0.0", 9 | "@nestjs/graphql": "^13.0.0", 10 | "@nestjs/apollo": "^13.0.0", 11 | "@apollo/server": "^5.0.0", 12 | "graphql": "^16.8.1", 13 | "reflect-metadata": "^0.1.13", 14 | "rxjs": "^7.8.0", 15 | "tslib": "^2.3.0", 16 | "@nuo-nx/prisma": "*", 17 | "@nuo-nx/graphql": "*", 18 | "@nuo-nx/auth": "*", 19 | "@nuo-nx/config": "*", 20 | "bcryptjs": "^2.4.3" 21 | }, 22 | "devDependencies": { 23 | "@nestjs/testing": "^11.0.0", 24 | "@types/bcryptjs": "^2.4.6" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /apps/nuo-nx/src/components/dashboard/hooks/useOnClickOutside.ts: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { useEffect, RefObject } from 'react'; 4 | 5 | export function useOnClickOutside( 6 | ref: RefObject, 7 | enabled: boolean, 8 | handler: () => void 9 | ) { 10 | useEffect(() => { 11 | if (!enabled) return; 12 | 13 | const handleClickOutside = (event: MouseEvent) => { 14 | if (ref.current && !ref.current.contains(event.target as Node)) { 15 | handler(); 16 | } 17 | }; 18 | 19 | document.addEventListener('mousedown', handleClickOutside); 20 | 21 | return () => { 22 | document.removeEventListener('mousedown', handleClickOutside); 23 | }; 24 | }, [ref, enabled, handler]); 25 | } 26 | 27 | 28 | -------------------------------------------------------------------------------- /apps/admin/src/components/dashboard/hooks/useOnClickOutside.ts: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { useEffect, RefObject } from 'react'; 4 | 5 | export function useOnClickOutside( 6 | ref: RefObject, 7 | enabled: boolean, 8 | handler: () => void 9 | ) { 10 | useEffect(() => { 11 | if (!enabled) return; 12 | 13 | const handleClickOutside = (event: MouseEvent) => { 14 | if (ref.current && !ref.current.contains(event.target as Node)) { 15 | handler(); 16 | } 17 | }; 18 | 19 | document.addEventListener('mousedown', handleClickOutside); 20 | 21 | return () => { 22 | document.removeEventListener('mousedown', handleClickOutside); 23 | }; 24 | }, [ref, enabled, handler]); 25 | } 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /apps/admin/src/components/ui/textarea.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import { cn } from "@/lib/utils" 4 | 5 | const Textarea = React.forwardRef< 6 | HTMLTextAreaElement, 7 | React.ComponentProps<"textarea"> 8 | >(({ className, ...props }, ref) => { 9 | return ( 10 |