madarx 2.9.12 → 2.9.14
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/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +522 -522
- package/.next/standalone/.next/app-path-routes-manifest.json +74 -74
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +9 -9
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +4 -4
- package/.next/standalone/.next/server/app/activity/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/page.js +2 -2
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/agents/[id]/page.js +3 -3
- package/.next/standalone/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/agents/page.js +1 -1
- package/.next/standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/activity/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/audit-export/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/share-links/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-memory/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/[id]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/[id]/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/[id]/log/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/chain/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/memory/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/reports/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/create/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/ops/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/acl/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/protect/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/raw/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/upload/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/audit/list/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/audit/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/config/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/join-bootstrap/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/brand/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/chat/sessions/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/chat/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/config/env/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/connections/[service]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/connections/[service]/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/connections/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/cron/tick/route.js +1 -1
- package/.next/standalone/.next/server/app/api/cron/tick/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/move/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/import/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/[id]/blob/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/[id]/transcribe/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/folders/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/since/[cursor]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/stream/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/fs/create-folder/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/fs/pick-folder/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/blueprint/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/diagnostic/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/governance/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/interview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/pilot/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/quarterly/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/setup-package/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/interviews/[id]/responses/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/interviews/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/setup-packages/[id]/apply/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/setup-packages/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/heartbeat/tick/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/heartbeat/worker/route.js +1 -1
- package/.next/standalone/.next/server/app/api/heartbeat/worker/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/help/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hermes/jobs/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/integrations/google/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/integrations/google/oauth/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/marketplace/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/marketplace/open-design/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/marketplace/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/import-roots/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/portfolio/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/[id]/chunks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/[id]/diligence/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/[id]/import/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/[id]/publish/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/missions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/onboarding/blueprint/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/onboarding/launch/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orchestrator/command/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orchestrator/stream/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/org/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/invites/[inviteId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/invites/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/role/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/members/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/invites/pending/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/join/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/printing-press/clis/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/printing-press/install/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/printing-press/security-mode/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/privacy/config/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/privacy/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/share-link/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/override/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/retry/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/submit/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/settings/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/start-and-route/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[slug]/library/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[slug]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/approve-claude-run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/claude-code-dry-run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/competitor-report/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/engine-ping/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/marketing-plan/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/schedules/upsert/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/secrets/[name]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/secrets/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/settings/trust-mode/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/[token]/otp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/[token]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/[token]/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/space/[token]/otp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/space/[token]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/space/[token]/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/[id]/acl/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/publish/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/status/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/unpublish/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/state/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/system/update/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/active-run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/attachments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/[itemId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/checkout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/children/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/comments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/live-runs/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tool-allowlists/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tool-allowlists/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tool-egress/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tools/[name]/approve/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tools/[name]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tools/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/transcripts/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/providers/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/realtime/context/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/realtime/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/realtime/tool-result/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/realtime/tools/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/tts/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/allowlist/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/messages/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/qr/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/send/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/status/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/approvals/page.js +1 -1
- package/.next/standalone/.next/server/app/approvals/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/architecture/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/architecture.html +2 -2
- package/.next/standalone/.next/server/app/architecture.rsc +4 -4
- package/.next/standalone/.next/server/app/audit/live/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/brand/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/brand.html +1 -1
- package/.next/standalone/.next/server/app/brand.rsc +4 -4
- package/.next/standalone/.next/server/app/disk/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/federated-ai/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/federated-ai.html +2 -2
- package/.next/standalone/.next/server/app/federated-ai.rsc +4 -4
- package/.next/standalone/.next/server/app/hail/[id]/governance/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/interview/page.js +2 -2
- package/.next/standalone/.next/server/app/hail/[id]/interview/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/page.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/setup/page.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/page.js +1 -1
- package/.next/standalone/.next/server/app/hail/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/help/[slug]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +2 -2
- package/.next/standalone/.next/server/app/index.rsc +4 -4
- package/.next/standalone/.next/server/app/join/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/join.html +1 -1
- package/.next/standalone/.next/server/app/join.rsc +4 -4
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/marketplace/page.js +1 -1
- package/.next/standalone/.next/server/app/marketplace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/mines/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/mines/[projectId]/results/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/mines/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/missions/page.js +2 -2
- package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding/org/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/onboarding.rsc +4 -4
- package/.next/standalone/.next/server/app/org/page.js +1 -1
- package/.next/standalone/.next/server/app/org/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/org/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/[slug]/log/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/new/page.js +1 -1
- package/.next/standalone/.next/server/app/projects/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/new.html +1 -1
- package/.next/standalone/.next/server/app/projects/new.rsc +5 -5
- package/.next/standalone/.next/server/app/projects/page.js +10 -10
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/reports/[file]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/reports/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/runtime/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/schedules/page.js +2 -2
- package/.next/standalone/.next/server/app/schedules/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/account/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/appearance/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/brand/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/brand.html +2 -2
- package/.next/standalone/.next/server/app/settings/brand.rsc +4 -4
- package/.next/standalone/.next/server/app/settings/connectors/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/engines/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/settings/onboarding.rsc +4 -4
- package/.next/standalone/.next/server/app/settings/organization/page.js +1 -1
- package/.next/standalone/.next/server/app/settings/organization/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/organization/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/runtime/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/tools/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +4 -4
- package/.next/standalone/.next/server/app/share/[token]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/share/space/[token]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/tasks/[id]/page.js +2 -2
- package/.next/standalone/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/tasks/page.js +1 -1
- package/.next/standalone/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/team/[agentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/team/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/whatsapp/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/whatsapp.html +1 -1
- package/.next/standalone/.next/server/app/whatsapp.rsc +4 -4
- package/.next/standalone/.next/server/app/workflows/[caseId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/new/[caseId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/new/definition/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/share/[caseId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +74 -74
- package/.next/standalone/.next/server/chunks/1699.js +7 -7
- package/.next/standalone/.next/server/chunks/{8677.js → 1731.js} +1 -1
- package/.next/standalone/.next/server/chunks/1997.js +2 -2
- package/.next/standalone/.next/server/chunks/6700.js +3 -3
- package/.next/standalone/.next/server/chunks/671.js +1 -1
- package/.next/standalone/.next/server/chunks/6818.js +1 -1
- package/.next/standalone/.next/server/functions-config-manifest.json +35 -35
- package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/{static/chunks/app/layout-3c5a2ec0922a44da.js → standalone/.next/static/chunks/app/layout-01269582605f37ea.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/projects/[slug]/page-bc5359a5168e8ce3.js +1 -0
- package/.next/standalone/.next/static/chunks/app/projects/{page-e73dec080197c3c1.js → page-f55a986677cf4da1.js} +1 -1
- package/.next/standalone/.next/static/chunks/{webpack-9b86a02e210b78df.js → webpack-ce537f60727acb61.js} +1 -1
- package/.next/standalone/.next/static/css/dbef8eff6337245e.css +1 -0
- package/.next/standalone/data/.artifacts-migrated-v1 +1 -1
- package/.next/standalone/data/.default-project-seeded +1 -1
- package/.next/standalone/data/madarx.sqlite +0 -0
- package/.next/standalone/data/madarx.sqlite-shm +0 -0
- package/.next/standalone/data/madarx.sqlite-wal +0 -0
- package/.next/standalone/package.json +1 -1
- package/.next/{standalone/.next/static/chunks/app/layout-3c5a2ec0922a44da.js → static/chunks/app/layout-01269582605f37ea.js} +1 -1
- package/.next/static/chunks/app/projects/[slug]/page-bc5359a5168e8ce3.js +1 -0
- package/.next/static/chunks/app/projects/{page-e73dec080197c3c1.js → page-f55a986677cf4da1.js} +1 -1
- package/.next/static/chunks/{webpack-9b86a02e210b78df.js → webpack-ce537f60727acb61.js} +1 -1
- package/.next/static/css/dbef8eff6337245e.css +1 -0
- package/app/components/smart-search.jsx +1 -1
- package/lib/auth.js +62 -0
- package/lib/inproc-token.js +17 -6
- package/lib/shared-cloud.js +88 -0
- package/package.json +1 -1
- package/.next/standalone/.next/static/chunks/app/projects/[slug]/page-8696ab69500ca8e1.js +0 -1
- package/.next/standalone/.next/static/css/3adc5e4c7a6f251f.css +0 -1
- package/.next/static/chunks/app/projects/[slug]/page-8696ab69500ca8e1.js +0 -1
- package/.next/static/css/3adc5e4c7a6f251f.css +0 -1
- /package/.next/standalone/.next/static/{Ggj14oXXrOVWG6lsx-BHT → q1AxdAE8spFgM2Iyr1w6Q}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{Ggj14oXXrOVWG6lsx-BHT → q1AxdAE8spFgM2Iyr1w6Q}/_ssgManifest.js +0 -0
- /package/.next/static/{Ggj14oXXrOVWG6lsx-BHT → q1AxdAE8spFgM2Iyr1w6Q}/_buildManifest.js +0 -0
- /package/.next/static/{Ggj14oXXrOVWG6lsx-BHT → q1AxdAE8spFgM2Iyr1w6Q}/_ssgManifest.js +0 -0
|
@@ -234,7 +234,7 @@ export default function SmartSearch() {
|
|
|
234
234
|
|
|
235
235
|
useEffect(() => {
|
|
236
236
|
function onKeyDown(event) {
|
|
237
|
-
const key = event.key.toLowerCase();
|
|
237
|
+
const key = (event.key || '').toLowerCase();
|
|
238
238
|
const mod = event.metaKey || event.ctrlKey;
|
|
239
239
|
const typing = isTypingTarget(event.target);
|
|
240
240
|
|
package/lib/auth.js
CHANGED
|
@@ -256,6 +256,44 @@ export async function _claimEmailInvitesAtLogin(sbUser, accessToken) {
|
|
|
256
256
|
}
|
|
257
257
|
}
|
|
258
258
|
|
|
259
|
+
// Canonical membership ordering — mirrors the ORDER BY in _resolveOrgFromDb so
|
|
260
|
+
// the cloud-reconcile path and the local-table path pick the same primary org.
|
|
261
|
+
const _ROLE_RANK = { owner: 0, admin: 1, member: 2, viewer: 3 };
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Picks the primary membership from a list, by highest privilege then org_id for
|
|
265
|
+
* a deterministic tiebreak. Returns null for an empty list.
|
|
266
|
+
*/
|
|
267
|
+
export function _pickPrimaryMembership(memberships) {
|
|
268
|
+
if (!Array.isArray(memberships) || memberships.length === 0) return null;
|
|
269
|
+
return [...memberships].sort((a, b) => {
|
|
270
|
+
const ra = _ROLE_RANK[a.role] ?? 4;
|
|
271
|
+
const rb = _ROLE_RANK[b.role] ?? 4;
|
|
272
|
+
if (ra !== rb) return ra - rb;
|
|
273
|
+
return String(a.org_id).localeCompare(String(b.org_id));
|
|
274
|
+
})[0];
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Mirrors the user's existing cloud org memberships into local SQLite at login.
|
|
279
|
+
* Thin wrapper over shared-cloud's mirror; returns the mirrored memberships
|
|
280
|
+
* (`[{ org_id, role }]`) so the caller can prefer a cloud-confirmed org over a
|
|
281
|
+
* local-only row. Never throws — the cloud is best-effort here, and getSession
|
|
282
|
+
* falls through to the local table / invite claim / bootstrap on an empty list.
|
|
283
|
+
*/
|
|
284
|
+
export async function _mirrorCloudMembershipsAtLogin(sbUser, accessToken) {
|
|
285
|
+
try {
|
|
286
|
+
const { mirrorCloudMembershipsForUser } = await import('./shared-cloud.js');
|
|
287
|
+
return await mirrorCloudMembershipsForUser({
|
|
288
|
+
user_id: sbUser.id,
|
|
289
|
+
supabase_access_token: accessToken,
|
|
290
|
+
});
|
|
291
|
+
} catch (err) {
|
|
292
|
+
console.warn('[auth] cloud membership mirror failed:', err.message);
|
|
293
|
+
return [];
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
259
297
|
// ── Upsert a user row in the SQLite cache (Supabase sign-in) ─────────────────
|
|
260
298
|
|
|
261
299
|
function _upsertUserRow(sbUser) {
|
|
@@ -334,6 +372,30 @@ export async function getSession(req) {
|
|
|
334
372
|
// Resolve org membership from SQLite.
|
|
335
373
|
let membership = _resolveOrgFromDb(user.id);
|
|
336
374
|
|
|
375
|
+
// Cloud reconcile. In supabase mode the cloud `org_memberships` table is
|
|
376
|
+
// authoritative, so we mirror the user's EXISTING cloud memberships down and
|
|
377
|
+
// prefer a cloud-confirmed org over any local-only row.
|
|
378
|
+
//
|
|
379
|
+
// • Admin/owner instance (service-role key present): reconcile on EVERY login.
|
|
380
|
+
// This SELF-HEALS a locally-bootstrapped "phantom" org — one created by
|
|
381
|
+
// `_bootstrapFirstOrg` during a fresh install or a transient cloud blip,
|
|
382
|
+
// which has no cloud row and would otherwise make `requireFreshMembership`
|
|
383
|
+
// lock the user out with `membership_revoked` forever (the phantom local
|
|
384
|
+
// row stops the lazy mirror from ever re-running).
|
|
385
|
+
// • Member instance (no service key) / cloud unreachable: stay lazy — only
|
|
386
|
+
// reconcile when there is no local membership yet, to avoid an extra cloud
|
|
387
|
+
// round-trip on every login (members get memberships via invite claim).
|
|
388
|
+
const cloudFirst = Boolean(getSupabaseServiceKey());
|
|
389
|
+
if (cloudFirst || !membership) {
|
|
390
|
+
const cloudMemberships = await _mirrorCloudMembershipsAtLogin(user, accessToken);
|
|
391
|
+
if (cloudMemberships.length) {
|
|
392
|
+
// Prefer the cloud-confirmed membership over the (possibly phantom) local
|
|
393
|
+
// row. The phantom row is left in place but is never selected, so the
|
|
394
|
+
// session org always matches what the live-check validates against.
|
|
395
|
+
membership = _pickPrimaryMembership(cloudMemberships) || membership;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
337
399
|
// Phase 2 — claim a pending email pre-invite into the INVITING org before the
|
|
338
400
|
// fresh-install bootstrap. An invited member must land in the org they were
|
|
339
401
|
// invited to, not get bootstrapped into a brand-new personal org.
|
package/lib/inproc-token.js
CHANGED
|
@@ -33,7 +33,16 @@
|
|
|
33
33
|
import { randomBytes, timingSafeEqual } from 'node:crypto';
|
|
34
34
|
|
|
35
35
|
const HEADER_NAME = 'x-inproc-token';
|
|
36
|
-
|
|
36
|
+
|
|
37
|
+
// The token is pinned to globalThis, NOT a module-level `let`. The daemon
|
|
38
|
+
// (lib/db.js) and the route handlers (app/api/**) both import this file, but
|
|
39
|
+
// Next.js bundles the server runtime and each route segment into SEPARATE
|
|
40
|
+
// module instances even inside ONE process — so a module-scoped singleton would
|
|
41
|
+
// give the daemon one random token and the route a DIFFERENT one. The daemon's
|
|
42
|
+
// ticks would then never match verifyInprocToken() and every /api/heartbeat/worker
|
|
43
|
+
// and /api/cron/tick poke would fall through to requireSession and 401.
|
|
44
|
+
// globalThis is per-isolate (per process), so all bundled copies share it.
|
|
45
|
+
const TOKEN_KEY = '__madarxInprocToken';
|
|
37
46
|
|
|
38
47
|
function generateToken() {
|
|
39
48
|
return randomBytes(32).toString('base64url');
|
|
@@ -41,13 +50,15 @@ function generateToken() {
|
|
|
41
50
|
|
|
42
51
|
/**
|
|
43
52
|
* Return the in-process token, resolving from env on first call or
|
|
44
|
-
* generating a fresh one for the process lifetime.
|
|
53
|
+
* generating a fresh one for the process lifetime. Shared across all module
|
|
54
|
+
* instances in the process via globalThis.
|
|
45
55
|
*/
|
|
46
56
|
export function getInprocToken() {
|
|
47
|
-
if (
|
|
57
|
+
if (globalThis[TOKEN_KEY]) return globalThis[TOKEN_KEY];
|
|
48
58
|
const envValue = process.env.MADARX_INPROC_TICK_TOKEN;
|
|
49
|
-
|
|
50
|
-
|
|
59
|
+
globalThis[TOKEN_KEY] =
|
|
60
|
+
envValue && envValue.trim().length > 0 ? envValue.trim() : generateToken();
|
|
61
|
+
return globalThis[TOKEN_KEY];
|
|
51
62
|
}
|
|
52
63
|
|
|
53
64
|
/**
|
|
@@ -73,5 +84,5 @@ export const INPROC_TOKEN_HEADER = HEADER_NAME;
|
|
|
73
84
|
|
|
74
85
|
/** Reset the cached token (used in tests). */
|
|
75
86
|
export function resetInprocToken() {
|
|
76
|
-
|
|
87
|
+
delete globalThis[TOKEN_KEY];
|
|
77
88
|
}
|
package/lib/shared-cloud.js
CHANGED
|
@@ -1252,6 +1252,94 @@ export async function redeemInviteViaCloud(token, session, options = {}) {
|
|
|
1252
1252
|
return { org_id: row.org_id, role };
|
|
1253
1253
|
}
|
|
1254
1254
|
|
|
1255
|
+
/**
|
|
1256
|
+
* Mirrors the signed-in user's EXISTING cloud org memberships into local SQLite.
|
|
1257
|
+
*
|
|
1258
|
+
* Runs at login BEFORE the local first-org bootstrap. In supabase mode the cloud
|
|
1259
|
+
* `org_memberships` table is authoritative for who belongs to which org. A fresh
|
|
1260
|
+
* local install (a new $MADARX_HOME, a wiped data dir, a second machine) has no
|
|
1261
|
+
* local membership rows, which would otherwise drive `_bootstrapFirstOrg` to
|
|
1262
|
+
* invent a brand-new phantom org. That phantom org has no cloud row, so the first
|
|
1263
|
+
* `requireFreshMembership` live-check returns 0 rows and locks the user out with
|
|
1264
|
+
* `membership_revoked`. Mirroring the real cloud memberships down first keeps the
|
|
1265
|
+
* local session org in agreement with the cloud the live-check validates against.
|
|
1266
|
+
*
|
|
1267
|
+
* Prefers the service-role admin client (owner/server). Falls back to the
|
|
1268
|
+
* member's own JWT — RLS lets a member SELECT their own membership rows — so a
|
|
1269
|
+
* member machine without the service key still reconciles. Returns [] and never
|
|
1270
|
+
* throws when the cloud is unconfigured/unreachable, so getSession can fall back
|
|
1271
|
+
* to the local table / invite claim / bootstrap.
|
|
1272
|
+
*
|
|
1273
|
+
* NOTE: additive only. Like `_ensureLocalOrgMembership`, this inserts missing
|
|
1274
|
+
* local rows; it never deletes a local membership the cloud no longer has. That
|
|
1275
|
+
* keeps the mirror safe to run on every no-local-membership login. Revocation of
|
|
1276
|
+
* an existing membership is handled separately by `requireFreshMembership`.
|
|
1277
|
+
*
|
|
1278
|
+
* @param {object} session Must carry user_id; supabase_access_token for the member path.
|
|
1279
|
+
* @returns {Promise<Array<{ org_id, role }>>}
|
|
1280
|
+
*/
|
|
1281
|
+
export async function mirrorCloudMembershipsForUser(session, options = {}) {
|
|
1282
|
+
assertServerOnly();
|
|
1283
|
+
const userId = session?.user_id;
|
|
1284
|
+
if (!userId) return [];
|
|
1285
|
+
|
|
1286
|
+
const accessToken = session?.supabase_access_token || null;
|
|
1287
|
+
const kind = selectCloudClientKind({
|
|
1288
|
+
serviceReady: isSharedCloudReady(options),
|
|
1289
|
+
userReady: isSharedCloudUserReady(options),
|
|
1290
|
+
accessToken,
|
|
1291
|
+
});
|
|
1292
|
+
if (!kind) return [];
|
|
1293
|
+
|
|
1294
|
+
let client;
|
|
1295
|
+
try {
|
|
1296
|
+
client = kind === 'admin'
|
|
1297
|
+
? getSharedCloudAdmin(options)
|
|
1298
|
+
: getSharedCloudUserClient(accessToken, options);
|
|
1299
|
+
} catch {
|
|
1300
|
+
return [];
|
|
1301
|
+
}
|
|
1302
|
+
|
|
1303
|
+
let rows;
|
|
1304
|
+
try {
|
|
1305
|
+
rows = await client.select('org_memberships', {
|
|
1306
|
+
filters: { user_id: userId },
|
|
1307
|
+
select: 'org_id,role',
|
|
1308
|
+
limit: 100,
|
|
1309
|
+
});
|
|
1310
|
+
} catch {
|
|
1311
|
+
return []; // table absent / project not migrated / network — caller falls back.
|
|
1312
|
+
}
|
|
1313
|
+
if (!Array.isArray(rows) || rows.length === 0) return [];
|
|
1314
|
+
|
|
1315
|
+
// Resolve org names so the mirrored local `organizations` row isn't an opaque
|
|
1316
|
+
// id. Best-effort: on failure we fall back to the id as the local name.
|
|
1317
|
+
const orgIds = [...new Set(rows.map((r) => r.org_id).filter(Boolean))];
|
|
1318
|
+
const nameById = new Map();
|
|
1319
|
+
try {
|
|
1320
|
+
if (orgIds.length) {
|
|
1321
|
+
const orgRows = await client.select('organizations', {
|
|
1322
|
+
filters: { id: `in.(${orgIds.join(',')})` },
|
|
1323
|
+
select: 'id,name',
|
|
1324
|
+
limit: 1000,
|
|
1325
|
+
});
|
|
1326
|
+
for (const o of Array.isArray(orgRows) ? orgRows : []) {
|
|
1327
|
+
if (o.id) nameById.set(o.id, o.name);
|
|
1328
|
+
}
|
|
1329
|
+
}
|
|
1330
|
+
} catch {
|
|
1331
|
+
/* name lookup is best-effort */
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1334
|
+
const out = [];
|
|
1335
|
+
for (const r of rows) {
|
|
1336
|
+
if (!r.org_id) continue;
|
|
1337
|
+
_ensureLocalOrgMembership(r.org_id, userId, r.role, nameById.get(r.org_id));
|
|
1338
|
+
out.push({ org_id: r.org_id, role: r.role });
|
|
1339
|
+
}
|
|
1340
|
+
return out;
|
|
1341
|
+
}
|
|
1342
|
+
|
|
1255
1343
|
// ════════════════════════════════════════════════════════════════════════════
|
|
1256
1344
|
// SPACE / PROJECT ACL — per-principal access grants
|
|
1257
1345
|
//
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8419],{45:(e,t,r)=>{"use strict";r.d(t,{default:()=>i});var a=r(2115),n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"},o=r(4250);let l=(0,a.createContext)({}),i=(0,a.forwardRef)((e,t)=>{var r,i,s;let{color:c,size:d,strokeWidth:u,absoluteStrokeWidth:h,className:p="",children:m,iconNode:f,...b}=e,{size:v=24,strokeWidth:j=2,absoluteStrokeWidth:y=!1,color:g="currentColor",className:k=""}=null!=(r=(0,a.useContext)(l))?r:{},w=(null!=h?h:y)?24*Number(null!=u?u:j)/Number(null!=d?d:v):null!=u?u:j;return(0,a.createElement)("svg",{ref:t,...n,width:null!=(i=null!=d?d:v)?i:n.width,height:null!=(s=null!=d?d:v)?s:n.height,stroke:null!=c?c:g,strokeWidth:w,className:(0,o.z)("lucide",k,p),...!m&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(b)&&{"aria-hidden":"true"},...b},[...f.map(e=>{let[t,r]=e;return(0,a.createElement)(t,r)}),...Array.isArray(m)?m:[m]])})},63:(e,t,r)=>{"use strict";var a=r(7260);r.o(a,"usePathname")&&r.d(t,{usePathname:function(){return a.usePathname}}),r.o(a,"useRouter")&&r.d(t,{useRouter:function(){return a.useRouter}}),r.o(a,"useSearchParams")&&r.d(t,{useSearchParams:function(){return a.useSearchParams}})},677:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var a=r(5155),n=r(2115);function o(){let[e,t]=(0,n.useState)([]),[r,o]=(0,n.useState)("");return(0,n.useEffect)(()=>{o(localStorage.getItem("madarx.activeProjectId")||""),fetch("/api/projects").then(e=>e.json()).then(e=>t(e.projects||[])).catch(()=>{})},[]),(0,a.jsx)("div",{className:"project-switcher","data-project-switcher":!0,children:(0,a.jsxs)("select",{value:r,onChange:e=>{var t;o(t=e.target.value),t?localStorage.setItem("madarx.activeProjectId",t):localStorage.removeItem("madarx.activeProjectId"),window.dispatchEvent(new CustomEvent("madarx:project-change",{detail:{project_id:t||null}}))},"aria-label":"Active project",children:[(0,a.jsx)("option",{value:"",children:"All projects"}),e.map(e=>(0,a.jsx)("option",{value:e.id,children:e.name},e.id))]})})}},2074:(e,t,r)=>{"use strict";r.d(t,{default:()=>i});var a=r(5155),n=r(2115),o=r(2835);let l=new Set(["html","htm"]);function i(e){let{projectId:t,children:r}=e,{refreshLibrary:i}=(0,o.c)(),[m,f]=n.useState(!1),[,b]=n.useState(!1),v=n.useRef(!1),j=n.useRef(null),[y,g]=n.useState(null),k=n.useRef(0);n.useEffect(()=>{function e(e){e.dataTransfer&&Array.from(e.dataTransfer.types||[]).includes("Files")&&(k.current+=1,f(!0))}function t(){k.current=Math.max(0,k.current-1),0===k.current&&f(!1)}function r(e){e.dataTransfer&&Array.from(e.dataTransfer.types||[]).includes("Files")&&(e.preventDefault(),e.dataTransfer.dropEffect="copy")}function a(e){var t;e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length&&(e.preventDefault(),k.current=0,f(!1),null==(t=j.current)||t.call(j,Array.from(e.dataTransfer.files)))}return window.addEventListener("dragenter",e),window.addEventListener("dragleave",t),window.addEventListener("dragover",r),window.addEventListener("drop",a),()=>{window.removeEventListener("dragenter",e),window.removeEventListener("dragleave",t),window.removeEventListener("dragover",r),window.removeEventListener("drop",a)}},[]);let w=n.useCallback(async e=>{if(e.size>0x1900000)return{ok:!1,name:e.name,error:"Too large (>".concat(0x1900000," bytes)")};let r=function(e){let t=(String((null==e?void 0:e.name)||"").toLowerCase().match(/\.([a-z0-9]+)$/)||[,""])[1],r=String((null==e?void 0:e.type)||"").toLowerCase();return l.has(t)||"text/html"===r?"html":"disk"}(e),a=new FormData;if(a.set("project_id",t),"html"===r){a.set("file",e);let t=await fetch("/api/artifacts/upload",{method:"POST",body:a}),r=await t.json().catch(()=>({}));return{ok:t.ok,name:e.name,error:null==r?void 0:r.error}}a.set("files",e);let n=await fetch("/api/disk/files",{method:"POST",body:a}),o=await n.json().catch(()=>({}));return{ok:n.ok,name:e.name,error:null==o?void 0:o.error}},[t]),x=n.useCallback(async e=>{if(e.length&&!v.current){v.current=!0,b(!0);try{g({kind:"info",text:"Uploading ".concat(e.length," file").concat(e.length>1?"s":"","…")});let t=await Promise.all(e.map(w)),r=t.filter(e=>e.ok).length,a=t.filter(e=>!e.ok);0===a.length?g({kind:"ok",text:"Uploaded ".concat(r," file").concat(r>1?"s":"",".")}):r>0?g({kind:"warn",text:"Uploaded ".concat(r,", ").concat(a.length," failed (").concat(a[0].error||"error",").")}):g({kind:"err",text:"Upload failed: ".concat(a[0].error||"unknown error")}),r>0&&await i(),setTimeout(()=>g(null),4500)}finally{v.current=!1,b(!1)}}},[i,w]);return n.useEffect(()=>{j.current=x},[x]),(0,a.jsxs)(a.Fragment,{children:[r,m?(0,a.jsx)("div",{role:"status","aria-live":"polite",style:s,children:(0,a.jsxs)("div",{style:c,children:[(0,a.jsx)("div",{style:d,children:"Drop to upload"}),(0,a.jsx)("div",{style:u,children:"HTML files become artifacts \xb7 others land in Disk"})]})}):null,y?(0,a.jsx)("div",{role:"status","aria-live":"polite",style:{...h,...p[y.kind]},children:y.text}):null]})}let s={position:"fixed",inset:0,zIndex:9e3,background:"rgba(10, 8, 6, 0.45)",backdropFilter:"blur(6px)",WebkitBackdropFilter:"blur(6px)",display:"flex",alignItems:"center",justifyContent:"center",pointerEvents:"none",transition:"opacity 120ms ease"},c={border:"2px dashed rgba(255,255,255,0.6)",borderRadius:16,padding:"32px 48px",background:"rgba(20,16,12,0.7)",color:"#f5efe7",textAlign:"center",fontFamily:"inherit"},d={fontSize:22,fontWeight:600,letterSpacing:"0.01em",marginBottom:6},u={fontSize:13,opacity:.75},h={position:"fixed",bottom:24,right:24,zIndex:9100,padding:"10px 14px",borderRadius:10,fontSize:13,fontFamily:"inherit",boxShadow:"0 8px 24px rgba(0,0,0,0.25)",maxWidth:380},p={info:{background:"#1f1b16",color:"#f5efe7",border:"1px solid rgba(245,239,231,0.18)"},ok:{background:"#1c2a1d",color:"#e6f3df",border:"1px solid rgba(120,180,90,0.35)"},warn:{background:"#2c2519",color:"#f4e6c5",border:"1px solid rgba(220,170,60,0.35)"},err:{background:"#2c1816",color:"#f4d8d2",border:"1px solid rgba(194,69,42,0.55)"}}},2835:(e,t,r)=>{"use strict";r.d(t,{ProjectAlbumProvider:()=>v,c:()=>j});var a=r(5155),n=r(2115);let o="madarx-privacy-unlocked",l="madarx-privacy-unlock-at",i="madarx-privacy-fail-count",s="madarx-privacy-fail-window-start",c="madarx-privacy-lockout-until";function d(e){try{return window.sessionStorage.getItem(e)}catch(e){return null}}function u(e,t){try{window.sessionStorage.setItem(e,String(t))}catch(e){}}function h(e){try{window.sessionStorage.removeItem(e)}catch(e){}}let p=0;function m(e,t){return new Promise((r,a)=>{let n=p+=1,o=t=>{var l;(null==(l=t.data)?void 0:l.id)===n&&(e.removeEventListener("message",o),!1===t.data.ok&&t.data.error?a(Error(t.data.error)):r(t.data))};e.addEventListener("message",o),e.postMessage({id:n,...t})})}let f=(0,n.createContext)(null);function b(e){return"".concat(e.source_type,"-").concat(e.id)}function v(e){let{children:t,initialItems:r=[],initialFolders:p=[],projectId:v,projectSlug:j,rootFolderId:y=null,currentFolderId:g=null,liveDeltasEnabled:k=!1}=e,w=function(){let{projectId:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[t,r]=(0,n.useState)(null),[a,p]=(0,n.useState)(!1),[f,b]=(0,n.useState)(!1),[v,j]=(0,n.useState)(null),[y,g]=(0,n.useState)(0),[k,w]=(0,n.useState)(0),x=(0,n.useRef)(null),C=(0,n.useRef)(Date.now()),S=(0,n.useCallback)(()=>{let e="1"===d(o),t=Number(d(l)||0);p(e&&t>0);let r=Number(d(i)||0),a=Number(d(c)||0);g(r),w(a>Date.now()?a:0)},[]),_=(0,n.useCallback)(async()=>{try{let e=await fetch("/api/privacy/config"),t=await e.json();return r(t),t}catch(e){return r({configured:!1}),console.error("[usePrivacy] fetchConfig error:",e),{configured:!1}}},[]);(0,n.useEffect)(()=>(x.current=new Worker("/privacy.worker.js"),S(),_(),()=>{var e;null==(e=x.current)||e.terminate(),x.current=null}),[_,S]),(0,n.useEffect)(()=>{let e=()=>_(),t=()=>{p(!0),_()},r=()=>{p(!1)};return window.addEventListener("privacy:configured",e),window.addEventListener("privacy:unlocked",t),window.addEventListener("privacy:locked",r),()=>{window.removeEventListener("privacy:configured",e),window.removeEventListener("privacy:unlocked",t),window.removeEventListener("privacy:locked",r)}},[_]),(0,n.useEffect)(()=>{let e=()=>{C.current=Date.now()};window.addEventListener("mousemove",e,{passive:!0}),window.addEventListener("keydown",e,{passive:!0}),window.addEventListener("pointerdown",e,{passive:!0});let t=setInterval(()=>{a&&Date.now()-C.current>9e5&&(h(o),h(l),p(!1))},6e4);return()=>{window.removeEventListener("mousemove",e),window.removeEventListener("keydown",e),window.removeEventListener("pointerdown",e),clearInterval(t)}},[a]);let N=(0,n.useCallback)(()=>{h(o),h(l),p(!1);try{window.dispatchEvent(new CustomEvent("privacy:locked"))}catch(e){}},[]),L=(0,n.useCallback)(async r=>{if(!(null==t?void 0:t.configured))return{ok:!1,error:"No passphrase configured."};let a=x.current;if(!a)return{ok:!1,error:"Worker not ready."};let n=Number(d(c)||0);if(n>Date.now())return{ok:!1,error:"lockout",lockoutUntil:n};b(!0),j(null);try{if((await m(a,{op:"verify",passphrase:r,salt:t.salt_b64,iter:t.iterations,mac:t.hmac_b64})).match)return u(o,"1"),u(l,String(Date.now())),h(i),h(s),h(c),p(!0),g(0),w(0),fetch("/api/privacy/verify",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({success:!0,project_id:e||null})}).catch(()=>{}),{ok:!0};let n=Number(d(i)||0)+1,f=Number(d(s)||Date.now());u(i,String(n)),u(s,String(f)),g(n);let b=0;if(n>=5&&Date.now()-f<3e5)return b=Date.now()+9e5,u(c,String(b)),w(b),fetch("/api/privacy/verify",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({success:!1,attempt_count:n,lockout_until:new Date(b).toISOString(),project_id:e||null})}).catch(()=>{}),{ok:!1,error:"lockout",lockoutUntil:b};return Date.now()-f>=3e5&&(u(i,"1"),u(s,String(Date.now())),g(1)),fetch("/api/privacy/verify",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({success:!1,attempt_count:n,project_id:e||null})}).catch(()=>{}),{ok:!1,error:"wrong_passphrase",failCount:n}}catch(t){let e=(null==t?void 0:t.message)||"Crypto error.";return j(e),{ok:!1,error:e}}finally{b(!1)}},[t,e]),E=(0,n.useCallback)(async e=>{let r=x.current;if(!r)return{ok:!1,error:"Worker not ready."};b(!0),j(null);try{let a=await m(r,{op:"setup",passphrase:e,iter:6e5});if(!a.ok)throw Error(a.error||"Worker failed.");let n=!!(null==t?void 0:t.configured),i=await fetch("/api/privacy/config",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({kdf:"PBKDF2-SHA256",iterations:6e5,salt_b64:a.salt_b64,hmac_b64:a.hmac_b64,idle_timeout_ms:9e5,is_change:n})}),s=await i.json();if(!s.ok)throw Error(s.error||"Server rejected config.");return u(o,"1"),u(l,String(Date.now())),p(!0),await _(),window.dispatchEvent(new CustomEvent("privacy:configured")),{ok:!0}}catch(t){let e=(null==t?void 0:t.message)||"Setup failed.";return j(e),{ok:!1,error:e}}finally{b(!1)}},[t,_]),D=(0,n.useCallback)(async()=>{b(!0),j(null);try{let e=await fetch("/api/privacy/config",{method:"DELETE"}),t=await e.json();if(!t.ok)throw Error(t.error||"Reset failed.");return N(),h(i),h(s),h(c),g(0),w(0),await _(),{ok:!0,artifacts_cleared:t.artifacts_cleared}}catch(t){let e=(null==t?void 0:t.message)||"Reset failed.";return j(e),{ok:!1,error:e}}finally{b(!1)}},[N,_]),I=!!(null==t?void 0:t.configured);return{config:t,configured:I,unlocked:a,busy:f,error:v,failCount:y,lockoutUntil:k,lock:N,unlock:L,setupPassphrase:E,resetPassphrase:D,refetchConfig:_}}({projectId:v}),x=function(){let e=(0,n.useRef)(new Map),[t,r]=(0,n.useState)(0),a=(0,n.useCallback)(async function(t){var a;let{force:n=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t)return null;if(!n&&e.current.has(t))return e.current.get(t);let[o,l,i]=await Promise.all([fetch("/api/artifacts/".concat(t,"/acl")),fetch("/api/artifacts/".concat(t,"/share-link")),fetch("/api/audit/search?action_target_type=artifact&action_target_id=".concat(t,"&limit=5"))]),s={acl:null,links:[],auditRows:[]};if(o.ok){let{data:e}=await o.json();s.acl=e}if(l.ok){let{data:e}=await l.json();s.links=Array.isArray(e)?e:[]}return i.ok&&(s.auditRows=(Array.isArray(a=await i.json())?a:Array.isArray(null==a?void 0:a.rows)?a.rows:Array.isArray(null==a?void 0:a.data)?a.data:[]).slice(0,5)),e.current.set(t,s),r(e=>e+1),s},[]),o=(0,n.useCallback)(t=>{t?e.current.delete(t):e.current.clear(),r(e=>e+1)},[]);return{readArtifactShareData:a,invalidateArtifactShareData:o,readProjectShareData:(0,n.useCallback)(async function(t){var a;let{force:n=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t)return null;let o="project:".concat(t);if(!n&&e.current.has(o))return e.current.get(o);let l={status:null,cloudReady:!1,grants:[],members:[],orgId:null,error:null},[i,s]=await Promise.all([fetch("/api/shared/spaces/status?local_space_id=".concat(encodeURIComponent(t),"&space_type=project")),fetch("/api/orgs")]);if(i.ok){let e=await i.json();l.status=e.status||null,l.cloudReady=!!e.cloud_ready}if(s.ok){let{orgs:e}=await s.json();l.orgId=Array.isArray(e)&&e.length&&(e[0].org_id||e[0].id)||null}if(null==(a=l.status)?void 0:a.shared){let e=await fetch("/api/shared/spaces/".concat(encodeURIComponent(t),"/acl?space_type=project"));if(e.ok){let{data:t}=await e.json();l.grants=Array.isArray(t)?t:[]}}if(l.orgId){let e=await fetch("/api/orgs/".concat(encodeURIComponent(l.orgId),"/members"));if(e.ok){let{members:t}=await e.json();l.members=Array.isArray(t)?t:[]}}return e.current.set(o,l),r(e=>e+1),l},[]),invalidateProjectShareData:(0,n.useCallback)(t=>{t?e.current.delete("project:".concat(t)):e.current.clear(),r(e=>e+1)},[]),shareDataVersion:t}}(),[C,S]=(0,n.useState)(r),[_,N]=(0,n.useState)(p),[L,E]=(0,n.useState)(!1),[D,I]=(0,n.useState)(!1);(0,n.useEffect)(()=>{S(r)},[r]),(0,n.useEffect)(()=>{N(p)},[p]);let A=(0,n.useCallback)(async()=>{if(!j)return;let e=await fetch("/api/projects/".concat(encodeURIComponent(j),"/library"),{cache:"no-store"});if(!e.ok)throw Error("library refresh failed (".concat(e.status,")"));let t=await e.json();S(Array.isArray(t.libraryItems)?t.libraryItems:[]),N(Array.isArray(t.folders)?t.folders:[])},[j]);(0,n.useEffect)(()=>{if(!k)return;let e=new EventSource("/api/events/stream"),t=null,r=null,a=()=>{t&&window.clearTimeout(t),t=window.setTimeout(()=>{t=null,A().catch(e=>{console.warn("[project-album] live library refresh failed",e)})},250)},n=["state.disk.changed","state.artifacts.changed","state.acl.changed","state.share_links.changed"];for(let t of n)e.addEventListener(t,a);let o=()=>{"visible"===document.visibilityState&&a()};return document.addEventListener("visibilitychange",o),r=window.setInterval(a,6e4),()=>{for(let t of n)e.removeEventListener(t,a);document.removeEventListener("visibilitychange",o),t&&window.clearTimeout(t),r&&window.clearInterval(r),e.close()}},[k,A]);let P=(0,n.useCallback)(e=>{S(t=>(function(e,t){if(!(null==t?void 0:t.id)||!(null==t?void 0:t.source_type))return e;let r=b(t),a=!1,n=e.map(e=>b(e)!==r?e:(a=!0,{...e,...t}));return a?n:[t,...n]})(t,e))},[]),M=(0,n.useCallback)(e=>{let t="string"==typeof e?e:b(e);S(e=>e.filter(e=>b(e)!==t))},[]),T=(0,n.useMemo)(()=>({items:C,folders:_,setItems:S,setFolders:N,applyItemPatch:P,removeItem:M,refreshLibrary:A,liveDeltasEnabled:k,projectId:v,projectSlug:j,rootFolderId:y,currentFolderId:g,privacy:w,shareData:x,setupModalOpen:L,unlockModalOpen:D,openSetupModal:()=>E(!0),closeSetupModal:()=>E(!1),openUnlockModal:()=>I(!0),closeUnlockModal:()=>I(!1)}),[C,_,P,M,A,k,v,j,y,g,w,x,L,D]);return(0,a.jsx)(f.Provider,{value:T,children:t})}function j(){let e=(0,n.useContext)(f);if(!e)throw Error("useProjectAlbum must be used inside ProjectAlbumProvider");return e}},3185:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var a=r(2115),n=r(4250);let o=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,r)=>r?r.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var l=r(45);let i=(e,t)=>{let r=(0,a.forwardRef)((r,i)=>{let{className:s,...c}=r;return(0,a.createElement)(l.default,{ref:i,iconNode:t,className:(0,n.z)("lucide-".concat(o(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),s),...c})});return r.displayName=o(e),r}},4073:(e,t,r)=>{"use strict";r.d(t,{default:()=>p});var a=r(5155),n=r(2619),o=r.n(n),l=r(7909),i=r(2115),s=r(5649),c=r(2835);let d=(0,l.default)(()=>r.e(1517).then(r.bind(r,1517)).then(e=>e.PrivacyPassphraseModal),{loadableGenerated:{webpack:()=>[1517]}}),u=(0,l.default)(()=>r.e(4797).then(r.bind(r,4797)).then(e=>e.PrivacyUnlockModal),{loadableGenerated:{webpack:()=>[4797]}}),h=(0,l.default)(()=>r.e(9867).then(r.bind(r,9867)),{loadableGenerated:{webpack:()=>[9867]}});function p(e){let{projectId:t,projectName:r="",slug:n,lockedCount:l=0,currentFolderId:p=null,rootFolderId:b=null}=e,{privacy:v,setupModalOpen:j,unlockModalOpen:y,openSetupModal:g,closeSetupModal:k,openUnlockModal:w,closeUnlockModal:x,refreshLibrary:C}=(0,c.c)(),{configured:S,unlocked:_,lock:N}=v,[L,E]=(0,i.useState)(!1),[D,I]=(0,i.useState)(!1),[A,P]=(0,i.useState)(""),[M,T]=(0,i.useState)(null),[F,O]=(0,i.useState)(!1),R=(0,i.useCallback)(()=>{P(""),T(null),I(!0)},[]),U=(0,i.useCallback)(()=>{F||I(!1)},[F]),W=(0,i.useCallback)(async e=>{if(e&&e.preventDefault(),F)return;let r=String(A||"").trim();if(!r)return void T("Name is required.");if(/[\\/]/.test(r))return void T("Name cannot contain slashes.");O(!0),T(null);try{let e=p&&p!==b?p:null,a=await fetch("/api/disk/folders",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({project_id:t,name:r,parent_id:e})}),n=await a.json().catch(()=>({}));if(!a.ok)throw Error((null==n?void 0:n.error)||"create failed (".concat(a.status,")"));I(!1),P(""),await C()}catch(e){console.error("[project-header] create folder failed",e),T((null==e?void 0:e.message)||String(e))}finally{O(!1)}},[F,A,t,p,b,C]),B=S?_?(0,a.jsx)("button",{type:"button",className:"project-album-lock-chip unlocked",onClick:N,"aria-label":"Lock protected artifacts",title:"Click to lock",children:(0,a.jsx)(f,{})}):(0,a.jsxs)("button",{type:"button",className:"project-album-lock-chip locked",onClick:w,"aria-label":"Unlock ".concat(l," protected artifacts"),title:"Click to unlock",children:[(0,a.jsx)(m,{}),l>0?(0,a.jsx)("span",{className:"project-album-lock-chip-count",children:l}):null]}):(0,a.jsx)("button",{type:"button",className:"project-album-lock-chip no-passphrase",onClick:g,"aria-label":"Set up passphrase protection",title:"Protect individual artifacts with a passphrase",children:(0,a.jsx)(m,{})});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o(),{className:"project-activity-link icon-only",href:"/projects/".concat(n,"/log"),"aria-label":"Open project activity",title:"Activity",children:(0,a.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("circle",{cx:"8",cy:"8",r:"6"}),(0,a.jsx)("path",{d:"M8 5v3.5l2.2 1.3"})]})}),B,(0,a.jsxs)("button",{type:"button",className:"project-album-folder-new",onClick:()=>E(!0),"aria-label":"Share this project",title:"Share this project with your organization",children:[(0,a.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("circle",{cx:"12",cy:"3.5",r:"2"}),(0,a.jsx)("circle",{cx:"4",cy:"8",r:"2"}),(0,a.jsx)("circle",{cx:"12",cy:"12.5",r:"2"}),(0,a.jsx)("path",{d:"M5.7 7 10.3 4.5M5.7 9l4.6 2.5"})]}),"Share"]}),(0,a.jsxs)("button",{type:"button",className:"project-album-folder-new",onClick:R,"aria-label":"Create new folder",title:"Create a new folder on disk",children:[(0,a.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M2 5a1 1 0 0 1 1-1h3.5l1.5 1.5H13a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5Z"}),(0,a.jsx)("path",{d:"M8 8v4M6 10h4"})]}),"New folder"]}),(0,a.jsx)(s.A,{open:D,onClose:U,eyebrow:"Library",title:"New folder",children:(0,a.jsxs)("form",{className:"agents-modal-form",onSubmit:W,children:[(0,a.jsx)("p",{className:"agents-modal-help",children:"Creates a real folder on disk under this project. Use it to organize uploaded documents and artifacts."}),(0,a.jsxs)("section",{className:"agents-modal-section",children:[(0,a.jsxs)("label",{className:"agents-modal-field wide",children:[(0,a.jsx)("span",{children:"Folder name"}),(0,a.jsx)("input",{type:"text",value:A,onChange:e=>{P(e.target.value),M&&T(null)},placeholder:"e.g. Research, Drafts, 2026-Q2",autoComplete:"off",spellCheck:!1,autoFocus:!0,maxLength:120,disabled:F})]}),M?(0,a.jsx)("p",{className:"agents-modal-feedback error",role:"alert","aria-live":"polite",children:M}):(0,a.jsx)("small",{className:"project-album-folder-hint",children:"Letters, numbers, spaces, dashes. No slashes."})]}),(0,a.jsxs)("footer",{className:"agents-modal-foot",children:[(0,a.jsx)("button",{type:"button",className:"admin-button secondary",onClick:U,disabled:F,children:"Cancel"}),(0,a.jsx)("button",{type:"submit",className:"admin-button",disabled:F||!A.trim(),children:F?"Creating…":"Create folder"})]})]})}),(0,a.jsx)(d,{open:j,onClose:k,projectId:t,privacy:v}),(0,a.jsx)(u,{open:y,onClose:x,projectId:t,privacy:v}),L?(0,a.jsx)(h,{item:{source_type:"project",id:t,name:r},onClose:()=>E(!1)}):null]})}function m(){return(0,a.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v2"})]})}function f(){return(0,a.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v0"})]})}},4250:(e,t,r)=>{"use strict";r.d(t,{z:()=>a});let a=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return t.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim()}},4788:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});let a=(0,r(3185).A)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},5649:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var a=r(5155),n=r(2115),o=r(4788);function l(e){let{open:t,onClose:r,eyebrow:l,title:i,tone:s="default",size:c="default",children:d}=e,u=n.useRef(null);return n.useEffect(()=>{let e=u.current;e&&(t&&!e.open&&("function"==typeof e.showModal?e.showModal():e.setAttribute("open","")),!t&&e.open&&e.close())},[t]),n.useEffect(()=>{let e=u.current;if(!e)return;let t=e=>{e.preventDefault(),r()};return e.addEventListener("cancel",t),()=>e.removeEventListener("cancel",t)},[r]),(0,a.jsx)("dialog",{ref:u,className:"agents-modal".concat("wide"===c?" agents-modal--wide":""),onClick:e=>{e.target===u.current&&r()},children:t?(0,a.jsxs)("div",{className:"agents-modal-card".concat("danger"===s?" agents-modal-card--danger":""),onClick:e=>e.stopPropagation(),children:[(0,a.jsxs)("header",{className:"agents-modal-head",children:[(0,a.jsxs)("div",{children:[l?(0,a.jsx)("span",{className:"admin-kicker",children:l}):null,(0,a.jsx)("h2",{children:i})]}),(0,a.jsx)("button",{type:"button",className:"agents-modal-close",onClick:r,"aria-label":"Close",children:(0,a.jsx)(o.A,{size:14})})]}),d]}):null})}},6391:(e,t,r)=>{"use strict";r.d(t,{default:()=>k});var a=r(5155),n=r(7909),o=r(2115),l=r(63);function i(e){if(!Number.isFinite(e)||e<=0)return"0 B";let t=["B","KB","MB","GB"],r=0,a=e;for(;a>=1024&&r<t.length-1;)a/=1024,r+=1;return"".concat(a.toFixed(a>=10||0===r?0:1)," ").concat(t[r])}function s(e){return"".concat(e.source_type,"-").concat(e.id)}function c(e){let{breadcrumb:t,dragOverFolderId:r,setDragOverFolderId:n,navigateToFolder:o,albumItems:l,moveItem:i,rootFolderId:c}=e;if(!t.length)return null;let d=e=>({onDragOver:t=>{t.preventDefault(),n(e||"__root__")},onDragLeave:()=>n(null),onDrop:t=>((e,t)=>{e.preventDefault(),n(null);let r=e.dataTransfer.getData("text/madarx-item-key"),a=l.find(e=>s(e)===r);a&&i(a,t)})(t,e||c)});return(0,a.jsxs)("nav",{className:"project-album-breadcrumb","aria-label":"Folder",children:[(0,a.jsxs)("button",{type:"button",className:"project-album-crumb".concat("__root__"===r?" drop-target":""),onClick:()=>o(null),...d(null),children:[(0,a.jsx)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,a.jsx)("path",{d:"M2 8l6-5 6 5v5a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V8z"})}),(0,a.jsx)("span",{children:"Library"})]}),t.map((e,n)=>{let l=n===t.length-1;return(0,a.jsxs)("span",{className:"project-album-crumb-row",children:[(0,a.jsx)("svg",{className:"project-album-crumb-sep",width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,a.jsx)("path",{d:"M3 1l4 4-4 4"})}),l?(0,a.jsx)("span",{className:"project-album-crumb current","aria-current":"page",children:e.name}):(0,a.jsx)("button",{type:"button",className:"project-album-crumb".concat(r===e.id?" drop-target":""),onClick:()=>o(e.id),...d(e.id),children:e.name})]},e.id)})]})}var d=r(8219);function u(e){let{item:t,MarkdownThumbnail:r}=e;if("file"===t.source_type&&t.local_only)return(0,a.jsxs)("div",{className:"project-album-thumb-tile","data-kind":"local",children:[(0,a.jsx)("span",{children:"LOCAL"}),(0,a.jsx)("small",{children:i(t.size_bytes)})]});if("html"===t.render_kind&&t.body)return(0,a.jsxs)("div",{className:"project-album-thumb-iframe-wrap","aria-hidden":"true",children:[(0,a.jsx)("iframe",{className:"project-album-thumb-iframe",srcDoc:(0,d.sV)(t.body),sandbox:"",loading:"lazy",tabIndex:-1,title:""}),(0,a.jsx)("div",{className:"project-album-thumb-shield"})]});if("markdown"===t.render_kind&&t.body)return(0,a.jsx)("div",{className:"project-album-thumb-md","aria-hidden":"true",children:(0,a.jsx)("div",{className:"project-album-thumb-md-inner",children:(0,a.jsx)(r,{children:String(t.body).slice(0,800)})})});let n=String(t.kind||"FILE").toUpperCase().slice(0,6);return(0,a.jsxs)("div",{className:"project-album-thumb-tile","data-kind":String(t.kind||"file").toLowerCase(),children:[(0,a.jsx)("span",{children:n}),"file"===t.source_type?(0,a.jsx)("small",{children:i(t.size_bytes)}):null]})}function h(e){let{item:t,onOpen:r,onDoubleOpen:n,onOpenUnlock:o,blurred:l=!1,highlighted:i=!1,protectedFlag:s=!1,keyHintVisible:c=!1,onShowKeyHint:d,onHideKeyHint:h,draggable:p=!1,onDragStart:m,moving:f=!1,MarkdownThumbnail:b}=e,v="artifact"===t.source_type?t.title||t.path||t.id:t.name,j="artifact"===t.source_type?t.kind||"artifact":t.local_only?"local":t.kind||"file",y=function(e){if("artifact"===e.source_type){let t=e.agent_id||"";return t?"main-orchestrator"===t?"Main agent":"ops-agent"===t?"Caretaker":t:"Agent"}return"You"}(t),g=t.updated_at||t.created_at,k=["project-album-card"];return l&&k.push("blurred"),i&&k.push("highlighted"),s&&k.push("is-protected"),f&&k.push("moving"),(0,a.jsxs)("button",{type:"button",className:k.join(" "),onClick:r,onDoubleClick:n,onKeyDown:e=>{if(l){if("d"===e.key||"D"===e.key){e.preventDefault(),o();return}("Enter"===e.key||" "===e.key)&&(e.preventDefault(),d(),setTimeout(h,2500))}},tabIndex:0,"aria-label":l?"".concat(v," — protected. Double-click or press D to unlock."):"Open ".concat(v),"aria-disabled":l||void 0,style:l?{userSelect:"none"}:void 0,draggable:p&&!l,onDragStart:p&&!l?m:void 0,children:[(0,a.jsxs)("div",{className:"project-album-thumb","data-render":t.render_kind||"text","data-source":t.source_type,"aria-hidden":l?"true":void 0,children:[(0,a.jsx)(u,{item:t,MarkdownThumbnail:b}),l?(0,a.jsx)("div",{className:"project-album-thumb-lock","aria-hidden":"true",children:(0,a.jsxs)("svg",{width:"18",height:"18",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v2"})]})}):null,s&&!l?(0,a.jsx)("div",{className:"project-album-thumb-badge","aria-hidden":"true",title:"Protected",children:(0,a.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v2"})]})}):null]}),(0,a.jsxs)("div",{className:"project-album-card-body",children:[(0,a.jsx)("b",{title:v,children:v}),(0,a.jsxs)("small",{className:"project-album-card-meta",children:[(0,a.jsx)("span",{className:"project-album-kind",children:j}),(0,a.jsx)("span",{"aria-hidden":"true",children:" \xb7 "}),(0,a.jsx)("span",{children:y}),g?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{"aria-hidden":"true",children:" \xb7 "}),(0,a.jsx)("time",{dateTime:g,children:function(e){if(!e)return"";try{return new Intl.DateTimeFormat("en",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(new Date(e))}catch(t){return e}}(g)})]}):null]})]}),c?(0,a.jsx)("div",{className:"project-album-key-hint","aria-live":"polite",role:"status",children:"Double-click or press D to unlock."}):null]})}function p(e){let{folder:t,dragOver:r,onOpen:n,onDragOver:o,onDragLeave:l,onDrop:i}=e,s=["project-album-folder-card"];return r&&s.push("drop-target"),(0,a.jsxs)("button",{type:"button",className:s.join(" "),onClick:n,onDragOver:o,onDragLeave:l,onDrop:i,"aria-label":"Open folder ".concat(t.name),children:[(0,a.jsx)("span",{className:"project-album-folder-card-icon","aria-hidden":"true",children:(0,a.jsx)("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:(0,a.jsx)("path",{d:"M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7z"})})}),(0,a.jsxs)("span",{className:"project-album-folder-card-body",children:[(0,a.jsx)("b",{children:t.name}),(0,a.jsx)("small",{children:"Folder"})]})]})}function m(e){let{subFolders:t,dragOverFolderId:r,setDragOverFolderId:n,navigateToFolder:o,albumItems:l,moveItem:i}=e;return t.length?(0,a.jsx)("div",{className:"project-album-folders",children:t.map(e=>(0,a.jsx)(p,{folder:e,dragOver:r===e.id,onOpen:()=>o(e.id),onDragOver:t=>{t.preventDefault(),n(e.id)},onDragLeave:()=>n(null),onDrop:t=>{t.preventDefault(),n(null);let r=t.dataTransfer.getData("text/madarx-item-key"),a=l.find(e=>s(e)===r);a&&i(a,e.id)}},e.id))}):null}function f(e){let{query:t,setQuery:r,filters:n,filterId:o,setFilterId:l,itemsInFolder:i}=e;return(0,a.jsxs)("div",{className:"project-album-toolbar",children:[(0,a.jsxs)("label",{className:"project-album-search",children:[(0,a.jsxs)("svg",{className:"project-album-search-icon",width:"15",height:"15",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round","aria-hidden":"true",children:[(0,a.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,a.jsx)("line",{x1:"10.6",y1:"10.6",x2:"14",y2:"14"})]}),(0,a.jsx)("input",{type:"search",value:t,onChange:e=>r(e.target.value),placeholder:"Search artifacts, documents, and content…","aria-label":"Search project library"}),t?(0,a.jsx)("button",{type:"button",className:"project-album-search-clear",onClick:()=>r(""),"aria-label":"Clear search",children:"\xd7"}):null]}),(0,a.jsx)("div",{className:"project-album-filters",role:"tablist","aria-label":"Filter",children:n.map(e=>{let t=i.filter(e.match).length,r=o===e.id;return(0,a.jsxs)("button",{type:"button",role:"tab","aria-selected":r,className:"project-album-filter".concat(r?" on":""),onClick:()=>l(e.id),children:[(0,a.jsx)("span",{children:e.label}),(0,a.jsx)("code",{children:t})]},e.id)})})]})}function b(e){let{onSetup:t,onDismiss:r}=e;return(0,a.jsxs)("div",{className:"project-album-migration-banner",role:"status",children:[(0,a.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v2"})]}),(0,a.jsx)("p",{children:"You had privacy blur enabled. Set a passphrase to protect individual artifacts, or dismiss to skip."}),(0,a.jsxs)("div",{className:"project-album-migration-actions",children:[(0,a.jsx)("button",{type:"button",className:"project-album-migration-cta",onClick:t,children:"Set up passphrase"}),(0,a.jsx)("button",{type:"button",className:"project-album-migration-dismiss",onClick:r,children:"Dismiss"})]})]})}var v=r(2835);let j=[{id:"all",label:"All",match:()=>!0},{id:"artifact",label:"Artifacts",match:e=>"artifact"===e.source_type},{id:"document",label:"Documents",match:e=>"file"===e.source_type},{id:"local",label:"Local-only",match:e=>"file"===e.source_type&&e.local_only}],y=(0,n.default)(()=>Promise.all([r.e(930),r.e(2713)]).then(r.bind(r,5094)),{loadableGenerated:{webpack:()=>[5094]}}),g=(0,n.default)(()=>Promise.all([r.e(930),r.e(9863)]).then(r.bind(r,9863)),{loadableGenerated:{webpack:()=>[9863]},loading:()=>(0,a.jsx)("div",{className:"project-album-thumb-tile","data-kind":"markdown",children:(0,a.jsx)("span",{children:"MD"})})});function k(e){let{items:t,folders:r=[],projectId:n,projectSlug:i,rootFolderId:d=null,currentFolderId:u=null}=e,p=(0,l.useRouter)(),[k,w]=(0,o.useState)(null),[x,C]=(0,o.useState)(null),[S,_]=(0,o.useState)(null),[N,L]=(0,o.useState)(null),[E,D]=(0,o.useState)(!1),[I,A]=(0,o.useState)(null),[P,M]=(0,o.useState)([]),[T,F]=(0,o.useState)(null),{privacy:O,openSetupModal:R,openUnlockModal:U,applyItemPatch:W,removeItem:B,items:z,folders:H}=(0,v.c)(),V=z||t,K=H||r,{configured:J,unlocked:G}=O,q=function(e){let{items:t,folders:r,currentFolderId:a,rootFolderId:n,unlocked:l}=e,[i,s]=(0,o.useState)("all"),[c,d]=(0,o.useState)(""),[u,h]=(0,o.useState)(null),p=(0,o.useDeferredValue)(c),m=!a||a===n,f=(0,o.useMemo)(()=>r.find(e=>e.id===a)||null,[r,a]),b=(0,o.useMemo)(()=>{if(m)return[];let e=[],t=new Map(r.map(e=>[e.id,e])),n=t.get(a);for(;n;)e.unshift(n),n=n.parent_id?t.get(n.parent_id):null;return e},[r,a,m]),v=(0,o.useMemo)(()=>{let e=m?n:a;return r.filter(t=>t.parent_id===e)},[r,a,m,n]),y=(0,o.useMemo)(()=>t.filter(e=>{let t=e.folder_id||null;return m?!t||t===n:t===a}),[t,a,m,n]),g=(0,o.useMemo)(()=>{let e=(j.find(e=>e.id===i)||j[0]).match;return y.filter(e)},[y,i]),k=(0,o.useMemo)(()=>{let e=String(p||"").trim().toLowerCase();return e?g.filter(t=>(function(e){let{sessionUnlocked:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=e.is_protected&&!t?"":String(e.body||e.preview||"").slice(0,4e3);return[e.title||"",e.name||"",e.path||"",r,e.agent_id||"",function(e){if("artifact"===e.source_type){let t=e.agent_id||"";return t?"main-orchestrator"===t?"Main agent":"ops-agent"===t?"Caretaker":t:"Agent"}return"You"}(e)].join(" ").toLowerCase()})(t,{sessionUnlocked:l}).includes(e)):g},[g,p,l]),w=String(p||"").trim().toLowerCase(),x=(0,o.useCallback)(e=>!!w&&[e.title||"",e.name||"",e.path||""].join(" ").toLowerCase().includes(w),[w]),C=(0,o.useMemo)(()=>t.find(e=>"".concat(e.source_type,"-").concat(e.id)===u)||null,[t,u]);return{FILTERS:j,filterId:i,setFilterId:s,query:c,setQuery:d,selectedKey:u,setSelectedKey:h,isRoot:m,currentFolder:f,breadcrumb:b,subFolders:v,itemsInFolder:y,visible:k,queryLower:w,titleMatchesQuery:x,selected:C}}({items:V,folders:K,currentFolderId:u,rootFolderId:d,unlocked:G});(0,o.useEffect)(()=>{try{if("1"!==window.localStorage.getItem("madarx-album-privacy-blur"))return;J?window.localStorage.removeItem("madarx-album-privacy-blur"):D(!0)}catch(e){}},[J]),(0,o.useEffect)(()=>{let e=!1;return fetch("/api/dashboard/spaces").then(e=>e.ok?e.json():null).then(t=>{!e&&t&&Array.isArray(t.spaces)&&M(t.spaces)}).catch(()=>{}),()=>{e=!0}},[]);let Q=(0,o.useCallback)(async(e,t)=>{if(e&&"artifact"===e.source_type&&t){F(s(e));try{let r=await fetch("/api/dashboard/spaces/".concat(encodeURIComponent(t),"/move"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({artifact_id:e.id})});if(!r.ok)throw Error(await r.text().catch(()=>"")||"bookmark failed (".concat(r.status,")"));W({...e,space_id:t})}catch(e){console.error("[project-album] bookmark to space failed",e),window.alert("Could not pin this artifact to the space.\n".concat((null==e?void 0:e.message)||e))}finally{F(null)}}},[W]),Y=(0,o.useCallback)(()=>{try{window.localStorage.removeItem("madarx-album-privacy-blur")}catch(e){}D(!1)},[]),Z=(0,o.useCallback)(async e=>{if(e&&!k){w(s(e));try{let t="artifact"===e.source_type?"/api/artifacts/".concat(encodeURIComponent(e.id)):"/api/disk/files/".concat(encodeURIComponent(e.id)),r=await fetch(t,{method:"DELETE"});if(!r.ok)throw Error(await r.text().catch(()=>"")||"delete failed (".concat(r.status,")"));q.setSelectedKey(null),B(e)}catch(e){console.error("[project-album] delete failed",e),window.alert("Could not delete this item. See console for details.")}finally{w(null)}}},[q,k,B]),$=(0,o.useCallback)(async(e,t)=>{L(null);try{let r=await fetch("/api/artifacts/".concat(e.id,"/protect"),{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({is_protected:!t})}),a=await r.json();if(a.need_passphrase_setup){q.setSelectedKey(null),R();return}if(!r.ok)return void L(a.error||"protect failed (".concat(r.status,")"));W({...e,is_protected:a.is_protected})}catch(e){L((null==e?void 0:e.message)||"Protect toggle failed.")}},[q,W,R]),X=(0,o.useCallback)(e=>{let t=e&&e!==d?"/projects/".concat(i,"?folder=").concat(encodeURIComponent(e)):"/projects/".concat(i);p.push(t)},[i,d,p]),ee=(0,o.useCallback)(async(e,t)=>{if(!e)return;let r="artifact"===e.source_type?"/api/artifacts/".concat(encodeURIComponent(e.id)):"/api/disk/files/".concat(encodeURIComponent(e.id));C(s(e));try{let a=await fetch(r,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({folder_id:t||null})});if(!a.ok)throw Error(await a.text().catch(()=>"")||"move failed (".concat(a.status,")"));let n=await a.json().catch(()=>({}));W(n.artifact||n.file||{...e,folder_id:t||null})}catch(e){console.error("[project-album] move failed",e),window.alert("Could not move this item.\n".concat((null==e?void 0:e.message)||e))}finally{C(null)}},[W]);return(0,a.jsxs)("div",{className:"project-album",children:[(0,a.jsx)(f,{query:q.query,setQuery:q.setQuery,filters:q.FILTERS,filterId:q.filterId,setFilterId:q.setFilterId,itemsInFolder:q.itemsInFolder}),E?(0,a.jsx)(b,{onSetup:()=>{D(!1),R()},onDismiss:Y}):null,(0,a.jsx)(c,{breadcrumb:q.breadcrumb,dragOverFolderId:S,setDragOverFolderId:_,navigateToFolder:X,albumItems:V,moveItem:ee,rootFolderId:d}),(0,a.jsx)(m,{subFolders:q.subFolders,dragOverFolderId:S,setDragOverFolderId:_,navigateToFolder:X,albumItems:V,moveItem:ee}),q.visible.length?(0,a.jsx)("div",{className:"project-album-grid",children:q.visible.map(e=>{let t=e.is_protected&&!G&&!q.titleMatchesQuery(e),r=e.is_protected&&!t&&!!q.queryLower,n=s(e);return(0,a.jsx)(h,{item:e,onOpen:()=>{e.is_protected&&!G&&!q.titleMatchesQuery(e)||q.setSelectedKey(s(e))},onDoubleOpen:()=>{!e.is_protected||G||q.titleMatchesQuery(e)?q.setSelectedKey(s(e)):U()},onOpenUnlock:U,blurred:t,highlighted:r,protectedFlag:!!e.is_protected,keyHintVisible:I===n,onShowKeyHint:()=>A(n),onHideKeyHint:()=>A(null),draggable:!0,onDragStart:e=>{e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/madarx-item-key",n)},moving:x===n,MarkdownThumbnail:g},n)})}):(0,a.jsx)("div",{className:"project-album-empty",children:q.query?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("b",{children:["No matches for “",q.query,"”."]}),(0,a.jsx)("small",{children:"Try a different keyword, or clear the search."})]}):q.isRoot?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("b",{children:"Nothing here yet."}),(0,a.jsx)("small",{children:"Upload a document, create an artifact, or add a folder."})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("b",{children:"This folder is empty."}),(0,a.jsx)("small",{children:"Drag an item here, or upload directly to this folder."})]})}),(0,a.jsx)(y,{item:q.selected,onClose:()=>{q.setSelectedKey(null),L(null)},isProtected:!!q.selected&&!!q.selected.is_protected,onToggleProtect:()=>q.selected&&$(q.selected,!!q.selected.is_protected),protectError:N,onDelete:()=>q.selected&&Z(q.selected),deleting:!!q.selected&&k===s(q.selected),folders:K,rootFolderId:d,onMove:e=>q.selected&&ee(q.selected,e),moving:!!q.selected&&x===s(q.selected),spaces:P,onBookmarkToSpace:e=>q.selected&&Q(q.selected,e),bookmarking:!!q.selected&&T===s(q.selected)})]})}(0,n.default)(()=>r.e(9867).then(r.bind(r,9867)),{loadableGenerated:{webpack:()=>[9867]}})},8855:(e,t,r)=>{Promise.resolve().then(r.bind(r,677)),Promise.resolve().then(r.bind(r,6391)),Promise.resolve().then(r.bind(r,4073)),Promise.resolve().then(r.bind(r,2835)),Promise.resolve().then(r.bind(r,2074)),Promise.resolve().then(r.t.bind(r,2619,23))}},e=>{e.O(0,[2619,1231,8441,1255,7358],()=>e(e.s=8855)),_N_E=e.O()}]);
|