@jiggai/kitchen 0.3.27 โ 0.3.29
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/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +10 -0
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +3 -3
- package/.next/routes-manifest.json +70 -0
- package/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/.next/server/app/_global-error/page.js +2 -2
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +2 -2
- package/.next/server/app/_global-error.rsc +8 -8
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_global-error.segments/_full.segment.rsc +8 -8
- package/.next/server/app/_global-error.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page/build-manifest.json +3 -3
- package/.next/server/app/_not-found/page.js +2 -2
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +11 -11
- package/.next/server/app/_not-found.segments/_full.segment.rsc +11 -11
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +5 -5
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/agents/[agentId]/page/build-manifest.json +3 -3
- package/.next/server/app/agents/[agentId]/page.js +2 -2
- package/.next/server/app/agents/[agentId]/page.js.nft.json +1 -1
- package/.next/server/app/agents/[agentId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/[id]/route.js +1 -1
- package/.next/server/app/api/agents/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/add/route.js +1 -1
- package/.next/server/app/api/agents/add/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/file/route.js +1 -1
- package/.next/server/app/api/agents/file/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/files/route.js +1 -1
- package/.next/server/app/api/agents/files/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/skills/install/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/skills/route.js +1 -1
- package/.next/server/app/api/agents/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/update/route.js +1 -1
- package/.next/server/app/api/agents/update/route.js.nft.json +1 -1
- package/.next/server/app/api/channels/bindings/route.js +1 -1
- package/.next/server/app/api/channels/bindings/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/add/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/cron/add/route/build-manifest.json +11 -0
- package/.next/server/app/api/cron/add/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/cron/add/route.js +6 -0
- package/.next/server/app/api/cron/add/route.js.map +5 -0
- package/.next/server/app/api/cron/add/route.js.nft.json +1 -0
- package/.next/server/app/api/cron/add/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/cron/delete/route.js +1 -1
- package/.next/server/app/api/cron/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/edit/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/cron/edit/route/build-manifest.json +11 -0
- package/.next/server/app/api/cron/edit/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/cron/edit/route.js +6 -0
- package/.next/server/app/api/cron/edit/route.js.map +5 -0
- package/.next/server/app/api/cron/edit/route.js.nft.json +1 -0
- package/.next/server/app/api/cron/edit/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/cron/jobs/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/recipe-installed/route.js +1 -1
- package/.next/server/app/api/cron/recipe-installed/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/worker/route.js +1 -1
- package/.next/server/app/api/cron/worker/route.js.nft.json +1 -1
- package/.next/server/app/api/goals/[id]/promote/route.js +1 -1
- package/.next/server/app/api/goals/[id]/promote/route.js.nft.json +1 -1
- package/.next/server/app/api/goals/[id]/route.js +1 -1
- package/.next/server/app/api/goals/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/goals/route.js +1 -1
- package/.next/server/app/api/goals/route.js.nft.json +1 -1
- package/.next/server/app/api/ids/check/route.js +1 -1
- package/.next/server/app/api/ids/check/route.js.nft.json +1 -1
- package/.next/server/app/api/marketplace/recipes/[slug]/route.js +1 -1
- package/.next/server/app/api/marketplace/recipes/[slug]/route.js.nft.json +1 -1
- package/.next/server/app/api/marketplace/recipes/route.js +1 -1
- package/.next/server/app/api/marketplace/recipes/route.js.nft.json +1 -1
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route/build-manifest.json +11 -0
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route.js +7 -0
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route.js.map +5 -0
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route.js.nft.json +1 -0
- package/.next/server/app/api/plugins/[pluginId]/[...path]/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route/build-manifest.json +11 -0
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route.js +7 -0
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route.js.map +5 -0
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route.js.nft.json +1 -0
- package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/plugins/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plugins/route/build-manifest.json +11 -0
- package/.next/server/app/api/plugins/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plugins/route.js +7 -0
- package/.next/server/app/api/plugins/route.js.map +5 -0
- package/.next/server/app/api/plugins/route.js.nft.json +1 -0
- package/.next/server/app/api/plugins/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/plugins/test/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plugins/test/route/build-manifest.json +11 -0
- package/.next/server/app/api/plugins/test/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plugins/test/route.js +7 -0
- package/.next/server/app/api/plugins/test/route.js.map +5 -0
- package/.next/server/app/api/plugins/test/route.js.nft.json +1 -0
- package/.next/server/app/api/plugins/test/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/recipes/[id]/route.js +1 -1
- package/.next/server/app/api/recipes/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/clone/route.js +1 -1
- package/.next/server/app/api/recipes/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/custom-team/route.js +1 -1
- package/.next/server/app/api/recipes/custom-team/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/local-agent-catalog/route.js +1 -1
- package/.next/server/app/api/recipes/local-agent-catalog/route.js.nft.json +1 -1
- package/.next/server/app/api/recipes/team-agents/route.js +1 -1
- package/.next/server/app/api/recipes/team-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/scaffold/route.js +1 -1
- package/.next/server/app/api/scaffold/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/cron-installation/route.js +1 -1
- package/.next/server/app/api/settings/cron-installation/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/available/route.js +1 -1
- package/.next/server/app/api/skills/available/route.js.nft.json +1 -1
- package/.next/server/app/api/swarms/start/route.js +3 -3
- package/.next/server/app/api/swarms/start/route.js.nft.json +1 -1
- package/.next/server/app/api/swarms/status/route.js +1 -1
- package/.next/server/app/api/swarms/status/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/media-providers/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/[teamId]/media-providers/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/[teamId]/media-providers/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/[teamId]/media-providers/route.js +6 -0
- package/.next/server/app/api/teams/[teamId]/media-providers/route.js.map +5 -0
- package/.next/server/app/api/teams/[teamId]/media-providers/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/[teamId]/media-providers/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/[teamId]/tickets/assign/route.js +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/assign/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/assignees/route.js +3 -3
- package/.next/server/app/api/teams/[teamId]/tickets/assignees/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/comment/route.js +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/comment/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/delete/route.js +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/move/route.js +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/move/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route.js +1 -1
- package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/file/route.js +1 -1
- package/.next/server/app/api/teams/file/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/files/route.js +1 -1
- package/.next/server/app/api/teams/files/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/memory/route.js +2 -1
- package/.next/server/app/api/teams/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/meta/route.js +1 -1
- package/.next/server/app/api/teams/meta/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/orchestrator/install/route.js +1 -1
- package/.next/server/app/api/teams/orchestrator/install/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/orchestrator/route.js +1 -1
- package/.next/server/app/api/teams/orchestrator/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/remove-team/route.js +1 -1
- package/.next/server/app/api/teams/remove-team/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/skills/install/route.js +1 -1
- package/.next/server/app/api/teams/skills/install/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/skills/route.js +1 -1
- package/.next/server/app/api/teams/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/workflow-deliverables/file/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/workflow-deliverables/file/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/workflow-deliverables/file/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/workflow-deliverables/file/route.js +6 -0
- package/.next/server/app/api/teams/workflow-deliverables/file/route.js.map +5 -0
- package/.next/server/app/api/teams/workflow-deliverables/file/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/workflow-deliverables/file/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/workflow-deliverables/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/teams/workflow-deliverables/route/build-manifest.json +11 -0
- package/.next/server/app/api/teams/workflow-deliverables/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/teams/workflow-deliverables/route.js +6 -0
- package/.next/server/app/api/teams/workflow-deliverables/route.js.map +5 -0
- package/.next/server/app/api/teams/workflow-deliverables/route.js.nft.json +1 -0
- package/.next/server/app/api/teams/workflow-deliverables/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/teams/workflow-runs/route.js +1 -1
- package/.next/server/app/api/teams/workflow-runs/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/workflow-templates/route.js +1 -1
- package/.next/server/app/api/teams/workflow-templates/route.js.nft.json +1 -1
- package/.next/server/app/api/teams/workflows/route.js +1 -1
- package/.next/server/app/api/teams/workflows/route.js.nft.json +1 -1
- package/.next/server/app/api/tickets/assign/route.js +1 -1
- package/.next/server/app/api/tickets/assign/route.js.nft.json +1 -1
- package/.next/server/app/api/tickets/assignees/route.js +1 -1
- package/.next/server/app/api/tickets/assignees/route.js.nft.json +1 -1
- package/.next/server/app/api/tickets/move/route.js +1 -1
- package/.next/server/app/api/tickets/move/route.js.nft.json +1 -1
- package/.next/server/app/channels/page/build-manifest.json +3 -3
- package/.next/server/app/channels/page.js +2 -2
- package/.next/server/app/channels/page.js.nft.json +1 -1
- package/.next/server/app/channels/page_client-reference-manifest.js +1 -1
- package/.next/server/app/channels.html +2 -2
- package/.next/server/app/channels.rsc +12 -12
- package/.next/server/app/channels.segments/_full.segment.rsc +12 -12
- package/.next/server/app/channels.segments/_head.segment.rsc +4 -4
- package/.next/server/app/channels.segments/_index.segment.rsc +5 -5
- package/.next/server/app/channels.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/channels.segments/channels/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/channels.segments/channels.segment.rsc +3 -3
- package/.next/server/app/cron-jobs/page/build-manifest.json +3 -3
- package/.next/server/app/cron-jobs/page.js +2 -2
- package/.next/server/app/cron-jobs/page.js.nft.json +1 -1
- package/.next/server/app/cron-jobs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/goals/[id]/page/build-manifest.json +3 -3
- package/.next/server/app/goals/[id]/page.js +2 -2
- package/.next/server/app/goals/[id]/page.js.nft.json +1 -1
- package/.next/server/app/goals/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/goals/new/page/build-manifest.json +3 -3
- package/.next/server/app/goals/new/page.js +2 -2
- package/.next/server/app/goals/new/page.js.nft.json +1 -1
- package/.next/server/app/goals/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/goals/new.html +2 -2
- package/.next/server/app/goals/new.rsc +13 -13
- package/.next/server/app/goals/new.segments/_full.segment.rsc +13 -13
- package/.next/server/app/goals/new.segments/_head.segment.rsc +4 -4
- package/.next/server/app/goals/new.segments/_index.segment.rsc +5 -5
- package/.next/server/app/goals/new.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/goals/new.segments/goals/new/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/goals/new.segments/goals/new.segment.rsc +3 -3
- package/.next/server/app/goals/new.segments/goals.segment.rsc +3 -3
- package/.next/server/app/goals/page/build-manifest.json +3 -3
- package/.next/server/app/goals/page.js +2 -2
- package/.next/server/app/goals/page.js.nft.json +1 -1
- package/.next/server/app/goals/page_client-reference-manifest.js +1 -1
- package/.next/server/app/goals.html +1 -1
- package/.next/server/app/goals.rsc +12 -12
- package/.next/server/app/goals.segments/_full.segment.rsc +12 -12
- package/.next/server/app/goals.segments/_head.segment.rsc +4 -4
- package/.next/server/app/goals.segments/_index.segment.rsc +5 -5
- package/.next/server/app/goals.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/goals.segments/goals/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/goals.segments/goals.segment.rsc +3 -3
- package/.next/server/app/page/build-manifest.json +3 -3
- package/.next/server/app/page.js +4 -4
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recipes/[id]/page/build-manifest.json +3 -3
- package/.next/server/app/recipes/[id]/page.js +4 -4
- package/.next/server/app/recipes/[id]/page.js.nft.json +1 -1
- package/.next/server/app/recipes/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recipes/page/build-manifest.json +3 -3
- package/.next/server/app/recipes/page.js +2 -2
- package/.next/server/app/recipes/page.js.nft.json +1 -1
- package/.next/server/app/recipes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/runs/page/build-manifest.json +3 -3
- package/.next/server/app/runs/page.js +6 -5
- package/.next/server/app/runs/page.js.nft.json +1 -1
- package/.next/server/app/runs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page/build-manifest.json +3 -3
- package/.next/server/app/settings/page.js +2 -2
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +12 -12
- package/.next/server/app/settings.segments/_full.segment.rsc +12 -12
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +5 -5
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
- package/.next/server/app/teams/[teamId]/deliverables/page/app-paths-manifest.json +3 -0
- package/.next/server/app/teams/[teamId]/deliverables/page/build-manifest.json +17 -0
- package/.next/server/app/teams/[teamId]/deliverables/page/next-font-manifest.json +11 -0
- package/.next/server/app/teams/[teamId]/deliverables/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/teams/[teamId]/deliverables/page/server-reference-manifest.json +4 -0
- package/.next/server/app/teams/[teamId]/deliverables/page.js +21 -0
- package/.next/server/app/teams/[teamId]/deliverables/page.js.map +5 -0
- package/.next/server/app/teams/[teamId]/deliverables/page.js.nft.json +1 -0
- package/.next/server/app/teams/[teamId]/deliverables/page_client-reference-manifest.js +2 -0
- package/.next/server/app/teams/[teamId]/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/page.js +4 -4
- package/.next/server/app/teams/[teamId]/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page.js +6 -5
- package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/runs/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/runs/page.js +2 -2
- package/.next/server/app/teams/[teamId]/runs/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/runs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js +3 -3
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/tickets/[ticket]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/tickets/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/tickets/page.js +3 -3
- package/.next/server/app/teams/[teamId]/tickets/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/tickets/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js +2 -2
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/teams/[teamId]/workflows/page/build-manifest.json +3 -3
- package/.next/server/app/teams/[teamId]/workflows/page.js +4 -4
- package/.next/server/app/teams/[teamId]/workflows/page.js.nft.json +1 -1
- package/.next/server/app/teams/[teamId]/workflows/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tickets/[ticket]/page/build-manifest.json +3 -3
- package/.next/server/app/tickets/[ticket]/page.js +3 -3
- package/.next/server/app/tickets/[ticket]/page.js.nft.json +1 -1
- package/.next/server/app/tickets/[ticket]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tickets/page/build-manifest.json +3 -3
- package/.next/server/app/tickets/page.js +3 -3
- package/.next/server/app/tickets/page.js.nft.json +1 -1
- package/.next/server/app/tickets/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +10 -0
- package/.next/server/chunks/{[root-of-the-server]__50fe6ff8._.js โ [root-of-the-server]__00a30f40._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__04f289da._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__26c618a3._.js โ [root-of-the-server]__0883634a._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__08b4c8f2._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__fef7183d._.js โ [root-of-the-server]__0f55461f._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__1311d7a3._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__e063a986._.js โ [root-of-the-server]__1480ffda._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__18423bab._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0c4fc3d3._.js โ [root-of-the-server]__1873f417._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__05f5e243._.js โ [root-of-the-server]__1f1e62ac._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__864a08dd._.js โ [root-of-the-server]__20b1f42d._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__21ad9eeb._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__21ad9eeb._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__9d0ea07b._.js โ [root-of-the-server]__2c207e60._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__69be1758._.js โ [root-of-the-server]__2dd1afff._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1c6c2e43._.js โ [root-of-the-server]__3021a250._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__30cd38e9._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__4079fa2b._.js โ [root-of-the-server]__343776df._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__63715de8._.js โ [root-of-the-server]__3452dc06._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__35ec765d._.js +13 -0
- package/.next/server/chunks/[root-of-the-server]__35ec765d._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__392e585d._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__3b2d0020._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__3b2d0020._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__bccfb2c0._.js โ [root-of-the-server]__3bfad714._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__3c92e5aa._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__3c92e5aa._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__7bf889c1._.js โ [root-of-the-server]__3d15e850._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__a74a32d5._.js โ [root-of-the-server]__3f648b9b._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__89605574._.js โ [root-of-the-server]__482575d2._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__4898071c._.js +4 -4
- package/.next/server/chunks/{[root-of-the-server]__bbdb6dcb._.js โ [root-of-the-server]__4ee12514._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__55defc7c._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__55defc7c._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__698cf062._.js โ [root-of-the-server]__5aa1dc93._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__b002764e._.js โ [root-of-the-server]__5c5990a6._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__5d47b90b._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__5d47b90b._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__7a331e51._.js โ [root-of-the-server]__603cb0fa._.js} +3 -3
- package/.next/server/chunks/[root-of-the-server]__6131b7e2._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__6131b7e2._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__d924e5ac._.js โ [root-of-the-server]__636919a0._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__453333f5._.js โ [root-of-the-server]__663e79ff._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__69c065ce._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__69c065ce._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__c63a9f28._.js โ [root-of-the-server]__74b80ca4._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__6f4e90a0._.js โ [root-of-the-server]__74e2a9ba._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__51198e25._.js โ [root-of-the-server]__7e12b9f4._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__813dd669._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__813dd669._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__5ceff0f3._.js โ [root-of-the-server]__87875179._.js} +3 -3
- package/.next/server/chunks/{[root-of-the-server]__5ea38a67._.js โ [root-of-the-server]__8f8e110f._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__7459129e._.js โ [root-of-the-server]__91d0cce1._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__e40409a2._.js โ [root-of-the-server]__9853b72d._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__95ddb81a._.js โ [root-of-the-server]__9dba20b3._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__ff69832c._.js โ [root-of-the-server]__9e96d37b._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__8e27e9f7._.js โ [root-of-the-server]__aba68368._.js} +3 -3
- package/.next/server/chunks/{[root-of-the-server]__3fdbc43e._.js โ [root-of-the-server]__aed4e4f2._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__b457b884._.js +22 -0
- package/.next/server/chunks/[root-of-the-server]__b457b884._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__99b12bcb._.js โ [root-of-the-server]__b6cff26d._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__150bf0bf._.js โ [root-of-the-server]__bb52fdc9._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__bf608f29._.js โ [root-of-the-server]__be5f57b2._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__c15c5141._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__c15c5141._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__542a081b._.js โ [root-of-the-server]__c50e4bc4._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__c5e88cbb._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__b64936a3._.js โ [root-of-the-server]__cc0860cb._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__8ea22d0a._.js โ [root-of-the-server]__d302afb4._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__01863a8b._.js โ [root-of-the-server]__d4a8660e._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__da7df58d._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__da7df58d._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__e478ef0d._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__6caa8f2d._.js โ [root-of-the-server]__e9acbabd._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__47eb3111._.js โ [root-of-the-server]__e9d9d570._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__f408c708._.js +2 -2
- package/.next/server/chunks/{[root-of-the-server]__59a6cf09._.js โ [root-of-the-server]__f45ceefb._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__f4cbadf7._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__f5cd81f1._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__f5cd81f1._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__3cfdf0b3._.js โ [root-of-the-server]__f994dc62._.js} +2 -2
- package/.next/server/chunks/_next-internal_server_app_api_cron_add_route_actions_f9053a93.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_cron_add_route_actions_f9053a93.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_cron_edit_route_actions_3b551424.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_cron_edit_route_actions_3b551424.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_plugins_route_actions_0aabd6b3.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_plugins_route_actions_0aabd6b3.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_plugins_test_route_actions_8babbe5c.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_plugins_test_route_actions_8babbe5c.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-deliverables_route_actions_9de4298b.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-deliverables_route_actions_9de4298b.js.map +1 -0
- package/.next/server/chunks/ce889_server_app_api_plugins_[pluginId]_[___path]_route_actions_471be8ce.js +3 -0
- package/.next/server/chunks/ce889_server_app_api_plugins_[pluginId]_[___path]_route_actions_471be8ce.js.map +1 -0
- package/.next/server/chunks/ce889_server_app_api_plugins_[pluginId]_tabs_[tabId]_route_actions_9420efec.js +3 -0
- package/.next/server/chunks/ce889_server_app_api_plugins_[pluginId]_tabs_[tabId]_route_actions_9420efec.js.map +1 -0
- package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_media-providers_route_actions_1ea823f1.js +3 -0
- package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_media-providers_route_actions_1ea823f1.js.map +1 -0
- package/.next/server/chunks/ce889_server_app_api_teams_workflow-deliverables_file_route_actions_332fd6ea.js +3 -0
- package/.next/server/chunks/ce889_server_app_api_teams_workflow-deliverables_file_route_actions_332fd6ea.js.map +1 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js +1 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js.map +1 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_3a1b29e4.js +3 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_3a1b29e4.js.map +1 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_f5680d9e.js +1 -1
- package/.next/server/chunks/node_modules_yaml_dist_49c13b35._.js +4 -4
- package/.next/server/chunks/node_modules_yaml_dist_49c13b35._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0a5cb3ca._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0a5cb3ca._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__177cec74._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__177cec74._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__195421b7._.js +12 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__195421b7._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__17b046ea._.js โ [root-of-the-server]__388bae11._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__3b880807._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__3b880807._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__51e26a01._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__4c66998a._.js.map โ [root-of-the-server]__51e26a01._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__6b6b7595._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__6b6b7595._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__2db9d262._.js โ [root-of-the-server]__8f9585b9._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__2db9d262._.js.map โ [root-of-the-server]__8f9585b9._.js.map} +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__9a7d79aa._.js โ [root-of-the-server]__997aa62c._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__0df430db._.js โ [root-of-the-server]__9e400864._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__8a588fad._.js โ [root-of-the-server]__a6348eaa._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__49281b4c._.js โ [root-of-the-server]__af792402._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__68c20e8e._.js โ [root-of-the-server]__b5aa14b8._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__68c20e8e._.js.map โ [root-of-the-server]__b5aa14b8._.js.map} +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__8756d76d._.js โ [root-of-the-server]__b8998a21._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__c777e326._.js โ [root-of-the-server]__df23886e._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__02e6ccaa._.js โ [root-of-the-server]__e9bd9b71._.js} +2 -2
- package/.next/server/chunks/ssr/_018dfe6b._.js +2 -2
- package/.next/server/chunks/ssr/_2d8d7232._.js +3 -0
- package/.next/server/chunks/ssr/_2d8d7232._.js.map +1 -0
- package/.next/server/chunks/ssr/_8538617d._.js +3 -0
- package/.next/server/chunks/ssr/_8538617d._.js.map +1 -0
- package/.next/server/chunks/ssr/_a506fcf8._.js +3 -0
- package/.next/server/chunks/ssr/_a506fcf8._.js.map +1 -0
- package/.next/server/chunks/ssr/_deb7a691._.js +5 -0
- package/.next/server/chunks/ssr/_deb7a691._.js.map +1 -0
- package/.next/server/chunks/ssr/_ec0b0b83._.js +4 -0
- package/.next/server/chunks/ssr/_ec0b0b83._.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_deliverables_page_actions_f44ae7c7.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_deliverables_page_actions_f44ae7c7.js.map +1 -0
- package/.next/server/chunks/ssr/b1a17_app_teams_[teamId]_workflows_[workflowId]_workflows-editor-client_tsx_5e714aa2._.js +1 -1
- package/.next/server/chunks/ssr/b1a17_app_teams_[teamId]_workflows_[workflowId]_workflows-editor-client_tsx_5e714aa2._.js.map +1 -1
- package/.next/server/chunks/ssr/d4b1c_modules_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_6ef9314a.js +3 -0
- package/.next/server/chunks/ssr/d4b1c_modules_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_6ef9314a.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_1038a5b9._.js +10 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__4fd003c7._.js.map โ node_modules_next_dist_1038a5b9._.js.map} +1 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_25a30daf._.js +1 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_25a30daf._.js.map +1 -1
- package/.next/server/chunks/ssr/node_modules_yaml_dist_18db9ed7._.js +2 -2
- package/.next/server/chunks/ssr/src_app_cron-jobs_cron-jobs-client_tsx_ec91a73d._.js +3 -0
- package/.next/server/chunks/ssr/src_app_cron-jobs_cron-jobs-client_tsx_ec91a73d._.js.map +1 -0
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/next-font-manifest.js +1 -1
- package/.next/server/next-font-manifest.json +4 -0
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +2 -2
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{d2be314c3ece3fbe.js โ 0bd6498bda341889.js} +1 -1
- package/.next/static/chunks/{c27f767f683b017a.js โ 410dc851d0e3033d.js} +1 -1
- package/.next/static/chunks/{2ad8e6acac0ede2c.js โ 4e38b3f280ced64c.js} +1 -1
- package/.next/static/chunks/{236ef28eb649c432.js โ 4f2b8a07ace7e02b.js} +1 -1
- package/.next/static/chunks/79b7c8c80713887a.js +1 -0
- package/.next/static/chunks/{e854e56ea8cb6236.js โ 87879d67a1601ee0.js} +1 -1
- package/.next/static/chunks/{43d0024279c6160e.js โ a625725b4cd85ea3.js} +1 -1
- package/.next/static/chunks/{3e1fe6be993c61fb.js โ ac32974713c57cb3.js} +1 -1
- package/.next/static/chunks/{f2f58a7e93290fbb.js โ aebc3b6d791f68d2.js} +1 -1
- package/.next/static/chunks/b3bca877b0f5b4e9.css +3 -0
- package/.next/static/chunks/{e083bcf4a197beae.js โ b83c1ca03c3b8c6d.js} +1 -1
- package/.next/static/chunks/{e7bbb90aada90fdf.js โ bdb7ebd88ea13111.js} +1 -1
- package/.next/static/chunks/bfcfbe145220d365.js +1 -0
- package/.next/static/chunks/c0d9f53d91cc65c5.js +10 -0
- package/.next/static/chunks/{36aff6bd42d53c8b.js โ c0e2f959abc4cc13.js} +1 -1
- package/.next/static/chunks/c411f6e912e3c3a1.js +1 -0
- package/.next/static/chunks/{62e0c437eb8fc2da.js โ c822e53f79a492c7.js} +1 -1
- package/.next/static/chunks/{fd0cb4d03fd17cf6.js โ ce6b2024d13b4333.js} +1 -1
- package/.next/static/chunks/d13249af74d111cf.js +3 -0
- package/.next/static/chunks/{4a6dcf80b293d7a4.js โ d16f64ca3a8ed208.js} +1 -1
- package/.next/static/chunks/{c84580993f22c17a.js โ d6e1b7307a9274ce.js} +1 -1
- package/.next/static/chunks/d7541a171116ec9c.js +1 -0
- package/.next/static/chunks/{93719e85369dd453.js โ e03137fd069b1514.js} +1 -1
- package/.next/static/chunks/{db4da5ee45033817.js โ e10faa9296c8b246.js} +1 -1
- package/.next/static/chunks/ec24877f7b7f82c5.js +3 -0
- package/.next/static/chunks/{f179280598d329b2.js โ ff3bbb5df40b2cc4.js} +1 -1
- package/.next/static/chunks/{turbopack-0236a74c4f471967.js โ turbopack-dbf3078dbf5863bd.js} +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +8 -2
- package/tsconfig.json +2 -1
- package/.next/server/chunks/[root-of-the-server]__502825d0._.js +0 -13
- package/.next/server/chunks/[root-of-the-server]__502825d0._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__69c45937._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__69c45937._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__a49c534d._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__a49c534d._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__162d7d9d._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__162d7d9d._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__255506f2._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__255506f2._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__4c66998a._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__4fd003c7._.js +0 -10
- package/.next/server/chunks/ssr/_d9520bea._.js +0 -3
- package/.next/server/chunks/ssr/_d9520bea._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_runs_[workflowId]_[runId]_run-detail-client_tsx_56f0cbd7._.js +0 -3
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_runs_[workflowId]_[runId]_run-detail-client_tsx_56f0cbd7._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_team-editor_index_tsx_e68e9cbc._.js +0 -12
- package/.next/server/chunks/ssr/src_app_teams_[teamId]_team-editor_index_tsx_e68e9cbc._.js.map +0 -1
- package/.next/static/chunks/33959503ed1ef5fe.css +0 -3
- package/.next/static/chunks/474635d658546626.js +0 -1
- package/.next/static/chunks/4d4876ec71727e38.js +0 -1
- package/.next/static/chunks/579cd9be685abc65.js +0 -1
- package/.next/static/chunks/5e3b1d0f61a651bf.js +0 -1
- package/.next/static/chunks/a719c5f36ffeec2a.js +0 -10
- package/.next/static/chunks/ca07f0194f384207.js +0 -1
- /package/.next/server/chunks/{[root-of-the-server]__50fe6ff8._.js.map โ [root-of-the-server]__00a30f40._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__26c618a3._.js.map โ [root-of-the-server]__0883634a._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__fef7183d._.js.map โ [root-of-the-server]__0f55461f._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__e063a986._.js.map โ [root-of-the-server]__1480ffda._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0c4fc3d3._.js.map โ [root-of-the-server]__1873f417._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__05f5e243._.js.map โ [root-of-the-server]__1f1e62ac._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__864a08dd._.js.map โ [root-of-the-server]__20b1f42d._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__9d0ea07b._.js.map โ [root-of-the-server]__2c207e60._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__69be1758._.js.map โ [root-of-the-server]__2dd1afff._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1c6c2e43._.js.map โ [root-of-the-server]__3021a250._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__4079fa2b._.js.map โ [root-of-the-server]__343776df._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__63715de8._.js.map โ [root-of-the-server]__3452dc06._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__bccfb2c0._.js.map โ [root-of-the-server]__3bfad714._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__7bf889c1._.js.map โ [root-of-the-server]__3d15e850._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__a74a32d5._.js.map โ [root-of-the-server]__3f648b9b._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__89605574._.js.map โ [root-of-the-server]__482575d2._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__bbdb6dcb._.js.map โ [root-of-the-server]__4ee12514._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__698cf062._.js.map โ [root-of-the-server]__5aa1dc93._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__b002764e._.js.map โ [root-of-the-server]__5c5990a6._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__7a331e51._.js.map โ [root-of-the-server]__603cb0fa._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__d924e5ac._.js.map โ [root-of-the-server]__636919a0._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__453333f5._.js.map โ [root-of-the-server]__663e79ff._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__c63a9f28._.js.map โ [root-of-the-server]__74b80ca4._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__6f4e90a0._.js.map โ [root-of-the-server]__74e2a9ba._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__51198e25._.js.map โ [root-of-the-server]__7e12b9f4._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__5ceff0f3._.js.map โ [root-of-the-server]__87875179._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__5ea38a67._.js.map โ [root-of-the-server]__8f8e110f._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__7459129e._.js.map โ [root-of-the-server]__91d0cce1._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__e40409a2._.js.map โ [root-of-the-server]__9853b72d._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__95ddb81a._.js.map โ [root-of-the-server]__9dba20b3._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__ff69832c._.js.map โ [root-of-the-server]__9e96d37b._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__8e27e9f7._.js.map โ [root-of-the-server]__aba68368._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__3fdbc43e._.js.map โ [root-of-the-server]__aed4e4f2._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__99b12bcb._.js.map โ [root-of-the-server]__b6cff26d._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__150bf0bf._.js.map โ [root-of-the-server]__bb52fdc9._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__bf608f29._.js.map โ [root-of-the-server]__be5f57b2._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__542a081b._.js.map โ [root-of-the-server]__c50e4bc4._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__b64936a3._.js.map โ [root-of-the-server]__cc0860cb._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__8ea22d0a._.js.map โ [root-of-the-server]__d302afb4._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__01863a8b._.js.map โ [root-of-the-server]__d4a8660e._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__6caa8f2d._.js.map โ [root-of-the-server]__e9acbabd._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__47eb3111._.js.map โ [root-of-the-server]__e9d9d570._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__59a6cf09._.js.map โ [root-of-the-server]__f45ceefb._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__3cfdf0b3._.js.map โ [root-of-the-server]__f994dc62._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__17b046ea._.js.map โ [root-of-the-server]__388bae11._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__9a7d79aa._.js.map โ [root-of-the-server]__997aa62c._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__0df430db._.js.map โ [root-of-the-server]__9e400864._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__8a588fad._.js.map โ [root-of-the-server]__a6348eaa._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__49281b4c._.js.map โ [root-of-the-server]__af792402._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__8756d76d._.js.map โ [root-of-the-server]__b8998a21._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__c777e326._.js.map โ [root-of-the-server]__df23886e._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__02e6ccaa._.js.map โ [root-of-the-server]__e9bd9b71._.js.map} +0 -0
- /package/.next/static/{pEGZW7H6QnTMgt-sDp-C7 โ kWLUtSfI8C26lIp4FvoAU}/_buildManifest.js +0 -0
- /package/.next/static/{pEGZW7H6QnTMgt-sDp-C7 โ kWLUtSfI8C26lIp4FvoAU}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{pEGZW7H6QnTMgt-sDp-C7 โ kWLUtSfI8C26lIp4FvoAU}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/paths.ts","../../../../node_modules/next/dist/client/app-dir/link.js/__nextjs-internal-proxy.cjs","../../../../node_modules/next/src/client/app-dir/link.tsx","../../../../node_modules/next/src/client/app-dir/link.react-server.tsx","../../../../src/lib/workflows/storage.ts","../../../../src/lib/workflows/readdir.ts","../../../../src/lib/workflows/runs-storage.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\ntype OpenClawConfig = {\n agents?: { defaults?: { workspace?: string } };\n gateway?: { port?: number; auth?: { token?: string } };\n tools?: {\n agentToAgent?: {\n enabled?: boolean;\n allow?: string[];\n };\n };\n plugins?: {\n installs?: { recipes?: { installPath?: string; sourcePath?: string } };\n load?: { paths?: string[] };\n };\n // OpenClaw message routing bindings (used for HITL approvals, etc.)\n bindings?: unknown[];\n};\n\nexport async function readOpenClawConfig(): Promise<OpenClawConfig> {\n const p = path.join(os.homedir(), \".openclaw\", \"openclaw.json\");\n const text = await fs.readFile(p, \"utf8\");\n return JSON.parse(text) as OpenClawConfig;\n}\n\nexport async function getWorkspaceDir() {\n const cfg = await readOpenClawConfig();\n const ws = cfg.agents?.defaults?.workspace;\n if (!ws) throw new Error(\"agents.defaults.workspace is not set in ~/.openclaw/openclaw.json\");\n return ws;\n}\n\nexport async function getWorkspaceRecipesDir() {\n const ws = await getWorkspaceDir();\n return path.join(ws, \"recipes\");\n}\n\nexport async function getWorkspaceGoalsDir() {\n const ws = await getWorkspaceDir();\n\n // Back-compat: some installs keep goals at <workspace>/goals.\n // Prefer that when present, otherwise fall back to <workspace>/notes/goals.\n const direct = path.join(ws, \"goals\");\n try {\n const st = await fs.stat(direct);\n if (st.isDirectory()) return direct;\n } catch {\n // ignore\n }\n\n return path.join(ws, \"notes\", \"goals\");\n}\n\nexport async function getTeamWorkspaceDir(teamId: string) {\n const home = os.homedir();\n if (!home) throw new Error(\"Could not resolve home directory\");\n return path.join(home, \".openclaw\", `workspace-${teamId}`);\n}\n\n/** Team workspace dir derived from agents.defaults.workspace (sibling: .. / workspace-{teamId}) */\nexport function teamDirFromBaseWorkspace(baseWorkspace: string, teamId: string) {\n // Special-case: treat \"main\" as the personal workspace (agents.defaults.workspace).\n // This lets Kitchen expose a selectable \"main\" scope without creating a separate\n // ~/.openclaw/workspace-main folder.\n if (teamId === \"main\") return path.resolve(baseWorkspace);\n return path.resolve(baseWorkspace, \"..\", `workspace-${teamId}`);\n}\n\n/** Rejects path traversal and empty names; returns normalized name. */\nexport function assertSafeRelativeFileName(name: string): string {\n const n = name.replace(/\\\\/g, \"/\");\n if (!n || n.startsWith(\"/\") || n.includes(\"..\")) throw new Error(\"Invalid file name\");\n return n;\n}\n\nexport async function getBuiltinRecipesDir() {\n const cfg = await readOpenClawConfig();\n const p =\n cfg.plugins?.installs?.recipes?.installPath ||\n cfg.plugins?.installs?.recipes?.sourcePath ||\n cfg.plugins?.load?.paths?.[0];\n if (!p) throw new Error(\"Could not determine recipes plugin install path from ~/.openclaw/openclaw.json\");\n return path.join(p, \"recipes\", \"default\");\n}\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nconst { createClientModuleProxy } = require(\"react-server-dom-turbopack/server\");\n\n__turbopack_context__.n(createClientModuleProxy(\"[project]/node_modules/next/dist/client/app-dir/link.js\"));\n","'use client'\n\nimport React, { createContext, useContext, useOptimistic, useRef } from 'react'\nimport type { UrlObject } from 'url'\nimport { formatUrl } from '../../shared/lib/router/utils/format-url'\nimport { AppRouterContext } from '../../shared/lib/app-router-context.shared-runtime'\nimport { useMergedRef } from '../use-merged-ref'\nimport { isAbsoluteUrl } from '../../shared/lib/utils'\nimport { addBasePath } from '../add-base-path'\nimport { warnOnce } from '../../shared/lib/utils/warn-once'\nimport type { PENDING_LINK_STATUS } from '../components/links'\nimport {\n IDLE_LINK_STATUS,\n mountLinkInstance,\n onNavigationIntent,\n unmountLinkForCurrentNavigation,\n unmountPrefetchableInstance,\n type LinkInstance,\n} from '../components/links'\nimport { isLocalURL } from '../../shared/lib/router/utils/is-local-url'\nimport {\n FetchStrategy,\n type PrefetchTaskFetchStrategy,\n} from '../components/segment-cache/types'\nimport { errorOnce } from '../../shared/lib/utils/error-once'\n\ntype Url = string | UrlObject\ntype RequiredKeys<T> = {\n [K in keyof T]-?: {} extends Pick<T, K> ? never : K\n}[keyof T]\ntype OptionalKeys<T> = {\n [K in keyof T]-?: {} extends Pick<T, K> ? K : never\n}[keyof T]\n\ntype OnNavigateEventHandler = (event: { preventDefault: () => void }) => void\n\ntype InternalLinkProps = {\n /**\n * **Required**. The path or URL to navigate to. It can also be an object (similar to `URL`).\n *\n * @example\n * ```tsx\n * // Navigate to /dashboard:\n * <Link href=\"/dashboard\">Dashboard</Link>\n *\n * // Navigate to /about?name=test:\n * <Link href={{ pathname: '/about', query: { name: 'test' } }}>\n * About\n * </Link>\n * ```\n *\n * @remarks\n * - For external URLs, use a fully qualified URL such as `https://...`.\n * - In the App Router, dynamic routes must not include bracketed segments in `href`.\n */\n href: Url\n\n /**\n * @deprecated v10.0.0: `href` props pointing to a dynamic route are\n * automatically resolved and no longer require the `as` prop.\n */\n as?: Url\n\n /**\n * Replace the current `history` state instead of adding a new URL into the stack.\n *\n * @defaultValue `false`\n *\n * @example\n * ```tsx\n * <Link href=\"/about\" replace>\n * About (replaces the history state)\n * </Link>\n * ```\n */\n replace?: boolean\n\n /**\n * Whether to override the default scroll behavior. If `true`, Next.js attempts to maintain\n * the scroll position if the newly navigated page is still visible. If not, it scrolls to the top.\n *\n * If `false`, Next.js will not modify the scroll behavior at all.\n *\n * @defaultValue `true`\n *\n * @example\n * ```tsx\n * <Link href=\"/dashboard\" scroll={false}>\n * No auto scroll\n * </Link>\n * ```\n */\n scroll?: boolean\n\n /**\n * Update the path of the current page without rerunning data fetching methods\n * like `getStaticProps`, `getServerSideProps`, or `getInitialProps`.\n *\n * @remarks\n * `shallow` only applies to the Pages Router. For the App Router, see the\n * [following documentation](https://nextjs.org/docs/app/building-your-application/routing/linking-and-navigating#using-the-native-history-api).\n *\n * @defaultValue `false`\n *\n * @example\n * ```tsx\n * <Link href=\"/blog\" shallow>\n * Shallow navigation\n * </Link>\n * ```\n */\n shallow?: boolean\n\n /**\n * Forces `Link` to pass its `href` to the child component. Useful if the child is a custom\n * component that wraps an `<a>` tag, or if you're using certain styling libraries.\n *\n * @defaultValue `false`\n *\n * @example\n * ```tsx\n * <Link href=\"/dashboard\" passHref legacyBehavior>\n * <MyStyledAnchor>Dashboard</MyStyledAnchor>\n * </Link>\n * ```\n */\n passHref?: boolean\n\n /**\n * Prefetch the page in the background.\n * Any `<Link />` that is in the viewport (initially or through scroll) will be prefetched.\n * Prefetch can be disabled by passing `prefetch={false}`.\n *\n * @remarks\n * Prefetching is only enabled in production.\n *\n * - In the **App Router**:\n * - `\"auto\"`, `null`, `undefined` (default): Prefetch behavior depends on static vs dynamic routes:\n * - Static routes: fully prefetched\n * - Dynamic routes: partial prefetch to the nearest segment with a `loading.js`\n * - `true`: Always prefetch the full route and data.\n * - `false`: Disable prefetching on both viewport and hover.\n * - In the **Pages Router**:\n * - `true` (default): Prefetches the route and data in the background on viewport or hover.\n * - `false`: Prefetch only on hover, not on viewport.\n *\n * @defaultValue `true` (Pages Router) or `null` (App Router)\n *\n * @example\n * ```tsx\n * <Link href=\"/dashboard\" prefetch={false}>\n * Dashboard\n * </Link>\n * ```\n */\n prefetch?: boolean | 'auto' | null\n\n /**\n * (unstable) Switch to a full prefetch on hover. Effectively the same as\n * updating the prefetch prop to `true` in a mouse event.\n */\n unstable_dynamicOnHover?: boolean\n\n /**\n * The active locale is automatically prepended in the Pages Router. `locale` allows for providing\n * a different locale, or can be set to `false` to opt out of automatic locale behavior.\n *\n * @remarks\n * Note: locale only applies in the Pages Router and is ignored in the App Router.\n *\n * @example\n * ```tsx\n * // Use the 'fr' locale:\n * <Link href=\"/about\" locale=\"fr\">\n * About (French)\n * </Link>\n *\n * // Disable locale prefix:\n * <Link href=\"/about\" locale={false}>\n * About (no locale prefix)\n * </Link>\n * ```\n */\n locale?: string | false\n\n /**\n * Enable legacy link behavior.\n *\n * @deprecated This will be removed in a future version\n * @defaultValue `false`\n * @see https://github.com/vercel/next.js/commit/489e65ed98544e69b0afd7e0cfc3f9f6c2b803b7\n */\n legacyBehavior?: boolean\n\n /**\n * Optional event handler for when the mouse pointer is moved onto the `<Link>`.\n */\n onMouseEnter?: React.MouseEventHandler<HTMLAnchorElement>\n\n /**\n * Optional event handler for when the `<Link>` is touched.\n */\n onTouchStart?: React.TouchEventHandler<HTMLAnchorElement>\n\n /**\n * Optional event handler for when the `<Link>` is clicked.\n */\n onClick?: React.MouseEventHandler<HTMLAnchorElement>\n\n /**\n * Optional event handler for when the `<Link>` is navigated.\n */\n onNavigate?: OnNavigateEventHandler\n}\n\n// TODO-APP: Include the full set of Anchor props\n// adding this to the publicly exported type currently breaks existing apps\n\n// `RouteInferType` is a stub here to avoid breaking `typedRoutes` when the type\n// isn't generated yet. It will be replaced when type generation runs.\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport type LinkProps<RouteInferType = any> = InternalLinkProps\ntype LinkPropsRequired = RequiredKeys<LinkProps>\ntype LinkPropsOptional = OptionalKeys<Omit<InternalLinkProps, 'locale'>>\n\nfunction isModifiedEvent(event: React.MouseEvent): boolean {\n const eventTarget = event.currentTarget as HTMLAnchorElement | SVGAElement\n const target = eventTarget.getAttribute('target')\n return (\n (target && target !== '_self') ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey || // triggers resource download\n (event.nativeEvent && event.nativeEvent.which === 2)\n )\n}\n\nfunction linkClicked(\n e: React.MouseEvent,\n href: string,\n as: string,\n linkInstanceRef: React.RefObject<LinkInstance | null>,\n replace?: boolean,\n scroll?: boolean,\n onNavigate?: OnNavigateEventHandler\n): void {\n if (typeof window !== 'undefined') {\n const { nodeName } = e.currentTarget\n\n // anchors inside an svg have a lowercase nodeName\n const isAnchorNodeName = nodeName.toUpperCase() === 'A'\n if (\n (isAnchorNodeName && isModifiedEvent(e)) ||\n e.currentTarget.hasAttribute('download')\n ) {\n // ignore click for browserโs default behavior\n return\n }\n\n if (!isLocalURL(href)) {\n if (replace) {\n // browser default behavior does not replace the history state\n // so we need to do it manually\n e.preventDefault()\n location.replace(href)\n }\n\n // ignore click for browserโs default behavior\n return\n }\n\n e.preventDefault()\n\n if (onNavigate) {\n let isDefaultPrevented = false\n\n onNavigate({\n preventDefault: () => {\n isDefaultPrevented = true\n },\n })\n\n if (isDefaultPrevented) {\n return\n }\n }\n\n const { dispatchNavigateAction } =\n require('../components/app-router-instance') as typeof import('../components/app-router-instance')\n\n React.startTransition(() => {\n dispatchNavigateAction(\n as || href,\n replace ? 'replace' : 'push',\n scroll ?? true,\n linkInstanceRef.current\n )\n })\n }\n}\n\nfunction formatStringOrUrl(urlObjOrString: UrlObject | string): string {\n if (typeof urlObjOrString === 'string') {\n return urlObjOrString\n }\n\n return formatUrl(urlObjOrString)\n}\n\n/**\n * A React component that extends the HTML `<a>` element to provide\n * [prefetching](https://nextjs.org/docs/app/building-your-application/routing/linking-and-navigating#2-prefetching)\n * and client-side navigation. This is the primary way to navigate between routes in Next.js.\n *\n * @remarks\n * - Prefetching is only enabled in production.\n *\n * @see https://nextjs.org/docs/app/api-reference/components/link\n */\nexport default function LinkComponent(\n props: LinkProps & {\n children: React.ReactNode\n ref: React.Ref<HTMLAnchorElement>\n }\n) {\n const [linkStatus, setOptimisticLinkStatus] = useOptimistic(IDLE_LINK_STATUS)\n\n let children: React.ReactNode\n\n const linkInstanceRef = useRef<LinkInstance | null>(null)\n\n const {\n href: hrefProp,\n as: asProp,\n children: childrenProp,\n prefetch: prefetchProp = null,\n passHref,\n replace,\n shallow,\n scroll,\n onClick,\n onMouseEnter: onMouseEnterProp,\n onTouchStart: onTouchStartProp,\n legacyBehavior = false,\n onNavigate,\n ref: forwardedRef,\n unstable_dynamicOnHover,\n ...restProps\n } = props\n\n children = childrenProp\n\n if (\n legacyBehavior &&\n (typeof children === 'string' || typeof children === 'number')\n ) {\n children = <a>{children}</a>\n }\n\n const router = React.useContext(AppRouterContext)\n\n const prefetchEnabled = prefetchProp !== false\n\n const fetchStrategy =\n prefetchProp !== false\n ? getFetchStrategyFromPrefetchProp(prefetchProp)\n : // TODO: it makes no sense to assign a fetchStrategy when prefetching is disabled.\n FetchStrategy.PPR\n\n if (process.env.NODE_ENV !== 'production') {\n function createPropError(args: {\n key: string\n expected: string\n actual: string\n }) {\n return new Error(\n `Failed prop type: The prop \\`${args.key}\\` expects a ${args.expected} in \\`<Link>\\`, but got \\`${args.actual}\\` instead.` +\n (typeof window !== 'undefined'\n ? \"\\nOpen your browser's console to view the Component stack trace.\"\n : '')\n )\n }\n\n // TypeScript trick for type-guarding:\n const requiredPropsGuard: Record<LinkPropsRequired, true> = {\n href: true,\n } as const\n const requiredProps: LinkPropsRequired[] = Object.keys(\n requiredPropsGuard\n ) as LinkPropsRequired[]\n requiredProps.forEach((key: LinkPropsRequired) => {\n if (key === 'href') {\n if (\n props[key] == null ||\n (typeof props[key] !== 'string' && typeof props[key] !== 'object')\n ) {\n throw createPropError({\n key,\n expected: '`string` or `object`',\n actual: props[key] === null ? 'null' : typeof props[key],\n })\n }\n } else {\n // TypeScript trick for type-guarding:\n const _: never = key\n }\n })\n\n // TypeScript trick for type-guarding:\n const optionalPropsGuard: Record<LinkPropsOptional, true> = {\n as: true,\n replace: true,\n scroll: true,\n shallow: true,\n passHref: true,\n prefetch: true,\n unstable_dynamicOnHover: true,\n onClick: true,\n onMouseEnter: true,\n onTouchStart: true,\n legacyBehavior: true,\n onNavigate: true,\n } as const\n const optionalProps: LinkPropsOptional[] = Object.keys(\n optionalPropsGuard\n ) as LinkPropsOptional[]\n optionalProps.forEach((key: LinkPropsOptional) => {\n const valType = typeof props[key]\n\n if (key === 'as') {\n if (props[key] && valType !== 'string' && valType !== 'object') {\n throw createPropError({\n key,\n expected: '`string` or `object`',\n actual: valType,\n })\n }\n } else if (\n key === 'onClick' ||\n key === 'onMouseEnter' ||\n key === 'onTouchStart' ||\n key === 'onNavigate'\n ) {\n if (props[key] && valType !== 'function') {\n throw createPropError({\n key,\n expected: '`function`',\n actual: valType,\n })\n }\n } else if (\n key === 'replace' ||\n key === 'scroll' ||\n key === 'shallow' ||\n key === 'passHref' ||\n key === 'legacyBehavior' ||\n key === 'unstable_dynamicOnHover'\n ) {\n if (props[key] != null && valType !== 'boolean') {\n throw createPropError({\n key,\n expected: '`boolean`',\n actual: valType,\n })\n }\n } else if (key === 'prefetch') {\n if (\n props[key] != null &&\n valType !== 'boolean' &&\n props[key] !== 'auto'\n ) {\n throw createPropError({\n key,\n expected: '`boolean | \"auto\"`',\n actual: valType,\n })\n }\n } else {\n // TypeScript trick for type-guarding:\n const _: never = key\n }\n })\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (props.locale) {\n warnOnce(\n 'The `locale` prop is not supported in `next/link` while using the `app` router. Read more about app router internalization: https://nextjs.org/docs/app/building-your-application/routing/internationalization'\n )\n }\n if (!asProp) {\n let href: string | undefined\n if (typeof hrefProp === 'string') {\n href = hrefProp\n } else if (\n typeof hrefProp === 'object' &&\n typeof hrefProp.pathname === 'string'\n ) {\n href = hrefProp.pathname\n }\n\n if (href) {\n const hasDynamicSegment = href\n .split('/')\n .some((segment) => segment.startsWith('[') && segment.endsWith(']'))\n\n if (hasDynamicSegment) {\n throw new Error(\n `Dynamic href \\`${href}\\` found in <Link> while using the \\`/app\\` router, this is not supported. Read more: https://nextjs.org/docs/messages/app-dir-dynamic-href`\n )\n }\n }\n }\n }\n\n const { href, as } = React.useMemo(() => {\n const resolvedHref = formatStringOrUrl(hrefProp)\n return {\n href: resolvedHref,\n as: asProp ? formatStringOrUrl(asProp) : resolvedHref,\n }\n }, [hrefProp, asProp])\n\n // This will return the first child, if multiple are provided it will throw an error\n let child: any\n if (legacyBehavior) {\n if ((children as any)?.$$typeof === Symbol.for('react.lazy')) {\n throw new Error(\n `\\`<Link legacyBehavior>\\` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's \\`<a>\\` tag.`\n )\n }\n\n if (process.env.NODE_ENV === 'development') {\n if (onClick) {\n console.warn(\n `\"onClick\" was passed to <Link> with \\`href\\` of \\`${hrefProp}\\` but \"legacyBehavior\" was set. The legacy behavior requires onClick be set on the child of next/link`\n )\n }\n if (onMouseEnterProp) {\n console.warn(\n `\"onMouseEnter\" was passed to <Link> with \\`href\\` of \\`${hrefProp}\\` but \"legacyBehavior\" was set. The legacy behavior requires onMouseEnter be set on the child of next/link`\n )\n }\n try {\n child = React.Children.only(children)\n } catch (err) {\n if (!children) {\n throw new Error(\n `No children were passed to <Link> with \\`href\\` of \\`${hrefProp}\\` but one child is required https://nextjs.org/docs/messages/link-no-children`\n )\n }\n throw new Error(\n `Multiple children were passed to <Link> with \\`href\\` of \\`${hrefProp}\\` but only one child is supported https://nextjs.org/docs/messages/link-multiple-children` +\n (typeof window !== 'undefined'\n ? \" \\nOpen your browser's console to view the Component stack trace.\"\n : '')\n )\n }\n } else {\n child = React.Children.only(children)\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if ((children as any)?.type === 'a') {\n throw new Error(\n 'Invalid <Link> with <a> child. Please remove <a> or use <Link legacyBehavior>.\\nLearn more: https://nextjs.org/docs/messages/invalid-new-link-with-extra-anchor'\n )\n }\n }\n }\n\n const childRef: any = legacyBehavior\n ? child && typeof child === 'object' && child.ref\n : forwardedRef\n\n // Use a callback ref to attach an IntersectionObserver to the anchor tag on\n // mount. In the future we will also use this to keep track of all the\n // currently mounted <Link> instances, e.g. so we can re-prefetch them after\n // a revalidation or refresh.\n const observeLinkVisibilityOnMount = React.useCallback(\n (element: HTMLAnchorElement | SVGAElement) => {\n if (router !== null) {\n linkInstanceRef.current = mountLinkInstance(\n element,\n href,\n router,\n fetchStrategy,\n prefetchEnabled,\n setOptimisticLinkStatus\n )\n }\n\n return () => {\n if (linkInstanceRef.current) {\n unmountLinkForCurrentNavigation(linkInstanceRef.current)\n linkInstanceRef.current = null\n }\n unmountPrefetchableInstance(element)\n }\n },\n [prefetchEnabled, href, router, fetchStrategy, setOptimisticLinkStatus]\n )\n\n const mergedRef = useMergedRef(observeLinkVisibilityOnMount, childRef)\n\n const childProps: {\n onTouchStart?: React.TouchEventHandler<HTMLAnchorElement>\n onMouseEnter: React.MouseEventHandler<HTMLAnchorElement>\n onClick: React.MouseEventHandler<HTMLAnchorElement>\n href?: string\n ref?: any\n } = {\n ref: mergedRef,\n onClick(e) {\n if (process.env.NODE_ENV !== 'production') {\n if (!e) {\n throw new Error(\n `Component rendered inside next/link has to pass click event to \"onClick\" prop.`\n )\n }\n }\n\n if (!legacyBehavior && typeof onClick === 'function') {\n onClick(e)\n }\n\n if (\n legacyBehavior &&\n child.props &&\n typeof child.props.onClick === 'function'\n ) {\n child.props.onClick(e)\n }\n\n if (!router) {\n return\n }\n if (e.defaultPrevented) {\n return\n }\n linkClicked(e, href, as, linkInstanceRef, replace, scroll, onNavigate)\n },\n onMouseEnter(e) {\n if (!legacyBehavior && typeof onMouseEnterProp === 'function') {\n onMouseEnterProp(e)\n }\n\n if (\n legacyBehavior &&\n child.props &&\n typeof child.props.onMouseEnter === 'function'\n ) {\n child.props.onMouseEnter(e)\n }\n\n if (!router) {\n return\n }\n if (!prefetchEnabled || process.env.NODE_ENV === 'development') {\n return\n }\n\n const upgradeToDynamicPrefetch = unstable_dynamicOnHover === true\n onNavigationIntent(\n e.currentTarget as HTMLAnchorElement | SVGAElement,\n upgradeToDynamicPrefetch\n )\n },\n onTouchStart: process.env.__NEXT_LINK_NO_TOUCH_START\n ? undefined\n : function onTouchStart(e) {\n if (!legacyBehavior && typeof onTouchStartProp === 'function') {\n onTouchStartProp(e)\n }\n\n if (\n legacyBehavior &&\n child.props &&\n typeof child.props.onTouchStart === 'function'\n ) {\n child.props.onTouchStart(e)\n }\n\n if (!router) {\n return\n }\n if (!prefetchEnabled) {\n return\n }\n\n const upgradeToDynamicPrefetch = unstable_dynamicOnHover === true\n onNavigationIntent(\n e.currentTarget as HTMLAnchorElement | SVGAElement,\n upgradeToDynamicPrefetch\n )\n },\n }\n\n // If the url is absolute, we can bypass the logic to prepend the basePath.\n if (isAbsoluteUrl(as)) {\n childProps.href = as\n } else if (\n !legacyBehavior ||\n passHref ||\n (child.type === 'a' && !('href' in child.props))\n ) {\n childProps.href = addBasePath(as)\n }\n\n let link: React.ReactNode\n\n if (legacyBehavior) {\n if (process.env.NODE_ENV === 'development') {\n errorOnce(\n '`legacyBehavior` is deprecated and will be removed in a future ' +\n 'release. A codemod is available to upgrade your components:\\n\\n' +\n 'npx @next/codemod@latest new-link .\\n\\n' +\n 'Learn more: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#remove-a-tags-from-link-components'\n )\n }\n link = React.cloneElement(child, childProps)\n } else {\n link = (\n <a {...restProps} {...childProps}>\n {children}\n </a>\n )\n }\n\n return (\n <LinkStatusContext.Provider value={linkStatus}>\n {link}\n </LinkStatusContext.Provider>\n )\n}\n\nconst LinkStatusContext = createContext<\n typeof PENDING_LINK_STATUS | typeof IDLE_LINK_STATUS\n>(IDLE_LINK_STATUS)\n\nexport const useLinkStatus = () => {\n return useContext(LinkStatusContext)\n}\n\nfunction getFetchStrategyFromPrefetchProp(\n prefetchProp: Exclude<LinkProps['prefetch'], undefined | false>\n): PrefetchTaskFetchStrategy {\n if (process.env.__NEXT_CACHE_COMPONENTS) {\n if (prefetchProp === true) {\n return FetchStrategy.Full\n }\n\n // `null` or `\"auto\"`: this is the default \"auto\" mode, where we will prefetch partially if the link is in the viewport.\n // This will also include invalid prop values that don't match the types specified here.\n // (although those should've been filtered out by prop validation in dev)\n prefetchProp satisfies null | 'auto'\n return FetchStrategy.PPR\n } else {\n return prefetchProp === null || prefetchProp === 'auto'\n ? // We default to PPR, and we'll discover whether or not the route supports it with the initial prefetch.\n FetchStrategy.PPR\n : // In the old implementation without runtime prefetches, `prefetch={true}` forces all dynamic data to be prefetched.\n // To preserve backwards-compatibility, anything other than `false`, `null`, or `\"auto\"` results in a full prefetch.\n // (although invalid values should've been filtered out by prop validation in dev)\n FetchStrategy.Full\n }\n}\n","import type { ComponentProps } from 'react'\nimport ClientLinkComponent, { type LinkProps, useLinkStatus } from './link'\n\nexport default function LinkComponent(\n props: ComponentProps<typeof ClientLinkComponent>\n) {\n const isLegacyBehavior = props.legacyBehavior\n const childIsHostComponent =\n typeof props.children === 'string' ||\n typeof props.children === 'number' ||\n typeof (props.children as any)?.type === 'string'\n const childIsClientComponent =\n (props.children as any)?.type?.$$typeof ===\n Symbol.for('react.client.reference')\n\n if (isLegacyBehavior && !childIsHostComponent && !childIsClientComponent) {\n if ((props.children as any)?.type?.$$typeof === Symbol.for('react.lazy')) {\n console.error(\n `Using a Lazy Component as a direct child of \\`<Link legacyBehavior>\\` from a Server Component is not supported. If you need legacyBehavior, wrap your Lazy Component in a Client Component that renders the Link's \\`<a>\\` tag.`\n )\n } else {\n console.error(\n `Using a Server Component as a direct child of \\`<Link legacyBehavior>\\` is not supported. If you need legacyBehavior, wrap your Server Component in a Client Component that renders the Link's \\`<a>\\` tag.`\n )\n }\n }\n\n return <ClientLinkComponent {...props} />\n}\n\nexport { type LinkProps, useLinkStatus }\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { getTeamWorkspaceDir } from \"@/lib/paths\";\nimport { readdirFiles } from \"@/lib/workflows/readdir\";\nimport type { WorkflowFileV1 } from \"@/lib/workflows/types\";\n\nconst WORKFLOWS_DIR = path.join(\"shared-context\", \"workflows\");\n\nexport function workflowFileName(workflowId: string) {\n return `${workflowId}.workflow.json`;\n}\n\nexport function assertSafeWorkflowId(workflowId: string) {\n const id = String(workflowId ?? \"\").trim();\n if (!id) throw new Error(\"workflow id is required\");\n if (!/^[a-z0-9][a-z0-9-]{0,62}$/.test(id)) {\n throw new Error(\n \"Invalid workflow id. Use lowercase letters, numbers, and dashes (max 63 chars), e.g. marketing-cadence-v1\"\n );\n }\n return id;\n}\n\nexport async function getTeamWorkflowsDir(teamId: string) {\n const teamDir = await getTeamWorkspaceDir(teamId);\n return path.join(teamDir, WORKFLOWS_DIR);\n}\n\nexport async function listWorkflows(teamId: string) {\n const dir = await getTeamWorkflowsDir(teamId);\n return readdirFiles(dir, \".workflow.json\");\n}\n\nexport async function readWorkflow(teamId: string, workflowId: string) {\n const id = assertSafeWorkflowId(workflowId);\n const dir = await getTeamWorkflowsDir(teamId);\n const p = path.join(dir, workflowFileName(id));\n const raw = await fs.readFile(p, \"utf8\");\n const parsed = JSON.parse(raw) as WorkflowFileV1;\n return { ok: true as const, path: p, workflow: parsed };\n}\n\nexport async function writeWorkflow(teamId: string, workflow: WorkflowFileV1) {\n const id = assertSafeWorkflowId(workflow.id);\n const dir = await getTeamWorkflowsDir(teamId);\n await fs.mkdir(dir, { recursive: true });\n const p = path.join(dir, workflowFileName(id));\n const toWrite: WorkflowFileV1 = {\n ...workflow,\n schema: \"clawkitchen.workflow.v1\",\n id,\n };\n await fs.writeFile(p, JSON.stringify(toWrite, null, 2) + \"\\n\", \"utf8\");\n return { ok: true as const, path: p };\n}\n\nexport async function deleteWorkflow(teamId: string, workflowId: string) {\n const id = assertSafeWorkflowId(workflowId);\n const dir = await getTeamWorkflowsDir(teamId);\n const p = path.join(dir, workflowFileName(id));\n try {\n await fs.unlink(p);\n } catch (err: unknown) {\n if (err && typeof err === \"object\" && (err as { code?: unknown }).code === \"ENOENT\") {\n return { ok: true as const, path: p, existed: false as const };\n }\n throw err;\n }\n return { ok: true as const, path: p, existed: true as const };\n}\n","import fs from \"node:fs/promises\";\n\n/** Reads dir with optional suffix filter and reverse sort. Returns { ok, dir, files } or { ok, dir, files: [] } on ENOENT. */\nexport async function readdirFiles(\n dir: string,\n suffix: string,\n reverse = false\n): Promise<{ ok: true; dir: string; files: string[] }> {\n try {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n let files = entries\n .filter((e) => e.isFile() && e.name.endsWith(suffix))\n .map((e) => e.name)\n .sort();\n if (reverse) files = files.reverse();\n return { ok: true as const, dir, files };\n } catch (err: unknown) {\n if (err && typeof err === \"object\" && (err as { code?: unknown }).code === \"ENOENT\") {\n return { ok: true as const, dir, files: [] as string[] };\n }\n throw err;\n }\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { getTeamWorkspaceDir } from \"@/lib/paths\";\nimport { readdirFiles } from \"@/lib/workflows/readdir\";\nimport { assertSafeWorkflowId } from \"@/lib/workflows/storage\";\nimport type { WorkflowRunFileV1, WorkflowRunNodeResultV1 } from \"@/lib/workflows/runs-types\";\n\nconst RUNS_DIR = path.join(\"shared-context\", \"workflow-runs\");\n\n/**\n * Back-compat:\n * - Legacy Kitchen layout: shared-context/workflow-runs/<workflowId>/*.run.json\n * - Runner layout (preferred): shared-context/workflow-runs/*.run.json\n */\nconst LEGACY_PER_WORKFLOW_LAYOUT = true;\n\nexport function assertSafeRunId(runId: string) {\n const id = String(runId ?? \"\").trim();\n if (!id) throw new Error(\"run id is required\");\n\n // Accept both Kitchen-style run ids (lowercase) and runner ids that include ISO timestamps (T/Z).\n // We still keep it conservative: only letters/numbers/dashes.\n if (!/^[A-Za-z0-9][A-Za-z0-9-]{0,120}$/.test(id)) {\n throw new Error(\"Invalid run id. Use letters, numbers, and dashes.\"\n );\n }\n return id;\n}\n\nexport async function getWorkflowRunsDir(teamId: string, workflowId: string) {\n // Validate workflowId (we no longer use it for the directory name).\n void assertSafeWorkflowId(workflowId);\n const teamDir = await getTeamWorkspaceDir(teamId);\n return path.join(teamDir, RUNS_DIR);\n}\n\nexport function workflowRunFileName(runId: string) {\n return `${runId}.run.json`;\n}\n\nexport async function listWorkflowRuns(teamId: string, workflowId: string) {\n const wfId = assertSafeWorkflowId(workflowId);\n const dir = await getWorkflowRunsDir(teamId, wfId);\n\n const runIds: string[] = [];\n\n // Preferred: runner directory-per-run layout: shared-context/workflow-runs/<runId>/run.json\n try {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n const runDirs = entries.filter((e) => e.isDirectory()).map((e) => e.name).sort();\n\n for (const runId of runDirs) {\n const p = path.join(dir, runId, \"run.json\");\n try {\n const raw = await fs.readFile(p, \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n const runDir = path.join(dir, runId);\n const normalized = await normalizeRunFile(teamId, wfId, parsed, runId, runDir);\n if (normalized.workflowId === wfId) runIds.push(runId);\n } catch {\n // ignore\n }\n }\n } catch {\n // ignore\n }\n\n // Legacy: flat *.run.json at root\n try {\n const { files } = await readdirFiles(dir, \".run.json\", true);\n for (const f of files) {\n const runId = f.replace(/\\.run\\.json$/i, \"\");\n try {\n const raw = await fs.readFile(path.join(dir, f), \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n const normalized = await normalizeRunFile(teamId, wfId, parsed, runId);\n if (normalized.workflowId === wfId) runIds.push(runId);\n } catch {\n // ignore\n }\n }\n } catch {\n // ignore\n }\n\n // Back-compat: legacy per-workflow directory.\n if (LEGACY_PER_WORKFLOW_LAYOUT) {\n try {\n const legacyDir = path.join(dir, wfId);\n const { files } = await readdirFiles(legacyDir, \".run.json\", true);\n for (const f of files) runIds.push(f.replace(/\\.run\\.json$/i, \"\"));\n } catch {\n // ignore\n }\n }\n\n const uniq = Array.from(new Set(runIds)).sort().reverse();\n return { ok: true as const, dir, runIds: uniq };\n}\n\nexport async function readWorkflowRun(teamId: string, workflowId: string, runId: string) {\n const wfId = assertSafeWorkflowId(workflowId);\n const rId = assertSafeRunId(runId);\n const dir = await getWorkflowRunsDir(teamId, wfId);\n\n // Preferred (runner) layout: shared-context/workflow-runs/<runId>/run.json\n const pRunner = path.join(dir, rId, \"run.json\");\n try {\n const raw = await fs.readFile(pRunner, \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n const runDir = path.join(dir, rId);\n const run = await normalizeRunFile(teamId, wfId, parsed, rId, runDir);\n\n // Runner stores rich node outputs as files under:\n // workflow-runs/<runId>/node-outputs/*-<nodeId>.json\n // Normalize by hydrating node.output from those files when missing.\n if (Array.isArray(run.nodes) && run.nodes.length) {\n const outputsDir = path.join(dir, rId, \"node-outputs\");\n let files: string[] = [];\n try {\n files = await fs.readdir(outputsDir);\n } catch {\n files = [];\n }\n\n // Multiple output files may exist for the same nodeId when a workflow executes a node\n // more than once. Preserve ordering by assigning outputs sequentially per nodeId.\n //\n // NOTE: Runner output filenames are typically prefixed with a sortable counter (e.g. 001-<nodeId>.json).\n // We rely on lexicographic order of filenames within node-outputs.\n const byNodeId = new Map<string, string[]>();\n for (const f of files.slice().sort()) {\n const m = f.match(/-([^/]+)\\.json$/);\n if (!m) continue;\n const nodeId = m[1];\n if (!nodeId) continue;\n const existing = byNodeId.get(nodeId) ?? [];\n existing.push(path.join(outputsDir, f));\n byNodeId.set(nodeId, existing);\n }\n\n await Promise.all(\n run.nodes.map(async (n) => {\n if (!n || typeof n !== \"object\") return;\n // Only hydrate if output is truly missing.\n if (typeof n.output !== \"undefined\") return;\n\n const arr = byNodeId.get(n.nodeId);\n if (!arr || !arr.length) return;\n\n const pOut = arr.shift();\n if (!pOut) return;\n\n try {\n const outRaw = await fs.readFile(pOut, \"utf8\");\n n.output = JSON.parse(outRaw) as unknown;\n } catch {\n // ignore\n }\n })\n );\n }\n\n return { ok: true as const, path: pRunner, run };\n } catch (err: unknown) {\n // fallthrough\n if (!(err && typeof err === \"object\" && (err as { code?: unknown }).code === \"ENOENT\")) throw err;\n }\n\n // Legacy flat layout: shared-context/workflow-runs/<runId>.run.json\n const p0 = path.join(dir, workflowRunFileName(rId));\n try {\n const raw = await fs.readFile(p0, \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n return { ok: true as const, path: p0, run: await normalizeRunFile(teamId, wfId, parsed, rId) };\n } catch (err: unknown) {\n if (LEGACY_PER_WORKFLOW_LAYOUT && err && typeof err === \"object\" && (err as { code?: unknown }).code === \"ENOENT\") {\n const legacy = path.join(dir, wfId, workflowRunFileName(rId));\n const raw = await fs.readFile(legacy, \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n return { ok: true as const, path: legacy, run: await normalizeRunFile(teamId, wfId, parsed, rId) };\n }\n throw err;\n }\n}\n\nexport async function writeWorkflowRun(teamId: string, workflowId: string, run: WorkflowRunFileV1) {\n const wfId = assertSafeWorkflowId(workflowId);\n const rId = assertSafeRunId(run.id);\n const dir = await getWorkflowRunsDir(teamId, wfId);\n await fs.mkdir(dir, { recursive: true });\n\n // Phase 2: Unified format - write directly to ClawRecipes directory format\n // shared-context/workflow-runs/<runId>/run.json\n const runDir = path.join(dir, rId);\n const runPath = path.join(runDir, \"run.json\");\n\n // Create run directory if it doesn't exist\n await fs.mkdir(runDir, { recursive: true });\n\n // Check if ClawRecipes format file already exists\n let existingClawRecipesRun: Record<string, unknown> | null = null;\n try {\n const existingRaw = await fs.readFile(runPath, \"utf8\");\n existingClawRecipesRun = JSON.parse(existingRaw);\n } catch {\n // File doesn't exist or isn't parseable - will create new one\n }\n\n if (existingClawRecipesRun) {\n // Update existing ClawRecipes format run\n // Preserve important ClawRecipes fields like events, nodeStates, etc.\n const updatedRun = {\n ...existingClawRecipesRun,\n // Update status and timing from ClawKitchen format\n status: mapKitchenStatusToRecipes(run.status),\n updatedAt: new Date().toISOString(),\n // Merge node results if provided\n ...(run.nodes && { nodeResults: run.nodes }),\n };\n\n await fs.writeFile(runPath, JSON.stringify(updatedRun, null, 2) + \"\\n\", \"utf8\");\n return { ok: true as const, path: runPath };\n } else {\n // Create new run in ClawRecipes format\n // Convert ClawKitchen format to ClawRecipes format\n const clawRecipesRun = {\n runId: rId,\n createdAt: run.startedAt || new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n teamId,\n workflow: { \n file: `${wfId}.workflow.json`,\n id: wfId,\n name: wfId // Use workflowId as name fallback\n },\n ticket: {\n file: `${rId}.md`, // Default ticket file pattern\n number: rId,\n lane: \"in-progress\" as const\n },\n trigger: { \n kind: \"manual\",\n at: run.startedAt || new Date().toISOString()\n },\n status: mapKitchenStatusToRecipes(run.status),\n events: [] as Array<Record<string, unknown>>,\n nodeResults: run.nodes || [],\n nodeStates: {} as Record<string, Record<string, unknown>>\n };\n\n // Convert nodes to nodeStates\n if (run.nodes) {\n for (const node of run.nodes) {\n clawRecipesRun.nodeStates[node.nodeId] = {\n status: node.status === \"success\" ? \"success\" : node.status === \"error\" ? \"error\" : \"waiting\",\n ts: node.endedAt || node.startedAt || new Date().toISOString(),\n message: typeof node.output === \"object\" && node.output ? JSON.stringify(node.output) : undefined\n };\n }\n }\n\n await fs.writeFile(runPath, JSON.stringify(clawRecipesRun, null, 2) + \"\\n\", \"utf8\");\n return { ok: true as const, path: runPath };\n }\n}\n\n// Helper function to map ClawKitchen status to ClawRecipes status\nfunction mapKitchenStatusToRecipes(kitchenStatus: string): string {\n switch (kitchenStatus) {\n case \"success\":\n return \"completed\";\n case \"canceled\":\n return \"canceled\";\n case \"error\":\n return \"error\";\n case \"waiting_for_approval\":\n return \"waiting\";\n case \"waiting_workers\":\n case \"running\":\n case \"queued\":\n return \"running\";\n default:\n return kitchenStatus;\n }\n}\n\n// Helper function to append events to ClawRecipes run log\nexport async function appendWorkflowRunEvent(\n teamId: string, \n workflowId: string, \n runId: string, \n event: { type: string; [key: string]: unknown }\n) {\n const wfId = assertSafeWorkflowId(workflowId);\n const rId = assertSafeRunId(runId);\n const dir = await getWorkflowRunsDir(teamId, wfId);\n const runDir = path.join(dir, rId);\n const runPath = path.join(runDir, \"run.json\");\n\n try {\n const existingRaw = await fs.readFile(runPath, \"utf8\");\n const existingRun = JSON.parse(existingRaw);\n \n // Add timestamp to event\n const timestampedEvent = {\n ...event,\n ts: new Date().toISOString()\n };\n \n // Append event to events array\n if (!existingRun.events) {\n existingRun.events = [];\n }\n existingRun.events.push(timestampedEvent);\n existingRun.updatedAt = new Date().toISOString();\n\n await fs.writeFile(runPath, JSON.stringify(existingRun, null, 2) + \"\\n\", \"utf8\");\n return { ok: true as const, path: runPath };\n } catch {\n // If file doesn't exist, we can't append an event\n throw new Error(`Cannot append event to non-existent run: ${runId}`);\n }\n}\n\n// Helper function to write approval files in ClawRecipes format\nexport async function writeApprovalFile(\n teamId: string,\n workflowId: string, \n runId: string,\n nodeId: string,\n approvalData: {\n state: string;\n requestedAt?: string;\n decidedAt?: string;\n note?: string;\n decidedBy?: string;\n }\n) {\n const wfId = assertSafeWorkflowId(workflowId);\n const rId = assertSafeRunId(runId);\n const dir = await getWorkflowRunsDir(teamId, wfId);\n const runDir = path.join(dir, rId);\n const approvalsDir = path.join(runDir, \"approvals\");\n const approvalPath = path.join(approvalsDir, \"approval.json\");\n\n // Create approvals directory if it doesn't exist\n await fs.mkdir(approvalsDir, { recursive: true });\n\n // Write approval file in ClawRecipes format\n const approvalFile = {\n nodeId,\n state: approvalData.state,\n requestedAt: approvalData.requestedAt || new Date().toISOString(),\n decidedAt: approvalData.decidedAt,\n note: approvalData.note,\n decidedBy: approvalData.decidedBy\n };\n\n await fs.writeFile(approvalPath, JSON.stringify(approvalFile, null, 2) + \"\\n\", \"utf8\");\n return { ok: true as const, path: approvalPath };\n}\n\nexport type WorkflowRunSummary = {\n workflowId: string;\n runId: string;\n status?: WorkflowRunFileV1[\"status\"];\n startedAt?: string;\n endedAt?: string;\n /** ISO timestamp derived from file mtime (best-effort) */\n updatedAt?: string;\n /** Absolute path to the run file on disk (server-side only) */\n path: string;\n};\n\nexport async function listAllWorkflowRuns(teamId: string): Promise<{ ok: true; dir: string; runs: WorkflowRunSummary[] }> {\n const teamDir = await getTeamWorkspaceDir(teamId);\n const dir = path.join(teamDir, RUNS_DIR);\n\n const runs: WorkflowRunSummary[] = [];\n\n // Preferred: runner directory-per-run layout:\n // shared-context/workflow-runs/<runId>/run.json\n try {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n const runDirs = entries.filter((e) => e.isDirectory()).map((e) => e.name).sort();\n\n for (const runId of runDirs) {\n const full = path.join(dir, runId, \"run.json\");\n try {\n const [raw, st] = await Promise.all([fs.readFile(full, \"utf8\"), fs.stat(full)]);\n const runDir = path.join(dir, runId);\n const normalized = await normalizeRunFile(teamId, \"(unknown)\", JSON.parse(raw) as unknown, runId, runDir);\n runs.push({\n workflowId: normalized.workflowId,\n runId: normalized.id,\n status: normalized.status,\n startedAt: normalized.startedAt,\n endedAt: normalized.endedAt,\n updatedAt: st.mtime ? new Date(st.mtime).toISOString() : undefined,\n path: full,\n });\n } catch {\n // ignore missing run.json/parse errors; keep going\n }\n }\n } catch (err: unknown) {\n if (!(err && typeof err === \"object\" && (err as { code?: unknown }).code === \"ENOENT\")) throw err;\n }\n\n // Legacy: flat run files at root: shared-context/workflow-runs/<runId>.run.json\n try {\n const entries = (await fs.readdir(dir)).filter((n) => n.endsWith(\".run.json\")).sort();\n for (const fileName of entries) {\n const runId = fileName.replace(/\\.run\\.json$/i, \"\");\n const full = path.join(dir, fileName);\n try {\n const [raw, st] = await Promise.all([fs.readFile(full, \"utf8\"), fs.stat(full)]);\n const normalized = await normalizeRunFile(teamId, \"(unknown)\", JSON.parse(raw) as unknown, runId);\n runs.push({\n workflowId: normalized.workflowId,\n runId: normalized.id,\n status: normalized.status,\n startedAt: normalized.startedAt,\n endedAt: normalized.endedAt,\n updatedAt: st.mtime ? new Date(st.mtime).toISOString() : undefined,\n path: full,\n });\n } catch {\n runs.push({ workflowId: \"(unknown)\", runId, path: full });\n }\n }\n } catch (err: unknown) {\n if (!(err && typeof err === \"object\" && (err as { code?: unknown }).code === \"ENOENT\")) throw err;\n }\n\n // Back-compat: legacy per-workflow directory.\n if (LEGACY_PER_WORKFLOW_LAYOUT) {\n try {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n const wfDirs = entries.filter((e) => e.isDirectory()).map((e) => e.name).sort();\n\n for (const workflowId of wfDirs) {\n const wfDir = path.join(dir, workflowId);\n let entries2: string[] = [];\n try {\n entries2 = (await fs.readdir(wfDir)).filter((n) => n.endsWith(\".run.json\")).sort();\n } catch (err: unknown) {\n if (err && typeof err === \"object\" && (err as { code?: unknown }).code === \"ENOENT\") continue;\n throw err;\n }\n\n for (const fileName of entries2) {\n const runId = fileName.replace(/\\.run\\.json$/i, \"\");\n const full = path.join(wfDir, fileName);\n try {\n const [raw, st] = await Promise.all([fs.readFile(full, \"utf8\"), fs.stat(full)]);\n const parsed = JSON.parse(raw) as Partial<WorkflowRunFileV1>;\n runs.push({\n workflowId,\n runId,\n status: parsed.status as WorkflowRunFileV1[\"status\"],\n startedAt: typeof parsed.startedAt === \"string\" ? parsed.startedAt : undefined,\n endedAt: typeof parsed.endedAt === \"string\" ? parsed.endedAt : undefined,\n updatedAt: st.mtime ? new Date(st.mtime).toISOString() : undefined,\n path: full,\n });\n } catch {\n runs.push({ workflowId, runId, path: full });\n }\n }\n }\n } catch (err: unknown) {\n if (!(err && typeof err === \"object\" && (err as { code?: unknown }).code === \"ENOENT\")) throw err;\n }\n }\n\n // Deduplicate across layouts. It's possible for the same logical run to appear in multiple places\n // (runner dir-per-run + legacy flat/per-workflow layouts). Prefer the richest record.\n const byKey = new Map<string, WorkflowRunSummary>();\n for (const r of runs) {\n const key = `${r.workflowId}:${r.runId}`;\n const prev = byKey.get(key);\n if (!prev) {\n byKey.set(key, r);\n continue;\n }\n\n const score = (x: WorkflowRunSummary) => {\n let s = 0;\n if (x.status) s += 2;\n if (x.startedAt) s += 1;\n if (x.endedAt) s += 1;\n if (x.updatedAt) s += 1;\n // Prefer runner dir-per-run run.json over legacy .run.json files.\n if (x.path.endsWith(`${path.sep}run.json`)) s += 2;\n return s;\n };\n\n if (score(r) >= score(prev)) byKey.set(key, r);\n }\n\n const deduped = Array.from(byKey.values());\n deduped.sort((a, b) => String(b.updatedAt ?? b.startedAt ?? \"\").localeCompare(String(a.updatedAt ?? a.startedAt ?? \"\")));\n return { ok: true as const, dir, runs: deduped };\n}\n\nasync function normalizeRunFile(\n teamId: string, \n workflowId: string, \n parsed: unknown, \n runIdFallback: string, \n runDirPath?: string\n): Promise<WorkflowRunFileV1> {\n // Kitchen schema\n if (parsed && typeof parsed === \"object\" && (parsed as { schema?: unknown }).schema === \"clawkitchen.workflow-run.v1\") {\n return parsed as WorkflowRunFileV1;\n }\n\n // Runner schema (RunLog from ClawRecipes). Convert to Kitchen's display schema.\n if (parsed && typeof parsed === \"object\" && \"runId\" in parsed && \"workflow\" in parsed) {\n const o = parsed as {\n runId?: unknown;\n createdAt?: unknown;\n updatedAt?: unknown;\n status?: unknown;\n workflow?: { id?: unknown; file?: unknown };\n nodeResults?: unknown;\n };\n\n const wfObj = o.workflow && typeof o.workflow === \"object\" ? o.workflow : {};\n const file = typeof wfObj.file === \"string\" ? wfObj.file : \"\";\n const inferredWfId = file ? path.basename(file).replace(/\\.workflow\\.json$/i, \"\") : \"\";\n const wfId = typeof wfObj.id === \"string\" && wfObj.id ? wfObj.id : inferredWfId || workflowId;\n\n const statusRaw = String(o.status ?? \"\");\n const status: WorkflowRunFileV1[\"status\"] =\n statusRaw === \"awaiting_approval\"\n ? \"waiting_for_approval\"\n : statusRaw === \"completed\"\n ? \"success\"\n : statusRaw === \"rejected\"\n ? \"error\"\n : statusRaw === \"error\"\n ? \"error\"\n : statusRaw === \"canceled\"\n ? \"canceled\"\n : \"running\";\n\n // nodeStates is the authoritative per-node status map written by the worker.\n // nodeResults may lack a status field, so cross-reference nodeStates.\n const nodeStatesRaw = (parsed as { nodeStates?: unknown }).nodeStates;\n const nodeStatesMap: Record<string, { status?: string; ts?: string }> =\n nodeStatesRaw && typeof nodeStatesRaw === \"object\" && !Array.isArray(nodeStatesRaw)\n ? (nodeStatesRaw as Record<string, { status?: string; ts?: string }>)\n : {};\n\n const nodes = Array.isArray(o.nodeResults)\n ? o.nodeResults\n .map((nr) => {\n if (!nr || typeof nr !== \"object\") return null;\n const r = nr as {\n nodeId?: unknown;\n status?: unknown;\n startedAt?: unknown;\n endedAt?: unknown;\n output?: unknown;\n error?: unknown;\n };\n const nodeId = typeof r.nodeId === \"string\" ? r.nodeId : \"\";\n if (!nodeId) return null;\n\n // Prefer nodeStates (authoritative) over nodeResults.status (often absent).\n const stateEntry = nodeStatesMap[nodeId];\n const st = String(stateEntry?.status ?? r.status ?? \"pending\");\n const mapped =\n st === \"awaiting_approval\"\n ? \"waiting\"\n : st === \"completed\"\n ? \"success\"\n : st === \"error\"\n ? \"error\"\n : st;\n\n const allowed = [\"pending\", \"running\", \"waiting\", \"success\", \"error\", \"skipped\"] as const;\n const status = (allowed as readonly string[]).includes(mapped) ? (mapped as (typeof allowed)[number]) : \"pending\";\n\n const error =\n typeof r.error === \"string\"\n ? r.error\n : r.error && typeof r.error === \"object\" && \"message\" in r.error\n ? { message: String((r.error as { message?: unknown }).message ?? \"\") }\n : undefined;\n\n const startedAt = typeof r.startedAt === \"string\" ? r.startedAt : undefined;\n const endedAt = typeof r.endedAt === \"string\" ? r.endedAt : (stateEntry?.ts ? stateEntry.ts : undefined);\n\n return {\n nodeId,\n status,\n ...(startedAt ? { startedAt } : {}),\n ...(endedAt ? { endedAt } : {}),\n ...(typeof r.output !== \"undefined\" ? { output: r.output } : {}),\n ...(typeof error !== \"undefined\" ? { error } : {}),\n } satisfies WorkflowRunNodeResultV1;\n })\n .filter((x): x is WorkflowRunNodeResultV1 => x !== null)\n : undefined;\n\n // Read approval file from ClawRecipes format if available\n let approval: WorkflowRunFileV1[\"approval\"] = undefined;\n if (runDirPath) {\n const approvalFile = path.join(runDirPath, \"approvals\", \"approval.json\");\n try {\n const approvalRaw = await fs.readFile(approvalFile, \"utf8\");\n const approvalData = JSON.parse(approvalRaw) as {\n nodeId?: string;\n status?: string;\n requestedAt?: string;\n decidedAt?: string;\n note?: string;\n decidedBy?: string;\n bindingId?: string;\n };\n\n if (approvalData.nodeId) {\n const state = \n approvalData.status === \"approved\" ? \"approved\" as const :\n approvalData.status === \"rejected\" ? \"changes_requested\" as const :\n approvalData.status === \"canceled\" ? \"canceled\" as const :\n \"pending\" as const;\n\n approval = {\n nodeId: approvalData.nodeId,\n state,\n requestedAt: approvalData.requestedAt,\n decidedAt: approvalData.decidedAt,\n note: approvalData.note,\n decidedBy: approvalData.decidedBy,\n };\n }\n } catch {\n // Ignore approval file read errors - approval files may not exist\n }\n }\n\n return {\n schema: \"clawkitchen.workflow-run.v1\",\n id: typeof o.runId === \"string\" ? o.runId : runIdFallback,\n workflowId: wfId,\n teamId,\n startedAt: typeof o.createdAt === \"string\" ? o.createdAt : new Date().toISOString(),\n endedAt:\n status === \"success\" || status === \"error\" || status === \"canceled\"\n ? typeof o.updatedAt === \"string\"\n ? o.updatedAt\n : undefined\n : undefined,\n status,\n summary: \"Executed by workflow runner\",\n nodes,\n approval,\n };\n }\n\n // Unknown schema; keep a placeholder so UI can still render.\n return {\n schema: \"clawkitchen.workflow-run.v1\",\n id: runIdFallback,\n workflowId,\n teamId,\n startedAt: new Date().toISOString(),\n status: \"error\",\n summary: \"Malformed run file\",\n };\n}"],"names":["LinkComponent","useLinkStatus","isModifiedEvent","event","eventTarget","currentTarget","target","getAttribute","metaKey","ctrlKey","shiftKey","altKey","nativeEvent","which","linkClicked","e","href","as","linkInstanceRef","replace","scroll","onNavigate","window","nodeName","isAnchorNodeName","toUpperCase","hasAttribute","isLocalURL","preventDefault","location","isDefaultPrevented","dispatchNavigateAction","require","React","startTransition","current","formatStringOrUrl","urlObjOrString","formatUrl","props","linkStatus","setOptimisticLinkStatus","useOptimistic","IDLE_LINK_STATUS","children","useRef","hrefProp","asProp","childrenProp","prefetch","prefetchProp","passHref","shallow","onClick","onMouseEnter","onMouseEnterProp","onTouchStart","onTouchStartProp","legacyBehavior","ref","forwardedRef","unstable_dynamicOnHover","restProps","a","router","useContext","AppRouterContext","prefetchEnabled","fetchStrategy","getFetchStrategyFromPrefetchProp","FetchStrategy","PPR","process","env","NODE_ENV","createPropError","args","Error","key","expected","actual","requiredPropsGuard","requiredProps","Object","keys","forEach","_","optionalPropsGuard","optionalProps","valType","locale","warnOnce","pathname","hasDynamicSegment","split","some","segment","startsWith","endsWith","useMemo","resolvedHref","child","$$typeof","Symbol","for","console","warn","Children","only","err","type","childRef","observeLinkVisibilityOnMount","useCallback","element","mountLinkInstance","unmountLinkForCurrentNavigation","unmountPrefetchableInstance","mergedRef","useMergedRef","childProps","defaultPrevented","upgradeToDynamicPrefetch","onNavigationIntent","__NEXT_LINK_NO_TOUCH_START","undefined","isAbsoluteUrl","addBasePath","link","errorOnce","cloneElement","LinkStatusContext","Provider","value","createContext","__NEXT_CACHE_COMPONENTS","Full","isLegacyBehavior","childIsHostComponent","childIsClientComponent","error","ClientLinkComponent"],"mappings":"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","ignoreList":[1,3]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
module.exports=[33354,(a,b,c)=>{"use strict";c._=function(a){return a&&a.__esModule?a:{default:a}}},4987,(a,b,c)=>{"use strict";function d({widthInt:a,heightInt:b,blurWidth:c,blurHeight:d,blurDataURL:e,objectFit:f}){let g=c?40*c:a,h=d?40*d:b,i=g&&h?`viewBox='0 0 ${g} ${h}'`:"";return`%3Csvg xmlns='http://www.w3.org/2000/svg' ${i}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${i?"none":"contain"===f?"xMidYMid":"cover"===f?"xMidYMid slice":"none"}' style='filter: url(%23b);' href='${e}'/%3E%3C/svg%3E`}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"getImageBlurSvg",{enumerable:!0,get:function(){return d}})},345,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={VALID_LOADERS:function(){return f},imageConfigDefault:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=["default","imgix","cloudinary","akamai","custom"],g={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],path:"/_next/image",loader:"default",loaderFile:"",domains:[],disableStaticImages:!1,minimumCacheTTL:14400,formats:["image/webp"],maximumRedirects:3,maximumResponseBody:5e7,dangerouslyAllowLocalIP:!1,dangerouslyAllowSVG:!1,contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;",contentDispositionType:"attachment",localPatterns:void 0,remotePatterns:[],qualities:[75],unoptimized:!1}},94915,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"getImgProps",{enumerable:!0,get:function(){return j}}),a.r(92434);let d=a.r(68063),e=a.r(4987),f=a.r(345),g=["-moz-initial","fill","none","scale-down",void 0];function h(a){return void 0!==a.default}function i(a){return void 0===a?a:"number"==typeof a?Number.isFinite(a)?a:NaN:"string"==typeof a&&/^[0-9]+$/.test(a)?parseInt(a,10):NaN}function j({src:a,sizes:b,unoptimized:c=!1,priority:j=!1,preload:k=!1,loading:l,className:m,quality:n,width:o,height:p,fill:q=!1,style:r,overrideSrc:s,onLoad:t,onLoadingComplete:u,placeholder:v="empty",blurDataURL:w,fetchPriority:x,decoding:y="async",layout:z,objectFit:A,objectPosition:B,lazyBoundary:C,lazyRoot:D,...E},F){var G;let H,I,J,{imgConf:K,showAltText:L,blurComplete:M,defaultLoader:N}=F,O=K||f.imageConfigDefault;if("allSizes"in O)H=O;else{let a=[...O.deviceSizes,...O.imageSizes].sort((a,b)=>a-b),b=O.deviceSizes.sort((a,b)=>a-b),c=O.qualities?.sort((a,b)=>a-b);H={...O,allSizes:a,deviceSizes:b,qualities:c}}if(void 0===N)throw Object.defineProperty(Error("images.loaderFile detected but the file is missing default export.\nRead more: https://nextjs.org/docs/messages/invalid-images-config"),"__NEXT_ERROR_CODE",{value:"E163",enumerable:!1,configurable:!0});let P=E.loader||N;delete E.loader,delete E.srcSet;let Q="__next_img_default"in P;if(Q){if("custom"===H.loader)throw Object.defineProperty(Error(`Image with src "${a}" is missing "loader" prop.
|
|
2
|
+
Read more: https://nextjs.org/docs/messages/next-image-missing-loader`),"__NEXT_ERROR_CODE",{value:"E252",enumerable:!1,configurable:!0})}else{let a=P;P=b=>{let{config:c,...d}=b;return a(d)}}if(z){"fill"===z&&(q=!0);let a={intrinsic:{maxWidth:"100%",height:"auto"},responsive:{width:"100%",height:"auto"}}[z];a&&(r={...r,...a});let c={responsive:"100vw",fill:"100vw"}[z];c&&!b&&(b=c)}let R="",S=i(o),T=i(p);if((G=a)&&"object"==typeof G&&(h(G)||void 0!==G.src)){let b=h(a)?a.default:a;if(!b.src)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ${JSON.stringify(b)}`),"__NEXT_ERROR_CODE",{value:"E460",enumerable:!1,configurable:!0});if(!b.height||!b.width)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ${JSON.stringify(b)}`),"__NEXT_ERROR_CODE",{value:"E48",enumerable:!1,configurable:!0});if(I=b.blurWidth,J=b.blurHeight,w=w||b.blurDataURL,R=b.src,!q)if(S||T){if(S&&!T){let a=S/b.width;T=Math.round(b.height*a)}else if(!S&&T){let a=T/b.height;S=Math.round(b.width*a)}}else S=b.width,T=b.height}let U=!j&&!k&&("lazy"===l||void 0===l);(!(a="string"==typeof a?a:R)||a.startsWith("data:")||a.startsWith("blob:"))&&(c=!0,U=!1),H.unoptimized&&(c=!0),Q&&!H.dangerouslyAllowSVG&&a.split("?",1)[0].endsWith(".svg")&&(c=!0);let V=i(n),W=Object.assign(q?{position:"absolute",height:"100%",width:"100%",left:0,top:0,right:0,bottom:0,objectFit:A,objectPosition:B}:{},L?{}:{color:"transparent"},r),X=M||"empty"===v?null:"blur"===v?`url("data:image/svg+xml;charset=utf-8,${(0,e.getImageBlurSvg)({widthInt:S,heightInt:T,blurWidth:I,blurHeight:J,blurDataURL:w||"",objectFit:W.objectFit})}")`:`url("${v}")`,Y=g.includes(W.objectFit)?"fill"===W.objectFit?"100% 100%":"cover":W.objectFit,Z=X?{backgroundSize:Y,backgroundPosition:W.objectPosition||"50% 50%",backgroundRepeat:"no-repeat",backgroundImage:X}:{},$=function({config:a,src:b,unoptimized:c,width:e,quality:f,sizes:g,loader:h}){if(c){let a=(0,d.getDeploymentId)();if(b.startsWith("/")&&!b.startsWith("//")&&a){let c=b.includes("?")?"&":"?";b=`${b}${c}dpl=${a}`}return{src:b,srcSet:void 0,sizes:void 0}}let{widths:i,kind:j}=function({deviceSizes:a,allSizes:b},c,d){if(d){let c=/(^|\s)(1?\d?\d)vw/g,e=[];for(let a;a=c.exec(d);)e.push(parseInt(a[2]));if(e.length){let c=.01*Math.min(...e);return{widths:b.filter(b=>b>=a[0]*c),kind:"w"}}return{widths:b,kind:"w"}}return"number"!=typeof c?{widths:a,kind:"w"}:{widths:[...new Set([c,2*c].map(a=>b.find(b=>b>=a)||b[b.length-1]))],kind:"x"}}(a,e,g),k=i.length-1;return{sizes:g||"w"!==j?g:"100vw",srcSet:i.map((c,d)=>`${h({config:a,src:b,quality:f,width:c})} ${"w"===j?c:d+1}${j}`).join(", "),src:h({config:a,src:b,quality:f,width:i[k]})}}({config:H,src:a,unoptimized:c,width:S,quality:V,sizes:b,loader:P}),_=U?"lazy":l;return{props:{...E,loading:_,fetchPriority:x,width:S,height:T,decoding:y,className:m,style:{...W,...Z},sizes:$.sizes,srcSet:$.srcSet,src:s||$.src},meta:{unoptimized:c,preload:k||j,placeholder:v,fill:q}}}},94613,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"default",{enumerable:!0,get:function(){return f}});let d=a.r(72131),e=()=>{};function f(a){let{headManager:b,reduceComponentsToState:c}=a;function f(){if(b&&b.mountedInstances){let a=d.Children.toArray(Array.from(b.mountedInstances).filter(Boolean));b.updateHead(c(a))}}return b?.mountedInstances?.add(a.children),f(),e(()=>(b?.mountedInstances?.add(a.children),()=>{b?.mountedInstances?.delete(a.children)})),e(()=>(b&&(b._pendingUpdate=f),()=>{b&&(b._pendingUpdate=f)})),null}},92966,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.HeadManagerContext},58018,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={default:function(){return p},defaultHead:function(){return l}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(33354),g=a.r(46058),h=a.r(87924),i=g._(a.r(72131)),j=f._(a.r(94613)),k=a.r(92966);function l(){return[(0,h.jsx)("meta",{charSet:"utf-8"},"charset"),(0,h.jsx)("meta",{name:"viewport",content:"width=device-width"},"viewport")]}function m(a,b){return"string"==typeof b||"number"==typeof b?a:b.type===i.default.Fragment?a.concat(i.default.Children.toArray(b.props.children).reduce((a,b)=>"string"==typeof b||"number"==typeof b?a:a.concat(b),[])):a.concat(b)}a.r(92434);let n=["name","httpEquiv","charSet","itemProp"];function o(a){let b,c,d,e;return a.reduce(m,[]).reverse().concat(l().reverse()).filter((b=new Set,c=new Set,d=new Set,e={},a=>{let f=!0,g=!1;if(a.key&&"number"!=typeof a.key&&a.key.indexOf("$")>0){g=!0;let c=a.key.slice(a.key.indexOf("$")+1);b.has(c)?f=!1:b.add(c)}switch(a.type){case"title":case"base":c.has(a.type)?f=!1:c.add(a.type);break;case"meta":for(let b=0,c=n.length;b<c;b++){let c=n[b];if(a.props.hasOwnProperty(c))if("charSet"===c)d.has(c)?f=!1:d.add(c);else{let b=a.props[c],d=e[c]||new Set;("name"!==c||!g)&&d.has(b)?f=!1:(d.add(b),e[c]=d)}}}return f})).reverse().map((a,b)=>{let c=a.key||b;return i.default.cloneElement(a,{key:c})})}let p=function({children:a}){let b=(0,i.useContext)(k.HeadManagerContext);return(0,h.jsx)(j.default,{reduceComponentsToState:o,headManager:b,children:a})};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},4486,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.ImageConfigContext},53773,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.RouterContext},35444,(a,b,c)=>{"use strict";function d(a,b){let c=a||75;return b?.qualities?.length?b.qualities.reduce((a,b)=>Math.abs(b-c)<Math.abs(a-c)?b:a,0):c}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"findClosestQuality",{enumerable:!0,get:function(){return d}})},2305,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"default",{enumerable:!0,get:function(){return g}});let d=a.r(35444),e=a.r(68063);function f({config:a,src:b,width:c,quality:f}){if(b.startsWith("/")&&b.includes("?")&&a.localPatterns?.length===1&&"**"===a.localPatterns[0].pathname&&""===a.localPatterns[0].search)throw Object.defineProperty(Error(`Image with src "${b}" is using a query string which is not configured in images.localPatterns.
|
|
3
|
+
Read more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`),"__NEXT_ERROR_CODE",{value:"E871",enumerable:!1,configurable:!0});let g=(0,d.findClosestQuality)(f,a),h=(0,e.getDeploymentId)();return`${a.path}?url=${encodeURIComponent(b)}&w=${c}&q=${g}${b.startsWith("/")&&h?`&dpl=${h}`:""}`}f.__next_img_default=!0;let g=f},67161,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"Image",{enumerable:!0,get:function(){return u}});let d=a.r(33354),e=a.r(46058),f=a.r(87924),g=e._(a.r(72131)),h=d._(a.r(35112)),i=d._(a.r(58018)),j=a.r(94915),k=a.r(345),l=a.r(4486);a.r(92434);let m=a.r(53773),n=d._(a.r(2305)),o=a.r(8591),p={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1};function q(a,b,c,d,e,f,g){let h=a?.src;a&&a["data-loaded-src"]!==h&&(a["data-loaded-src"]=h,("decode"in a?a.decode():Promise.resolve()).catch(()=>{}).then(()=>{if(a.parentElement&&a.isConnected){if("empty"!==b&&e(!0),c?.current){let b=new Event("load");Object.defineProperty(b,"target",{writable:!1,value:a});let d=!1,e=!1;c.current({...b,nativeEvent:b,currentTarget:a,target:a,isDefaultPrevented:()=>d,isPropagationStopped:()=>e,persist:()=>{},preventDefault:()=>{d=!0,b.preventDefault()},stopPropagation:()=>{e=!0,b.stopPropagation()}})}d?.current&&d.current(a)}}))}function r(a){return g.use?{fetchPriority:a}:{fetchpriority:a}}globalThis.__NEXT_IMAGE_IMPORTED=!0;let s=(0,g.forwardRef)(({src:a,srcSet:b,sizes:c,height:d,width:e,decoding:h,className:i,style:j,fetchPriority:k,placeholder:l,loading:m,unoptimized:n,fill:p,onLoadRef:s,onLoadingCompleteRef:t,setBlurComplete:u,setShowAltText:v,sizesInput:w,onLoad:x,onError:y,...z},A)=>{let B=(0,g.useCallback)(a=>{a&&(y&&(a.src=a.src),a.complete&&q(a,l,s,t,u,n,w))},[a,l,s,t,u,y,n,w]),C=(0,o.useMergedRef)(A,B);return(0,f.jsx)("img",{...z,...r(k),loading:m,width:e,height:d,decoding:h,"data-nimg":p?"fill":"1",className:i,style:j,sizes:c,srcSet:b,src:a,ref:C,onLoad:a=>{q(a.currentTarget,l,s,t,u,n,w)},onError:a=>{v(!0),"empty"!==l&&u(!0),y&&y(a)}})});function t({isAppRouter:a,imgAttributes:b}){let c={as:"image",imageSrcSet:b.srcSet,imageSizes:b.sizes,crossOrigin:b.crossOrigin,referrerPolicy:b.referrerPolicy,...r(b.fetchPriority)};return a&&h.default.preload?(h.default.preload(b.src,c),null):(0,f.jsx)(i.default,{children:(0,f.jsx)("link",{rel:"preload",href:b.srcSet?void 0:b.src,...c},"__nimg-"+b.src+b.srcSet+b.sizes)})}let u=(0,g.forwardRef)((a,b)=>{let c=(0,g.useContext)(m.RouterContext),d=(0,g.useContext)(l.ImageConfigContext),e=(0,g.useMemo)(()=>{let a=p||d||k.imageConfigDefault,b=[...a.deviceSizes,...a.imageSizes].sort((a,b)=>a-b),c=a.deviceSizes.sort((a,b)=>a-b),e=a.qualities?.sort((a,b)=>a-b);return{...a,allSizes:b,deviceSizes:c,qualities:e,localPatterns:d?.localPatterns}},[d]),{onLoad:h,onLoadingComplete:i}=a,o=(0,g.useRef)(h);(0,g.useEffect)(()=>{o.current=h},[h]);let q=(0,g.useRef)(i);(0,g.useEffect)(()=>{q.current=i},[i]);let[r,u]=(0,g.useState)(!1),[v,w]=(0,g.useState)(!1),{props:x,meta:y}=(0,j.getImgProps)(a,{defaultLoader:n.default,imgConf:e,blurComplete:r,showAltText:v});return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(s,{...x,unoptimized:y.unoptimized,placeholder:y.placeholder,fill:y.fill,onLoadRef:o,onLoadingCompleteRef:q,setBlurComplete:u,setShowAltText:w,sizesInput:a.sizes,ref:b}),y.preload?(0,f.jsx)(t,{isAppRouter:!c,imgAttributes:x}):null]})});("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},33095,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={default:function(){return k},getImageProps:function(){return j}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(33354),g=a.r(94915),h=a.r(67161),i=f._(a.r(2305));function j(a){let{props:b}=(0,g.getImgProps)(a,{defaultLoader:i.default,imgConf:{deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1}});for(let[a,c]of Object.entries(b))void 0===c&&delete b[a];return{props:b}}let k=h.Image},71987,(a,b,c)=>{b.exports=a.r(33095)},83519,a=>{"use strict";var b=a.i(87924),c=a.i(71987),d=a.i(38246),e=a.i(72131),f=a.i(50944);let g=new Set(["png","jpg","jpeg","gif","webp","svg"]);function h(a){let b=a.toLowerCase().split(".").pop()??"";return g.has(b)}function i(a,b){return`/api/teams/workflow-deliverables/file?teamId=${encodeURIComponent(a)}&runId=${encodeURIComponent(b.runId)}&path=${encodeURIComponent(b.relativePath)}`}function j(a){if(0===a)return"0 B";let b=Math.floor(Math.log(a)/Math.log(1024));return parseFloat((a/Math.pow(1024,b)).toFixed(1))+" "+["B","KB","MB","GB"][b]}function k(a){try{return new Date(a).toLocaleString()}catch{return a}}function l(a){switch(a.toLowerCase().split(".").pop()){case"md":return"๐";case"json":return"๐ง";case"txt":default:return"๐";case"html":case"htm":return"๐";case"css":return"๐จ";case"js":case"ts":case"tsx":case"jsx":return"โ๏ธ";case"png":case"jpg":case"jpeg":case"gif":case"webp":return"๐ผ๏ธ";case"pdf":return"๐";case"zip":case"tar":case"gz":return"๐ฆ"}}function m({teamId:a,deliverables:g,workflows:m}){let n=(0,f.useRouter)(),[o,p]=(0,e.useState)(""),[q,r]=(0,e.useState)(""),[s,t]=(0,e.useState)(""),[u,v]=(0,e.useState)(null),w=(0,e.useMemo)(()=>{let a=s.trim().toLowerCase();return g.filter(b=>{if(o&&b.workflowId!==o||q&&b.runId!==q)return!1;if(!a)return!0;let c=m[b.workflowId]?.name??"";return b.fileName.toLowerCase().includes(a)||b.workflowId.toLowerCase().includes(a)||b.runId.toLowerCase().includes(a)||c.toLowerCase().includes(a)||b.contentPreview&&b.contentPreview.toLowerCase().includes(a)})},[g,s,o,q,m]),x=(0,e.useMemo)(()=>Array.from(new Set(g.map(a=>a.workflowId).filter(Boolean))).sort(),[g]),y=(0,e.useMemo)(()=>Array.from(new Set((o?g.filter(a=>a.workflowId===o):g).map(a=>a.runId).filter(Boolean))).sort(),[g,o]),z=async b=>{try{if(b.isText&&b.contentPreview)await navigator.clipboard.writeText(b.contentPreview),alert("Content copied to clipboard!");else{let c=i(a,b),d=document.createElement("a");d.href=c,d.download=b.fileName,document.body.appendChild(d),d.click(),d.remove()}}catch{alert("Failed to download file")}};return(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsx)("div",{className:"rounded-[var(--ck-radius-lg)] border border-white/10 bg-black/10 p-4",children:(0,b.jsxs)("div",{className:"flex flex-wrap items-end justify-between gap-3",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-end gap-3",children:[(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]",children:"workflow"}),(0,b.jsxs)("select",{value:o,onChange:a=>{p(a.target.value||""),r("")},className:"mt-1 w-64 max-w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-2 text-sm text-[color:var(--ck-text-primary)]",children:[(0,b.jsx)("option",{value:"",children:"All workflows"}),x.map(a=>(0,b.jsx)("option",{value:a,children:m[a]?.name?`${m[a]?.name} (${a})`:a},a))]})]}),(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]",children:"run"}),(0,b.jsxs)("select",{value:q,onChange:a=>r(a.target.value||""),className:"mt-1 w-56 max-w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-2 text-sm text-[color:var(--ck-text-primary)]",children:[(0,b.jsx)("option",{value:"",children:"All runs"}),y.map(a=>(0,b.jsx)("option",{value:a,children:a},a))]})]}),(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]",children:"search"}),(0,b.jsx)("input",{value:s,onChange:a=>t(a.target.value),placeholder:"filename / content",className:"mt-1 w-72 max-w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-2 text-sm text-[color:var(--ck-text-primary)]"})]})]}),(0,b.jsx)("div",{className:"flex items-center gap-2",children:(0,b.jsx)("button",{type:"button",onClick:()=>n.refresh(),className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10",children:"Refresh"})})]})}),(0,b.jsxs)("div",{className:"grid grid-cols-1 gap-4 lg:grid-cols-3",children:[(0,b.jsxs)("div",{className:"lg:col-span-2 rounded-[var(--ck-radius-lg)] border border-white/10 bg-black/10 p-4",children:[(0,b.jsx)("h2",{className:"text-lg font-semibold text-[color:var(--ck-text-primary)] mb-4",children:"Workflow Deliverables"}),w.length>0?(0,b.jsx)("div",{className:"space-y-2",children:w.map((e,f)=>{let g=u?.absolutePath===e.absolutePath,n=m[e.workflowId]?.name||e.workflowId;return(0,b.jsx)("div",{className:`cursor-pointer rounded-[var(--ck-radius-sm)] border p-3 transition-colors ${g?"border-white/20 bg-white/10":"border-white/5 bg-black/5 hover:bg-white/5"}`,onClick:()=>v(e),children:(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[h(e.fileName)&&(0,b.jsx)("div",{className:"flex-shrink-0 w-12 h-12 rounded overflow-hidden bg-black/20 border border-white/10",children:(0,b.jsx)(c.default,{src:i(a,e),alt:e.fileName,width:48,height:48,className:"w-full h-full object-cover",unoptimized:!0})}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-lg",children:l(e.fileName)}),(0,b.jsx)("span",{className:"font-medium text-[color:var(--ck-text-primary)] truncate",children:e.fileName}),e.isText&&(0,b.jsx)("span",{className:"text-xs bg-green-500/20 text-green-400 px-1.5 py-0.5 rounded",children:"TEXT"})]}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:[(0,b.jsx)("span",{className:"font-mono",children:n})," ยท ",(0,b.jsx)("span",{className:"font-mono",children:e.runId})]}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:[e.relativePath!==e.fileName&&(0,b.jsxs)("span",{children:[e.relativePath," ยท "]}),j(e.size)," ยท ",k(e.mtime)]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("button",{onClick:a=>{a.stopPropagation(),z(e)},className:"text-xs px-2 py-1 border border-white/10 rounded hover:bg-white/5 text-[color:var(--ck-text-secondary)]",children:e.isText?"Copy":"Download"}),(0,b.jsx)(d.default,{href:`/teams/${a}/runs/${e.workflowId}/${e.runId}`,onClick:a=>a.stopPropagation(),className:"text-xs px-2 py-1 border border-white/10 rounded hover:bg-white/5 text-[color:var(--ck-text-secondary)]",children:"View Run โ"})]})]})},`${e.runId}-${e.relativePath}`)})}):(0,b.jsxs)("div",{className:"text-center py-8 text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("div",{className:"text-4xl mb-2",children:"๐"}),(0,b.jsx)("div",{className:"text-lg mb-1",children:"No deliverables found"}),(0,b.jsx)("div",{className:"text-sm",children:"Workflow runs will create deliverables that appear here when they complete."})]}),w.length>0&&(0,b.jsxs)("div",{className:"mt-4 text-xs text-[color:var(--ck-text-tertiary)]",children:["Showing ",w.length," of ",g.length," deliverables."]})]}),(0,b.jsxs)("div",{className:"lg:col-span-1 rounded-[var(--ck-radius-lg)] border border-white/10 bg-black/10 p-4",children:[(0,b.jsx)("h3",{className:"text-sm font-semibold text-[color:var(--ck-text-primary)] mb-3",children:"Preview"}),u?(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"mb-3 pb-3 border-b border-white/10",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 mb-2",children:[(0,b.jsx)("span",{className:"text-lg",children:l(u.fileName)}),(0,b.jsx)("span",{className:"font-medium text-[color:var(--ck-text-primary)] text-sm break-all",children:u.fileName})]}),(0,b.jsxs)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)] space-y-1",children:[(0,b.jsxs)("div",{children:["Size: ",j(u.size)]}),(0,b.jsxs)("div",{children:["Modified: ",k(u.mtime)]}),(0,b.jsxs)("div",{children:["Path: ",u.relativePath]})]})]}),h(u.fileName)?(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)] mb-2",children:"Image Preview:"}),(0,b.jsx)("div",{className:"bg-black/20 border border-white/10 rounded-[var(--ck-radius-sm)] p-2 overflow-hidden",children:(0,b.jsx)(c.default,{src:i(a,u),alt:u.fileName,width:800,height:600,className:"w-full h-auto rounded-[var(--ck-radius-sm)] object-contain max-h-[500px]",unoptimized:!0})}),(0,b.jsxs)("div",{className:"mt-2 flex gap-2",children:[(0,b.jsx)("a",{href:i(a,u),target:"_blank",rel:"noopener noreferrer",className:"text-xs px-2 py-1 border border-white/10 rounded hover:bg-white/5 text-[color:var(--ck-text-secondary)]",children:"Open full size โ"}),(0,b.jsx)("button",{onClick:()=>z(u),className:"text-xs px-2 py-1 border border-white/10 rounded hover:bg-white/5 text-[color:var(--ck-text-secondary)]",children:"Download"})]})]}):u.isText&&u.contentPreview?(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)] mb-2",children:"Content Preview:"}),(0,b.jsx)("div",{className:"bg-black/20 border border-white/10 rounded-[var(--ck-radius-sm)] p-3 max-h-[400px] overflow-auto",children:(0,b.jsx)("pre",{className:"text-xs text-[color:var(--ck-text-primary)] whitespace-pre-wrap break-words",children:u.contentPreview})})]}):(0,b.jsxs)("div",{className:"text-center py-6",children:[(0,b.jsx)("div",{className:"text-3xl mb-2",children:l(u.fileName)}),(0,b.jsxs)("div",{className:"text-xs text-[color:var(--ck-text-secondary)] mb-2",children:[j(u.size)," ยท ",u.fileName.split(".").pop()?.toUpperCase()," file"]}),(0,b.jsx)("button",{onClick:()=>z(u),className:"text-xs px-3 py-1.5 border border-white/10 rounded hover:bg-white/5 text-[color:var(--ck-text-secondary)]",children:"Download file"})]})]}):(0,b.jsx)("div",{className:"text-sm text-[color:var(--ck-text-secondary)] italic",children:"Select a deliverable to preview"})]})]})]})}a.s(["default",()=>m])}];
|
|
4
|
+
|
|
5
|
+
//# sourceMappingURL=_deb7a691._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/%40swc/helpers/cjs/_interop_require_default.cjs","../../../../node_modules/next/src/shared/lib/image-blur-svg.ts","../../../../node_modules/next/src/shared/lib/image-config.ts","../../../../node_modules/next/src/shared/lib/get-img-props.ts","../../../../node_modules/next/src/shared/lib/side-effect.tsx","../../../../node_modules/next/src/server/route-modules/app-page/vendored/contexts/head-manager-context.ts","../../../../node_modules/next/src/shared/lib/head.tsx","../../../../node_modules/next/src/server/route-modules/app-page/vendored/contexts/image-config-context.ts","../../../../node_modules/next/src/server/route-modules/app-page/vendored/contexts/router-context.ts","../../../../node_modules/next/src/shared/lib/find-closest-quality.ts","../../../../node_modules/next/src/shared/lib/image-loader.ts","../../../../node_modules/next/src/client/image-component.tsx","../../../../node_modules/next/src/shared/lib/image-external.tsx","../../../../node_modules/next/image.js","../../../../src/app/teams/%5BteamId%5D/deliverables/deliverables-client.tsx"],"sourcesContent":["\"use strict\";\n\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nexports._ = _interop_require_default;\n","/**\n * A shared function, used on both client and server, to generate a SVG blur placeholder.\n */\nexport function getImageBlurSvg({\n widthInt,\n heightInt,\n blurWidth,\n blurHeight,\n blurDataURL,\n objectFit,\n}: {\n widthInt?: number\n heightInt?: number\n blurWidth?: number\n blurHeight?: number\n blurDataURL: string\n objectFit?: string\n}): string {\n const std = 20\n const svgWidth = blurWidth ? blurWidth * 40 : widthInt\n const svgHeight = blurHeight ? blurHeight * 40 : heightInt\n\n const viewBox =\n svgWidth && svgHeight ? `viewBox='0 0 ${svgWidth} ${svgHeight}'` : ''\n const preserveAspectRatio = viewBox\n ? 'none'\n : objectFit === 'contain'\n ? 'xMidYMid'\n : objectFit === 'cover'\n ? 'xMidYMid slice'\n : 'none'\n\n return `%3Csvg xmlns='http://www.w3.org/2000/svg' ${viewBox}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='${std}'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='${std}'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${preserveAspectRatio}' style='filter: url(%23b);' href='${blurDataURL}'/%3E%3C/svg%3E`\n}\n","export const VALID_LOADERS = [\n 'default',\n 'imgix',\n 'cloudinary',\n 'akamai',\n 'custom',\n] as const\n\nexport type LoaderValue = (typeof VALID_LOADERS)[number]\n\nexport type ImageLoaderProps = {\n src: string\n width: number\n quality?: number\n}\n\nexport type ImageLoaderPropsWithConfig = ImageLoaderProps & {\n config: Readonly<ImageConfig>\n}\n\nexport type LocalPattern = {\n /**\n * Can be literal or wildcard.\n * Single `*` matches a single path segment.\n * Double `**` matches any number of path segments.\n */\n pathname?: string\n\n /**\n * Can be literal query string such as `?v=1` or\n * empty string meaning no query string.\n */\n search?: string\n}\n\nexport type RemotePattern = {\n /**\n * Must be `http` or `https`.\n */\n protocol?: 'http' | 'https'\n\n /**\n * Can be literal or wildcard.\n * Single `*` matches a single subdomain.\n * Double `**` matches any number of subdomains.\n */\n hostname: string\n\n /**\n * Can be literal port such as `8080` or empty string\n * meaning no port.\n */\n port?: string\n\n /**\n * Can be literal or wildcard.\n * Single `*` matches a single path segment.\n * Double `**` matches any number of path segments.\n */\n pathname?: string\n\n /**\n * Can be literal query string such as `?v=1` or\n * empty string meaning no query string.\n */\n search?: string\n}\n\ntype ImageFormat = 'image/avif' | 'image/webp'\n\n/**\n * Image configurations\n *\n * @see [Image configuration options](https://nextjs.org/docs/api-reference/next/image#configuration-options)\n */\nexport type ImageConfigComplete = {\n /** @see [Device sizes documentation](https://nextjs.org/docs/api-reference/next/image#device-sizes) */\n deviceSizes: number[]\n\n /** @see [Image sizing documentation](https://nextjs.org/docs/app/building-your-application/optimizing/images#image-sizing) */\n imageSizes: number[]\n\n /** @see [Image loaders configuration](https://nextjs.org/docs/api-reference/next/legacy/image#loader) */\n loader: LoaderValue\n\n /** @see [Image loader configuration](https://nextjs.org/docs/app/api-reference/components/image#path) */\n path: string\n\n /** @see [Image loader configuration](https://nextjs.org/docs/api-reference/next/image#loader-configuration) */\n loaderFile: string\n\n /**\n * @deprecated Use `remotePatterns` instead.\n */\n domains: string[]\n\n /** @see [Disable static image import configuration](https://nextjs.org/docs/api-reference/next/image#disable-static-imports) */\n disableStaticImages: boolean\n\n /** @see [Cache behavior](https://nextjs.org/docs/api-reference/next/image#caching-behavior) */\n minimumCacheTTL: number\n\n /** @see [Acceptable formats](https://nextjs.org/docs/api-reference/next/image#acceptable-formats) */\n formats: ImageFormat[]\n\n /** @see [Maximum Redirects](https://nextjs.org/docs/api-reference/next/image#maximumredirects) */\n maximumRedirects: number\n\n /** @see [Maximum Response Body](https://nextjs.org/docs/api-reference/next/image#maximumresponsebody) */\n maximumResponseBody: number\n\n /** @see [Dangerously Allow Local IP](https://nextjs.org/docs/api-reference/next/image#dangerously-allow-local-ip) */\n dangerouslyAllowLocalIP: boolean\n\n /** @see [Dangerously Allow SVG](https://nextjs.org/docs/api-reference/next/image#dangerously-allow-svg) */\n dangerouslyAllowSVG: boolean\n\n /** @see [Content Security Policy](https://nextjs.org/docs/api-reference/next/image#contentsecuritypolicy) */\n contentSecurityPolicy: string\n\n /** @see [Content Disposition Type](https://nextjs.org/docs/api-reference/next/image#contentdispositiontype) */\n contentDispositionType: 'inline' | 'attachment'\n\n /** @see [Remote Patterns](https://nextjs.org/docs/api-reference/next/image#remotepatterns) */\n remotePatterns: Array<URL | RemotePattern>\n\n /** @see [Local Patterns](https://nextjs.org/docs/api-reference/next/image#localPatterns) */\n localPatterns: LocalPattern[] | undefined\n\n /** @see [Qualities](https://nextjs.org/docs/api-reference/next/image#qualities) */\n qualities: number[] | undefined\n\n /** @see [Unoptimized](https://nextjs.org/docs/api-reference/next/image#unoptimized) */\n unoptimized: boolean\n}\n\nexport type ImageConfig = Partial<ImageConfigComplete>\n\nexport const imageConfigDefault: ImageConfigComplete = {\n deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],\n imageSizes: [32, 48, 64, 96, 128, 256, 384],\n path: '/_next/image',\n loader: 'default',\n loaderFile: '',\n /**\n * @deprecated Use `remotePatterns` instead to protect your application from malicious users.\n */\n domains: [],\n disableStaticImages: false,\n minimumCacheTTL: 14400, // 4 hours\n formats: ['image/webp'],\n maximumRedirects: 3,\n maximumResponseBody: 50_000_000, // 50 MB\n dangerouslyAllowLocalIP: false,\n dangerouslyAllowSVG: false,\n contentSecurityPolicy: `script-src 'none'; frame-src 'none'; sandbox;`,\n contentDispositionType: 'attachment',\n localPatterns: undefined, // default: allow all local images\n remotePatterns: [], // default: allow no remote images\n qualities: [75],\n unoptimized: false,\n}\n","import { warnOnce } from './utils/warn-once'\nimport { getDeploymentId } from './deployment-id'\nimport { getImageBlurSvg } from './image-blur-svg'\nimport { imageConfigDefault } from './image-config'\nimport type {\n ImageConfigComplete,\n ImageLoaderProps,\n ImageLoaderPropsWithConfig,\n} from './image-config'\n\nimport type { CSSProperties, JSX } from 'react'\n\nexport interface StaticImageData {\n src: string\n height: number\n width: number\n blurDataURL?: string\n blurWidth?: number\n blurHeight?: number\n}\n\nexport interface StaticRequire {\n default: StaticImageData\n}\n\nexport type StaticImport = StaticRequire | StaticImageData\n\nexport type ImageProps = Omit<\n JSX.IntrinsicElements['img'],\n 'src' | 'srcSet' | 'ref' | 'alt' | 'width' | 'height' | 'loading'\n> & {\n src: string | StaticImport\n alt: string\n width?: number | `${number}`\n height?: number | `${number}`\n fill?: boolean\n loader?: ImageLoader\n quality?: number | `${number}`\n preload?: boolean\n /**\n * @deprecated Use `preload` prop instead.\n * See https://nextjs.org/docs/app/api-reference/components/image#preload\n */\n priority?: boolean\n loading?: LoadingValue\n placeholder?: PlaceholderValue\n blurDataURL?: string\n unoptimized?: boolean\n overrideSrc?: string\n /**\n * @deprecated Use `onLoad` instead.\n * @see https://nextjs.org/docs/app/api-reference/components/image#onload\n */\n onLoadingComplete?: OnLoadingComplete\n /**\n * @deprecated Use `fill` prop instead of `layout=\"fill\"` or change import to `next/legacy/image`.\n * @see https://nextjs.org/docs/api-reference/next/legacy/image\n */\n layout?: string\n /**\n * @deprecated Use `style` prop instead.\n */\n objectFit?: string\n /**\n * @deprecated Use `style` prop instead.\n */\n objectPosition?: string\n /**\n * @deprecated This prop does not do anything.\n */\n lazyBoundary?: string\n /**\n * @deprecated This prop does not do anything.\n */\n lazyRoot?: string\n}\n\nexport type ImgProps = Omit<ImageProps, 'src' | 'loader'> & {\n loading: LoadingValue\n width: number | undefined\n height: number | undefined\n style: NonNullable<JSX.IntrinsicElements['img']['style']>\n sizes: string | undefined\n srcSet: string | undefined\n src: string\n}\n\nconst VALID_LOADING_VALUES = ['lazy', 'eager', undefined] as const\n\n// Object-fit values that are not valid background-size values\nconst INVALID_BACKGROUND_SIZE_VALUES = [\n '-moz-initial',\n 'fill',\n 'none',\n 'scale-down',\n undefined,\n]\ntype LoadingValue = (typeof VALID_LOADING_VALUES)[number]\ntype ImageConfig = ImageConfigComplete & {\n allSizes: number[]\n output?: 'standalone' | 'export'\n}\n\nexport type ImageLoader = (p: ImageLoaderProps) => string\n\n// Do not export - this is an internal type only\n// because `next.config.js` is only meant for the\n// built-in loaders, not for a custom loader() prop.\ntype ImageLoaderWithConfig = (p: ImageLoaderPropsWithConfig) => string\n\nexport type PlaceholderValue = 'blur' | 'empty' | `data:image/${string}`\nexport type OnLoad = React.ReactEventHandler<HTMLImageElement> | undefined\nexport type OnLoadingComplete = (img: HTMLImageElement) => void\n\nexport type PlaceholderStyle = Partial<\n Pick<\n CSSProperties,\n | 'backgroundSize'\n | 'backgroundPosition'\n | 'backgroundRepeat'\n | 'backgroundImage'\n >\n>\n\nfunction isStaticRequire(\n src: StaticRequire | StaticImageData\n): src is StaticRequire {\n return (src as StaticRequire).default !== undefined\n}\n\nfunction isStaticImageData(\n src: StaticRequire | StaticImageData\n): src is StaticImageData {\n return (src as StaticImageData).src !== undefined\n}\n\nfunction isStaticImport(src: string | StaticImport): src is StaticImport {\n return (\n !!src &&\n typeof src === 'object' &&\n (isStaticRequire(src as StaticImport) ||\n isStaticImageData(src as StaticImport))\n )\n}\n\nconst allImgs = new Map<\n string,\n { src: string; loading: LoadingValue; placeholder: PlaceholderValue }\n>()\nlet perfObserver: PerformanceObserver | undefined\n\nfunction getInt(x: unknown): number | undefined {\n if (typeof x === 'undefined') {\n return x\n }\n if (typeof x === 'number') {\n return Number.isFinite(x) ? x : NaN\n }\n if (typeof x === 'string' && /^[0-9]+$/.test(x)) {\n return parseInt(x, 10)\n }\n return NaN\n}\n\nfunction getWidths(\n { deviceSizes, allSizes }: ImageConfig,\n width: number | undefined,\n sizes: string | undefined\n): { widths: number[]; kind: 'w' | 'x' } {\n if (sizes) {\n // Find all the \"vw\" percent sizes used in the sizes prop\n const viewportWidthRe = /(^|\\s)(1?\\d?\\d)vw/g\n const percentSizes = []\n for (let match; (match = viewportWidthRe.exec(sizes)); match) {\n percentSizes.push(parseInt(match[2]))\n }\n if (percentSizes.length) {\n const smallestRatio = Math.min(...percentSizes) * 0.01\n return {\n widths: allSizes.filter((s) => s >= deviceSizes[0] * smallestRatio),\n kind: 'w',\n }\n }\n return { widths: allSizes, kind: 'w' }\n }\n if (typeof width !== 'number') {\n return { widths: deviceSizes, kind: 'w' }\n }\n\n const widths = [\n ...new Set(\n // > This means that most OLED screens that say they are 3x resolution,\n // > are actually 3x in the green color, but only 1.5x in the red and\n // > blue colors. Showing a 3x resolution image in the app vs a 2x\n // > resolution image will be visually the same, though the 3x image\n // > takes significantly more data. Even true 3x resolution screens are\n // > wasteful as the human eye cannot see that level of detail without\n // > something like a magnifying glass.\n // https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/capping-image-fidelity-on-ultra-high-resolution-devices.html\n [width, width * 2 /*, width * 3*/].map(\n (w) => allSizes.find((p) => p >= w) || allSizes[allSizes.length - 1]\n )\n ),\n ]\n return { widths, kind: 'x' }\n}\n\ntype GenImgAttrsData = {\n config: ImageConfig\n src: string\n unoptimized: boolean\n loader: ImageLoaderWithConfig\n width?: number\n quality?: number\n sizes?: string\n}\n\ntype GenImgAttrsResult = {\n src: string\n srcSet: string | undefined\n sizes: string | undefined\n}\n\nfunction generateImgAttrs({\n config,\n src,\n unoptimized,\n width,\n quality,\n sizes,\n loader,\n}: GenImgAttrsData): GenImgAttrsResult {\n if (unoptimized) {\n const deploymentId = getDeploymentId()\n if (src.startsWith('/') && !src.startsWith('//') && deploymentId) {\n const sep = src.includes('?') ? '&' : '?'\n src = `${src}${sep}dpl=${deploymentId}`\n }\n return { src, srcSet: undefined, sizes: undefined }\n }\n\n const { widths, kind } = getWidths(config, width, sizes)\n const last = widths.length - 1\n\n return {\n sizes: !sizes && kind === 'w' ? '100vw' : sizes,\n srcSet: widths\n .map(\n (w, i) =>\n `${loader({ config, src, quality, width: w })} ${\n kind === 'w' ? w : i + 1\n }${kind}`\n )\n .join(', '),\n\n // It's intended to keep `src` the last attribute because React updates\n // attributes in order. If we keep `src` the first one, Safari will\n // immediately start to fetch `src`, before `sizes` and `srcSet` are even\n // updated by React. That causes multiple unnecessary requests if `srcSet`\n // and `sizes` are defined.\n // This bug cannot be reproduced in Chrome or Firefox.\n src: loader({ config, src, quality, width: widths[last] }),\n }\n}\n\n/**\n * A shared function, used on both client and server, to generate the props for <img>.\n */\nexport function getImgProps(\n {\n src,\n sizes,\n unoptimized = false,\n priority = false,\n preload = false,\n loading,\n className,\n quality,\n width,\n height,\n fill = false,\n style,\n overrideSrc,\n onLoad,\n onLoadingComplete,\n placeholder = 'empty',\n blurDataURL,\n fetchPriority,\n decoding = 'async',\n layout,\n objectFit,\n objectPosition,\n lazyBoundary,\n lazyRoot,\n ...rest\n }: ImageProps,\n _state: {\n defaultLoader: ImageLoaderWithConfig\n imgConf: ImageConfigComplete\n showAltText?: boolean\n blurComplete?: boolean\n }\n): {\n props: ImgProps\n meta: {\n unoptimized: boolean\n preload: boolean\n placeholder: NonNullable<ImageProps['placeholder']>\n fill: boolean\n }\n} {\n const { imgConf, showAltText, blurComplete, defaultLoader } = _state\n let config: ImageConfig\n let c = imgConf || imageConfigDefault\n if ('allSizes' in c) {\n config = c as ImageConfig\n } else {\n const allSizes = [...c.deviceSizes, ...c.imageSizes].sort((a, b) => a - b)\n const deviceSizes = c.deviceSizes.sort((a, b) => a - b)\n const qualities = c.qualities?.sort((a, b) => a - b)\n config = { ...c, allSizes, deviceSizes, qualities }\n }\n\n if (typeof defaultLoader === 'undefined') {\n throw new Error(\n 'images.loaderFile detected but the file is missing default export.\\nRead more: https://nextjs.org/docs/messages/invalid-images-config'\n )\n }\n let loader: ImageLoaderWithConfig = rest.loader || defaultLoader\n\n // Remove property so it's not spread on <img> element\n delete rest.loader\n delete (rest as any).srcSet\n\n // This special value indicates that the user\n // didn't define a \"loader\" prop or \"loader\" config.\n const isDefaultLoader = '__next_img_default' in loader\n\n if (isDefaultLoader) {\n if (config.loader === 'custom') {\n throw new Error(\n `Image with src \"${src}\" is missing \"loader\" prop.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader`\n )\n }\n } else {\n // The user defined a \"loader\" prop or config.\n // Since the config object is internal only, we\n // must not pass it to the user-defined \"loader\".\n const customImageLoader = loader as ImageLoader\n loader = (obj) => {\n const { config: _, ...opts } = obj\n return customImageLoader(opts)\n }\n }\n\n if (layout) {\n if (layout === 'fill') {\n fill = true\n }\n const layoutToStyle: Record<string, Record<string, string> | undefined> = {\n intrinsic: { maxWidth: '100%', height: 'auto' },\n responsive: { width: '100%', height: 'auto' },\n }\n const layoutToSizes: Record<string, string | undefined> = {\n responsive: '100vw',\n fill: '100vw',\n }\n const layoutStyle = layoutToStyle[layout]\n if (layoutStyle) {\n style = { ...style, ...layoutStyle }\n }\n const layoutSizes = layoutToSizes[layout]\n if (layoutSizes && !sizes) {\n sizes = layoutSizes\n }\n }\n\n let staticSrc = ''\n let widthInt = getInt(width)\n let heightInt = getInt(height)\n let blurWidth: number | undefined\n let blurHeight: number | undefined\n if (isStaticImport(src)) {\n const staticImageData = isStaticRequire(src) ? src.default : src\n\n if (!staticImageData.src) {\n throw new Error(\n `An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ${JSON.stringify(\n staticImageData\n )}`\n )\n }\n if (!staticImageData.height || !staticImageData.width) {\n throw new Error(\n `An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ${JSON.stringify(\n staticImageData\n )}`\n )\n }\n\n blurWidth = staticImageData.blurWidth\n blurHeight = staticImageData.blurHeight\n blurDataURL = blurDataURL || staticImageData.blurDataURL\n staticSrc = staticImageData.src\n\n if (!fill) {\n if (!widthInt && !heightInt) {\n widthInt = staticImageData.width\n heightInt = staticImageData.height\n } else if (widthInt && !heightInt) {\n const ratio = widthInt / staticImageData.width\n heightInt = Math.round(staticImageData.height * ratio)\n } else if (!widthInt && heightInt) {\n const ratio = heightInt / staticImageData.height\n widthInt = Math.round(staticImageData.width * ratio)\n }\n }\n }\n src = typeof src === 'string' ? src : staticSrc\n\n let isLazy =\n !priority &&\n !preload &&\n (loading === 'lazy' || typeof loading === 'undefined')\n if (!src || src.startsWith('data:') || src.startsWith('blob:')) {\n // https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n unoptimized = true\n isLazy = false\n }\n if (config.unoptimized) {\n unoptimized = true\n }\n if (\n isDefaultLoader &&\n !config.dangerouslyAllowSVG &&\n src.split('?', 1)[0].endsWith('.svg')\n ) {\n // Special case to make svg serve as-is to avoid proxying\n // through the built-in Image Optimization API.\n unoptimized = true\n }\n\n const qualityInt = getInt(quality)\n\n if (process.env.NODE_ENV !== 'production') {\n if (config.output === 'export' && isDefaultLoader && !unoptimized) {\n throw new Error(\n `Image Optimization using the default loader is not compatible with \\`{ output: 'export' }\\`.\n Possible solutions:\n - Remove \\`{ output: 'export' }\\` and run \"next start\" to run server mode including the Image Optimization API.\n - Configure \\`{ images: { unoptimized: true } }\\` in \\`next.config.js\\` to disable the Image Optimization API.\n Read more: https://nextjs.org/docs/messages/export-image-api`\n )\n }\n if (!src) {\n // React doesn't show the stack trace and there's\n // no `src` to help identify which image, so we\n // instead console.error(ref) during mount.\n unoptimized = true\n } else {\n if (fill) {\n if (width) {\n throw new Error(\n `Image with src \"${src}\" has both \"width\" and \"fill\" properties. Only one should be used.`\n )\n }\n if (height) {\n throw new Error(\n `Image with src \"${src}\" has both \"height\" and \"fill\" properties. Only one should be used.`\n )\n }\n if (style?.position && style.position !== 'absolute') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.position\" properties. Images with \"fill\" always use position absolute - it cannot be modified.`\n )\n }\n if (style?.width && style.width !== '100%') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.width\" properties. Images with \"fill\" always use width 100% - it cannot be modified.`\n )\n }\n if (style?.height && style.height !== '100%') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.height\" properties. Images with \"fill\" always use height 100% - it cannot be modified.`\n )\n }\n } else {\n if (typeof widthInt === 'undefined') {\n throw new Error(\n `Image with src \"${src}\" is missing required \"width\" property.`\n )\n } else if (isNaN(widthInt)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"width\" property. Expected a numeric value in pixels but received \"${width}\".`\n )\n }\n if (typeof heightInt === 'undefined') {\n throw new Error(\n `Image with src \"${src}\" is missing required \"height\" property.`\n )\n } else if (isNaN(heightInt)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"height\" property. Expected a numeric value in pixels but received \"${height}\".`\n )\n }\n // eslint-disable-next-line no-control-regex\n if (/^[\\x00-\\x20]/.test(src)) {\n throw new Error(\n `Image with src \"${src}\" cannot start with a space or control character. Use src.trimStart() to remove it or encodeURIComponent(src) to keep it.`\n )\n }\n // eslint-disable-next-line no-control-regex\n if (/[\\x00-\\x20]$/.test(src)) {\n throw new Error(\n `Image with src \"${src}\" cannot end with a space or control character. Use src.trimEnd() to remove it or encodeURIComponent(src) to keep it.`\n )\n }\n }\n }\n if (!VALID_LOADING_VALUES.includes(loading)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"loading\" property. Provided \"${loading}\" should be one of ${VALID_LOADING_VALUES.map(\n String\n ).join(',')}.`\n )\n }\n if (priority && loading === 'lazy') {\n throw new Error(\n `Image with src \"${src}\" has both \"priority\" and \"loading='lazy'\" properties. Only one should be used.`\n )\n }\n if (preload && loading === 'lazy') {\n throw new Error(\n `Image with src \"${src}\" has both \"preload\" and \"loading='lazy'\" properties. Only one should be used.`\n )\n }\n if (preload && priority) {\n throw new Error(\n `Image with src \"${src}\" has both \"preload\" and \"priority\" properties. Only \"preload\" should be used.`\n )\n }\n if (\n placeholder !== 'empty' &&\n placeholder !== 'blur' &&\n !placeholder.startsWith('data:image/')\n ) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"placeholder\" property \"${placeholder}\".`\n )\n }\n if (placeholder !== 'empty') {\n if (widthInt && heightInt && widthInt * heightInt < 1600) {\n warnOnce(\n `Image with src \"${src}\" is smaller than 40x40. Consider removing the \"placeholder\" property to improve performance.`\n )\n }\n }\n if (\n qualityInt &&\n config.qualities &&\n !config.qualities.includes(qualityInt)\n ) {\n warnOnce(\n `Image with src \"${src}\" is using quality \"${qualityInt}\" which is not configured in images.qualities [${config.qualities.join(', ')}]. Please update your config to [${[...config.qualities, qualityInt].sort().join(', ')}].` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-qualities`\n )\n }\n if (placeholder === 'blur' && !blurDataURL) {\n const VALID_BLUR_EXT = ['jpeg', 'png', 'webp', 'avif'] // should match next-image-loader\n\n throw new Error(\n `Image with src \"${src}\" has \"placeholder='blur'\" property but is missing the \"blurDataURL\" property.\n Possible solutions:\n - Add a \"blurDataURL\" property, the contents should be a small Data URL to represent the image\n - Change the \"src\" property to a static import with one of the supported file types: ${VALID_BLUR_EXT.join(\n ','\n )} (animated images not supported)\n - Remove the \"placeholder\" property, effectively no blur effect\n Read more: https://nextjs.org/docs/messages/placeholder-blur-data-url`\n )\n }\n if ('ref' in rest) {\n warnOnce(\n `Image with src \"${src}\" is using unsupported \"ref\" property. Consider using the \"onLoad\" property instead.`\n )\n }\n\n if (!unoptimized && !isDefaultLoader) {\n const urlStr = loader({\n config,\n src,\n width: widthInt || 400,\n quality: qualityInt || 75,\n })\n let url: URL | undefined\n try {\n url = new URL(urlStr)\n } catch (err) {}\n if (urlStr === src || (url && url.pathname === src && !url.search)) {\n warnOnce(\n `Image with src \"${src}\" has a \"loader\" property that does not implement width. Please implement it or use the \"unoptimized\" property instead.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader-width`\n )\n }\n }\n\n if (onLoadingComplete) {\n warnOnce(\n `Image with src \"${src}\" is using deprecated \"onLoadingComplete\" property. Please use the \"onLoad\" property instead.`\n )\n }\n\n for (const [legacyKey, legacyValue] of Object.entries({\n layout,\n objectFit,\n objectPosition,\n lazyBoundary,\n lazyRoot,\n })) {\n if (legacyValue) {\n warnOnce(\n `Image with src \"${src}\" has legacy prop \"${legacyKey}\". Did you forget to run the codemod?` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-upgrade-to-13`\n )\n }\n }\n\n if (\n typeof window !== 'undefined' &&\n !perfObserver &&\n window.PerformanceObserver\n ) {\n perfObserver = new PerformanceObserver((entryList) => {\n for (const entry of entryList.getEntries()) {\n // @ts-ignore - missing \"LargestContentfulPaint\" class with \"element\" prop\n const imgSrc = entry?.element?.src || ''\n const lcpImage = allImgs.get(imgSrc)\n if (\n lcpImage &&\n lcpImage.loading === 'lazy' &&\n lcpImage.placeholder === 'empty' &&\n !lcpImage.src.startsWith('data:') &&\n !lcpImage.src.startsWith('blob:')\n ) {\n // https://web.dev/lcp/#measure-lcp-in-javascript\n warnOnce(\n `Image with src \"${lcpImage.src}\" was detected as the Largest Contentful Paint (LCP). Please add the \\`loading=\"eager\"\\` property if this image is above the fold.` +\n `\\nRead more: https://nextjs.org/docs/app/api-reference/components/image#loading`\n )\n }\n }\n })\n try {\n perfObserver.observe({\n type: 'largest-contentful-paint',\n buffered: true,\n })\n } catch (err) {\n // Log error but don't crash the app\n console.error(err)\n }\n }\n }\n const imgStyle = Object.assign(\n fill\n ? {\n position: 'absolute',\n height: '100%',\n width: '100%',\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n objectFit,\n objectPosition,\n }\n : {},\n showAltText ? {} : { color: 'transparent' },\n style\n )\n\n const backgroundImage =\n !blurComplete && placeholder !== 'empty'\n ? placeholder === 'blur'\n ? `url(\"data:image/svg+xml;charset=utf-8,${getImageBlurSvg({\n widthInt,\n heightInt,\n blurWidth,\n blurHeight,\n blurDataURL: blurDataURL || '', // assume not undefined\n objectFit: imgStyle.objectFit,\n })}\")`\n : `url(\"${placeholder}\")` // assume `data:image/`\n : null\n\n const backgroundSize = !INVALID_BACKGROUND_SIZE_VALUES.includes(\n imgStyle.objectFit\n )\n ? imgStyle.objectFit\n : imgStyle.objectFit === 'fill'\n ? '100% 100%' // the background-size equivalent of `fill`\n : 'cover'\n\n let placeholderStyle: PlaceholderStyle = backgroundImage\n ? {\n backgroundSize,\n backgroundPosition: imgStyle.objectPosition || '50% 50%',\n backgroundRepeat: 'no-repeat',\n backgroundImage,\n }\n : {}\n\n if (process.env.NODE_ENV === 'development') {\n if (\n placeholderStyle.backgroundImage &&\n placeholder === 'blur' &&\n blurDataURL?.startsWith('/')\n ) {\n // During `next dev`, we don't want to generate blur placeholders with webpack\n // because it can delay starting the dev server. Instead, `next-image-loader.js`\n // will inline a special url to lazily generate the blur placeholder at request time.\n placeholderStyle.backgroundImage = `url(\"${blurDataURL}\")`\n }\n }\n\n const imgAttributes = generateImgAttrs({\n config,\n src,\n unoptimized,\n width: widthInt,\n quality: qualityInt,\n sizes,\n loader,\n })\n\n const loadingFinal = isLazy ? 'lazy' : loading\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined') {\n let fullUrl: URL\n try {\n fullUrl = new URL(imgAttributes.src)\n } catch (e) {\n fullUrl = new URL(imgAttributes.src, window.location.href)\n }\n allImgs.set(fullUrl.href, { src, loading: loadingFinal, placeholder })\n }\n }\n\n const props: ImgProps = {\n ...rest,\n loading: loadingFinal,\n fetchPriority,\n width: widthInt,\n height: heightInt,\n decoding,\n className,\n style: { ...imgStyle, ...placeholderStyle },\n sizes: imgAttributes.sizes,\n srcSet: imgAttributes.srcSet,\n src: overrideSrc || imgAttributes.src,\n }\n const meta = { unoptimized, preload: preload || priority, placeholder, fill }\n return { props, meta }\n}\n","import type React from 'react'\nimport { Children, useEffect, useLayoutEffect, type JSX } from 'react'\n\ntype State = JSX.Element[] | undefined\n\nexport type SideEffectProps = {\n reduceComponentsToState: (components: Array<React.ReactElement<any>>) => State\n handleStateChange?: (state: State) => void\n headManager: any\n children: React.ReactNode\n}\n\nconst isServer = typeof window === 'undefined'\nconst useClientOnlyLayoutEffect = isServer ? () => {} : useLayoutEffect\nconst useClientOnlyEffect = isServer ? () => {} : useEffect\n\nexport default function SideEffect(props: SideEffectProps) {\n const { headManager, reduceComponentsToState } = props\n\n function emitChange() {\n if (headManager && headManager.mountedInstances) {\n const headElements = Children.toArray(\n Array.from(headManager.mountedInstances as Set<React.ReactNode>).filter(\n Boolean\n )\n ) as React.ReactElement[]\n headManager.updateHead(reduceComponentsToState(headElements))\n }\n }\n\n if (isServer) {\n headManager?.mountedInstances?.add(props.children)\n emitChange()\n }\n\n useClientOnlyLayoutEffect(() => {\n headManager?.mountedInstances?.add(props.children)\n return () => {\n headManager?.mountedInstances?.delete(props.children)\n }\n })\n\n // We need to call `updateHead` method whenever the `SideEffect` is trigger in all\n // life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s\n // being rendered, we only trigger the method from the last one.\n // This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`\n // singleton in the layout effect pass, and actually trigger it in the effect pass.\n useClientOnlyLayoutEffect(() => {\n if (headManager) {\n headManager._pendingUpdate = emitChange\n }\n return () => {\n if (headManager) {\n headManager._pendingUpdate = emitChange\n }\n }\n })\n\n useClientOnlyEffect(() => {\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate()\n headManager._pendingUpdate = null\n }\n return () => {\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate()\n headManager._pendingUpdate = null\n }\n }\n })\n\n return null\n}\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].HeadManagerContext\n","'use client'\n\nimport React, { useContext, type JSX } from 'react'\nimport Effect from './side-effect'\nimport { HeadManagerContext } from './head-manager-context.shared-runtime'\nimport { warnOnce } from './utils/warn-once'\n\nexport function defaultHead(): JSX.Element[] {\n const head = [\n <meta charSet=\"utf-8\" key=\"charset\" />,\n <meta name=\"viewport\" content=\"width=device-width\" key=\"viewport\" />,\n ]\n return head\n}\n\nfunction onlyReactElement(\n list: Array<React.ReactElement<any>>,\n child: React.ReactElement | number | string\n): Array<React.ReactElement<any>> {\n // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n if (typeof child === 'string' || typeof child === 'number') {\n return list\n }\n // Adds support for React.Fragment\n if (child.type === React.Fragment) {\n return list.concat(\n // @ts-expect-error @types/react does not remove fragments but this could also return ReactPortal[]\n React.Children.toArray(child.props.children).reduce(\n // @ts-expect-error @types/react does not remove fragments but this could also return ReactPortal[]\n (\n fragmentList: Array<React.ReactElement<any>>,\n fragmentChild: React.ReactElement | number | string\n ): Array<React.ReactElement<any>> => {\n if (\n typeof fragmentChild === 'string' ||\n typeof fragmentChild === 'number'\n ) {\n return fragmentList\n }\n return fragmentList.concat(fragmentChild)\n },\n []\n )\n )\n }\n return list.concat(child)\n}\n\nconst METATYPES = ['name', 'httpEquiv', 'charSet', 'itemProp']\n\n/*\n returns a function for filtering head child elements\n which shouldn't be duplicated, like <title/>\n Also adds support for deduplicated `key` properties\n*/\nfunction unique() {\n const keys = new Set()\n const tags = new Set()\n const metaTypes = new Set()\n const metaCategories: { [metatype: string]: Set<string> } = {}\n\n return (h: React.ReactElement<any>) => {\n let isUnique = true\n let hasKey = false\n\n if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) {\n hasKey = true\n const key = h.key.slice(h.key.indexOf('$') + 1)\n if (keys.has(key)) {\n isUnique = false\n } else {\n keys.add(key)\n }\n }\n\n // eslint-disable-next-line default-case\n switch (h.type) {\n case 'title':\n case 'base':\n if (tags.has(h.type)) {\n isUnique = false\n } else {\n tags.add(h.type)\n }\n break\n case 'meta':\n for (let i = 0, len = METATYPES.length; i < len; i++) {\n const metatype = METATYPES[i]\n if (!h.props.hasOwnProperty(metatype)) continue\n\n if (metatype === 'charSet') {\n if (metaTypes.has(metatype)) {\n isUnique = false\n } else {\n metaTypes.add(metatype)\n }\n } else {\n const category = h.props[metatype]\n const categories = metaCategories[metatype] || new Set()\n if ((metatype !== 'name' || !hasKey) && categories.has(category)) {\n isUnique = false\n } else {\n categories.add(category)\n metaCategories[metatype] = categories\n }\n }\n }\n break\n }\n\n return isUnique\n }\n}\n\n/**\n *\n * @param headChildrenElements List of children of <Head>\n */\nfunction reduceComponents(\n headChildrenElements: Array<React.ReactElement<any>>\n) {\n return headChildrenElements\n .reduce(onlyReactElement, [])\n .reverse()\n .concat(defaultHead().reverse())\n .filter(unique())\n .reverse()\n .map((c: React.ReactElement<any>, i: number) => {\n const key = c.key || i\n if (process.env.NODE_ENV === 'development') {\n // omit JSON-LD structured data snippets from the warning\n if (c.type === 'script' && c.props['type'] !== 'application/ld+json') {\n const srcMessage = c.props['src']\n ? `<script> tag with src=\"${c.props['src']}\"`\n : `inline <script>`\n warnOnce(\n `Do not add <script> tags using next/head (see ${srcMessage}). Use next/script instead. \\nSee more info here: https://nextjs.org/docs/messages/no-script-tags-in-head-component`\n )\n } else if (c.type === 'link' && c.props['rel'] === 'stylesheet') {\n warnOnce(\n `Do not add stylesheets using next/head (see <link rel=\"stylesheet\"> tag with href=\"${c.props['href']}\"). Use Document instead. \\nSee more info here: https://nextjs.org/docs/messages/no-stylesheets-in-head-component`\n )\n }\n }\n return React.cloneElement(c, { key })\n })\n}\n\n/**\n * This component injects elements to `<head>` of your page.\n * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n */\nfunction Head({ children }: { children: React.ReactNode }) {\n const headManager = useContext(HeadManagerContext)\n return (\n <Effect\n reduceComponentsToState={reduceComponents}\n headManager={headManager}\n >\n {children}\n </Effect>\n )\n}\n\nexport default Head\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].ImageConfigContext\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].RouterContext\n","import type { NextConfig } from '../../server/config-shared'\n\n/**\n * Find the closest matching `quality` in the list of `config.qualities`\n * @param quality the quality prop passed to the image component\n * @param config the \"images\" configuration from next.config.js\n * @returns the closest matching quality value\n */\nexport function findClosestQuality(\n quality: number | undefined,\n config: NextConfig['images'] | undefined\n): number {\n const q = quality || 75\n if (!config?.qualities?.length) {\n return q\n }\n return config.qualities.reduce(\n (prev, cur) => (Math.abs(cur - q) < Math.abs(prev - q) ? cur : prev),\n 0\n )\n}\n","import type { ImageLoaderPropsWithConfig } from './image-config'\nimport { findClosestQuality } from './find-closest-quality'\nimport { getDeploymentId } from './deployment-id'\n\nfunction defaultLoader({\n config,\n src,\n width,\n quality,\n}: ImageLoaderPropsWithConfig): string {\n if (\n src.startsWith('/') &&\n src.includes('?') &&\n config.localPatterns?.length === 1 &&\n config.localPatterns[0].pathname === '**' &&\n config.localPatterns[0].search === ''\n ) {\n throw new Error(\n `Image with src \"${src}\" is using a query string which is not configured in images.localPatterns.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`\n )\n }\n\n if (process.env.NODE_ENV !== 'production') {\n const missingValues = []\n\n // these should always be provided but make sure they are\n if (!src) missingValues.push('src')\n if (!width) missingValues.push('width')\n\n if (missingValues.length > 0) {\n throw new Error(\n `Next Image Optimization requires ${missingValues.join(\n ', '\n )} to be provided. Make sure you pass them as props to the \\`next/image\\` component. Received: ${JSON.stringify(\n { src, width, quality }\n )}`\n )\n }\n\n if (src.startsWith('//')) {\n throw new Error(\n `Failed to parse src \"${src}\" on \\`next/image\\`, protocol-relative URL (//) must be changed to an absolute URL (http:// or https://)`\n )\n }\n\n if (src.startsWith('/') && config.localPatterns) {\n if (\n process.env.NODE_ENV !== 'test' &&\n // micromatch isn't compatible with edge runtime\n process.env.NEXT_RUNTIME !== 'edge'\n ) {\n // We use dynamic require because this should only error in development\n const { hasLocalMatch } =\n require('./match-local-pattern') as typeof import('./match-local-pattern')\n if (!hasLocalMatch(config.localPatterns, src)) {\n throw new Error(\n `Invalid src prop (${src}) on \\`next/image\\` does not match \\`images.localPatterns\\` configured in your \\`next.config.js\\`\\n` +\n `See more info: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`\n )\n }\n }\n }\n\n if (!src.startsWith('/') && (config.domains || config.remotePatterns)) {\n let parsedSrc: URL\n try {\n parsedSrc = new URL(src)\n } catch (err) {\n console.error(err)\n throw new Error(\n `Failed to parse src \"${src}\" on \\`next/image\\`, if using relative image it must start with a leading slash \"/\" or be an absolute URL (http:// or https://)`\n )\n }\n\n if (\n process.env.NODE_ENV !== 'test' &&\n // micromatch isn't compatible with edge runtime\n process.env.NEXT_RUNTIME !== 'edge'\n ) {\n // We use dynamic require because this should only error in development\n const { hasRemoteMatch } =\n require('./match-remote-pattern') as typeof import('./match-remote-pattern')\n if (\n !hasRemoteMatch(config.domains!, config.remotePatterns!, parsedSrc)\n ) {\n throw new Error(\n `Invalid src prop (${src}) on \\`next/image\\`, hostname \"${parsedSrc.hostname}\" is not configured under images in your \\`next.config.js\\`\\n` +\n `See more info: https://nextjs.org/docs/messages/next-image-unconfigured-host`\n )\n }\n }\n }\n }\n\n const q = findClosestQuality(quality, config)\n\n let deploymentId = getDeploymentId()\n return `${config.path}?url=${encodeURIComponent(src)}&w=${width}&q=${q}${\n src.startsWith('/') && deploymentId ? `&dpl=${deploymentId}` : ''\n }`\n}\n\n// We use this to determine if the import is the default loader\n// or a custom loader defined by the user in next.config.js\ndefaultLoader.__next_img_default = true\n\nexport default defaultLoader\n","'use client'\n\nimport React, {\n useRef,\n useEffect,\n useCallback,\n useContext,\n useMemo,\n useState,\n forwardRef,\n use,\n} from 'react'\nimport ReactDOM from 'react-dom'\nimport Head from '../shared/lib/head'\nimport { getImgProps } from '../shared/lib/get-img-props'\nimport type {\n ImageProps,\n ImgProps,\n OnLoad,\n OnLoadingComplete,\n PlaceholderValue,\n} from '../shared/lib/get-img-props'\nimport type {\n ImageConfigComplete,\n ImageLoaderProps,\n} from '../shared/lib/image-config'\nimport { imageConfigDefault } from '../shared/lib/image-config'\nimport { ImageConfigContext } from '../shared/lib/image-config-context.shared-runtime'\nimport { warnOnce } from '../shared/lib/utils/warn-once'\nimport { RouterContext } from '../shared/lib/router-context.shared-runtime'\n\n// This is replaced by webpack alias\nimport defaultLoader from 'next/dist/shared/lib/image-loader'\nimport { useMergedRef } from './use-merged-ref'\n\n// This is replaced by webpack define plugin\nconst configEnv = process.env.__NEXT_IMAGE_OPTS as any as ImageConfigComplete\n\nif (typeof window === 'undefined') {\n ;(globalThis as any).__NEXT_IMAGE_IMPORTED = true\n}\n\nexport type { ImageLoaderProps }\nexport type ImageLoader = (p: ImageLoaderProps) => string\n\ntype ImgElementWithDataProp = HTMLImageElement & {\n 'data-loaded-src': string | undefined\n}\n\ntype ImageElementProps = ImgProps & {\n unoptimized: boolean\n placeholder: PlaceholderValue\n onLoadRef: React.MutableRefObject<OnLoad | undefined>\n onLoadingCompleteRef: React.MutableRefObject<OnLoadingComplete | undefined>\n setBlurComplete: (b: boolean) => void\n setShowAltText: (b: boolean) => void\n sizesInput: string | undefined\n}\n\n// See https://stackoverflow.com/q/39777833/266535 for why we use this ref\n// handler instead of the img's onLoad attribute.\nfunction handleLoading(\n img: ImgElementWithDataProp,\n placeholder: PlaceholderValue,\n onLoadRef: React.MutableRefObject<OnLoad | undefined>,\n onLoadingCompleteRef: React.MutableRefObject<OnLoadingComplete | undefined>,\n setBlurComplete: (b: boolean) => void,\n unoptimized: boolean,\n sizesInput: string | undefined\n) {\n const src = img?.src\n if (!img || img['data-loaded-src'] === src) {\n return\n }\n img['data-loaded-src'] = src\n const p = 'decode' in img ? img.decode() : Promise.resolve()\n p.catch(() => {}).then(() => {\n if (!img.parentElement || !img.isConnected) {\n // Exit early in case of race condition:\n // - onload() is called\n // - decode() is called but incomplete\n // - unmount is called\n // - decode() completes\n return\n }\n if (placeholder !== 'empty') {\n setBlurComplete(true)\n }\n if (onLoadRef?.current) {\n // Since we don't have the SyntheticEvent here,\n // we must create one with the same shape.\n // See https://reactjs.org/docs/events.html\n const event = new Event('load')\n Object.defineProperty(event, 'target', { writable: false, value: img })\n let prevented = false\n let stopped = false\n onLoadRef.current({\n ...event,\n nativeEvent: event,\n currentTarget: img,\n target: img,\n isDefaultPrevented: () => prevented,\n isPropagationStopped: () => stopped,\n persist: () => {},\n preventDefault: () => {\n prevented = true\n event.preventDefault()\n },\n stopPropagation: () => {\n stopped = true\n event.stopPropagation()\n },\n })\n }\n if (onLoadingCompleteRef?.current) {\n onLoadingCompleteRef.current(img)\n }\n if (process.env.NODE_ENV !== 'production') {\n const origSrc = new URL(src, 'http://n').searchParams.get('url') || src\n if (img.getAttribute('data-nimg') === 'fill') {\n if (!unoptimized && (!sizesInput || sizesInput === '100vw')) {\n let widthViewportRatio =\n img.getBoundingClientRect().width / window.innerWidth\n if (widthViewportRatio < 0.6) {\n if (sizesInput === '100vw') {\n warnOnce(\n `Image with src \"${origSrc}\" has \"fill\" prop and \"sizes\" prop of \"100vw\", but image is not rendered at full viewport width. Please adjust \"sizes\" to improve page performance. Read more: https://nextjs.org/docs/api-reference/next/image#sizes`\n )\n } else {\n warnOnce(\n `Image with src \"${origSrc}\" has \"fill\" but is missing \"sizes\" prop. Please add it to improve page performance. Read more: https://nextjs.org/docs/api-reference/next/image#sizes`\n )\n }\n }\n }\n if (img.parentElement) {\n const { position } = window.getComputedStyle(img.parentElement)\n const valid = ['absolute', 'fixed', 'relative']\n if (!valid.includes(position)) {\n warnOnce(\n `Image with src \"${origSrc}\" has \"fill\" and parent element with invalid \"position\". Provided \"${position}\" should be one of ${valid\n .map(String)\n .join(',')}.`\n )\n }\n }\n if (img.height === 0) {\n warnOnce(\n `Image with src \"${origSrc}\" has \"fill\" and a height value of 0. This is likely because the parent element of the image has not been styled to have a set height.`\n )\n }\n }\n\n const heightModified =\n img.height.toString() !== img.getAttribute('height')\n const widthModified = img.width.toString() !== img.getAttribute('width')\n if (\n (heightModified && !widthModified) ||\n (!heightModified && widthModified)\n ) {\n warnOnce(\n `Image with src \"${origSrc}\" has either width or height modified, but not the other. If you use CSS to change the size of your image, also include the styles 'width: \"auto\"' or 'height: \"auto\"' to maintain the aspect ratio.`\n )\n }\n }\n })\n}\n\nfunction getDynamicProps(\n fetchPriority?: string\n): Record<string, string | undefined> {\n if (Boolean(use)) {\n // In React 19.0.0 or newer, we must use camelCase\n // prop to avoid \"Warning: Invalid DOM property\".\n // See https://github.com/facebook/react/pull/25927\n return { fetchPriority }\n }\n // In React 18.2.0 or older, we must use lowercase prop\n // to avoid \"Warning: Invalid DOM property\".\n return { fetchpriority: fetchPriority }\n}\n\nconst ImageElement = forwardRef<HTMLImageElement | null, ImageElementProps>(\n (\n {\n src,\n srcSet,\n sizes,\n height,\n width,\n decoding,\n className,\n style,\n fetchPriority,\n placeholder,\n loading,\n unoptimized,\n fill,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n setShowAltText,\n sizesInput,\n onLoad,\n onError,\n ...rest\n },\n forwardedRef\n ) => {\n const ownRef = useCallback(\n (img: ImgElementWithDataProp | null) => {\n if (!img) {\n return\n }\n if (onError) {\n // If the image has an error before react hydrates, then the error is lost.\n // The workaround is to wait until the image is mounted which is after hydration,\n // then we set the src again to trigger the error handler (if there was an error).\n // eslint-disable-next-line no-self-assign\n img.src = img.src\n }\n if (process.env.NODE_ENV !== 'production') {\n if (!src) {\n console.error(`Image is missing required \"src\" property:`, img)\n }\n if (img.getAttribute('alt') === null) {\n console.error(\n `Image is missing required \"alt\" property. Please add Alternative Text to describe the image for screen readers and search engines.`\n )\n }\n }\n if (img.complete) {\n handleLoading(\n img,\n placeholder,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n unoptimized,\n sizesInput\n )\n }\n },\n [\n src,\n placeholder,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n onError,\n unoptimized,\n sizesInput,\n ]\n )\n\n const ref = useMergedRef(forwardedRef, ownRef)\n\n return (\n <img\n {...rest}\n {...getDynamicProps(fetchPriority)}\n // It's intended to keep `loading` before `src` because React updates\n // props in order which causes Safari/Firefox to not lazy load properly.\n // See https://github.com/facebook/react/issues/25883\n loading={loading}\n width={width}\n height={height}\n decoding={decoding}\n data-nimg={fill ? 'fill' : '1'}\n className={className}\n style={style}\n // It's intended to keep `src` the last attribute because React updates\n // attributes in order. If we keep `src` the first one, Safari will\n // immediately start to fetch `src`, before `sizes` and `srcSet` are even\n // updated by React. That causes multiple unnecessary requests if `srcSet`\n // and `sizes` are defined.\n // This bug cannot be reproduced in Chrome or Firefox.\n sizes={sizes}\n srcSet={srcSet}\n src={src}\n ref={ref}\n onLoad={(event) => {\n const img = event.currentTarget as ImgElementWithDataProp\n handleLoading(\n img,\n placeholder,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n unoptimized,\n sizesInput\n )\n }}\n onError={(event) => {\n // if the real image fails to load, this will ensure \"alt\" is visible\n setShowAltText(true)\n if (placeholder !== 'empty') {\n // If the real image fails to load, this will still remove the placeholder.\n setBlurComplete(true)\n }\n if (onError) {\n onError(event)\n }\n }}\n />\n )\n }\n)\n\nfunction ImagePreload({\n isAppRouter,\n imgAttributes,\n}: {\n isAppRouter: boolean\n imgAttributes: ImgProps\n}) {\n const opts: ReactDOM.PreloadOptions = {\n as: 'image',\n imageSrcSet: imgAttributes.srcSet,\n imageSizes: imgAttributes.sizes,\n crossOrigin: imgAttributes.crossOrigin,\n referrerPolicy: imgAttributes.referrerPolicy,\n ...getDynamicProps(imgAttributes.fetchPriority),\n }\n\n if (isAppRouter && ReactDOM.preload) {\n ReactDOM.preload(imgAttributes.src, opts)\n return null\n }\n\n return (\n <Head>\n <link\n key={\n '__nimg-' +\n imgAttributes.src +\n imgAttributes.srcSet +\n imgAttributes.sizes\n }\n rel=\"preload\"\n // Note how we omit the `href` attribute, as it would only be relevant\n // for browsers that do not support `imagesrcset`, and in those cases\n // it would cause the incorrect image to be preloaded.\n //\n // https://html.spec.whatwg.org/multipage/semantics.html#attr-link-imagesrcset\n href={imgAttributes.srcSet ? undefined : imgAttributes.src}\n {...opts}\n />\n </Head>\n )\n}\n\n/**\n * The `Image` component is used to optimize images.\n *\n * Read more: [Next.js docs: `Image`](https://nextjs.org/docs/app/api-reference/components/image)\n */\nexport const Image = forwardRef<HTMLImageElement | null, ImageProps>(\n (props, forwardedRef) => {\n const pagesRouter = useContext(RouterContext)\n // We're in the app directory if there is no pages router.\n const isAppRouter = !pagesRouter\n\n const configContext = useContext(ImageConfigContext)\n const config = useMemo(() => {\n const c = configEnv || configContext || imageConfigDefault\n\n const allSizes = [...c.deviceSizes, ...c.imageSizes].sort((a, b) => a - b)\n const deviceSizes = c.deviceSizes.sort((a, b) => a - b)\n const qualities = c.qualities?.sort((a, b) => a - b)\n return {\n ...c,\n allSizes,\n deviceSizes,\n qualities,\n // During the SSR, configEnv (__NEXT_IMAGE_OPTS) does not include\n // security sensitive configs like `localPatterns`, which is needed\n // during the server render to ensure it's validated. Therefore use\n // configContext, which holds the config from the server for validation.\n localPatterns:\n typeof window === 'undefined'\n ? configContext?.localPatterns\n : c.localPatterns,\n }\n }, [configContext])\n\n const { onLoad, onLoadingComplete } = props\n const onLoadRef = useRef(onLoad)\n\n useEffect(() => {\n onLoadRef.current = onLoad\n }, [onLoad])\n\n const onLoadingCompleteRef = useRef(onLoadingComplete)\n\n useEffect(() => {\n onLoadingCompleteRef.current = onLoadingComplete\n }, [onLoadingComplete])\n\n const [blurComplete, setBlurComplete] = useState(false)\n const [showAltText, setShowAltText] = useState(false)\n const { props: imgAttributes, meta: imgMeta } = getImgProps(props, {\n defaultLoader,\n imgConf: config,\n blurComplete,\n showAltText,\n })\n\n return (\n <>\n {\n <ImageElement\n {...imgAttributes}\n unoptimized={imgMeta.unoptimized}\n placeholder={imgMeta.placeholder}\n fill={imgMeta.fill}\n onLoadRef={onLoadRef}\n onLoadingCompleteRef={onLoadingCompleteRef}\n setBlurComplete={setBlurComplete}\n setShowAltText={setShowAltText}\n sizesInput={props.sizes}\n ref={forwardedRef}\n />\n }\n {imgMeta.preload ? (\n <ImagePreload\n isAppRouter={isAppRouter}\n imgAttributes={imgAttributes}\n />\n ) : null}\n </>\n )\n }\n)\n","import type { ImageConfigComplete, ImageLoaderProps } from './image-config'\nimport type { ImageProps, ImageLoader, StaticImageData } from './get-img-props'\n\nimport { getImgProps } from './get-img-props'\nimport { Image } from '../../client/image-component'\n\n// This is replaced by webpack alias\nimport defaultLoader from 'next/dist/shared/lib/image-loader'\n\n/**\n * For more advanced use cases, you can call `getImageProps()`\n * to get the props that would be passed to the underlying `<img>` element,\n * and instead pass to them to another component, style, canvas, etc.\n *\n * Read more: [Next.js docs: `getImageProps`](https://nextjs.org/docs/app/api-reference/components/image#getimageprops)\n */\nexport function getImageProps(imgProps: ImageProps) {\n const { props } = getImgProps(imgProps, {\n defaultLoader,\n // This is replaced by webpack define plugin\n imgConf: process.env.__NEXT_IMAGE_OPTS as any as ImageConfigComplete,\n })\n // Normally we don't care about undefined props because we pass to JSX,\n // but this exported function could be used by the end user for anything\n // so we delete undefined props to clean it up a little.\n for (const [key, value] of Object.entries(props)) {\n if (value === undefined) {\n delete props[key as keyof typeof props]\n }\n }\n return { props }\n}\n\nexport default Image\n\nexport type { ImageProps, ImageLoaderProps, ImageLoader, StaticImageData }\n","module.exports = require('./dist/shared/lib/image-external')\n","\"use client\";\n\nimport Image from \"next/image\";\nimport Link from \"next/link\";\nimport { useMemo, useState } from \"react\";\nimport { useRouter } from \"next/navigation\";\n\nimport type { WorkflowDeliverable } from \"@/app/api/teams/workflow-deliverables/route\";\n\nconst IMAGE_EXTENSIONS = new Set([\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"svg\"]);\n\nfunction isImageFile(fileName: string): boolean {\n const ext = fileName.toLowerCase().split(\".\").pop() ?? \"\";\n return IMAGE_EXTENSIONS.has(ext);\n}\n\nfunction deliverableFileUrl(teamId: string, d: WorkflowDeliverable): string {\n return `/api/teams/workflow-deliverables/file?teamId=${encodeURIComponent(teamId)}&runId=${encodeURIComponent(d.runId)}&path=${encodeURIComponent(d.relativePath)}`;\n}\n\nfunction formatBytes(bytes: number) {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + \" \" + sizes[i];\n}\n\nfunction formatDate(dateString: string) {\n try {\n return new Date(dateString).toLocaleString();\n } catch {\n return dateString;\n }\n}\n\nfunction getFileIcon(fileName: string) {\n const ext = fileName.toLowerCase().split(\".\").pop();\n switch (ext) {\n case \"md\":\n return \"๐\";\n case \"json\":\n return \"๐ง\";\n case \"txt\":\n return \"๐\";\n case \"html\":\n case \"htm\":\n return \"๐\";\n case \"css\":\n return \"๐จ\";\n case \"js\":\n case \"ts\":\n case \"tsx\":\n case \"jsx\":\n return \"โ๏ธ\";\n case \"png\":\n case \"jpg\":\n case \"jpeg\":\n case \"gif\":\n case \"webp\":\n return \"๐ผ๏ธ\";\n case \"pdf\":\n return \"๐\";\n case \"zip\":\n case \"tar\":\n case \"gz\":\n return \"๐ฆ\";\n default:\n return \"๐\";\n }\n}\n\nexport default function DeliverablesClient({\n teamId,\n deliverables,\n workflows,\n}: {\n teamId: string;\n deliverables: WorkflowDeliverable[];\n workflows: Record<string, { id: string; name?: string }>;\n}) {\n const router = useRouter();\n const [workflowFilter, setWorkflowFilter] = useState<string>(\"\");\n const [runFilter, setRunFilter] = useState<string>(\"\");\n const [searchQuery, setSearchQuery] = useState<string>(\"\");\n const [selectedDeliverable, setSelectedDeliverable] = useState<WorkflowDeliverable | null>(null);\n\n const filteredDeliverables = useMemo(() => {\n const needle = searchQuery.trim().toLowerCase();\n return deliverables.filter((d) => {\n if (workflowFilter && d.workflowId !== workflowFilter) return false;\n if (runFilter && d.runId !== runFilter) return false;\n if (!needle) return true;\n \n const wfName = workflows[d.workflowId]?.name ?? \"\";\n return (\n d.fileName.toLowerCase().includes(needle) ||\n d.workflowId.toLowerCase().includes(needle) ||\n d.runId.toLowerCase().includes(needle) ||\n wfName.toLowerCase().includes(needle) ||\n (d.contentPreview && d.contentPreview.toLowerCase().includes(needle))\n );\n });\n }, [deliverables, searchQuery, workflowFilter, runFilter, workflows]);\n\n const workflowOptions = useMemo(() => {\n const ids = Array.from(new Set(deliverables.map((d) => d.workflowId).filter(Boolean))).sort();\n return ids;\n }, [deliverables]);\n\n const runOptions = useMemo(() => {\n const filtered = workflowFilter \n ? deliverables.filter(d => d.workflowId === workflowFilter)\n : deliverables;\n const ids = Array.from(new Set(filtered.map((d) => d.runId).filter(Boolean))).sort();\n return ids;\n }, [deliverables, workflowFilter]);\n\n const downloadDeliverable = async (deliverable: WorkflowDeliverable) => {\n try {\n if (deliverable.isText && deliverable.contentPreview) {\n await navigator.clipboard.writeText(deliverable.contentPreview);\n alert(\"Content copied to clipboard!\");\n } else {\n // Download binary files via the file API\n const url = deliverableFileUrl(teamId, deliverable);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = deliverable.fileName;\n document.body.appendChild(a);\n a.click();\n a.remove();\n }\n } catch {\n alert(\"Failed to download file\");\n }\n };\n\n return (\n <div className=\"flex flex-col gap-4\">\n <div className=\"rounded-[var(--ck-radius-lg)] border border-white/10 bg-black/10 p-4\">\n <div className=\"flex flex-wrap items-end justify-between gap-3\">\n <div className=\"flex flex-wrap items-end gap-3\">\n <label className=\"block\">\n <div className=\"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]\">workflow</div>\n <select\n value={workflowFilter}\n onChange={(e) => {\n setWorkflowFilter(e.target.value || \"\");\n setRunFilter(\"\"); // Reset run filter when workflow changes\n }}\n className=\"mt-1 w-64 max-w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n >\n <option value=\"\">All workflows</option>\n {workflowOptions.map((id) => (\n <option key={id} value={id}>\n {workflows[id]?.name ? `${workflows[id]?.name} (${id})` : id}\n </option>\n ))}\n </select>\n </label>\n\n <label className=\"block\">\n <div className=\"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]\">run</div>\n <select\n value={runFilter}\n onChange={(e) => setRunFilter(e.target.value || \"\")}\n className=\"mt-1 w-56 max-w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n >\n <option value=\"\">All runs</option>\n {runOptions.map((id) => (\n <option key={id} value={id}>\n {id}\n </option>\n ))}\n </select>\n </label>\n\n <label className=\"block\">\n <div className=\"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]\">search</div>\n <input\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder=\"filename / content\"\n className=\"mt-1 w-72 max-w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n />\n </label>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => router.refresh()}\n className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10\"\n >\n Refresh\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-3\">\n {/* Deliverables List */}\n <div className=\"lg:col-span-2 rounded-[var(--ck-radius-lg)] border border-white/10 bg-black/10 p-4\">\n <h2 className=\"text-lg font-semibold text-[color:var(--ck-text-primary)] mb-4\">\n Workflow Deliverables\n </h2>\n\n {filteredDeliverables.length > 0 ? (\n <div className=\"space-y-2\">\n {filteredDeliverables.map((deliverable, idx) => {\n const isSelected = selectedDeliverable?.absolutePath === deliverable.absolutePath;\n const wfName = workflows[deliverable.workflowId]?.name || deliverable.workflowId;\n \n return (\n <div\n key={`${deliverable.runId}-${deliverable.relativePath}`}\n className={`cursor-pointer rounded-[var(--ck-radius-sm)] border p-3 transition-colors ${\n isSelected\n ? \"border-white/20 bg-white/10\"\n : \"border-white/5 bg-black/5 hover:bg-white/5\"\n }`}\n onClick={() => setSelectedDeliverable(deliverable)}\n >\n <div className=\"flex items-start justify-between gap-3\">\n {isImageFile(deliverable.fileName) && (\n <div className=\"flex-shrink-0 w-12 h-12 rounded overflow-hidden bg-black/20 border border-white/10\">\n <Image\n src={deliverableFileUrl(teamId, deliverable)}\n alt={deliverable.fileName}\n width={48}\n height={48}\n className=\"w-full h-full object-cover\"\n unoptimized\n />\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-lg\">{getFileIcon(deliverable.fileName)}</span>\n <span className=\"font-medium text-[color:var(--ck-text-primary)] truncate\">\n {deliverable.fileName}\n </span>\n {deliverable.isText && (\n <span className=\"text-xs bg-green-500/20 text-green-400 px-1.5 py-0.5 rounded\">\n TEXT\n </span>\n )}\n </div>\n \n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n <span className=\"font-mono\">{wfName}</span>\n {\" ยท \"}\n <span className=\"font-mono\">{deliverable.runId}</span>\n </div>\n \n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n {deliverable.relativePath !== deliverable.fileName && (\n <span>{deliverable.relativePath} ยท </span>\n )}\n {formatBytes(deliverable.size)} ยท {formatDate(deliverable.mtime)}\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <button\n onClick={(e) => {\n e.stopPropagation();\n downloadDeliverable(deliverable);\n }}\n className=\"text-xs px-2 py-1 border border-white/10 rounded hover:bg-white/5 text-[color:var(--ck-text-secondary)]\"\n >\n {deliverable.isText ? \"Copy\" : \"Download\"}\n </button>\n <Link\n href={`/teams/${teamId}/runs/${deliverable.workflowId}/${deliverable.runId}`}\n onClick={(e) => e.stopPropagation()}\n className=\"text-xs px-2 py-1 border border-white/10 rounded hover:bg-white/5 text-[color:var(--ck-text-secondary)]\"\n >\n View Run โ\n </Link>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"text-center py-8 text-[color:var(--ck-text-secondary)]\">\n <div className=\"text-4xl mb-2\">๐</div>\n <div className=\"text-lg mb-1\">No deliverables found</div>\n <div className=\"text-sm\">\n Workflow runs will create deliverables that appear here when they complete.\n </div>\n </div>\n )}\n\n {filteredDeliverables.length > 0 && (\n <div className=\"mt-4 text-xs text-[color:var(--ck-text-tertiary)]\">\n Showing {filteredDeliverables.length} of {deliverables.length} deliverables.\n </div>\n )}\n </div>\n\n {/* Preview Panel */}\n <div className=\"lg:col-span-1 rounded-[var(--ck-radius-lg)] border border-white/10 bg-black/10 p-4\">\n <h3 className=\"text-sm font-semibold text-[color:var(--ck-text-primary)] mb-3\">\n Preview\n </h3>\n\n {selectedDeliverable ? (\n <div>\n <div className=\"mb-3 pb-3 border-b border-white/10\">\n <div className=\"flex items-center gap-2 mb-2\">\n <span className=\"text-lg\">{getFileIcon(selectedDeliverable.fileName)}</span>\n <span className=\"font-medium text-[color:var(--ck-text-primary)] text-sm break-all\">\n {selectedDeliverable.fileName}\n </span>\n </div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)] space-y-1\">\n <div>Size: {formatBytes(selectedDeliverable.size)}</div>\n <div>Modified: {formatDate(selectedDeliverable.mtime)}</div>\n <div>Path: {selectedDeliverable.relativePath}</div>\n </div>\n </div>\n\n {isImageFile(selectedDeliverable.fileName) ? (\n <div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)] mb-2\">Image Preview:</div>\n <div className=\"bg-black/20 border border-white/10 rounded-[var(--ck-radius-sm)] p-2 overflow-hidden\">\n <Image\n src={deliverableFileUrl(teamId, selectedDeliverable)}\n alt={selectedDeliverable.fileName}\n width={800}\n height={600}\n className=\"w-full h-auto rounded-[var(--ck-radius-sm)] object-contain max-h-[500px]\"\n unoptimized\n />\n </div>\n <div className=\"mt-2 flex gap-2\">\n <a\n href={deliverableFileUrl(teamId, selectedDeliverable)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-xs px-2 py-1 border border-white/10 rounded hover:bg-white/5 text-[color:var(--ck-text-secondary)]\"\n >\n Open full size โ\n </a>\n <button\n onClick={() => downloadDeliverable(selectedDeliverable)}\n className=\"text-xs px-2 py-1 border border-white/10 rounded hover:bg-white/5 text-[color:var(--ck-text-secondary)]\"\n >\n Download\n </button>\n </div>\n </div>\n ) : selectedDeliverable.isText && selectedDeliverable.contentPreview ? (\n <div>\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)] mb-2\">Content Preview:</div>\n <div className=\"bg-black/20 border border-white/10 rounded-[var(--ck-radius-sm)] p-3 max-h-[400px] overflow-auto\">\n <pre className=\"text-xs text-[color:var(--ck-text-primary)] whitespace-pre-wrap break-words\">\n {selectedDeliverable.contentPreview}\n </pre>\n </div>\n </div>\n ) : (\n <div className=\"text-center py-6\">\n <div className=\"text-3xl mb-2\">{getFileIcon(selectedDeliverable.fileName)}</div>\n <div className=\"text-xs text-[color:var(--ck-text-secondary)] mb-2\">\n {formatBytes(selectedDeliverable.size)} ยท {selectedDeliverable.fileName.split(\".\").pop()?.toUpperCase()} file\n </div>\n <button\n onClick={() => downloadDeliverable(selectedDeliverable)}\n className=\"text-xs px-3 py-1.5 border border-white/10 rounded hover:bg-white/5 text-[color:var(--ck-text-secondary)]\"\n >\n Download file\n </button>\n </div>\n )}\n </div>\n ) : (\n <div className=\"text-sm text-[color:var(--ck-text-secondary)] italic\">\n Select a deliverable to preview\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}"],"names":["getImageBlurSvg","widthInt","heightInt","blurWidth","blurHeight","blurDataURL","objectFit","std","svgWidth","svgHeight","viewBox","preserveAspectRatio","VALID_LOADERS","imageConfigDefault","deviceSizes","imageSizes","path","loader","loaderFile","domains","disableStaticImages","minimumCacheTTL","formats","maximumRedirects","maximumResponseBody","dangerouslyAllowLocalIP","dangerouslyAllowSVG","contentSecurityPolicy","contentDispositionType","localPatterns","undefined","remotePatterns","qualities","unoptimized","getImgProps","VALID_LOADING_VALUES","INVALID_BACKGROUND_SIZE_VALUES","isStaticRequire","src","default","isStaticImageData","isStaticImport","allImgs","Map","perfObserver","getInt","x","Number","isFinite","NaN","test","parseInt","getWidths","allSizes","width","sizes","viewportWidthRe","percentSizes","match","exec","push","length","smallestRatio","Math","min","widths","filter","s","kind","Set","map","w","find","p","generateImgAttrs","config","quality","deploymentId","getDeploymentId","startsWith","sep","includes","srcSet","last","i","join","priority","preload","loading","className","height","fill","style","overrideSrc","onLoad","onLoadingComplete","placeholder","fetchPriority","decoding","layout","objectPosition","lazyBoundary","lazyRoot","rest","_state","imgConf","showAltText","blurComplete","defaultLoader","c","sort","a","b","Error","isDefaultLoader","customImageLoader","obj","_","opts","layoutToStyle","intrinsic","maxWidth","responsive","layoutToSizes","layoutStyle","layoutSizes","staticSrc","staticImageData","JSON","stringify","ratio","round","isLazy","split","endsWith","qualityInt","process","env","NODE_ENV","output","position","isNaN","String","warnOnce","VALID_BLUR_EXT","urlStr","url","URL","err","pathname","search","legacyKey","legacyValue","Object","entries","window","PerformanceObserver","entryList","entry","getEntries","imgSrc","element","lcpImage","get","observe","type","buffered","console","error","imgStyle","assign","left","top","right","bottom","color","backgroundImage","backgroundSize","placeholderStyle","backgroundPosition","backgroundRepeat","imgAttributes","loadingFinal","fullUrl","e","location","href","set","props","meta","SideEffect","isServer","useClientOnlyLayoutEffect","useLayoutEffect","useClientOnlyEffect","useEffect","headManager","reduceComponentsToState","emitChange","mountedInstances","headElements","Children","toArray","Array","from","Boolean","updateHead","add","children","delete","_pendingUpdate","module","exports","require","vendored","HeadManagerContext","defaultHead","head","charSet","name","content","onlyReactElement","list","child","React","Fragment","concat","reduce","fragmentList","fragmentChild","METATYPES","unique","keys","tags","metaTypes","metaCategories","h","isUnique","hasKey","key","indexOf","slice","has","len","metatype","hasOwnProperty","category","categories","reduceComponents","headChildrenElements","reverse","srcMessage","cloneElement","Head","useContext","Effect","ImageConfigContext","RouterContext","findClosestQuality","q","prev","cur","abs","missingValues","NEXT_RUNTIME","hasLocalMatch","parsedSrc","hasRemoteMatch","hostname","encodeURIComponent","__next_img_default","Image","configEnv","__NEXT_IMAGE_OPTS","globalThis","__NEXT_IMAGE_IMPORTED","handleLoading","img","onLoadRef","onLoadingCompleteRef","setBlurComplete","sizesInput","decode","Promise","resolve","catch","then","parentElement","isConnected","current","event","Event","defineProperty","writable","value","prevented","stopped","nativeEvent","currentTarget","target","isDefaultPrevented","isPropagationStopped","persist","preventDefault","stopPropagation","origSrc","searchParams","getAttribute","widthViewportRatio","getBoundingClientRect","innerWidth","getComputedStyle","valid","heightModified","toString","widthModified","getDynamicProps","use","fetchpriority","ImageElement","forwardRef","setShowAltText","onError","forwardedRef","ownRef","useCallback","complete","ref","useMergedRef","data-nimg","ImagePreload","isAppRouter","as","imageSrcSet","crossOrigin","referrerPolicy","ReactDOM","link","rel","pagesRouter","configContext","useMemo","useRef","useState","imgMeta","getImageProps","imgProps"],"mappings":"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","ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13]}
|