sea-dev 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/tasks/README.md +89 -0
- package/.cursor/rules/commits.mdc +31 -0
- package/.cursor/rules/general.mdc +84 -0
- package/.github/workflows/ci-cd.yml +141 -0
- package/CLAUDE.md +337 -0
- package/README.md +129 -0
- package/apps/api/.prettierignore +6 -0
- package/apps/api/.prettierrc.js +3 -0
- package/apps/api/dotenvx-safe.sh +11 -0
- package/apps/api/eslint.config.mjs +3 -0
- package/apps/api/package.json +58 -0
- package/apps/api/src/clients/posthog.ts +25 -0
- package/apps/api/src/dal/submission.ts +59 -0
- package/apps/api/src/errors.ts +55 -0
- package/apps/api/src/index.ts +21 -0
- package/apps/api/src/lib/channel.ts +28 -0
- package/apps/api/src/lib/config.ts +9 -0
- package/apps/api/src/lib/fmt.test.ts +9 -0
- package/apps/api/src/lib/fmt.ts +62 -0
- package/apps/api/src/lib/invariant.ts +23 -0
- package/apps/api/src/middleware/auth.ts +66 -0
- package/apps/api/src/routes/index.ts +20 -0
- package/apps/api/src/routes/v2/chat/handlers.ts +693 -0
- package/apps/api/src/routes/v2/chat/index.ts +257 -0
- package/apps/api/src/routes/v2/chat/schemas.ts +43 -0
- package/apps/api/src/routes/v2/deals/handlers.ts +64 -0
- package/apps/api/src/routes/v2/deals/index.ts +88 -0
- package/apps/api/src/routes/v2/deals/schemas.ts +38 -0
- package/apps/api/src/routes/v2/forms/handlers.ts +415 -0
- package/apps/api/src/routes/v2/forms/index.ts +382 -0
- package/apps/api/src/routes/v2/forms/schemas.ts +243 -0
- package/apps/api/src/routes/v2/index.ts +19 -0
- package/apps/api/src/routes/v2/pipelines/handlers.ts +261 -0
- package/apps/api/src/routes/v2/pipelines/index.ts +224 -0
- package/apps/api/src/routes/v2/pipelines/schemas.ts +173 -0
- package/apps/api/src/routes/v2/submissions/handlers.ts +555 -0
- package/apps/api/src/routes/v2/submissions/index.ts +366 -0
- package/apps/api/src/routes/v2/submissions/schemas.ts +233 -0
- package/apps/api/src/routes/v2/workflows/handlers.ts +81 -0
- package/apps/api/src/routes/v2/workflows/index.ts +88 -0
- package/apps/api/src/routes/v2/workflows/schemas.ts +40 -0
- package/apps/api/src/server.ts +146 -0
- package/apps/api/src/static/favicon.ico +0 -0
- package/apps/api/src/types/api.ts +14 -0
- package/apps/api/src/types/result.ts +3 -0
- package/apps/api/tsconfig.json +22 -0
- package/apps/api/vite.config.ts +28 -0
- package/apps/api/vitest.config.ts +14 -0
- package/apps/conversion-worker/Dockerfile +59 -0
- package/apps/conversion-worker/package.json +31 -0
- package/apps/conversion-worker/src/lib/config.ts +7 -0
- package/apps/conversion-worker/src/main.ts +22 -0
- package/apps/conversion-worker/src/workflows/convert-pptx.ts +116 -0
- package/apps/conversion-worker/tsconfig.json +27 -0
- package/apps/conversion-worker/vite.config.ts +33 -0
- package/apps/main/.prettierignore +6 -0
- package/apps/main/.prettierrc.js +3 -0
- package/apps/main/CLAUDE.md +245 -0
- package/apps/main/Procfile +1 -0
- package/apps/main/README.md +193 -0
- package/apps/main/db-tests.jsonl +116 -0
- package/apps/main/dotenvx-safe.sh +11 -0
- package/apps/main/drizzle/meta/_journal.json +1 -0
- package/apps/main/drizzle.config.ts +25 -0
- package/apps/main/eslint.config.mjs +3 -0
- package/apps/main/generate-routes.mjs +5 -0
- package/apps/main/package.json +131 -0
- package/apps/main/playwright.config.ts +23 -0
- package/apps/main/postcss.config.ts +5 -0
- package/apps/main/public/bg-dark.svg +10 -0
- package/apps/main/public/bg.svg +10 -0
- package/apps/main/public/favicon.ico +0 -0
- package/apps/main/run.sh +146 -0
- package/apps/main/scripts/browser.ts +14 -0
- package/apps/main/scripts/db-test-cov.ts +277 -0
- package/apps/main/scripts/login.ts +78 -0
- package/apps/main/scripts/repl.ts +61 -0
- package/apps/main/src/_foo.ts +31 -0
- package/apps/main/src/_tests/db.test.ts +19 -0
- package/apps/main/src/_tests/mock-db.ts +60 -0
- package/apps/main/src/client.tsx +13 -0
- package/apps/main/src/clients/loops.ts +13 -0
- package/apps/main/src/clients/polar.ts +12 -0
- package/apps/main/src/clients/posthog.ts +12 -0
- package/apps/main/src/components/chat/chat-context.tsx +99 -0
- package/apps/main/src/components/chat/chat-messages.tsx +184 -0
- package/apps/main/src/components/chat/chat-status.tsx +140 -0
- package/apps/main/src/components/chat/chat.tsx +458 -0
- package/apps/main/src/components/chat/citation-modal.tsx +54 -0
- package/apps/main/src/components/cta.tsx +21 -0
- package/apps/main/src/components/data-display/derived.tsx +40 -0
- package/apps/main/src/components/data-display/group-single.tsx +57 -0
- package/apps/main/src/components/data-display/group-table.tsx +165 -0
- package/apps/main/src/components/data-display/group-wrapper.tsx +54 -0
- package/apps/main/src/components/data-display/item.tsx +678 -0
- package/apps/main/src/components/error.tsx +45 -0
- package/apps/main/src/components/forms/error.tsx +22 -0
- package/apps/main/src/components/grid.tsx +7 -0
- package/apps/main/src/components/header/container.tsx +73 -0
- package/apps/main/src/components/header/header-bar.tsx +102 -0
- package/apps/main/src/components/modals/copy-display.tsx +37 -0
- package/apps/main/src/components/modals/copy-form.tsx +152 -0
- package/apps/main/src/components/modals/duplicate-workflow.tsx +89 -0
- package/apps/main/src/components/modals/field-correction.tsx +323 -0
- package/apps/main/src/components/modals/form-viewer.tsx +126 -0
- package/apps/main/src/components/modals/modals.tsx +44 -0
- package/apps/main/src/components/modals/new-deal.tsx +78 -0
- package/apps/main/src/components/modals/new-form.tsx +133 -0
- package/apps/main/src/components/modals/new-pipeline.tsx +70 -0
- package/apps/main/src/components/modals/new-submission.tsx +321 -0
- package/apps/main/src/components/modals/new-workflow.tsx +342 -0
- package/apps/main/src/components/modals/transformation-sources-modal.tsx +157 -0
- package/apps/main/src/components/modals/view-report.tsx +193 -0
- package/apps/main/src/components/not-found.tsx +14 -0
- package/apps/main/src/components/search/search-bar.tsx +178 -0
- package/apps/main/src/components/sheet-selector.tsx +135 -0
- package/apps/main/src/components/side-panel/doc-list.tsx +480 -0
- package/apps/main/src/components/sidebar/admin-sidebar.tsx +75 -0
- package/apps/main/src/components/sidebar/app-sidebar.tsx +417 -0
- package/apps/main/src/components/sidebar/model-select.tsx +134 -0
- package/apps/main/src/components/sidebar/settings-sidebar.tsx +132 -0
- package/apps/main/src/components/sidebar/sidebar-right.tsx +22 -0
- package/apps/main/src/components/sidebar/stop-impersonate.tsx +21 -0
- package/apps/main/src/components/svg/loading.tsx +33 -0
- package/apps/main/src/components/theme-selector.tsx +43 -0
- package/apps/main/src/components/unsaved-badge.tsx +19 -0
- package/apps/main/src/components/upload/file-upload.tsx +354 -0
- package/apps/main/src/fns/submission-groups.ts +28 -0
- package/apps/main/src/fns/submission-items.ts +11 -0
- package/apps/main/src/global-middleware.ts +16 -0
- package/apps/main/src/hooks/use-update-state.ts +18 -0
- package/apps/main/src/lib/auth-client.ts +16 -0
- package/apps/main/src/lib/auth.test.ts +359 -0
- package/apps/main/src/lib/auth.ts +144 -0
- package/apps/main/src/lib/billing.ts +23 -0
- package/apps/main/src/lib/config-iso.ts +76 -0
- package/apps/main/src/lib/config.ts +61 -0
- package/apps/main/src/lib/excel.ts +16 -0
- package/apps/main/src/lib/feedback-cache.ts +70 -0
- package/apps/main/src/lib/logger.ts +44 -0
- package/apps/main/src/lib/models.ts +22 -0
- package/apps/main/src/lib/not-found.ts +17 -0
- package/apps/main/src/lib/pdf.ts +16 -0
- package/apps/main/src/lib/tabularize.ts +54 -0
- package/apps/main/src/lib/utils.ts +10 -0
- package/apps/main/src/lib/zfd.ts +217 -0
- package/apps/main/src/middleware.ts +55 -0
- package/apps/main/src/routeTree.gen.ts +1255 -0
- package/apps/main/src/router.tsx +24 -0
- package/apps/main/src/routes/__root.tsx +92 -0
- package/apps/main/src/routes/_authed/_app/(dashboard)/index.tsx +227 -0
- package/apps/main/src/routes/_authed/_app/agents/$agentId/config.tsx +224 -0
- package/apps/main/src/routes/_authed/_app/agents/$agentId/index.tsx +206 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-actions-menu.tsx +94 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-artifacts.tsx +153 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-chat.tsx +220 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-history-menu.tsx +81 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-model-select.tsx +84 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-relevant-items.tsx +226 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-upload-button.tsx +298 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/context-modal.tsx +187 -0
- package/apps/main/src/routes/_authed/_app/agents/-fns.ts +560 -0
- package/apps/main/src/routes/_authed/_app/agents/index.tsx +65 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/$subId/-components/citation-tree.tsx +268 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/$subId.tsx +655 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/doc-loading.tsx +37 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/share-link.tsx +42 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/submission-card.tsx +89 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/submission-filter.tsx +193 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/submissions.tsx +36 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/summary.tsx +82 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/upload-doc.tsx +120 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-fns.ts +653 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/index.tsx +259 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/route.tsx +29 -0
- package/apps/main/src/routes/_authed/_app/deals/index.tsx +104 -0
- package/apps/main/src/routes/_authed/_app/feedback/index.tsx +639 -0
- package/apps/main/src/routes/_authed/_app/feedback/insights.tsx +250 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/blockers-panel.tsx +260 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/manual-input-panel.tsx +301 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/submission-selector-modal.tsx +143 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/upload-doc.tsx +120 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/index.tsx +1485 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/-components/dag-view.tsx +296 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/-components/step-config-modal.tsx +634 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/index.tsx +911 -0
- package/apps/main/src/routes/_authed/_app/pipelines/-fns.ts +510 -0
- package/apps/main/src/routes/_authed/_app/pipelines/index.tsx +103 -0
- package/apps/main/src/routes/_authed/_app/reports/$reportId.tsx +397 -0
- package/apps/main/src/routes/_authed/_app/reports/-fns.ts +11 -0
- package/apps/main/src/routes/_authed/_app/reports/index.tsx +22 -0
- package/apps/main/src/routes/_authed/_app/route.tsx +48 -0
- package/apps/main/src/routes/_authed/_app/submissions/-columns.tsx +161 -0
- package/apps/main/src/routes/_authed/_app/submissions/-fns.ts +128 -0
- package/apps/main/src/routes/_authed/_app/submissions/index.tsx +190 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/$formId.tsx +542 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/-components/derived.tsx +154 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/-components/field.tsx +369 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/-components/group.tsx +475 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/index.tsx +263 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/route.tsx +33 -0
- package/apps/main/src/routes/_authed/_app/workflows/-components/form-card.tsx +315 -0
- package/apps/main/src/routes/_authed/_app/workflows/index.tsx +86 -0
- package/apps/main/src/routes/_authed/admin/index.tsx +12 -0
- package/apps/main/src/routes/_authed/admin/route.tsx +42 -0
- package/apps/main/src/routes/_authed/admin/users/-columns.tsx +124 -0
- package/apps/main/src/routes/_authed/admin/users/-fns.ts +30 -0
- package/apps/main/src/routes/_authed/admin/users/index.tsx +29 -0
- package/apps/main/src/routes/_authed/catchNotFound.tsx +114 -0
- package/apps/main/src/routes/_authed/redirects/forms.$id.tsx +29 -0
- package/apps/main/src/routes/_authed/redirects/submissions.$id.tsx +27 -0
- package/apps/main/src/routes/_authed/redirects/workflows.$id.tsx +27 -0
- package/apps/main/src/routes/_authed/route.tsx +51 -0
- package/apps/main/src/routes/_authed/settings/-components/new-api-key.tsx +85 -0
- package/apps/main/src/routes/_authed/settings/-components/new-invite.tsx +100 -0
- package/apps/main/src/routes/_authed/settings/analytics.tsx +1710 -0
- package/apps/main/src/routes/_authed/settings/billing/-components/price-table.tsx +129 -0
- package/apps/main/src/routes/_authed/settings/billing/-fns.ts +76 -0
- package/apps/main/src/routes/_authed/settings/billing/index.tsx +119 -0
- package/apps/main/src/routes/_authed/settings/embed.tsx +337 -0
- package/apps/main/src/routes/_authed/settings/index.tsx +12 -0
- package/apps/main/src/routes/_authed/settings/keys.tsx +157 -0
- package/apps/main/src/routes/_authed/settings/members.tsx +276 -0
- package/apps/main/src/routes/_authed/settings/route.tsx +22 -0
- package/apps/main/src/routes/_authed/settings/user.tsx +87 -0
- package/apps/main/src/routes/_authed/settings/workspace.tsx +206 -0
- package/apps/main/src/routes/_public/-components/sign-in-up.tsx +96 -0
- package/apps/main/src/routes/_public/embedded.tsx +57 -0
- package/apps/main/src/routes/_public/invite.$inviteId.tsx +143 -0
- package/apps/main/src/routes/_public/no-access.tsx +38 -0
- package/apps/main/src/routes/_public/no-invite.tsx +39 -0
- package/apps/main/src/routes/_public/otp.tsx +103 -0
- package/apps/main/src/routes/_public/route.tsx +15 -0
- package/apps/main/src/routes/_public/sign-in.tsx +111 -0
- package/apps/main/src/routes/_public/sign-up.tsx +114 -0
- package/apps/main/src/routes/api/auth/$.ts +11 -0
- package/apps/main/src/routes/api/billing/paid.ts +42 -0
- package/apps/main/src/routes/api/billing/webhooks.ts +70 -0
- package/apps/main/src/routes/api/chat/agent.ts +40 -0
- package/apps/main/src/routes/api/chat/key.ts +42 -0
- package/apps/main/src/routes/api/chat/member.ts +35 -0
- package/apps/main/src/routes/api/test/index.ts +19 -0
- package/apps/main/src/server.tsx +6 -0
- package/apps/main/src/styles/app.css +23 -0
- package/apps/main/src/vite-env.d.ts +7 -0
- package/apps/main/test.http +6 -0
- package/apps/main/tsconfig.json +17 -0
- package/apps/main/vite.config.ts +24 -0
- package/apps/main/vitest.config.js +17 -0
- package/apps/mcp/README.md +171 -0
- package/apps/mcp/eslint.config.mjs +3 -0
- package/apps/mcp/package.json +37 -0
- package/apps/mcp/src/index.ts +414 -0
- package/apps/mcp/tsconfig.json +19 -0
- package/apps/mcp/vite.config.ts +22 -0
- package/apps/posthog-proxy/index.html +9 -0
- package/apps/workers/.prettierignore +7 -0
- package/apps/workers/.prettierrc.js +3 -0
- package/apps/workers/dotenvx-safe.sh +11 -0
- package/apps/workers/eslint.config.mjs +3 -0
- package/apps/workers/package.json +65 -0
- package/apps/workers/src/lib/config.ts +7 -0
- package/apps/workers/src/lib/messages.ts +0 -0
- package/apps/workers/src/lib/posthog.ts +25 -0
- package/apps/workers/src/main.ts +58 -0
- package/apps/workers/src/workflows/extraction.ts +866 -0
- package/apps/workers/src/workflows/index.ts +3 -0
- package/apps/workers/src/workflows/pipeline-dag.ts +210 -0
- package/apps/workers/src/workflows/pipeline-steps.ts +1393 -0
- package/apps/workers/tsconfig.json +16 -0
- package/apps/workers/vite.config.ts +35 -0
- package/docs/CHANGELOG.md +84 -0
- package/docs/agent-templates-and-runs.md +859 -0
- package/docs/aws-migration-plan.md +267 -0
- package/docs/impl-p0-form-builder-improvements.md +683 -0
- package/docs/on-prem-deployment-spec.docx +0 -0
- package/docs/on-prem-deployment-spec.md +378 -0
- package/docs/prd-form-builder-strategy.md +1120 -0
- package/docs/widget-ng-apf-packaging-spec.md +43 -0
- package/infra/k8s/charts/seadotdev/Chart.yaml +6 -0
- package/infra/k8s/charts/seadotdev/templates/_helpers.tpl +27 -0
- package/infra/k8s/charts/seadotdev/templates/api-v2.yaml +105 -0
- package/infra/k8s/charts/seadotdev/templates/external-secrets.yaml +83 -0
- package/infra/k8s/charts/seadotdev/templates/ingress.yaml +54 -0
- package/infra/k8s/charts/seadotdev/templates/main-app.yaml +104 -0
- package/infra/k8s/charts/seadotdev/templates/workers.yaml +182 -0
- package/infra/k8s/charts/seadotdev/values.yaml +143 -0
- package/infra/terraform/main.tf +399 -0
- package/libs/ai/.prettierignore +2 -0
- package/libs/ai/.prettierrc.js +5 -0
- package/libs/ai/README.md +139 -0
- package/libs/ai/eslint.config.mjs +3 -0
- package/libs/ai/package.json +42 -0
- package/libs/ai/src/index.ts +5 -0
- package/libs/ai/src/models.ts +19 -0
- package/libs/ai/src/rag/index.ts +1 -0
- package/libs/ai/src/rag/rag.test.ts +99 -0
- package/libs/ai/src/rag/rag.ts +510 -0
- package/libs/ai/tsconfig.json +21 -0
- package/libs/ai/vite.config.ts +38 -0
- package/libs/cache/.prettierignore +2 -0
- package/libs/cache/eslint.config.mjs +3 -0
- package/libs/cache/package.json +35 -0
- package/libs/cache/src/feedback.ts +77 -0
- package/libs/cache/src/index.ts +2 -0
- package/libs/cache/tsconfig.json +19 -0
- package/libs/cache/vite.config.ts +36 -0
- package/libs/clients/.prettierignore +6 -0
- package/libs/clients/eslint.config.mjs +3 -0
- package/libs/clients/package.json +59 -0
- package/libs/clients/src/azure.ts +249 -0
- package/libs/clients/src/gcp.ts +220 -0
- package/libs/clients/src/hatchet.ts +86 -0
- package/libs/clients/src/index.ts +8 -0
- package/libs/clients/src/loops.ts +86 -0
- package/libs/clients/src/polar.ts +77 -0
- package/libs/clients/src/posthog.ts +55 -0
- package/libs/clients/tsconfig.json +19 -0
- package/libs/clients/vite.config.ts +35 -0
- package/libs/config/.prettierignore +6 -0
- package/libs/config/.prettierrc.js +12 -0
- package/libs/config/eslint.config.mjs +3 -0
- package/libs/config/package.json +50 -0
- package/libs/config/src/azure.ts +54 -0
- package/libs/config/src/db.ts +18 -0
- package/libs/config/src/gcp.ts +53 -0
- package/libs/config/src/google.ts +17 -0
- package/libs/config/src/hatchet.ts +20 -0
- package/libs/config/src/index.ts +108 -0
- package/libs/config/src/llm.ts +17 -0
- package/libs/config/src/polar.ts +24 -0
- package/libs/config/src/util.ts +8 -0
- package/libs/config/src/vercel.ts +26 -0
- package/libs/config/tsconfig.json +19 -0
- package/libs/config/vite.config.ts +34 -0
- package/libs/core/.prettierignore +2 -0
- package/libs/core/eslint.config.mjs +3 -0
- package/libs/core/package.json +59 -0
- package/libs/core/src/chat/derived.ts +97 -0
- package/libs/core/src/chat/feedback.ts +293 -0
- package/libs/core/src/chat/index.ts +6 -0
- package/libs/core/src/chat/model.ts +92 -0
- package/libs/core/src/chat/prepare-tools.ts +286 -0
- package/libs/core/src/chat/prompts.ts +623 -0
- package/libs/core/src/chat/stream.ts +311 -0
- package/libs/core/src/chat/summarize.ts +168 -0
- package/libs/core/src/chat/tools/agent.ts +403 -0
- package/libs/core/src/chat/tools/chart-agent.ts +526 -0
- package/libs/core/src/chat/tools/chart-helpers/sandbox.ts +47 -0
- package/libs/core/src/chat/tools/chart.ts +86 -0
- package/libs/core/src/chat/tools/credit-agent.ts +1383 -0
- package/libs/core/src/chat/tools/credit.ts +1435 -0
- package/libs/core/src/chat/tools/deep-dive-agent.ts +100 -0
- package/libs/core/src/chat/tools/deep-dive.ts +141 -0
- package/libs/core/src/chat/tools/form.ts +449 -0
- package/libs/core/src/chat/tools/helpers.ts +91 -0
- package/libs/core/src/chat/tools/index.ts +42 -0
- package/libs/core/src/chat/tools/pipeline-artifact.ts +76 -0
- package/libs/core/src/chat/tools/report.ts +40 -0
- package/libs/core/src/chat/tools/search.ts +390 -0
- package/libs/core/src/chat/tools/submission.ts +227 -0
- package/libs/core/src/chat/tools/workflow.ts +684 -0
- package/libs/core/src/chat/types.ts +3 -0
- package/libs/core/src/data-extraction/classification/azure.ts +168 -0
- package/libs/core/src/data-extraction/classification/index.ts +1 -0
- package/libs/core/src/data-extraction/dal.ts +246 -0
- package/libs/core/src/data-extraction/form-structure-extractor.ts +294 -0
- package/libs/core/src/data-extraction/index.ts +4 -0
- package/libs/core/src/data-extraction/layout/azure.ts +730 -0
- package/libs/core/src/data-extraction/layout/excel.ts +180 -0
- package/libs/core/src/data-extraction/layout/gcp.ts +1071 -0
- package/libs/core/src/data-extraction/layout/index.ts +266 -0
- package/libs/core/src/data-extraction/layout/plaintext.ts +45 -0
- package/libs/core/src/data-extraction/models.ts +38 -0
- package/libs/core/src/data-extraction/pdf-utils.ts +96 -0
- package/libs/core/src/data-extraction/structuring/bank-statement.ts +1182 -0
- package/libs/core/src/data-extraction/structuring/custom.ts +495 -0
- package/libs/core/src/data-extraction/structuring/index.ts +290 -0
- package/libs/core/src/data-extraction/structuring/prompts.ts +69 -0
- package/libs/core/src/data-extraction/type-guards.ts +110 -0
- package/libs/core/src/data-extraction/types.ts +84 -0
- package/libs/core/src/data-extraction/utils.ts +31 -0
- package/libs/core/src/data-extraction/validation/bank-statement.ts +127 -0
- package/libs/core/src/deals.ts +17 -0
- package/libs/core/src/documents.ts +152 -0
- package/libs/core/src/index.ts +5 -0
- package/libs/core/src/pipelines/display.ts +678 -0
- package/libs/core/src/pipelines/execute.ts +2342 -0
- package/libs/core/src/pipelines/index.ts +4 -0
- package/libs/core/src/pipelines/list.ts +12 -0
- package/libs/core/src/pipelines/runs.ts +53 -0
- package/libs/core/tsconfig.json +20 -0
- package/libs/core/vite.config.ts +56 -0
- package/libs/dal/.prettierignore +6 -0
- package/libs/dal/.prettierrc.js +12 -0
- package/libs/dal/eslint.config.mjs +3 -0
- package/libs/dal/package.json +57 -0
- package/libs/dal/src/_tests/db.test.ts +19 -0
- package/libs/dal/src/_tests/mock-db.ts +60 -0
- package/libs/dal/src/api-key.test.ts +397 -0
- package/libs/dal/src/api-key.ts +110 -0
- package/libs/dal/src/billing.ts +23 -0
- package/libs/dal/src/conversation.test.ts +655 -0
- package/libs/dal/src/conversation.ts +532 -0
- package/libs/dal/src/deal.test.ts +45 -0
- package/libs/dal/src/deal.ts +87 -0
- package/libs/dal/src/defaults-consumer-lending-uk.ts +33 -0
- package/libs/dal/src/defaults-consumer-lending-us.ts +33 -0
- package/libs/dal/src/defaults-private-credit.ts +57 -0
- package/libs/dal/src/defaults-private-equity.ts +51 -0
- package/libs/dal/src/defaults-smb-lending-us.ts +1569 -0
- package/libs/dal/src/defaults-sme-lending-uk-express.ts +1527 -0
- package/libs/dal/src/defaults-sme-lending-uk.ts +1669 -0
- package/libs/dal/src/defaults-types.ts +23 -0
- package/libs/dal/src/defaults.ts +550 -0
- package/libs/dal/src/document.test.ts +70 -0
- package/libs/dal/src/document.ts +192 -0
- package/libs/dal/src/feedback.ts +255 -0
- package/libs/dal/src/form.test.ts +637 -0
- package/libs/dal/src/form.ts +1165 -0
- package/libs/dal/src/index.ts +20 -0
- package/libs/dal/src/invitation.test.ts +746 -0
- package/libs/dal/src/invitation.ts +207 -0
- package/libs/dal/src/member.test.ts +185 -0
- package/libs/dal/src/member.ts +80 -0
- package/libs/dal/src/organization.ts +116 -0
- package/libs/dal/src/permission.ts +25 -0
- package/libs/dal/src/pipeline.test.ts +388 -0
- package/libs/dal/src/pipeline.ts +4222 -0
- package/libs/dal/src/report.ts +199 -0
- package/libs/dal/src/result.ts +16 -0
- package/libs/dal/src/search.ts +172 -0
- package/libs/dal/src/session.test.ts +110 -0
- package/libs/dal/src/session.ts +31 -0
- package/libs/dal/src/submission.test.ts +1304 -0
- package/libs/dal/src/submission.ts +1396 -0
- package/libs/dal/src/tool.ts +159 -0
- package/libs/dal/src/user.ts +16 -0
- package/libs/dal/src/workflow.test.ts +89 -0
- package/libs/dal/src/workflow.ts +262 -0
- package/libs/dal/tsconfig.build.json +4 -0
- package/libs/dal/tsconfig.json +22 -0
- package/libs/dal/vite.config.ts +34 -0
- package/libs/db/.prettierignore +6 -0
- package/libs/db/.prettierrc.js +12 -0
- package/libs/db/eslint.config.mjs +3 -0
- package/libs/db/package.json +52 -0
- package/libs/db/src/index.ts +24 -0
- package/libs/db/src/relations.ts +549 -0
- package/libs/db/src/schema.ts +2 -0
- package/libs/db/src/schemas/api.ts +35 -0
- package/libs/db/src/schemas/conversations.ts +175 -0
- package/libs/db/src/schemas/core.ts +359 -0
- package/libs/db/src/schemas/documents.ts +181 -0
- package/libs/db/src/schemas/feedback.ts +40 -0
- package/libs/db/src/schemas/index.ts +26 -0
- package/libs/db/src/schemas/organisations.ts +97 -0
- package/libs/db/src/schemas/pipelines.ts +440 -0
- package/libs/db/src/schemas/users.ts +95 -0
- package/libs/db/src/types.ts +190 -0
- package/libs/db/src/utils.ts +14 -0
- package/libs/db/tsconfig.json +19 -0
- package/libs/db/vite.config.ts +31 -0
- package/libs/lint/.prettierignore +6 -0
- package/libs/lint/eslint.config.mjs +61 -0
- package/libs/lint/package.json +29 -0
- package/libs/lint/prettier.config.js +12 -0
- package/libs/schemas/.prettierignore +6 -0
- package/libs/schemas/.prettierrc.js +12 -0
- package/libs/schemas/README.md +15 -0
- package/libs/schemas/eslint.config.mjs +3 -0
- package/libs/schemas/package.json +67 -0
- package/libs/schemas/src/core/chat.ts +67 -0
- package/libs/schemas/src/core/core-result.ts +15 -0
- package/libs/schemas/src/core/data-extraction.ts +184 -0
- package/libs/schemas/src/core/layout.ts +478 -0
- package/libs/schemas/src/core/pipeline.ts +128 -0
- package/libs/schemas/src/core/submission.ts +97 -0
- package/libs/schemas/src/db/account.ts +57 -0
- package/libs/schemas/src/db/apiKey.ts +57 -0
- package/libs/schemas/src/db/context.ts +33 -0
- package/libs/schemas/src/db/conversation.ts +65 -0
- package/libs/schemas/src/db/deal.ts +42 -0
- package/libs/schemas/src/db/document.ts +103 -0
- package/libs/schemas/src/db/documentCitation.ts +58 -0
- package/libs/schemas/src/db/documentExtraction.ts +69 -0
- package/libs/schemas/src/db/fieldCorrection.ts +85 -0
- package/libs/schemas/src/db/form.ts +45 -0
- package/libs/schemas/src/db/formField.ts +59 -0
- package/libs/schemas/src/db/formGroup.ts +42 -0
- package/libs/schemas/src/db/impersonation.ts +39 -0
- package/libs/schemas/src/db/index.ts +25 -0
- package/libs/schemas/src/db/invitation.ts +42 -0
- package/libs/schemas/src/db/member.ts +36 -0
- package/libs/schemas/src/db/message.ts +58 -0
- package/libs/schemas/src/db/organization.ts +62 -0
- package/libs/schemas/src/db/session.ts +48 -0
- package/libs/schemas/src/db/submission.ts +54 -0
- package/libs/schemas/src/db/submissionGroup.ts +36 -0
- package/libs/schemas/src/db/submissionItem.ts +33 -0
- package/libs/schemas/src/db/submissionItemVersion.ts +70 -0
- package/libs/schemas/src/db/user.ts +51 -0
- package/libs/schemas/src/db/utils.ts +3 -0
- package/libs/schemas/src/db/verification.ts +36 -0
- package/libs/schemas/src/db/workflow.ts +42 -0
- package/libs/schemas/src/index.ts +10 -0
- package/libs/schemas/tsconfig.json +21 -0
- package/libs/schemas/vite.config.ts +38 -0
- package/libs/ui/.prettierignore +6 -0
- package/libs/ui/.prettierrc.js +12 -0
- package/libs/ui/components.json +24 -0
- package/libs/ui/eslint.config.mjs +3 -0
- package/libs/ui/package.json +142 -0
- package/libs/ui/src/components/chart-viz/chart.tsx +255 -0
- package/libs/ui/src/components/chart-viz/converters.ts +474 -0
- package/libs/ui/src/components/chart-viz/dashboard.tsx +146 -0
- package/libs/ui/src/components/chart-viz/index.ts +37 -0
- package/libs/ui/src/components/chart-viz/markdown.tsx +344 -0
- package/libs/ui/src/components/chart-viz/table.tsx +446 -0
- package/libs/ui/src/components/chart-viz/theme-context.tsx +70 -0
- package/libs/ui/src/components/chart-viz/themes/dark.ts +98 -0
- package/libs/ui/src/components/chart-viz/themes/index.ts +69 -0
- package/libs/ui/src/components/chart-viz/themes/light.ts +98 -0
- package/libs/ui/src/components/chart-viz/themes/tailwind.ts +326 -0
- package/libs/ui/src/components/chart-viz/themes/types.ts +99 -0
- package/libs/ui/src/components/chart-viz/tool-display.tsx +150 -0
- package/libs/ui/src/components/chart-viz/types.ts +95 -0
- package/libs/ui/src/components/doc-viewers/excel/index.tsx +431 -0
- package/libs/ui/src/components/doc-viewers/excel/themes.ts +160 -0
- package/libs/ui/src/components/doc-viewers/image/index.tsx +410 -0
- package/libs/ui/src/components/doc-viewers/pdf/index.tsx +258 -0
- package/libs/ui/src/components/doc-viewers/pdf/virtualized-pdf.tsx +556 -0
- package/libs/ui/src/components/misc/rel-date.tsx +52 -0
- package/libs/ui/src/components/misc/styled-link.tsx +2 -0
- package/libs/ui/src/components/table/data-table.tsx +546 -0
- package/libs/ui/src/components/table/report-table.tsx +305 -0
- package/libs/ui/src/components/table/sortable-column.tsx +34 -0
- package/libs/ui/src/components/ui/accordion.tsx +62 -0
- package/libs/ui/src/components/ui/alert-dialog.tsx +142 -0
- package/libs/ui/src/components/ui/alert.tsx +62 -0
- package/libs/ui/src/components/ui/artifact.tsx +118 -0
- package/libs/ui/src/components/ui/attachments.tsx +388 -0
- package/libs/ui/src/components/ui/avatar.tsx +39 -0
- package/libs/ui/src/components/ui/badge.tsx +43 -0
- package/libs/ui/src/components/ui/breadcrumb.tsx +102 -0
- package/libs/ui/src/components/ui/button-group.tsx +78 -0
- package/libs/ui/src/components/ui/button.tsx +79 -0
- package/libs/ui/src/components/ui/card.tsx +32 -0
- package/libs/ui/src/components/ui/carousel.tsx +228 -0
- package/libs/ui/src/components/ui/chain-of-thought.tsx +198 -0
- package/libs/ui/src/components/ui/checkbox.tsx +27 -0
- package/libs/ui/src/components/ui/citation.tsx +34 -0
- package/libs/ui/src/components/ui/code-block.tsx +500 -0
- package/libs/ui/src/components/ui/collapsible.tsx +19 -0
- package/libs/ui/src/components/ui/command.tsx +161 -0
- package/libs/ui/src/components/ui/conversation.tsx +90 -0
- package/libs/ui/src/components/ui/dialog.tsx +142 -0
- package/libs/ui/src/components/ui/dropdown-menu.tsx +246 -0
- package/libs/ui/src/components/ui/highlight.tsx +3 -0
- package/libs/ui/src/components/ui/hover-card.tsx +36 -0
- package/libs/ui/src/components/ui/inline-citation.tsx +251 -0
- package/libs/ui/src/components/ui/input-group.tsx +156 -0
- package/libs/ui/src/components/ui/input-otp.tsx +78 -0
- package/libs/ui/src/components/ui/input.tsx +21 -0
- package/libs/ui/src/components/ui/label.tsx +19 -0
- package/libs/ui/src/components/ui/model-selector.tsx +174 -0
- package/libs/ui/src/components/ui/multisidebar.tsx +750 -0
- package/libs/ui/src/components/ui/popover.tsx +43 -0
- package/libs/ui/src/components/ui/progress.tsx +28 -0
- package/libs/ui/src/components/ui/reasoning.tsx +178 -0
- package/libs/ui/src/components/ui/resizable.tsx +49 -0
- package/libs/ui/src/components/ui/scroll-area.tsx +54 -0
- package/libs/ui/src/components/ui/select.tsx +171 -0
- package/libs/ui/src/components/ui/separator.tsx +26 -0
- package/libs/ui/src/components/ui/sheet.tsx +128 -0
- package/libs/ui/src/components/ui/shimmer.tsx +53 -0
- package/libs/ui/src/components/ui/skeleton.tsx +13 -0
- package/libs/ui/src/components/ui/sonner.tsx +23 -0
- package/libs/ui/src/components/ui/switch.tsx +26 -0
- package/libs/ui/src/components/ui/table.tsx +96 -0
- package/libs/ui/src/components/ui/tabs.tsx +52 -0
- package/libs/ui/src/components/ui/textarea.tsx +41 -0
- package/libs/ui/src/components/ui/tool.tsx +209 -0
- package/libs/ui/src/components/ui/tooltip.tsx +58 -0
- package/libs/ui/src/components/ui/typography.tsx +113 -0
- package/libs/ui/src/fonts/manrope-v15-latin-300.woff2 +0 -0
- package/libs/ui/src/fonts/manrope-v15-latin-400.woff2 +0 -0
- package/libs/ui/src/fonts/manrope-v15-latin-500.woff2 +0 -0
- package/libs/ui/src/fonts/manrope-v15-latin-600.woff2 +0 -0
- package/libs/ui/src/hooks/use-mobile.ts +19 -0
- package/libs/ui/src/lib/utils.ts +6 -0
- package/libs/ui/src/styles/fonts.css +35 -0
- package/libs/ui/src/styles/style.css +218 -0
- package/libs/ui/tsconfig.json +21 -0
- package/libs/ui/vite.config.ts +80 -0
- package/libs/ui-lit/README.md +245 -0
- package/libs/ui-lit/TESTING_GUIDE.md +296 -0
- package/libs/ui-lit/eslint.config.mjs +3 -0
- package/libs/ui-lit/package.json +41 -0
- package/libs/ui-lit/scripts/build-css.js +43 -0
- package/libs/ui-lit/src/components/sea-alert.ts +132 -0
- package/libs/ui-lit/src/components/sea-button.ts +95 -0
- package/libs/ui-lit/src/components/sea-card.ts +113 -0
- package/libs/ui-lit/src/components/sea-input.ts +184 -0
- package/libs/ui-lit/src/components/sea-spinner.ts +65 -0
- package/libs/ui-lit/src/index.ts +15 -0
- package/libs/ui-lit/src/lib/utils.ts +6 -0
- package/libs/ui-lit/src/styles/tailwind.css +76 -0
- package/libs/ui-lit/src/theme.css +66 -0
- package/libs/ui-lit/src/theme.ts +79 -0
- package/libs/ui-lit/src/vite-env.d.ts +6 -0
- package/libs/ui-lit/tailwind.config.ts +50 -0
- package/libs/ui-lit/test.html +289 -0
- package/libs/ui-lit/tsconfig.json +23 -0
- package/libs/ui-lit/vite.config.ts +31 -0
- package/libs/ui-lit/vite.css.config.ts +20 -0
- package/libs/util/.prettierignore +6 -0
- package/libs/util/.prettierrc.js +12 -0
- package/libs/util/eslint.config.mjs +3 -0
- package/libs/util/package.json +45 -0
- package/libs/util/src/billing.ts +10 -0
- package/libs/util/src/data-transform.ts +19 -0
- package/libs/util/src/encryption.ts +45 -0
- package/libs/util/src/fmt.test.ts +9 -0
- package/libs/util/src/fmt.ts +71 -0
- package/libs/util/src/fuzzy.ts +47 -0
- package/libs/util/src/id.ts +24 -0
- package/libs/util/src/invariant.ts +31 -0
- package/libs/util/src/sub-name.ts +7 -0
- package/libs/util/tsconfig.json +19 -0
- package/libs/util/vite.config.ts +34 -0
- package/package.json +28 -0
- package/packages/widget/.prettierignore +6 -0
- package/packages/widget/.prettierrc.js +12 -0
- package/packages/widget/README.md +95 -0
- package/packages/widget/eslint.config.mjs +11 -0
- package/packages/widget/openapi-ts.config.ts +8 -0
- package/packages/widget/package.json +89 -0
- package/packages/widget/postcss.config.mjs +10 -0
- package/packages/widget/src/clients/api/client/client.ts +187 -0
- package/packages/widget/src/clients/api/client/index.ts +22 -0
- package/packages/widget/src/clients/api/client/types.ts +192 -0
- package/packages/widget/src/clients/api/client/utils.ts +394 -0
- package/packages/widget/src/clients/api/client.gen.ts +18 -0
- package/packages/widget/src/clients/api/core/auth.ts +39 -0
- package/packages/widget/src/clients/api/core/bodySerializer.ts +74 -0
- package/packages/widget/src/clients/api/core/params.ts +132 -0
- package/packages/widget/src/clients/api/core/pathSerializer.ts +169 -0
- package/packages/widget/src/clients/api/core/types.ts +80 -0
- package/packages/widget/src/clients/api/index.ts +3 -0
- package/packages/widget/src/clients/api/sdk.gen.ts +805 -0
- package/packages/widget/src/clients/api/types.gen.ts +2085 -0
- package/packages/widget/src/components/container.tsx +42 -0
- package/packages/widget/src/components/data-display.tsx +384 -0
- package/packages/widget/src/components/data-viewer.tsx +311 -0
- package/packages/widget/src/components/doc-list.tsx +102 -0
- package/packages/widget/src/components/field-correction-modal.tsx +265 -0
- package/packages/widget/src/components/header.tsx +71 -0
- package/packages/widget/src/components/new-submission.tsx +290 -0
- package/packages/widget/src/components/sidebar-right.tsx +19 -0
- package/packages/widget/src/components/submission-card.tsx +66 -0
- package/packages/widget/src/components/submission-page.tsx +75 -0
- package/packages/widget/src/components/upload-doc.tsx +241 -0
- package/packages/widget/src/components/widget.tsx +101 -0
- package/packages/widget/src/index.tsx +167 -0
- package/packages/widget/src/lib/config.ts +2 -0
- package/packages/widget/src/lib/util.ts +40 -0
- package/packages/widget/src/styles/index.css +5 -0
- package/packages/widget/src/styles/tw-properties.css +337 -0
- package/packages/widget/src/vite-env.d.ts +3 -0
- package/packages/widget/tsconfig.app.json +35 -0
- package/packages/widget/tsconfig.json +4 -0
- package/packages/widget/tsconfig.node.json +24 -0
- package/packages/widget/vite.config.ts +116 -0
- package/packages/widget-lit/BOTTLENECKS.md +250 -0
- package/packages/widget-lit/IMPLEMENTATION_SUMMARY.md +295 -0
- package/packages/widget-lit/README.md +232 -0
- package/packages/widget-lit/eslint.config.mjs +3 -0
- package/packages/widget-lit/package.json +52 -0
- package/packages/widget-lit/src/api-client.ts +230 -0
- package/packages/widget-lit/src/api-client.ts.backup +218 -0
- package/packages/widget-lit/src/components/sea-chat.ts +382 -0
- package/packages/widget-lit/src/components/sea-submission-viewer.ts +267 -0
- package/packages/widget-lit/src/components/sea-widget.ts +317 -0
- package/packages/widget-lit/src/index.ts +48 -0
- package/packages/widget-lit/src/react.ts +58 -0
- package/packages/widget-lit/src/style.css +47 -0
- package/packages/widget-lit/tsconfig.json +24 -0
- package/packages/widget-lit/vite.config.ts +29 -0
- package/packages/widget-ng/DEVELOPMENT.md +74 -0
- package/packages/widget-ng/README.md +657 -0
- package/packages/widget-ng/dev.sh +14 -0
- package/packages/widget-ng/eslint.config.mjs +24 -0
- package/packages/widget-ng/ng-package.json +9 -0
- package/packages/widget-ng/package.json +85 -0
- package/packages/widget-ng/src/index.ts +45 -0
- package/packages/widget-ng/src/lib/components/sea-chat.component.ts +737 -0
- package/packages/widget-ng/src/lib/components/sea-data-viewer.component.ts +2240 -0
- package/packages/widget-ng/src/lib/components/sea-deal-form-modal.component.ts +702 -0
- package/packages/widget-ng/src/lib/components/sea-document-list.component.ts +350 -0
- package/packages/widget-ng/src/lib/components/sea-feedback-modal.component.ts +461 -0
- package/packages/widget-ng/src/lib/components/sea-file-upload.component.ts +655 -0
- package/packages/widget-ng/src/lib/components/sea-model-selection-modal.component.ts +367 -0
- package/packages/widget-ng/src/lib/components/sea-new-submission-modal.component.ts +414 -0
- package/packages/widget-ng/src/lib/components/sea-pdf-viewer.component.ts +869 -0
- package/packages/widget-ng/src/lib/components/sea-submission-card.component.ts +251 -0
- package/packages/widget-ng/src/lib/components/sea-widget.component.ts +684 -0
- package/packages/widget-ng/src/lib/models/submission.model.ts +170 -0
- package/packages/widget-ng/src/lib/pipes/markdown.pipe.ts +57 -0
- package/packages/widget-ng/src/lib/services/api-client.service.ts +715 -0
- package/packages/widget-ng/src/lib/services/chat.service.ts +330 -0
- package/packages/widget-ng/src/lib/services/config.service.ts +107 -0
- package/packages/widget-ng/src/web-component.ts +56 -0
- package/packages/widget-ng/tsconfig.json +25 -0
- package/packages/widget-ng/tsconfig.lib.json +9 -0
- package/packages/widget-ng/vite.config.elements.ts +26 -0
- package/packages/widget-ng/vitest.config.ts +19 -0
- package/packages/widget-ng/vitest.setup.ts +13 -0
- package/pnpm-workspace.yaml +18 -0
- package/render.yaml +136 -0
- package/scripts/README.md +57 -0
- package/scripts/package.json +22 -0
- package/scripts/python/.python-version +1 -0
- package/scripts/python/README.md +3 -0
- package/scripts/python/export-org-data.py +693 -0
- package/scripts/python/pyproject.toml +29 -0
- package/scripts/python/requirements-dev.lock +36 -0
- package/scripts/python/requirements.lock +36 -0
- package/scripts/python/src/gen.py +297 -0
- package/scripts/python/test.py +34 -0
- package/scripts/src/fix-storage-provider-mismatch.ts +239 -0
- package/scripts/src/sync-render-yaml.ts +290 -0
- package/scripts/src/test-chat-stream.ts +300 -0
- package/scripts/src/test-reconciliation.ts +230 -0
- package/scripts/tsconfig.json +15 -0
- package/tests/angular-test-app/.vscode/extensions.json +4 -0
- package/tests/angular-test-app/.vscode/launch.json +13 -0
- package/tests/angular-test-app/.vscode/tasks.json +24 -0
- package/tests/angular-test-app/README.md +59 -0
- package/tests/angular-test-app/angular.json +111 -0
- package/tests/angular-test-app/clean-start.sh +14 -0
- package/tests/angular-test-app/package.json +36 -0
- package/tests/angular-test-app/public/favicon.ico +0 -0
- package/tests/angular-test-app/src/app/app.component.ts +220 -0
- package/tests/angular-test-app/src/app/app.config.ts +5 -0
- package/tests/angular-test-app/src/env.d.ts +13 -0
- package/tests/angular-test-app/src/index.html +13 -0
- package/tests/angular-test-app/src/main.ts +6 -0
- package/tests/angular-test-app/src/styles.css +8 -0
- package/tests/angular-test-app/tsconfig.app.json +15 -0
- package/tests/angular-test-app/tsconfig.json +27 -0
- package/tests/crm-viewer-app/API_INTEGRATION_SUMMARY.md +295 -0
- package/tests/crm-viewer-app/CURRENT_ASSETS_FIELDS.md +148 -0
- package/tests/crm-viewer-app/FIELD_ID_MAPPING.md +206 -0
- package/tests/crm-viewer-app/INTEGRATION_GUIDE.md +309 -0
- package/tests/crm-viewer-app/README.md +174 -0
- package/tests/crm-viewer-app/REAL_API_INTEGRATION.md +240 -0
- package/tests/crm-viewer-app/UPDATED_IMPLEMENTATION.md +279 -0
- package/tests/crm-viewer-app/angular.json +114 -0
- package/tests/crm-viewer-app/package.json +35 -0
- package/tests/crm-viewer-app/src/app/app.component.ts +534 -0
- package/tests/crm-viewer-app/src/app/citation.service.ts +316 -0
- package/tests/crm-viewer-app/src/env.d.ts +16 -0
- package/tests/crm-viewer-app/src/index.html +19 -0
- package/tests/crm-viewer-app/src/main.ts +7 -0
- package/tests/crm-viewer-app/src/styles.css +409 -0
- package/tests/crm-viewer-app/src/template.html +2678 -0
- package/tests/crm-viewer-app/tsconfig.app.json +15 -0
- package/tests/crm-viewer-app/tsconfig.json +27 -0
- package/tests/e2e/package.json +17 -0
- package/tests/e2e/playwright.config.ts +75 -0
- package/tests/e2e/tests/api/health.spec.ts +10 -0
- package/tests/e2e/tests/app/example.spec.ts +10 -0
- package/tests/widget-test-app/.prettierignore +6 -0
- package/tests/widget-test-app/README.md +48 -0
- package/tests/widget-test-app/index.html +12 -0
- package/tests/widget-test-app/package.json +24 -0
- package/tests/widget-test-app/src/App.css +192 -0
- package/tests/widget-test-app/src/App.tsx +80 -0
- package/tests/widget-test-app/src/main.tsx +9 -0
- package/tests/widget-test-app/src/vite-env.d.ts +4 -0
- package/tests/widget-test-app/tsconfig.json +25 -0
- package/tests/widget-test-app/tsconfig.node.json +11 -0
- package/tests/widget-test-app/vite.config.ts +14 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Current Assets Form Fields
|
|
2
|
+
|
|
3
|
+
This document describes the Current Assets fields that have been integrated into the CRM viewer app with citation support.
|
|
4
|
+
|
|
5
|
+
## Implemented Fields
|
|
6
|
+
|
|
7
|
+
All fields are displayed in a two-column grid layout with proper labels, placeholders, COA codes, and citation support.
|
|
8
|
+
|
|
9
|
+
### 1. Cash (L0005)
|
|
10
|
+
- **Field ID**: `cash`
|
|
11
|
+
- **Type**: Money
|
|
12
|
+
- **Description**: Money on hand and in checking accounts available for daily operations
|
|
13
|
+
- **Citation**: Registered to `doc-balance-sheet`, Page 1
|
|
14
|
+
|
|
15
|
+
### 2. Certificate of Deposit (L0006)
|
|
16
|
+
- **Field ID**: `certificate-of-deposit`
|
|
17
|
+
- **Type**: Money
|
|
18
|
+
- **Description**: Bank-issued deposit with a fixed date of maturity, not immediately accessible
|
|
19
|
+
- **Citation**: Registered to `doc-balance-sheet`, Page 1
|
|
20
|
+
|
|
21
|
+
### 3. Marketable Securities (L0007)
|
|
22
|
+
- **Field ID**: `marketable-securities`
|
|
23
|
+
- **Type**: Money
|
|
24
|
+
- **Description**: Short-term financial instruments (stocks, bonds, etc.) that can be converted to cash quickly
|
|
25
|
+
- **Citation**: Registered to `doc-balance-sheet`, Page 1
|
|
26
|
+
|
|
27
|
+
### 4. Accounts Receivable (A/R) (L0010)
|
|
28
|
+
- **Field ID**: `accounts-receivable`
|
|
29
|
+
- **Type**: Money
|
|
30
|
+
- **Description**: Amounts billed to customers for goods or services delivered, awaiting payment
|
|
31
|
+
- **Citation**: Registered to `doc-balance-sheet`, Page 1
|
|
32
|
+
|
|
33
|
+
### 5. Notes Receivable – Current (L0015)
|
|
34
|
+
- **Field ID**: `notes-receivable-current`
|
|
35
|
+
- **Type**: Money
|
|
36
|
+
- **Description**: Short-term promissory notes owed to the business, due within one year
|
|
37
|
+
- **Citation**: Registered to `doc-balance-sheet`, Page 1
|
|
38
|
+
|
|
39
|
+
### 6. Inventory – Raw Materials (L0020)
|
|
40
|
+
- **Field ID**: `inventory-raw-materials`
|
|
41
|
+
- **Type**: Money
|
|
42
|
+
- **Description**: Stock of basic materials to be used in manufacturing or production
|
|
43
|
+
- **Citation**: Registered to `doc-balance-sheet`, Page 2
|
|
44
|
+
|
|
45
|
+
### 7. Inventory – Work in Progress (L0021)
|
|
46
|
+
- **Field ID**: `inventory-work-in-progress`
|
|
47
|
+
- **Type**: Money
|
|
48
|
+
- **Description**: Goods partway through the manufacturing process but not yet finished
|
|
49
|
+
- **Citation**: Registered to `doc-balance-sheet`, Page 2
|
|
50
|
+
|
|
51
|
+
### 8. Inventory – Finished Goods (L0022)
|
|
52
|
+
- **Field ID**: `inventory-finished-goods`
|
|
53
|
+
- **Type**: Money
|
|
54
|
+
- **Description**: Completed products ready for sale but not yet sold
|
|
55
|
+
- **Citation**: Registered to `doc-balance-sheet`, Page 2
|
|
56
|
+
|
|
57
|
+
### 9. Prepaid Expenses (L0030)
|
|
58
|
+
- **Field ID**: `prepaid-expenses`
|
|
59
|
+
- **Type**: Money
|
|
60
|
+
- **Description**: Payments made in advance for goods or services to be received in the future
|
|
61
|
+
- **Citation**: Registered to `doc-balance-sheet`, Page 2
|
|
62
|
+
|
|
63
|
+
### 10. Other Current Assets (L0055)
|
|
64
|
+
- **Field ID**: `other-current-assets`
|
|
65
|
+
- **Type**: Money
|
|
66
|
+
- **Description**: Miscellaneous current assets not classified elsewhere, expected to be liquidated within a year
|
|
67
|
+
- **Citation**: Registered to `doc-balance-sheet`, Page 2
|
|
68
|
+
|
|
69
|
+
## Implementation Details
|
|
70
|
+
|
|
71
|
+
### Component Structure
|
|
72
|
+
|
|
73
|
+
Each field is rendered with:
|
|
74
|
+
- Uppercase label displaying the field name
|
|
75
|
+
- Input field with `data-sea-field` attribute for citation linking
|
|
76
|
+
- Click handler `(click)="onFieldClick('field-id')"` to activate citations
|
|
77
|
+
- Title attribute with full description for tooltips
|
|
78
|
+
- Small text showing COA code and brief description
|
|
79
|
+
|
|
80
|
+
### Citation Mappings
|
|
81
|
+
|
|
82
|
+
All citations are registered in [citation.service.ts](src/app/citation.service.ts:42-135) with:
|
|
83
|
+
- Unique field ID matching the `data-sea-field` attribute
|
|
84
|
+
- Citation ID (e.g., `citation-cash`, `citation-ar`)
|
|
85
|
+
- Document ID: `doc-balance-sheet` for all Current Assets fields
|
|
86
|
+
- Page number: Pages 1-2 depending on the field
|
|
87
|
+
|
|
88
|
+
### User Experience
|
|
89
|
+
|
|
90
|
+
1. **Visual Indicators**: Fields with citations show a hover effect
|
|
91
|
+
2. **Click Activation**: Clicking any field opens the PDF viewer with the relevant citation highlighted
|
|
92
|
+
3. **Document Display**: PDF viewer shows "Balance Sheet - Current Assets.pdf"
|
|
93
|
+
4. **Citation Info**: Right sidebar displays active citation details including field ID, citation ID, and page number
|
|
94
|
+
|
|
95
|
+
## Testing
|
|
96
|
+
|
|
97
|
+
To test the integration:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
cd tests/crm-viewer-app
|
|
101
|
+
pnpm start
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Then:
|
|
105
|
+
1. Navigate to http://localhost:4201
|
|
106
|
+
2. Scroll to the "Current Assets" section
|
|
107
|
+
3. Click any field to view its citation in the PDF viewer overlay
|
|
108
|
+
4. Verify the citation information appears in the right sidebar
|
|
109
|
+
5. Click the overlay background or close button to dismiss the PDF viewer
|
|
110
|
+
|
|
111
|
+
## Next Steps
|
|
112
|
+
|
|
113
|
+
To integrate with real data:
|
|
114
|
+
|
|
115
|
+
1. **Update Citation Service**: Replace placeholder citations in `initializePlaceholderCitations()` with actual citation data from your API
|
|
116
|
+
2. **Load Real Documents**: Update `activateCitation()` to fetch actual PDF URLs
|
|
117
|
+
3. **Add Real Coordinates**: Replace the example polygon coordinates with actual bounding regions from document processing
|
|
118
|
+
4. **Implement Data Fetching**: Add a service to load submission data and automatically register citations
|
|
119
|
+
|
|
120
|
+
Example integration:
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
// In your data loading service
|
|
124
|
+
loadSubmissionData(submissionId: string) {
|
|
125
|
+
this.api.getSubmission(submissionId).subscribe(submission => {
|
|
126
|
+
submission.fields.forEach(field => {
|
|
127
|
+
if (field.citation) {
|
|
128
|
+
this.citationService.registerCitation({
|
|
129
|
+
fieldId: field.name,
|
|
130
|
+
citationId: field.citation.id,
|
|
131
|
+
documentId: field.citation.documentId,
|
|
132
|
+
pageNumber: field.citation.pageNumber,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Field Styling
|
|
141
|
+
|
|
142
|
+
All fields include:
|
|
143
|
+
- Consistent padding (8px)
|
|
144
|
+
- Border color: #d8dde6
|
|
145
|
+
- Border radius: 3px
|
|
146
|
+
- Font size: 13px
|
|
147
|
+
- Placeholder: $0.00
|
|
148
|
+
- Helper text with COA code below each field
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# Field ID Mapping - API to HTML
|
|
2
|
+
|
|
3
|
+
This document shows how HTML form fields are mapped to the exact field IDs from the Sea.dev API.
|
|
4
|
+
|
|
5
|
+
## ✅ Updated Field IDs
|
|
6
|
+
|
|
7
|
+
The HTML `data-sea-field` attributes now match the **exact field IDs** from the API response.
|
|
8
|
+
|
|
9
|
+
### Current Assets Fields (Implemented)
|
|
10
|
+
|
|
11
|
+
| HTML Label | data-sea-field | API fieldId | Status |
|
|
12
|
+
|-----------|----------------|-------------|--------|
|
|
13
|
+
| CASH | `Cash` | `Cash` | ✅ Mapped |
|
|
14
|
+
| ACCOUNTS RECEIVABLE (A/R) | `Accounts Receivable (A/R)` | `Accounts Receivable (A/R)` | ✅ Mapped |
|
|
15
|
+
| PREPAID EXPENSES | `Prepaid Expenses` | `Prepaid Expenses` | ✅ Mapped |
|
|
16
|
+
| OTHER CURRENT ASSETS | `Other Current Assets` | `Other Current Assets` | ✅ Mapped |
|
|
17
|
+
|
|
18
|
+
### Other Fields from API (Not Yet Implemented in HTML)
|
|
19
|
+
|
|
20
|
+
These fields exist in the API but are not yet displayed in the HTML form:
|
|
21
|
+
|
|
22
|
+
| Field ID from API | Citation ID | Page | Status |
|
|
23
|
+
|------------------|-------------|------|--------|
|
|
24
|
+
| `Due from Affiliates/Related Parties/Officers/Employees` | `boesieiva5etav6s4t86t` | 9 | ⏳ Not in HTML |
|
|
25
|
+
| `Gross Fixed Assets` | `m5jfexogo53fchqrnul5i` | 9 | ⏳ Not in HTML |
|
|
26
|
+
| `Accumulated Depreciation` | `5bq6vfscbq2fthg4p242h` | 9 | ⏳ Not in HTML |
|
|
27
|
+
| `Net Fixed Assets` | `n4xszdn5xkkxtdrbyinxp` | 9 | ⏳ Not in HTML |
|
|
28
|
+
| `TOTAL ASSETS` | `ol2xaxeuk8vgkq25ggkbd` | 4 | ⏳ Not in HTML |
|
|
29
|
+
| `Current Portion of LT Debt` | `ngqkm4coohtfb8hkufskb` | 9 | ⏳ Not in HTML |
|
|
30
|
+
| `Accounts Payable` | `aqpcfqdj35okiooaoevnc` | 9 | ⏳ Not in HTML |
|
|
31
|
+
| `Accrued Expenses` | `kbumiwoqtjgfhnffhlkwx` | 30 | ⏳ Not in HTML |
|
|
32
|
+
| `Federal Income Taxes Payable` | `injndrsz6czeqgf6tsri3` | 30 | ⏳ Not in HTML |
|
|
33
|
+
| `Other Current Liabilities` | `ark4gxkd6ts6nf6d5val5` | 30 | ⏳ Not in HTML |
|
|
34
|
+
| `Total Current Liabilities` | `b5hpxrsw3jiyukqltzq5f` | 9 | ⏳ Not in HTML |
|
|
35
|
+
| `Long Term Debt` | `uwdrjn8adj2dowgycbnyg` | 9 | ⏳ Not in HTML |
|
|
36
|
+
| `Total Liabilities` | `c4mb4csf5xzo4njlgaxde` | 9 | ⏳ Not in HTML |
|
|
37
|
+
|
|
38
|
+
## Field ID Format
|
|
39
|
+
|
|
40
|
+
The API uses **human-readable labels** as field IDs, not kebab-case identifiers:
|
|
41
|
+
|
|
42
|
+
❌ **Old (Incorrect):**
|
|
43
|
+
```html
|
|
44
|
+
<input data-sea-field="cash" (click)="onFieldClick('cash')" />
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
✅ **New (Correct):**
|
|
48
|
+
```html
|
|
49
|
+
<input data-sea-field="Cash" (click)="onFieldClick('Cash')" />
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## How Field Matching Works
|
|
53
|
+
|
|
54
|
+
### 1. API Response Structure
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"groups": [
|
|
59
|
+
{
|
|
60
|
+
"items": [
|
|
61
|
+
{
|
|
62
|
+
"formField": {
|
|
63
|
+
"id": "field-abc",
|
|
64
|
+
"name": "Cash", // ← This is the fieldId we use
|
|
65
|
+
"label": "Cash"
|
|
66
|
+
},
|
|
67
|
+
"documentCitationId": "4s248bury4omnik4vwl8l",
|
|
68
|
+
"value": 50000
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 2. Citation Registration
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// app.component.ts - processCitations()
|
|
80
|
+
this.citationService.registerCitation({
|
|
81
|
+
fieldId: item.formField.name, // "Cash"
|
|
82
|
+
citationId: item.documentCitationId,
|
|
83
|
+
documentId: document.id,
|
|
84
|
+
pageNumber: pageNumber,
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 3. HTML Field
|
|
89
|
+
|
|
90
|
+
```html
|
|
91
|
+
<input
|
|
92
|
+
data-sea-field="Cash"
|
|
93
|
+
(click)="onFieldClick('Cash')"
|
|
94
|
+
/>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 4. Citation Lookup
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
// When field is clicked:
|
|
101
|
+
onFieldClick('Cash')
|
|
102
|
+
→ citationService.activateCitationWithDocument('Cash')
|
|
103
|
+
→ Looks up citation by fieldId "Cash"
|
|
104
|
+
→ Finds document and displays PDF with highlighted region
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Testing Field Mappings
|
|
108
|
+
|
|
109
|
+
### Check Console Logs
|
|
110
|
+
|
|
111
|
+
When the app loads, you should see:
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
[CRM Viewer] Registered citation: {
|
|
115
|
+
fieldId: "Cash",
|
|
116
|
+
documentId: "doc-xyz",
|
|
117
|
+
documentName: "Balance Sheet.pdf",
|
|
118
|
+
pageNumber: 9
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Verify Field Matching
|
|
123
|
+
|
|
124
|
+
1. **Open browser console**
|
|
125
|
+
2. **Look for registration logs** - Each field from the API should show up
|
|
126
|
+
3. **Click a field** - Should see: `[CRM Viewer] Field clicked: Cash`
|
|
127
|
+
4. **PDF opens** - Should highlight the correct region on page 9
|
|
128
|
+
|
|
129
|
+
### Debug Mismatches
|
|
130
|
+
|
|
131
|
+
If a field doesn't work:
|
|
132
|
+
|
|
133
|
+
```javascript
|
|
134
|
+
// Check what fields were registered
|
|
135
|
+
console.log('[Debug] Registered citations:');
|
|
136
|
+
// In browser console, the citation service stores fieldId as the key
|
|
137
|
+
|
|
138
|
+
// Check HTML attribute
|
|
139
|
+
document.querySelector('[data-sea-field="Cash"]') // Should find element
|
|
140
|
+
|
|
141
|
+
// Check if they match
|
|
142
|
+
'Cash' === 'cash' // false - case matters!
|
|
143
|
+
'Cash' === 'Cash' // true - exact match
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Adding More Fields
|
|
147
|
+
|
|
148
|
+
To add the remaining fields from the API:
|
|
149
|
+
|
|
150
|
+
### 1. Add HTML Field
|
|
151
|
+
|
|
152
|
+
```html
|
|
153
|
+
<div>
|
|
154
|
+
<label style="display: block; font-size: 11px; color: #706e6b; margin-bottom: 4px; font-weight: 600;">
|
|
155
|
+
GROSS FIXED ASSETS
|
|
156
|
+
</label>
|
|
157
|
+
<input
|
|
158
|
+
type="text"
|
|
159
|
+
data-sea-field="Gross Fixed Assets"
|
|
160
|
+
placeholder="$0.00"
|
|
161
|
+
(click)="onFieldClick('Gross Fixed Assets')"
|
|
162
|
+
title="Fixed assets at original cost"
|
|
163
|
+
style="width: 100%; padding: 8px; border: 1px solid #d8dde6; border-radius: 3px; font-size: 13px;"
|
|
164
|
+
/>
|
|
165
|
+
</div>
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### 2. Field ID Must Match Exactly
|
|
169
|
+
|
|
170
|
+
The `data-sea-field` attribute must match the API's `formField.name` **exactly**:
|
|
171
|
+
- Same capitalization
|
|
172
|
+
- Same spaces
|
|
173
|
+
- Same punctuation (parentheses, slashes, etc.)
|
|
174
|
+
|
|
175
|
+
### 3. No Code Changes Needed
|
|
176
|
+
|
|
177
|
+
Once the HTML field is added with the correct `data-sea-field`, the citation will automatically:
|
|
178
|
+
- Be registered when the app loads
|
|
179
|
+
- Link to the document when clicked
|
|
180
|
+
- Display the PDF with highlighted region
|
|
181
|
+
|
|
182
|
+
## Current Status
|
|
183
|
+
|
|
184
|
+
✅ 4 fields implemented and working:
|
|
185
|
+
- Cash
|
|
186
|
+
- Accounts Receivable (A/R)
|
|
187
|
+
- Prepaid Expenses
|
|
188
|
+
- Other Current Assets
|
|
189
|
+
|
|
190
|
+
⏳ 13 additional fields available in API (not yet in HTML):
|
|
191
|
+
- Can be added by copying HTML template above
|
|
192
|
+
- Just ensure `data-sea-field` matches API fieldId exactly
|
|
193
|
+
|
|
194
|
+
## Summary
|
|
195
|
+
|
|
196
|
+
The key change is using **exact field names from the API** as field IDs, rather than creating custom kebab-case identifiers. This ensures perfect matching between HTML fields and API citations.
|
|
197
|
+
|
|
198
|
+
### Before
|
|
199
|
+
- HTML: `data-sea-field="cash"`
|
|
200
|
+
- API: `formField.name = "Cash"`
|
|
201
|
+
- Result: ❌ No match (case mismatch)
|
|
202
|
+
|
|
203
|
+
### After
|
|
204
|
+
- HTML: `data-sea-field="Cash"`
|
|
205
|
+
- API: `formField.name = "Cash"`
|
|
206
|
+
- Result: ✅ Perfect match!
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
# Integration Guide: Adding Citation Support to Your Forms
|
|
2
|
+
|
|
3
|
+
This guide explains how to add citation support to any form field in your application.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
1. **Add the `data-sea-field` attribute** to any element you want to make citation-aware
|
|
8
|
+
2. **Register the citation** in `CitationService`
|
|
9
|
+
3. **Add a click handler** to activate the citation
|
|
10
|
+
|
|
11
|
+
## Step-by-Step Example
|
|
12
|
+
|
|
13
|
+
### 1. Identify Your Field
|
|
14
|
+
|
|
15
|
+
Let's say you have a form field for "Total Assets":
|
|
16
|
+
|
|
17
|
+
```html
|
|
18
|
+
<input type="text" placeholder="Enter total assets" />
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### 2. Add the Citation Attribute
|
|
22
|
+
|
|
23
|
+
Add a unique `data-sea-field` attribute:
|
|
24
|
+
|
|
25
|
+
```html
|
|
26
|
+
<input
|
|
27
|
+
type="text"
|
|
28
|
+
data-sea-field="total-assets"
|
|
29
|
+
placeholder="Enter total assets"
|
|
30
|
+
/>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 3. Add Click Handler
|
|
34
|
+
|
|
35
|
+
Make it clickable to activate the citation:
|
|
36
|
+
|
|
37
|
+
```html
|
|
38
|
+
<input
|
|
39
|
+
type="text"
|
|
40
|
+
data-sea-field="total-assets"
|
|
41
|
+
(click)="onFieldClick('total-assets')"
|
|
42
|
+
placeholder="Enter total assets"
|
|
43
|
+
/>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 4. Register the Citation
|
|
47
|
+
|
|
48
|
+
In `citation.service.ts`, add the field mapping:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
this.registerCitation({
|
|
52
|
+
fieldId: 'total-assets', // Must match data-sea-field
|
|
53
|
+
citationId: 'citation-assets-01', // From your document
|
|
54
|
+
documentId: 'doc-financial-2024', // Document ID
|
|
55
|
+
pageNumber: 5, // Page number
|
|
56
|
+
});
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Field Types
|
|
60
|
+
|
|
61
|
+
### Text Inputs
|
|
62
|
+
|
|
63
|
+
```html
|
|
64
|
+
<input
|
|
65
|
+
type="text"
|
|
66
|
+
data-sea-field="company-name"
|
|
67
|
+
(click)="onFieldClick('company-name')"
|
|
68
|
+
/>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Select Dropdowns
|
|
72
|
+
|
|
73
|
+
```html
|
|
74
|
+
<select
|
|
75
|
+
data-sea-field="industry-type"
|
|
76
|
+
(click)="onFieldClick('industry-type')"
|
|
77
|
+
>
|
|
78
|
+
<option>Financial Services</option>
|
|
79
|
+
<option>Technology</option>
|
|
80
|
+
</select>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Display-Only Fields
|
|
84
|
+
|
|
85
|
+
```html
|
|
86
|
+
<div
|
|
87
|
+
class="sf-field-value"
|
|
88
|
+
data-sea-field="calculated-revenue"
|
|
89
|
+
(click)="onFieldClick('calculated-revenue')"
|
|
90
|
+
>
|
|
91
|
+
$1,234,567
|
|
92
|
+
</div>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Textareas
|
|
96
|
+
|
|
97
|
+
```html
|
|
98
|
+
<textarea
|
|
99
|
+
data-sea-field="business-description"
|
|
100
|
+
(click)="onFieldClick('business-description')"
|
|
101
|
+
rows="4"
|
|
102
|
+
></textarea>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Advanced Usage
|
|
106
|
+
|
|
107
|
+
### Grouping Related Citations
|
|
108
|
+
|
|
109
|
+
If multiple fields come from the same section of a document, you can organize them:
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
// Financial statement section
|
|
113
|
+
const financialFields = [
|
|
114
|
+
{ fieldId: 'revenue', citationId: 'fin-01', page: 1 },
|
|
115
|
+
{ fieldId: 'expenses', citationId: 'fin-02', page: 1 },
|
|
116
|
+
{ fieldId: 'net-income', citationId: 'fin-03', page: 2 },
|
|
117
|
+
];
|
|
118
|
+
|
|
119
|
+
financialFields.forEach(field => {
|
|
120
|
+
this.registerCitation({
|
|
121
|
+
fieldId: field.fieldId,
|
|
122
|
+
citationId: field.citationId,
|
|
123
|
+
documentId: 'financial-statement-2024',
|
|
124
|
+
pageNumber: field.page,
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Dynamic Field Registration
|
|
130
|
+
|
|
131
|
+
For forms generated dynamically:
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
// In your component
|
|
135
|
+
ngOnInit() {
|
|
136
|
+
this.loadFormData().subscribe(formData => {
|
|
137
|
+
formData.fields.forEach(field => {
|
|
138
|
+
if (field.hasCitation) {
|
|
139
|
+
this.citationService.registerCitation({
|
|
140
|
+
fieldId: field.id,
|
|
141
|
+
citationId: field.citationId,
|
|
142
|
+
documentId: field.documentId,
|
|
143
|
+
pageNumber: field.pageNumber,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Custom Citation UI
|
|
152
|
+
|
|
153
|
+
Add visual indicators for fields with citations:
|
|
154
|
+
|
|
155
|
+
```css
|
|
156
|
+
/* Add icon to fields with citations */
|
|
157
|
+
[data-sea-field]::after {
|
|
158
|
+
content: "📄";
|
|
159
|
+
margin-left: 5px;
|
|
160
|
+
opacity: 0;
|
|
161
|
+
transition: opacity 0.2s;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
[data-sea-field]:hover::after {
|
|
165
|
+
opacity: 1;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/* Highlight active citation field */
|
|
169
|
+
[data-sea-field].active-citation {
|
|
170
|
+
background-color: #fff3cd;
|
|
171
|
+
border-color: #ffc107;
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Then in your component:
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
protected onFieldClick(fieldId: string): void {
|
|
179
|
+
// Remove active class from all fields
|
|
180
|
+
document.querySelectorAll('[data-sea-field]').forEach(el => {
|
|
181
|
+
el.classList.remove('active-citation');
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// Add active class to clicked field
|
|
185
|
+
const field = document.querySelector(`[data-sea-field="${fieldId}"]`);
|
|
186
|
+
field?.classList.add('active-citation');
|
|
187
|
+
|
|
188
|
+
// Activate the citation
|
|
189
|
+
this.citationService.activateCitation(fieldId);
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Using the Full HTML Template
|
|
194
|
+
|
|
195
|
+
The `template.html` file in this directory contains the complete CRM interface. To use it:
|
|
196
|
+
|
|
197
|
+
1. **Extract the body content** - Copy everything inside `<body>` tags
|
|
198
|
+
2. **Convert to Angular template** - Replace inline event handlers with Angular syntax:
|
|
199
|
+
- `onclick="func()"` → `(click)="func()"`
|
|
200
|
+
- Add `data-sea-field` attributes where needed
|
|
201
|
+
3. **Add to component** - Place in your component's template
|
|
202
|
+
|
|
203
|
+
Example conversion:
|
|
204
|
+
|
|
205
|
+
```html
|
|
206
|
+
<!-- Original HTML -->
|
|
207
|
+
<button onclick="submitForm()">Submit</button>
|
|
208
|
+
|
|
209
|
+
<!-- Angular template -->
|
|
210
|
+
<button (click)="submitForm()">Submit</button>
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## Real-World Integration
|
|
214
|
+
|
|
215
|
+
### Connecting to Sea.dev API
|
|
216
|
+
|
|
217
|
+
```typescript
|
|
218
|
+
import { HttpClient } from '@angular/common/http';
|
|
219
|
+
import { Injectable } from '@angular/core';
|
|
220
|
+
|
|
221
|
+
@Injectable({ providedIn: 'root' })
|
|
222
|
+
export class SeaApiService {
|
|
223
|
+
constructor(
|
|
224
|
+
private http: HttpClient,
|
|
225
|
+
private citationService: CitationService
|
|
226
|
+
) {}
|
|
227
|
+
|
|
228
|
+
loadSubmission(submissionId: string) {
|
|
229
|
+
return this.http.get(`/api/submissions/${submissionId}`).pipe(
|
|
230
|
+
tap((submission: any) => {
|
|
231
|
+
// Register citations from API response
|
|
232
|
+
submission.fields.forEach(field => {
|
|
233
|
+
if (field.citation) {
|
|
234
|
+
this.citationService.registerCitation({
|
|
235
|
+
fieldId: field.name,
|
|
236
|
+
citationId: field.citation.id,
|
|
237
|
+
documentId: field.citation.document.id,
|
|
238
|
+
pageNumber: field.citation.pageNumber,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
})
|
|
243
|
+
);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Document Loading
|
|
249
|
+
|
|
250
|
+
```typescript
|
|
251
|
+
activateCitation(fieldId: string): void {
|
|
252
|
+
const citation = this.getCitation(fieldId);
|
|
253
|
+
if (!citation) return;
|
|
254
|
+
|
|
255
|
+
// Load the actual document
|
|
256
|
+
this.documentService.getDocument(citation.documentId).subscribe(doc => {
|
|
257
|
+
this.activeDocument.set({
|
|
258
|
+
id: doc.id,
|
|
259
|
+
name: doc.name,
|
|
260
|
+
url: doc.signedUrl, // Use signed URL from API
|
|
261
|
+
citations: doc.citations.map(c => ({
|
|
262
|
+
id: c.id,
|
|
263
|
+
boundingRegions: c.boundingRegions,
|
|
264
|
+
text: c.extractedText,
|
|
265
|
+
path: c.fieldPath,
|
|
266
|
+
})),
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
this.selectedCitation.set(citation);
|
|
270
|
+
this.pdfViewerVisible.set(true);
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## Troubleshooting
|
|
276
|
+
|
|
277
|
+
### Citation Not Appearing
|
|
278
|
+
|
|
279
|
+
1. Check that `fieldId` in `registerCitation()` matches `data-sea-field` attribute
|
|
280
|
+
2. Verify the citation is registered before the component renders
|
|
281
|
+
3. Check browser console for errors
|
|
282
|
+
|
|
283
|
+
### PDF Not Loading
|
|
284
|
+
|
|
285
|
+
1. Verify the document URL is accessible
|
|
286
|
+
2. Check CORS settings if loading from different domain
|
|
287
|
+
3. Ensure PDF URL is properly signed/authenticated
|
|
288
|
+
|
|
289
|
+
### Click Handler Not Working
|
|
290
|
+
|
|
291
|
+
1. Make sure you're using Angular event binding: `(click)="..."`
|
|
292
|
+
2. Verify the component method is defined and accessible
|
|
293
|
+
3. Check that the element isn't disabled or behind another element
|
|
294
|
+
|
|
295
|
+
## Best Practices
|
|
296
|
+
|
|
297
|
+
1. **Use semantic field IDs**: `revenue`, `company-name`, not `field1`, `field2`
|
|
298
|
+
2. **Register citations early**: In `ngOnInit` or service constructor
|
|
299
|
+
3. **Handle missing citations**: Check `hasCitation()` before activating
|
|
300
|
+
4. **Provide feedback**: Show loading states while fetching documents
|
|
301
|
+
5. **Clean up**: Remove citation registrations when component is destroyed
|
|
302
|
+
|
|
303
|
+
## Examples
|
|
304
|
+
|
|
305
|
+
See [app.component.ts](src/app/app.component.ts) for a complete working example with:
|
|
306
|
+
- Multiple field types with citations
|
|
307
|
+
- PDF viewer integration
|
|
308
|
+
- Bidirectional navigation
|
|
309
|
+
- Visual feedback
|