@activecollab/components 2.0.407 → 2.0.409

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.
Files changed (89) hide show
  1. package/dist/cjs/components/Icons/collection/Project.js +98 -0
  2. package/dist/cjs/components/Icons/collection/Project.js.map +1 -0
  3. package/dist/cjs/components/Icons/collection/Task.js +61 -0
  4. package/dist/cjs/components/Icons/collection/Task.js.map +1 -0
  5. package/dist/cjs/components/Icons/collection/index.js +14 -0
  6. package/dist/cjs/components/Icons/collection/index.js.map +1 -1
  7. package/dist/cjs/presentation/shared/WebhookLogsDialog.js +170 -46
  8. package/dist/cjs/presentation/shared/WebhookLogsDialog.js.map +1 -1
  9. package/dist/cjs/presentation/stackedCard/content/NoteCard.js +7 -3
  10. package/dist/cjs/presentation/stackedCard/content/NoteCard.js.map +1 -1
  11. package/dist/cjs/presentation/stackedCard/content/ProjectCard.js +136 -0
  12. package/dist/cjs/presentation/stackedCard/content/ProjectCard.js.map +1 -0
  13. package/dist/cjs/presentation/stackedCard/content/TaskCard.js +183 -56
  14. package/dist/cjs/presentation/stackedCard/content/TaskCard.js.map +1 -1
  15. package/dist/cjs/presentation/stackedCard/content/index.js +11 -0
  16. package/dist/cjs/presentation/stackedCard/content/index.js.map +1 -1
  17. package/dist/cjs/presentation/stackedCard/content/shared.js +66 -19
  18. package/dist/cjs/presentation/stackedCard/content/shared.js.map +1 -1
  19. package/dist/cjs/presentation/whiteboard/bottomDock.js +95 -32
  20. package/dist/cjs/presentation/whiteboard/bottomDock.js.map +1 -1
  21. package/dist/cjs/presentation/whiteboard/canvasElements.js +196 -8
  22. package/dist/cjs/presentation/whiteboard/canvasElements.js.map +1 -1
  23. package/dist/cjs/presentation/whiteboard/inspector.js +149 -47
  24. package/dist/cjs/presentation/whiteboard/inspector.js.map +1 -1
  25. package/dist/cjs/presentation/whiteboard/outline.js +91 -18
  26. package/dist/cjs/presentation/whiteboard/outline.js.map +1 -1
  27. package/dist/cjs/presentation/whiteboard/projectElements.js +883 -0
  28. package/dist/cjs/presentation/whiteboard/projectElements.js.map +1 -0
  29. package/dist/esm/components/Icons/collection/Project.d.ts +36 -0
  30. package/dist/esm/components/Icons/collection/Project.d.ts.map +1 -0
  31. package/dist/esm/components/Icons/collection/Project.js +91 -0
  32. package/dist/esm/components/Icons/collection/Project.js.map +1 -0
  33. package/dist/esm/components/Icons/collection/Task.d.ts +32 -0
  34. package/dist/esm/components/Icons/collection/Task.d.ts.map +1 -0
  35. package/dist/esm/components/Icons/collection/Task.js +54 -0
  36. package/dist/esm/components/Icons/collection/Task.js.map +1 -0
  37. package/dist/esm/components/Icons/collection/index.d.ts +2 -0
  38. package/dist/esm/components/Icons/collection/index.d.ts.map +1 -1
  39. package/dist/esm/components/Icons/collection/index.js +2 -0
  40. package/dist/esm/components/Icons/collection/index.js.map +1 -1
  41. package/dist/esm/presentation/shared/WebhookLogsDialog.d.ts +1 -3
  42. package/dist/esm/presentation/shared/WebhookLogsDialog.d.ts.map +1 -1
  43. package/dist/esm/presentation/shared/WebhookLogsDialog.js +164 -46
  44. package/dist/esm/presentation/shared/WebhookLogsDialog.js.map +1 -1
  45. package/dist/esm/presentation/stackedCard/content/NoteCard.d.ts +8 -1
  46. package/dist/esm/presentation/stackedCard/content/NoteCard.d.ts.map +1 -1
  47. package/dist/esm/presentation/stackedCard/content/NoteCard.js +8 -4
  48. package/dist/esm/presentation/stackedCard/content/NoteCard.js.map +1 -1
  49. package/dist/esm/presentation/stackedCard/content/ProjectCard.d.ts +64 -0
  50. package/dist/esm/presentation/stackedCard/content/ProjectCard.d.ts.map +1 -0
  51. package/dist/esm/presentation/stackedCard/content/ProjectCard.js +128 -0
  52. package/dist/esm/presentation/stackedCard/content/ProjectCard.js.map +1 -0
  53. package/dist/esm/presentation/stackedCard/content/TaskCard.d.ts +64 -2
  54. package/dist/esm/presentation/stackedCard/content/TaskCard.d.ts.map +1 -1
  55. package/dist/esm/presentation/stackedCard/content/TaskCard.js +181 -58
  56. package/dist/esm/presentation/stackedCard/content/TaskCard.js.map +1 -1
  57. package/dist/esm/presentation/stackedCard/content/index.d.ts +1 -0
  58. package/dist/esm/presentation/stackedCard/content/index.d.ts.map +1 -1
  59. package/dist/esm/presentation/stackedCard/content/index.js +1 -0
  60. package/dist/esm/presentation/stackedCard/content/index.js.map +1 -1
  61. package/dist/esm/presentation/stackedCard/content/shared.d.ts +30 -0
  62. package/dist/esm/presentation/stackedCard/content/shared.d.ts.map +1 -1
  63. package/dist/esm/presentation/stackedCard/content/shared.js +66 -19
  64. package/dist/esm/presentation/stackedCard/content/shared.js.map +1 -1
  65. package/dist/esm/presentation/whiteboard/bottomDock.d.ts +30 -7
  66. package/dist/esm/presentation/whiteboard/bottomDock.d.ts.map +1 -1
  67. package/dist/esm/presentation/whiteboard/bottomDock.js +79 -32
  68. package/dist/esm/presentation/whiteboard/bottomDock.js.map +1 -1
  69. package/dist/esm/presentation/whiteboard/canvasElements.d.ts +4 -1
  70. package/dist/esm/presentation/whiteboard/canvasElements.d.ts.map +1 -1
  71. package/dist/esm/presentation/whiteboard/canvasElements.js +158 -7
  72. package/dist/esm/presentation/whiteboard/canvasElements.js.map +1 -1
  73. package/dist/esm/presentation/whiteboard/inspector.d.ts +35 -1
  74. package/dist/esm/presentation/whiteboard/inspector.d.ts.map +1 -1
  75. package/dist/esm/presentation/whiteboard/inspector.js +170 -68
  76. package/dist/esm/presentation/whiteboard/inspector.js.map +1 -1
  77. package/dist/esm/presentation/whiteboard/outline.d.ts +23 -3
  78. package/dist/esm/presentation/whiteboard/outline.d.ts.map +1 -1
  79. package/dist/esm/presentation/whiteboard/outline.js +89 -18
  80. package/dist/esm/presentation/whiteboard/outline.js.map +1 -1
  81. package/dist/esm/presentation/whiteboard/projectElements.d.ts +267 -0
  82. package/dist/esm/presentation/whiteboard/projectElements.d.ts.map +1 -0
  83. package/dist/esm/presentation/whiteboard/projectElements.js +824 -0
  84. package/dist/esm/presentation/whiteboard/projectElements.js.map +1 -0
  85. package/dist/index.js +629 -490
  86. package/dist/index.js.map +1 -1
  87. package/dist/index.min.js +1 -1
  88. package/dist/index.min.js.map +1 -1
  89. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookLogsDialog.js","names":["React","useCallback","useMemo","useRef","useState","styled","RoundAvatar","AVATAR_COLORS","LG","Button","Chip","CompleteCheckbox","Dialog","Filter","IconButton","AccessLogIcon","CancelCrossIcon","CollapseExpandSingleIcon","GitHubIcon","GitIcon","GitLabIcon","Label","SelectTrigger","Sheet","Tooltip","Body2","Caption1","Caption2","Header2","Header3","WEBHOOK_CONNECTIONS","id","name","service","WEBHOOK_REPOSITORIES","path","connectionId","EVENT_KIND_LABELS","push","issue","pull_request","pull_request_review","repository","other","EVENT_TYPE_OPTIONS","label","STATUS_LABELS","received","unhandled","skipped","processed","failed","duplicate","STATUS_COLORS","bg","fg","connectionIcon","StatusChip","_ref","status","_STATUS_COLORS$status","createElement","backgroundColor","color","typographyProps","variant","weight","PAYLOAD_ISSUE_OPENED","JSON","stringify","action","number","title","state","html_url","labels","user","login","full_name","private","sender","PAYLOAD_MERGE_REQUEST","object_kind","event_type","username","project","path_with_namespace","object_attributes","iid","source_branch","target_branch","PAYLOAD_PUSH","ref","before","after","commits","message","author","email","WEBHOOK_LOGS","repositoryId","eventKind","deliveryIdentifier","outcomes","summary","task","projectName","description","payload","receivedOn","receivedAt","zen","hook_id","escapeHtml","value","replace","highlightJson","json","match","cls","test","PAYLOAD_COLLAPSED_LINES","PayloadPre","pre","withConfig","displayName","componentId","_ref2","$collapsed","PayloadWrap","div","PayloadBlock","_ref3","_useState","collapsed","setCollapsed","lineCount","split","length","html","canToggle","className","size","onClick","dangerouslySetInnerHTML","__html","LogRowWrap","LogRow","_ref4","_connection$name","log","connection","onOpenTask","_useState2","open","setOpen","ConnIcon","type","map","outcome","index","key","StyledTaskSheet","StyledTaskMain","StyledTaskProperties","SheetField","_ref5","children","TaskPreviewSheet","_ref6","onClose","controls","tooltip","disabled","icon","position","animation","mode","$bg","purple","$size","$bordered","WebhookLogsDialogStyled","DialogTitleBar","LogListHeader","EmptyLogs","WebhookLogsDialog","_ref7","initialConnectionId","connectionIds","repositoryIds","_useState3","initial","filters","setFilters","_useState4","activeTask","setActiveTask","lastTaskRef","current","connectionsById","forEach","filterData","_filters$connection","selectedConnections","repositorySubmenu","filter","includes","slice","sort","a","b","localeCompare","_connectionsById$repo","_connectionsById$repo2","submenu","searchPlaceholder","disableInternalSort","_ref8","Object","keys","visibleLogs","_filters$connection2","_filters$repository","_filters$event_type","_filters$status","byConnection","byRepository","byEvent","byStatus","handleFiltersChange","next","_next$connection","_next$repository","selectedRepositories","allowedRepositoryIds","Set","prunedRepositories","has","updated","_extends","Fragment","enableBackgroundClick","Title","disableDefaultHeading","data","selected","clearAllText","noResultText","emptyFilterText","onChange","ContentDivider","Content","Boolean"],"sources":["../../../../src/presentation/shared/WebhookLogsDialog.tsx"],"sourcesContent":["import React, {\n ElementType,\n ReactElement,\n ReactNode,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { RoundAvatar } from \"./RoundAvatar\";\nimport { AVATAR_COLORS, LG } from \"./tokens\";\nimport { Button } from \"../../components/Button\";\nimport { Chip } from \"../../components/Chip\";\nimport { CompleteCheckbox } from \"../../components/CompleteCheckbox\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { Filter, SelectedType } from \"../../components/Filter\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n AccessLogIcon,\n CancelCrossIcon,\n CollapseExpandSingleIcon,\n GitHubIcon,\n GitIcon,\n GitLabIcon,\n} from \"../../components/Icons\";\nimport { Label } from \"../../components/Label\";\nimport { SelectTrigger } from \"../../components/SelectTrigger\";\nimport { Sheet } from \"../../components/Sheet\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport {\n Body2,\n Caption1,\n Caption2,\n Header2,\n Header3,\n} from \"../../components/Typography\";\n\n/**\n * \"Webhook Logs\" — the VCS webhook delivery log, shown as a wide dialog with a\n * filterable, expandable list. Extracted into `shared/` so it can be opened\n * from more than one surface (the Apps & Integrations Repositories page and the\n * project \"...\" menu on the Project Repos story).\n *\n * Mirrors the app's webhook log model:\n * `vcs_webhook_logs` → connection_id, event_type, processing_status\n * (received / unhandled / skipped / processed /\n * failed / duplicate), delivery_identifier, payload,\n * created_on\n * `vcs_webhook_outcomes` → one row per outcome, each with a localized summary\n *\n * The status is derived from the outcomes server-side; here we render the\n * stored value and map it to a palette colour. The connection glyph is the\n * provider icon (GitHub / GitLab, Git for anything else).\n */\n\ntype WebhookStatus =\n | \"received\"\n | \"unhandled\"\n | \"skipped\"\n | \"processed\"\n | \"failed\"\n | \"duplicate\";\n\nexport interface WebhookConnection {\n id: string;\n name: string;\n service: \"github\" | \"gitlab\";\n}\n\nexport interface WebhookRepository {\n id: string;\n /** Full repository path, e.g. activecollab/feather. */\n path: string;\n connectionId: string;\n}\n\n/**\n * Normalized event kind. The processor layer maps each provider's raw event\n * header (GitHub `issues` / GitLab `Issue Hook`, GitHub `pull_request` / GitLab\n * `Merge Request Hook`, …) onto one provider-agnostic kind, so the same logical\n * event reads — and filters — identically across connections instead of\n * appearing once per provider. The set below mirrors the app's\n * `EVENT_TYPE_OPTIONS` constant.\n */\ntype WebhookEventKind =\n | \"push\"\n | \"issue\"\n | \"pull_request\"\n | \"pull_request_review\"\n | \"repository\"\n | \"other\";\n\n/**\n * The task an outcome created or referenced. In the app each\n * `vcs_webhook_outcomes` row carries a nullable `task_id`; when it is set the\n * outcome offers an \"Open Task\" link that opens the task in a sheet on top of\n * the log dialog.\n */\nexport interface WebhookOutcomeTask {\n id: number;\n name: string;\n projectName: string;\n description: string;\n}\n\nexport interface WebhookOutcome {\n /** Localized outcome summary (the app's `getVerboseDescription`). */\n summary: string;\n /** Set when the outcome created or referenced a task. */\n task?: WebhookOutcomeTask;\n}\n\nexport interface WebhookLog {\n id: string;\n connectionId: string;\n /** Repository the delivery belongs to (always within `connectionId`). */\n repositoryId: string;\n eventKind: WebhookEventKind;\n status: WebhookStatus;\n /** X-GitHub-Delivery GUID / X-Gitlab-Event-UUID. */\n deliveryIdentifier: string;\n /** Outcome rows; empty when we never reached that stage. */\n outcomes: WebhookOutcome[];\n /** Pretty-printed JSON payload; absent when no JSON body was logged. */\n payload?: string;\n /** Display timestamp. */\n receivedOn: string;\n /** Sort key — newest logs render at the top. */\n receivedAt: number;\n}\n\nexport const WEBHOOK_CONNECTIONS: WebhookConnection[] = [\n { id: \"gh-activecollab\", name: \"ActiveCollab\", service: \"github\" },\n { id: \"gh-abstergo\", name: \"Abstergo Ltd.\", service: \"github\" },\n { id: \"gh-binford\", name: \"Binford & Co.\", service: \"github\" },\n { id: \"gl-platform\", name: \"Platform\", service: \"gitlab\" },\n { id: \"gl-content\", name: \"Content\", service: \"gitlab\" },\n { id: \"gl-acme-ce\", name: \"Acme Community\", service: \"gitlab\" },\n];\n\n/**\n * Repositories that belong to the connections above. A webhook delivery is\n * always scoped to one repository, and a repository belongs to exactly one\n * connection — so the Repository filter can be narrowed to the connection(s)\n * currently selected in the Connection filter.\n */\nexport const WEBHOOK_REPOSITORIES: WebhookRepository[] = [\n {\n id: \"ac-feather\",\n path: \"activecollab/feather\",\n connectionId: \"gh-activecollab\",\n },\n {\n id: \"ac-backend\",\n path: \"activecollab/backend\",\n connectionId: \"gh-activecollab\",\n },\n { id: \"ab-animus\", path: \"abstergo/animus\", connectionId: \"gh-abstergo\" },\n { id: \"bi-tool-time\", path: \"binford/tool-time\", connectionId: \"gh-binford\" },\n {\n id: \"pl-gateway\",\n path: \"platform/api-gateway\",\n connectionId: \"gl-platform\",\n },\n { id: \"co-handbook\", path: \"content/handbook\", connectionId: \"gl-content\" },\n {\n id: \"co-marketing\",\n path: \"content/marketing-site\",\n connectionId: \"gl-content\",\n },\n { id: \"acme-ce\", path: \"acme/community-edition\", connectionId: \"gl-acme-ce\" },\n];\n\nconst EVENT_KIND_LABELS: Record<WebhookEventKind, string> = {\n push: \"Push\",\n issue: \"Issue\",\n pull_request: \"Pull Request\",\n pull_request_review: \"Pull Request Review\",\n repository: \"Repository\",\n other: \"Other\",\n};\n\n/**\n * Fixed Event Type filter options, mirroring the app's `EVENT_TYPE_OPTIONS`.\n * The app offers the full list regardless of which kinds are present in the\n * current result set, so we do the same instead of deriving it from the logs.\n */\nconst EVENT_TYPE_OPTIONS: { id: WebhookEventKind; label: string }[] = [\n { id: \"push\", label: \"Push\" },\n { id: \"issue\", label: \"Issue\" },\n { id: \"pull_request\", label: \"Pull Request\" },\n { id: \"pull_request_review\", label: \"Pull Request Review\" },\n { id: \"repository\", label: \"Repository\" },\n { id: \"other\", label: \"Other\" },\n];\n\nconst STATUS_LABELS: Record<WebhookStatus, string> = {\n received: \"Received\",\n unhandled: \"Unhandled\",\n skipped: \"Skipped\",\n processed: \"Processed\",\n failed: \"Failed\",\n duplicate: \"Duplicate\",\n};\n\n/**\n * Status → palette colour, chosen so the colour matches the meaning:\n * processed → green (success), failed → coral (error),\n * skipped → orange (warning), received → sky-blue (in progress),\n * unhandled → silver (neutral / no handler matched),\n * duplicate → purple (replayed delivery, dropped before processing).\n */\nconst STATUS_COLORS: Record<WebhookStatus, { bg: string; fg: string }> = {\n processed: {\n bg: \"var(--color-green-pale)\",\n fg: \"var(--color-green-pale-darker)\",\n },\n failed: { bg: \"var(--color-coral)\", fg: \"var(--color-coral-darker)\" },\n skipped: { bg: \"var(--color-orange)\", fg: \"var(--color-orange-darker)\" },\n received: {\n bg: \"var(--color-blue-sky)\",\n fg: \"var(--color-blue-sky-darker)\",\n },\n unhandled: {\n bg: \"var(--color-gray-silver)\",\n fg: \"var(--color-gray-silver-darker)\",\n },\n duplicate: {\n bg: \"var(--color-purple)\",\n fg: \"var(--color-purple-darker)\",\n },\n};\n\n/** Provider glyph for a connection: GitHub / GitLab, Git for anything else. */\nconst connectionIcon = (\n service?: WebhookConnection[\"service\"]\n): ElementType => {\n if (service === \"github\") {\n return GitHubIcon;\n }\n if (service === \"gitlab\") {\n return GitLabIcon;\n }\n return GitIcon;\n};\n\nconst StatusChip = ({ status }: { status: WebhookStatus }): ReactElement => {\n const { bg, fg } = STATUS_COLORS[status];\n\n return (\n <Chip\n label={STATUS_LABELS[status]}\n backgroundColor={bg}\n color={fg}\n typographyProps={{ variant: \"Caption 1\", weight: \"medium\" }}\n />\n );\n};\n\n/* --- Mock log data (newest first is enforced by sorting on receivedAt) --- */\n\nconst PAYLOAD_ISSUE_OPENED = JSON.stringify(\n {\n action: \"opened\",\n issue: {\n id: 2002934201,\n number: 42,\n title: \"Webhook delivery retries are not logged\",\n state: \"open\",\n html_url: \"https://github.com/activecollab/feather/issues/42\",\n labels: [{ name: \"bug\" }, { name: \"vcs\" }],\n user: { login: \"octocat\", id: 583231 },\n },\n repository: {\n id: 776611234,\n full_name: \"activecollab/feather\",\n private: true,\n },\n sender: { login: \"octocat\", id: 583231 },\n },\n null,\n 2\n);\n\nconst PAYLOAD_MERGE_REQUEST = JSON.stringify(\n {\n object_kind: \"merge_request\",\n event_type: \"merge_request\",\n user: { id: 41, name: \"Jane Doe\", username: \"jdoe\" },\n project: { id: 1801, path_with_namespace: \"content/handbook\" },\n object_attributes: {\n iid: 318,\n title: \"Add changelog for 8.2\",\n state: \"merged\",\n action: \"merge\",\n source_branch: \"changelog-8-2\",\n target_branch: \"main\",\n },\n },\n null,\n 2\n);\n\nconst PAYLOAD_PUSH = JSON.stringify(\n {\n ref: \"refs/heads/main\",\n before: \"9b2c1f0e\",\n after: \"f4a7d3c1\",\n commits: [\n {\n id: \"f4a7d3c1\",\n message: \"Fix typo in webhook log repository\",\n author: { name: \"Marko\", email: \"marko@example.com\" },\n },\n ],\n repository: { full_name: \"activecollab/feather\" },\n },\n null,\n 2\n);\n\nconst WEBHOOK_LOGS: WebhookLog[] = [\n {\n id: \"log-7\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"issue\",\n status: \"processed\",\n deliveryIdentifier: \"d3b07384-d9a0-4c9b-8f1e-2a6f1b9c4e21\",\n outcomes: [\n {\n summary: \"Created task #1842 from issue #42\",\n task: {\n id: 1842,\n name: \"Webhook delivery retries are not logged\",\n projectName: \"Feather\",\n description:\n \"Retries are not written to the webhook log, so a delivery that only succeeds on a retry still shows as failed. Log each attempt with its outcome.\",\n },\n },\n ],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 29, 2026 · 14:32\",\n receivedAt: 1751207520,\n },\n {\n id: \"log-6\",\n connectionId: \"gl-content\",\n repositoryId: \"co-handbook\",\n eventKind: \"pull_request\",\n status: \"skipped\",\n deliveryIdentifier: \"b1946ac9-2f3a-4c0d-9b7e-1d2c3e4f5a6b\",\n outcomes: [{ summary: \"Skipped: merge request has no linked issue\" }],\n payload: PAYLOAD_MERGE_REQUEST,\n receivedOn: \"Jun 29, 2026 · 11:08\",\n receivedAt: 1751195280,\n },\n {\n id: \"log-5\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-backend\",\n eventKind: \"issue\",\n status: \"failed\",\n deliveryIdentifier: \"9c1185a5-c5e9-4e3f-8a1b-7d6e5f4c3b2a\",\n outcomes: [{ summary: \"Failed at task creation: project not found\" }],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 28, 2026 · 18:54\",\n receivedAt: 1751136840,\n },\n {\n id: \"log-4\",\n connectionId: \"gl-content\",\n repositoryId: \"co-handbook\",\n eventKind: \"push\",\n status: \"processed\",\n deliveryIdentifier: \"f7c3bc1d-8c5a-4b2e-9f0a-1b2c3d4e5f60\",\n outcomes: [\n {\n summary: \"Created task #1839 from issue #311\",\n task: {\n id: 1839,\n name: \"Refresh the onboarding handbook\",\n projectName: \"Handbook\",\n description:\n \"The onboarding handbook is out of date. Review each section and update the steps that changed in the last release.\",\n },\n },\n {\n summary: \"Created task #1840 from issue #312\",\n task: {\n id: 1840,\n name: \"Document webhook scopes\",\n projectName: \"Handbook\",\n description:\n \"Explain the connection and repository webhook scopes, and when each one applies.\",\n },\n },\n ],\n payload: PAYLOAD_PUSH,\n receivedOn: \"Jun 28, 2026 · 09:21\",\n receivedAt: 1751102460,\n },\n {\n id: \"log-3\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"other\",\n status: \"unhandled\",\n deliveryIdentifier: \"1574bddb-75c3-4b1e-8a9c-0d1e2f3a4b5c\",\n outcomes: [],\n payload: JSON.stringify(\n { zen: \"Keep it logically awesome.\", hook_id: 552012 },\n null,\n 2\n ),\n receivedOn: \"Jun 27, 2026 · 16:05\",\n receivedAt: 1751040300,\n },\n {\n id: \"log-2\",\n connectionId: \"gl-content\",\n repositoryId: \"co-marketing\",\n eventKind: \"issue\",\n status: \"received\",\n deliveryIdentifier: \"0716d970-2b9e-4a1d-9c3f-5e6a7b8c9d01\",\n outcomes: [],\n receivedOn: \"Jun 27, 2026 · 08:47\",\n receivedAt: 1751013420,\n },\n {\n id: \"log-1\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"issue\",\n status: \"processed\",\n deliveryIdentifier: \"fa3ebd6742c360b2d9652b7f78d9bd7d\",\n outcomes: [\n {\n summary: \"Created task #1804 from issue #29\",\n task: {\n id: 1804,\n name: \"Restore missing repository icons\",\n projectName: \"Feather\",\n description:\n \"Provider icons are missing from the repository list. Restore the GitHub and GitLab glyphs.\",\n },\n },\n ],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 26, 2026 · 13:12\",\n receivedAt: 1750943520,\n },\n {\n id: \"log-1-replay\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"issue\",\n status: \"duplicate\",\n deliveryIdentifier: \"fa3ebd6742c360b2d9652b7f78d9bd7d\",\n outcomes: [],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 26, 2026 · 13:18\",\n receivedAt: 1750943880,\n },\n];\n\n/* --- Lightweight, Prism-style JSON syntax highlighter -------------------- */\n/* design-system has no `prismjs` dependency (it's an app dependency), so for */\n/* this throwaway mock we tokenize JSON ourselves and colour the tokens with */\n/* the same token classes Prism uses, styled via PayloadPre below. */\n\nconst escapeHtml = (value: string): string =>\n value.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\nconst highlightJson = (json: string): string =>\n escapeHtml(json).replace(\n /(\"(?:\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(?:true|false)\\b|\\bnull\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/g,\n (match) => {\n let cls = \"tok-number\";\n\n if (/^\"/.test(match)) {\n cls = /:$/.test(match) ? \"tok-key\" : \"tok-string\";\n } else if (/true|false/.test(match)) {\n cls = \"tok-boolean\";\n } else if (/null/.test(match)) {\n cls = \"tok-null\";\n }\n\n return `<span class=\"${cls}\">${match}</span>`;\n }\n );\n\nconst PAYLOAD_COLLAPSED_LINES = 6;\n\nconst PayloadPre = styled.pre<{ $collapsed: boolean }>`\n margin: 0;\n padding: 12px 14px;\n border: 1px solid var(--color-theme-400);\n border-radius: 6px;\n background-color: var(--color-theme-200);\n color: var(--color-theme-800);\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n font-size: 12px;\n line-height: 18px;\n overflow-x: auto;\n white-space: pre;\n position: relative;\n\n ${({ $collapsed }) =>\n $collapsed\n ? `max-height: ${PAYLOAD_COLLAPSED_LINES * 18 + 24}px;\n overflow-y: hidden;`\n : \"\"}\n\n .tok-key {\n color: var(--color-coral-lighter);\n }\n .tok-string {\n color: var(--color-green-pale-lighter);\n }\n .tok-number {\n color: var(--color-orange-lighter);\n }\n .tok-boolean {\n color: var(--color-blue-sky-lighter);\n }\n .tok-null {\n color: var(--color-purple-lighter);\n }\n`;\n\nconst PayloadWrap = styled.div`\n .payload-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 24px;\n margin-bottom: 4px;\n }\n`;\n\nconst PayloadBlock = ({ payload }: { payload: string }): ReactElement => {\n const [collapsed, setCollapsed] = useState(true);\n\n const lineCount = useMemo(() => payload.split(\"\\n\").length, [payload]);\n const html = useMemo(() => highlightJson(payload), [payload]);\n const canToggle = lineCount > PAYLOAD_COLLAPSED_LINES;\n\n return (\n <PayloadWrap>\n <div className=\"payload-header\">\n <Caption1 color=\"secondary\" weight=\"bold\">\n Payload\n </Caption1>\n {canToggle ? (\n <Button\n variant=\"text colored\"\n size=\"small\"\n onClick={() => setCollapsed((value) => !value)}\n >\n {collapsed ? \"Show More\" : \"Show Less\"}\n </Button>\n ) : null}\n </div>\n <PayloadPre\n $collapsed={collapsed && canToggle}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </PayloadWrap>\n );\n};\n\n/* --- A single, expandable log row ---------------------------------------- */\n\nconst LogRowWrap = styled.div`\n border-top: 1px solid var(--color-theme-300);\n\n .lr-summary {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n min-height: 56px;\n padding: 8px 8px 8px 12px;\n background: none;\n border: 0;\n text-align: left;\n cursor: pointer;\n font-family: inherit;\n\n &:hover {\n background-color: var(--color-theme-200);\n }\n }\n\n /* Matches the app's ExpandToggle: the icon points up when expanded and\n rotates 180° (pointing down) when collapsed. */\n .lr-expand {\n flex-shrink: 0;\n fill: var(--color-theme-600);\n color: var(--color-theme-600);\n transform: rotate(180deg);\n transition: transform 200ms ease;\n }\n\n .lr-expand.open {\n transform: rotate(0deg);\n }\n\n .lr-conn {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 180px;\n min-width: 0;\n flex-shrink: 0;\n }\n\n .lr-conn svg {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n }\n\n .lr-conn .lr-conn-name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .lr-event {\n flex: 1 1 0%;\n min-width: 0;\n }\n\n .lr-status {\n flex-shrink: 0;\n }\n\n .lr-outcomes {\n width: 96px;\n flex-shrink: 0;\n text-align: right;\n }\n\n .lr-detail {\n padding: 4px 16px 20px 44px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .lr-field-label {\n display: block;\n margin-bottom: 4px;\n }\n\n .lr-id {\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n word-break: break-all;\n }\n\n .lr-outcome-list {\n margin: 0;\n padding-left: 16px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n /* Summary text and the \"Open Task\" link share one row and wrap together. */\n .lr-outcome {\n display: flex;\n align-items: baseline;\n flex-wrap: wrap;\n gap: 4px 8px;\n }\n\n /* A quiet, underlined text link — same treatment as the \"Show changes\"\n link in the task History of Changes, not a button. */\n .lr-open-task {\n padding: 0;\n border: 0;\n background: none;\n font: inherit;\n font-size: 13px;\n line-height: 18px;\n color: var(--color-theme-600);\n text-decoration: underline;\n cursor: pointer;\n white-space: nowrap;\n }\n\n .lr-open-task:hover {\n color: var(--color-theme-800);\n }\n`;\n\ninterface LogRowProps {\n log: WebhookLog;\n connection?: WebhookConnection;\n onOpenTask: (task: WebhookOutcomeTask) => void;\n}\n\nconst LogRow = ({ log, connection, onOpenTask }: LogRowProps): ReactElement => {\n const [open, setOpen] = useState(false);\n const ConnIcon = connectionIcon(connection?.service);\n\n return (\n <LogRowWrap>\n <button\n type=\"button\"\n className=\"lr-summary\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n >\n <CollapseExpandSingleIcon\n className={open ? \"lr-expand open\" : \"lr-expand\"}\n />\n <span className=\"lr-conn\">\n <ConnIcon />\n <Body2 className=\"lr-conn-name\" weight=\"bold\">\n {connection?.name ?? \"Unknown\"}\n </Body2>\n </span>\n <Body2 className=\"lr-event\" color=\"tertiary\">\n {EVENT_KIND_LABELS[log.eventKind]}\n </Body2>\n <span className=\"lr-status\">\n <StatusChip status={log.status} />\n </span>\n <Caption1 className=\"lr-outcomes\" color=\"tertiary\">\n {log.outcomes.length > 0\n ? `${log.outcomes.length} ${\n log.outcomes.length === 1 ? \"outcome\" : \"outcomes\"\n }`\n : \"\"}\n </Caption1>\n </button>\n\n {open ? (\n <div className=\"lr-detail\">\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Webhook identifier\n </Caption1>\n <Body2 className=\"lr-id\" color=\"tertiary\">\n {log.deliveryIdentifier}\n </Body2>\n </div>\n\n {log.outcomes.length > 0 ? (\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Outcomes\n </Caption1>\n <ul className=\"lr-outcome-list\">\n {log.outcomes.map((outcome, index) => (\n <li key={index} className=\"lr-outcome\">\n <Body2 color=\"tertiary\">{outcome.summary}</Body2>\n {outcome.task ? (\n <Tooltip title=\"See the task without closing the log\">\n <button\n type=\"button\"\n className=\"lr-open-task\"\n onClick={() =>\n onOpenTask(outcome.task as WebhookOutcomeTask)\n }\n >\n Open Task\n </button>\n </Tooltip>\n ) : null}\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n\n {log.payload ? <PayloadBlock payload={log.payload} /> : null}\n </div>\n ) : null}\n </LogRowWrap>\n );\n};\n\n/* --- Task preview sheet --------------------------------------------------- */\n/* Opens the outcome's task in a right-side sheet, on top of the (still open) */\n/* log dialog. Uses the same Sheet setup as the Task sheet stories — position */\n/* \"right\", stretch mode, and a Close control — so it reads as the real task */\n/* sheet. The body is a representative stand-in for the app's full task sheet. */\n\nconst StyledTaskSheet = styled.div`\n display: grid;\n min-height: 100%;\n padding: 8px;\n grid-template-columns: 1fr;\n\n @media (min-width: ${LG}) {\n grid-template-columns: 1fr 328px;\n }\n`;\n\nconst StyledTaskMain = styled.div`\n padding: 24px 24px 0;\n min-width: 0;\n\n @media (min-width: ${LG}) {\n grid-column: 1;\n }\n\n .task-header {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n margin-bottom: 8px;\n }\n\n .task-title {\n min-width: 0;\n }\n\n .metadata {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n margin-bottom: 24px;\n }\n\n .metadata .seg:not(:last-child) {\n padding-right: 12px;\n margin-right: 12px;\n border-right: 1px solid var(--border-primary);\n }\n\n .description {\n padding-bottom: 16px;\n margin-bottom: 16px;\n border-bottom: 1px solid var(--border-primary);\n }\n`;\n\nconst StyledTaskProperties = styled.div`\n padding: 0 24px;\n\n @media (min-width: ${LG}) {\n grid-column: 2;\n padding: 24px;\n background-color: var(--color-theme-200);\n border-radius: 8px;\n }\n\n .field {\n margin-bottom: 24px;\n }\n\n .field:last-child {\n margin-bottom: 0;\n }\n\n .field-label {\n display: flex;\n align-items: center;\n max-width: 280px;\n margin-bottom: 4px;\n }\n\n .field-control {\n width: 100%;\n }\n\n .assignee-row {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n`;\n\ninterface SheetFieldProps {\n label: string;\n children: ReactNode;\n}\n\nconst SheetField = ({ label, children }: SheetFieldProps): ReactElement => (\n <div className=\"field\">\n <div className=\"field-label\">\n <Label size=\"small\">{label}</Label>\n </div>\n {children}\n </div>\n);\n\ninterface TaskPreviewSheetProps {\n task: WebhookOutcomeTask | null;\n open: boolean;\n onClose: () => void;\n}\n\nconst TaskPreviewSheet = ({\n task,\n open,\n onClose,\n}: TaskPreviewSheetProps): ReactElement | null => {\n if (!task) {\n return null;\n }\n\n const controls = [\n {\n tooltip: \"Close\",\n disabled: false,\n onClick: onClose,\n icon: <CancelCrossIcon />,\n className: \"\",\n },\n ];\n\n return (\n <Sheet\n open={open}\n onClose={onClose}\n controls={controls}\n position=\"right\"\n animation=\"right\"\n mode=\"stretch\"\n >\n <StyledTaskSheet>\n <StyledTaskMain>\n <div className=\"task-header\">\n <CompleteCheckbox />\n <Header2 className=\"task-title\">\n #{task.id}: {task.name}\n </Header2>\n </div>\n\n <div className=\"metadata\">\n <Caption1 className=\"seg\" color=\"secondary\">\n {task.projectName}\n </Caption1>\n <Caption1 className=\"seg\" color=\"secondary\">\n Task #{task.id}\n </Caption1>\n <Caption1 className=\"seg\" color=\"secondary\">\n Created from a webhook delivery\n </Caption1>\n </div>\n\n <div className=\"description\">\n <Body2>{task.description}</Body2>\n </div>\n </StyledTaskMain>\n\n <StyledTaskProperties>\n <SheetField label=\"Task List\">\n <SelectTrigger className=\"field-control\">Inbox</SelectTrigger>\n </SheetField>\n\n <SheetField label=\"Assignees\">\n <div className=\"assignee-row\">\n <RoundAvatar\n $bg={AVATAR_COLORS.purple}\n $size={28}\n $bordered={false}\n >\n IS\n </RoundAvatar>\n <Body2>Ilija Studen</Body2>\n </div>\n </SheetField>\n\n <SheetField label=\"Start and Due Date\">\n <SelectTrigger className=\"field-control\">Not set</SelectTrigger>\n </SheetField>\n </StyledTaskProperties>\n </StyledTaskSheet>\n </Sheet>\n );\n};\n\n/* --- The dialog ---------------------------------------------------------- */\n\n/** Wider than the default 540px dialog so the log columns have room. */\nconst WebhookLogsDialogStyled = styled(Dialog)`\n && {\n width: calc(100vw - 64px);\n max-width: 760px;\n }\n`;\n\nconst DialogTitleBar = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n\n .title-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n`;\n\nconst LogListHeader = styled.div`\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 0 8px 8px 44px;\n\n .lh-conn {\n width: 180px;\n flex-shrink: 0;\n }\n .lh-event {\n flex: 1 1 0%;\n min-width: 0;\n }\n .lh-status {\n width: 96px;\n flex-shrink: 0;\n text-align: right;\n }\n .lh-outcomes {\n width: 96px;\n flex-shrink: 0;\n text-align: right;\n }\n`;\n\nconst EmptyLogs = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 40px 0;\n text-align: center;\n\n svg {\n fill: var(--color-theme-500);\n }\n`;\n\nexport interface WebhookLogsDialogProps {\n open: boolean;\n onClose: () => void;\n /** Pre-filter to a single connection (used when opened from its row menu). */\n initialConnectionId?: string;\n /**\n * Pre-filter to a set of connections (e.g. the connections a project's\n * repositories belong to). Takes precedence over `initialConnectionId`.\n */\n connectionIds?: string[];\n /**\n * Pre-filter to a set of repositories (e.g. the repositories connected to a\n * project, when opened from the project \"...\" menu). Seeds the Repository\n * filter; IDs should exist in `WEBHOOK_REPOSITORIES` so their chips render.\n */\n repositoryIds?: string[];\n}\n\nexport const WebhookLogsDialog = ({\n open,\n onClose,\n initialConnectionId,\n connectionIds,\n repositoryIds,\n}: WebhookLogsDialogProps): ReactElement => {\n const [filters, setFilters] = useState<SelectedType>((): SelectedType => {\n const initial: SelectedType = {};\n if (connectionIds && connectionIds.length > 0) {\n initial.connection = connectionIds;\n } else if (initialConnectionId) {\n initial.connection = [initialConnectionId];\n }\n if (repositoryIds && repositoryIds.length > 0) {\n initial.repository = repositoryIds;\n }\n return initial;\n });\n\n // The task opened from an outcome's \"Open Task\" link. The dialog stays open\n // underneath; the sheet layers on top. `lastTask` keeps the content mounted\n // through the sheet's slide-out so it does not blank out mid-animation.\n const [activeTask, setActiveTask] = useState<WebhookOutcomeTask | null>(null);\n const lastTaskRef = useRef<WebhookOutcomeTask | null>(null);\n if (activeTask) {\n lastTaskRef.current = activeTask;\n }\n\n const connectionsById = useMemo(() => {\n const map: Record<string, WebhookConnection> = {};\n WEBHOOK_CONNECTIONS.forEach((connection) => {\n map[connection.id] = connection;\n });\n return map;\n }, []);\n\n const filterData = useMemo(() => {\n // The Repository options narrow to the connection(s) currently selected in\n // the Connection filter; with no connection selected, every repository is\n // offered. Displayed as \"path (connection name)\" (matching the project\n // \"...\" menu Repositories list) and sorted by repository path.\n const selectedConnections = filters.connection ?? [];\n const repositorySubmenu = WEBHOOK_REPOSITORIES.filter(\n (repository) =>\n selectedConnections.length === 0 ||\n selectedConnections.includes(repository.connectionId)\n )\n .slice()\n .sort((a, b) => a.path.localeCompare(b.path))\n .map((repository) => ({\n id: repository.id,\n name: `${repository.path} (${\n connectionsById[repository.connectionId]?.name ?? \"Unknown\"\n })`,\n }));\n\n return [\n {\n id: \"connection\",\n title: \"Connection\",\n submenu: WEBHOOK_CONNECTIONS.map((connection) => ({\n id: connection.id,\n name: connection.name,\n })),\n },\n {\n id: \"repository\",\n title: \"Repository\",\n searchPlaceholder: \"Search repositories\",\n disableInternalSort: true,\n submenu: repositorySubmenu,\n },\n {\n id: \"event_type\",\n title: \"Event Type\",\n submenu: EVENT_TYPE_OPTIONS.map(({ id, label }) => ({\n id,\n name: label,\n })),\n },\n {\n id: \"status\",\n title: \"Processing Status\",\n submenu: (Object.keys(STATUS_LABELS) as WebhookStatus[]).map(\n (status) => ({ id: status, name: STATUS_LABELS[status] })\n ),\n },\n ];\n }, [filters.connection, connectionsById]);\n\n const visibleLogs = useMemo(() => {\n const byConnection = filters.connection ?? [];\n const byRepository = filters.repository ?? [];\n const byEvent = filters.event_type ?? [];\n const byStatus = filters.status ?? [];\n\n return WEBHOOK_LOGS.filter((log) => {\n if (byConnection.length && !byConnection.includes(log.connectionId)) {\n return false;\n }\n if (byRepository.length && !byRepository.includes(log.repositoryId)) {\n return false;\n }\n if (byEvent.length && !byEvent.includes(log.eventKind)) {\n return false;\n }\n if (byStatus.length && !byStatus.includes(log.status)) {\n return false;\n }\n return true;\n }).sort((a, b) => b.receivedAt - a.receivedAt);\n }, [filters]);\n\n // When the Connection filter narrows, drop any selected repositories that no\n // longer belong to a selected connection — otherwise a stale repository\n // selection would silently filter every log out.\n const handleFiltersChange = useCallback((next: SelectedType) => {\n const selectedConnections = next.connection ?? [];\n const selectedRepositories = next.repository ?? [];\n\n if (selectedConnections.length && selectedRepositories.length) {\n const allowedRepositoryIds = new Set(\n WEBHOOK_REPOSITORIES.filter((repository) =>\n selectedConnections.includes(repository.connectionId)\n ).map((repository) => repository.id)\n );\n const prunedRepositories = selectedRepositories.filter((id) =>\n allowedRepositoryIds.has(id)\n );\n\n if (prunedRepositories.length !== selectedRepositories.length) {\n const updated = { ...next };\n if (prunedRepositories.length) {\n updated.repository = prunedRepositories;\n } else {\n delete updated.repository;\n }\n setFilters(updated);\n return;\n }\n }\n\n setFilters(next);\n }, []);\n\n return (\n <>\n <WebhookLogsDialogStyled\n open={open}\n onClose={onClose}\n enableBackgroundClick\n >\n <Dialog.Title disableDefaultHeading>\n <DialogTitleBar>\n <Header3>Webhook Logs</Header3>\n <div className=\"title-actions\">\n <Filter\n data={filterData}\n selected={filters}\n label=\"Filter\"\n clearAllText=\"Clear All\"\n noResultText=\"No results\"\n emptyFilterText=\"No filters to show\"\n onChange={handleFiltersChange}\n />\n <IconButton variant=\"text gray\" onClick={onClose}>\n <CancelCrossIcon />\n </IconButton>\n </div>\n </DialogTitleBar>\n </Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n {visibleLogs.length > 0 ? (\n <>\n <LogListHeader>\n <Caption2 className=\"lh-conn\" color=\"secondary\" weight=\"bold\">\n CONNECTION\n </Caption2>\n <Caption2 className=\"lh-event\" color=\"secondary\" weight=\"bold\">\n EVENT TYPE\n </Caption2>\n <Caption2 className=\"lh-status\" color=\"secondary\" weight=\"bold\">\n STATUS\n </Caption2>\n <Caption2\n className=\"lh-outcomes\"\n color=\"secondary\"\n weight=\"bold\"\n >\n OUTCOMES\n </Caption2>\n </LogListHeader>\n {visibleLogs.map((log) => (\n <LogRow\n key={log.id}\n log={log}\n connection={connectionsById[log.connectionId]}\n onOpenTask={setActiveTask}\n />\n ))}\n </>\n ) : (\n <EmptyLogs>\n <AccessLogIcon />\n <Body2 color=\"tertiary\">\n No webhook logs match the selected filters.\n </Body2>\n </EmptyLogs>\n )}\n </Dialog.Content>\n </WebhookLogsDialogStyled>\n\n <TaskPreviewSheet\n task={activeTask ?? lastTaskRef.current}\n open={Boolean(activeTask)}\n onClose={() => setActiveTask(null)}\n />\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"WebhookLogsDialog.js","names":["React","useCallback","useMemo","useRef","useState","styled","RoundAvatar","AVATAR_COLORS","LG","Button","Chip","CompleteCheckbox","Dialog","Filter","IconButton","AccessLogIcon","CancelCrossIcon","CollapseExpandSingleIcon","GitHubIcon","GitIcon","GitLabIcon","Label","SelectTrigger","Sheet","Tooltip","Body2","Caption1","Caption2","Header2","Header3","WEBHOOK_CONNECTIONS","id","name","service","WEBHOOK_REPOSITORIES","path","connectionId","EVENT_KIND_LABELS","push","issue","pull_request","pull_request_review","repository","other","EVENT_TYPE_OPTIONS","label","STATUS_LABELS","received","unhandled","skipped","processed","failed","duplicate","STATUS_COLORS","bg","fg","connectionIcon","StatusChip","_ref","status","_STATUS_COLORS$status","createElement","backgroundColor","color","typographyProps","variant","weight","NOW","Date","NOW_TS","Math","floor","getTime","MONTHS","pad2","value","String","padStart","startOfDay","date","getFullYear","getMonth","getDate","formatReceivedAt","receivedAt","now","then","diffMinutes","time","getHours","getMinutes","dayDiff","round","secondsAgo","seconds","at","year","month","day","hour","minute","PAYLOAD_ISSUE_OPENED","JSON","stringify","action","number","title","state","html_url","labels","user","login","full_name","private","sender","PAYLOAD_MERGE_REQUEST","object_kind","event_type","username","project","path_with_namespace","object_attributes","iid","source_branch","target_branch","PAYLOAD_PUSH","ref","before","after","commits","message","author","email","WEBHOOK_LOGS","repositoryId","eventKind","deliveryIdentifier","outcomes","summary","task","projectName","description","payload","zen","hook_id","escapeHtml","replace","highlightJson","json","match","cls","test","PAYLOAD_COLLAPSED_LINES","PayloadPre","pre","withConfig","displayName","componentId","_ref2","$collapsed","PayloadWrap","div","PayloadBlock","_ref3","_useState","collapsed","setCollapsed","lineCount","split","length","html","canToggle","className","size","onClick","dangerouslySetInnerHTML","__html","LogRowWrap","LogRow","_ref4","_connection$name","log","connection","onOpenTask","_useState2","open","setOpen","ConnIcon","type","map","outcome","index","key","StyledTaskSheet","StyledTaskMain","StyledTaskProperties","SheetField","_ref5","children","TaskPreviewSheet","_ref6","onClose","controls","tooltip","disabled","icon","position","animation","mode","$bg","purple","$size","$bordered","WebhookLogsDialogStyled","DialogTitleBar","LogListHeader","EmptyLogs","WebhookLogsDialog","_ref7","initialConnectionId","connectionIds","repositoryIds","_useState3","initial","filters","setFilters","_useState4","activeTask","setActiveTask","lastTaskRef","current","connectionsById","forEach","filterData","_filters$connection","selectedConnections","repositorySubmenu","filter","includes","slice","sort","a","b","localeCompare","_connectionsById$repo","_connectionsById$repo2","submenu","searchPlaceholder","disableInternalSort","_ref8","Object","keys","visibleLogs","_filters$connection2","_filters$repository","_filters$event_type","_filters$status","byConnection","byRepository","byEvent","byStatus","handleFiltersChange","next","_next$connection","_next$repository","selectedRepositories","allowedRepositoryIds","Set","prunedRepositories","has","updated","_extends","Fragment","enableBackgroundClick","Title","disableDefaultHeading","data","selected","clearAllText","noResultText","emptyFilterText","onChange","ContentDivider","Content","Boolean"],"sources":["../../../../src/presentation/shared/WebhookLogsDialog.tsx"],"sourcesContent":["import React, {\n ElementType,\n ReactElement,\n ReactNode,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { RoundAvatar } from \"./RoundAvatar\";\nimport { AVATAR_COLORS, LG } from \"./tokens\";\nimport { Button } from \"../../components/Button\";\nimport { Chip } from \"../../components/Chip\";\nimport { CompleteCheckbox } from \"../../components/CompleteCheckbox\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { Filter, SelectedType } from \"../../components/Filter\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n AccessLogIcon,\n CancelCrossIcon,\n CollapseExpandSingleIcon,\n GitHubIcon,\n GitIcon,\n GitLabIcon,\n} from \"../../components/Icons\";\nimport { Label } from \"../../components/Label\";\nimport { SelectTrigger } from \"../../components/SelectTrigger\";\nimport { Sheet } from \"../../components/Sheet\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport {\n Body2,\n Caption1,\n Caption2,\n Header2,\n Header3,\n} from \"../../components/Typography\";\n\n/**\n * \"Webhook Logs\" — the VCS webhook delivery log, shown as a wide dialog with a\n * filterable, expandable list. Extracted into `shared/` so it can be opened\n * from more than one surface (the Apps & Integrations Repositories page and the\n * project \"...\" menu on the Project Repos story).\n *\n * Mirrors the app's webhook log model:\n * `vcs_webhook_logs` → connection_id, event_type, processing_status\n * (received / unhandled / skipped / processed /\n * failed / duplicate), delivery_identifier, payload,\n * created_on\n * `vcs_webhook_outcomes` → one row per outcome, each with a localized summary\n *\n * The status is derived from the outcomes server-side; here we render the\n * stored value and map it to a palette colour. The connection glyph is the\n * provider icon (GitHub / GitLab, Git for anything else).\n */\n\ntype WebhookStatus =\n | \"received\"\n | \"unhandled\"\n | \"skipped\"\n | \"processed\"\n | \"failed\"\n | \"duplicate\";\n\nexport interface WebhookConnection {\n id: string;\n name: string;\n service: \"github\" | \"gitlab\";\n}\n\nexport interface WebhookRepository {\n id: string;\n /** Full repository path, e.g. activecollab/feather. */\n path: string;\n connectionId: string;\n}\n\n/**\n * Normalized event kind. The processor layer maps each provider's raw event\n * header (GitHub `issues` / GitLab `Issue Hook`, GitHub `pull_request` / GitLab\n * `Merge Request Hook`, …) onto one provider-agnostic kind, so the same logical\n * event reads — and filters — identically across connections instead of\n * appearing once per provider. The set below mirrors the app's\n * `EVENT_TYPE_OPTIONS` constant.\n */\ntype WebhookEventKind =\n | \"push\"\n | \"issue\"\n | \"pull_request\"\n | \"pull_request_review\"\n | \"repository\"\n | \"other\";\n\n/**\n * The task an outcome created or referenced. In the app each\n * `vcs_webhook_outcomes` row carries a nullable `task_id`; when it is set the\n * outcome offers an \"Open Task\" link that opens the task in a sheet on top of\n * the log dialog.\n */\nexport interface WebhookOutcomeTask {\n id: number;\n name: string;\n projectName: string;\n description: string;\n}\n\nexport interface WebhookOutcome {\n /** Localized outcome summary (the app's `getVerboseDescription`). */\n summary: string;\n /** Set when the outcome created or referenced a task. */\n task?: WebhookOutcomeTask;\n}\n\nexport interface WebhookLog {\n id: string;\n connectionId: string;\n /** Repository the delivery belongs to (always within `connectionId`). */\n repositoryId: string;\n eventKind: WebhookEventKind;\n status: WebhookStatus;\n /** X-GitHub-Delivery GUID / X-Gitlab-Event-UUID. */\n deliveryIdentifier: string;\n /** Outcome rows; empty when we never reached that stage. */\n outcomes: WebhookOutcome[];\n /** Pretty-printed JSON payload; absent when no JSON body was logged. */\n payload?: string;\n /** Epoch seconds; drives sorting and the relative Time column. */\n receivedAt: number;\n}\n\nexport const WEBHOOK_CONNECTIONS: WebhookConnection[] = [\n { id: \"gh-activecollab\", name: \"ActiveCollab\", service: \"github\" },\n { id: \"gh-abstergo\", name: \"Abstergo Ltd.\", service: \"github\" },\n { id: \"gh-binford\", name: \"Binford & Co.\", service: \"github\" },\n { id: \"gl-platform\", name: \"Platform\", service: \"gitlab\" },\n { id: \"gl-content\", name: \"Content\", service: \"gitlab\" },\n { id: \"gl-acme-ce\", name: \"Acme Community\", service: \"gitlab\" },\n];\n\n/**\n * Repositories that belong to the connections above. A webhook delivery is\n * always scoped to one repository, and a repository belongs to exactly one\n * connection — so the Repository filter can be narrowed to the connection(s)\n * currently selected in the Connection filter.\n */\nexport const WEBHOOK_REPOSITORIES: WebhookRepository[] = [\n {\n id: \"ac-feather\",\n path: \"activecollab/feather\",\n connectionId: \"gh-activecollab\",\n },\n {\n id: \"ac-backend\",\n path: \"activecollab/backend\",\n connectionId: \"gh-activecollab\",\n },\n { id: \"ab-animus\", path: \"abstergo/animus\", connectionId: \"gh-abstergo\" },\n { id: \"bi-tool-time\", path: \"binford/tool-time\", connectionId: \"gh-binford\" },\n {\n id: \"pl-gateway\",\n path: \"platform/api-gateway\",\n connectionId: \"gl-platform\",\n },\n { id: \"co-handbook\", path: \"content/handbook\", connectionId: \"gl-content\" },\n {\n id: \"co-marketing\",\n path: \"content/marketing-site\",\n connectionId: \"gl-content\",\n },\n { id: \"acme-ce\", path: \"acme/community-edition\", connectionId: \"gl-acme-ce\" },\n];\n\nconst EVENT_KIND_LABELS: Record<WebhookEventKind, string> = {\n push: \"Push\",\n issue: \"Issue\",\n pull_request: \"Pull Request\",\n pull_request_review: \"Pull Request Review\",\n repository: \"Repository\",\n other: \"Other\",\n};\n\n/**\n * Fixed Event Type filter options, mirroring the app's `EVENT_TYPE_OPTIONS`.\n * The app offers the full list regardless of which kinds are present in the\n * current result set, so we do the same instead of deriving it from the logs.\n */\nconst EVENT_TYPE_OPTIONS: { id: WebhookEventKind; label: string }[] = [\n { id: \"push\", label: \"Push\" },\n { id: \"issue\", label: \"Issue\" },\n { id: \"pull_request\", label: \"Pull Request\" },\n { id: \"pull_request_review\", label: \"Pull Request Review\" },\n { id: \"repository\", label: \"Repository\" },\n { id: \"other\", label: \"Other\" },\n];\n\nconst STATUS_LABELS: Record<WebhookStatus, string> = {\n received: \"Received\",\n unhandled: \"Unhandled\",\n skipped: \"Skipped\",\n processed: \"Processed\",\n failed: \"Failed\",\n duplicate: \"Duplicate\",\n};\n\n/**\n * Status → palette colour, chosen so the colour matches the meaning:\n * processed → green (success), failed → coral (error),\n * skipped → orange (warning), received → sky-blue (in progress),\n * unhandled → silver (neutral / no handler matched),\n * duplicate → purple (replayed delivery, dropped before processing).\n */\nconst STATUS_COLORS: Record<WebhookStatus, { bg: string; fg: string }> = {\n processed: {\n bg: \"var(--color-green-pale)\",\n fg: \"var(--color-green-pale-darker)\",\n },\n failed: { bg: \"var(--color-coral)\", fg: \"var(--color-coral-darker)\" },\n skipped: { bg: \"var(--color-orange)\", fg: \"var(--color-orange-darker)\" },\n received: {\n bg: \"var(--color-blue-sky)\",\n fg: \"var(--color-blue-sky-darker)\",\n },\n unhandled: {\n bg: \"var(--color-gray-silver)\",\n fg: \"var(--color-gray-silver-darker)\",\n },\n duplicate: {\n bg: \"var(--color-purple)\",\n fg: \"var(--color-purple-darker)\",\n },\n};\n\n/** Provider glyph for a connection: GitHub / GitLab, Git for anything else. */\nconst connectionIcon = (\n service?: WebhookConnection[\"service\"]\n): ElementType => {\n if (service === \"github\") {\n return GitHubIcon;\n }\n if (service === \"gitlab\") {\n return GitLabIcon;\n }\n return GitIcon;\n};\n\nconst StatusChip = ({ status }: { status: WebhookStatus }): ReactElement => {\n const { bg, fg } = STATUS_COLORS[status];\n\n return (\n <Chip\n label={STATUS_LABELS[status]}\n backgroundColor={bg}\n color={fg}\n typographyProps={{ variant: \"Caption 1\", weight: \"medium\" }}\n />\n );\n};\n\n/* --- Relative \"ago\" time -------------------------------------------------- */\n/* The Time column reads relative to a fixed \"now\" so the mock's examples stay */\n/* stable across renders — a live clock would drift the buckets on every reload */\n/* and the crafted \"3 minutes ago\" / \"Yesterday\" rows would lose their meaning. */\n\nconst NOW = new Date(2026, 7, 11, 15, 0, 0); // Tue, 11 Aug 2026, 15:00\nconst NOW_TS = Math.floor(NOW.getTime() / 1000);\n\nconst MONTHS = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nconst pad2 = (value: number): string => String(value).padStart(2, \"0\");\n\nconst startOfDay = (date: Date): number =>\n new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();\n\n/**\n * When a webhook was received, in the app's relative style:\n * < 1 min → \"Just now\"\n * < 1 hour → \"N minutes ago\"\n * earlier today → \"Today, HH:MM\"\n * yesterday → \"Yesterday, HH:MM\"\n * older, this year → \"MMM D\"\n * older, earlier years → \"MMM D, YYYY\"\n */\nconst formatReceivedAt = (receivedAt: number, now: Date = NOW): string => {\n const then = new Date(receivedAt * 1000);\n const diffMinutes = Math.floor((now.getTime() - then.getTime()) / 60000);\n\n if (diffMinutes < 1) {\n return \"Just now\";\n }\n if (diffMinutes < 60) {\n return `${diffMinutes} ${diffMinutes === 1 ? \"minute\" : \"minutes\"} ago`;\n }\n\n const time = `${pad2(then.getHours())}:${pad2(then.getMinutes())}`;\n const dayDiff = Math.round((startOfDay(now) - startOfDay(then)) / 86400000);\n\n if (dayDiff === 0) {\n return `Today, ${time}`;\n }\n if (dayDiff === 1) {\n return `Yesterday, ${time}`;\n }\n\n const date = `${MONTHS[then.getMonth()]} ${then.getDate()}`;\n return then.getFullYear() === now.getFullYear()\n ? date\n : `${date}, ${then.getFullYear()}`;\n};\n\n/* Timestamp helpers for the mock data below. */\nconst secondsAgo = (seconds: number): number => NOW_TS - seconds;\nconst at = (\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number\n): number =>\n Math.floor(new Date(year, month, day, hour, minute, 0).getTime() / 1000);\n\n/* --- Mock log data (newest first is enforced by sorting on receivedAt) --- */\n\nconst PAYLOAD_ISSUE_OPENED = JSON.stringify(\n {\n action: \"opened\",\n issue: {\n id: 2002934201,\n number: 42,\n title: \"Webhook delivery retries are not logged\",\n state: \"open\",\n html_url: \"https://github.com/activecollab/feather/issues/42\",\n labels: [{ name: \"bug\" }, { name: \"vcs\" }],\n user: { login: \"octocat\", id: 583231 },\n },\n repository: {\n id: 776611234,\n full_name: \"activecollab/feather\",\n private: true,\n },\n sender: { login: \"octocat\", id: 583231 },\n },\n null,\n 2\n);\n\nconst PAYLOAD_MERGE_REQUEST = JSON.stringify(\n {\n object_kind: \"merge_request\",\n event_type: \"merge_request\",\n user: { id: 41, name: \"Jane Doe\", username: \"jdoe\" },\n project: { id: 1801, path_with_namespace: \"content/handbook\" },\n object_attributes: {\n iid: 318,\n title: \"Add changelog for 8.2\",\n state: \"merged\",\n action: \"merge\",\n source_branch: \"changelog-8-2\",\n target_branch: \"main\",\n },\n },\n null,\n 2\n);\n\nconst PAYLOAD_PUSH = JSON.stringify(\n {\n ref: \"refs/heads/main\",\n before: \"9b2c1f0e\",\n after: \"f4a7d3c1\",\n commits: [\n {\n id: \"f4a7d3c1\",\n message: \"Fix typo in webhook log repository\",\n author: { name: \"Marko\", email: \"marko@example.com\" },\n },\n ],\n repository: { full_name: \"activecollab/feather\" },\n },\n null,\n 2\n);\n\nconst WEBHOOK_LOGS: WebhookLog[] = [\n // Just now (< 1 minute)\n {\n id: \"log-just-now\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"issue\",\n status: \"processed\",\n deliveryIdentifier: \"d3b07384-d9a0-4c9b-8f1e-2a6f1b9c4e21\",\n outcomes: [\n {\n summary: \"Created task #1842 from issue #42\",\n task: {\n id: 1842,\n name: \"Webhook delivery retries are not logged\",\n projectName: \"Feather\",\n description:\n \"Retries are not written to the webhook log, so a delivery that only succeeds on a retry still shows as failed. Log each attempt with its outcome.\",\n },\n },\n ],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedAt: secondsAgo(25),\n },\n // Minutes ago\n {\n id: \"log-3m\",\n connectionId: \"gl-content\",\n repositoryId: \"co-handbook\",\n eventKind: \"pull_request\",\n status: \"skipped\",\n deliveryIdentifier: \"b1946ac9-2f3a-4c0d-9b7e-1d2c3e4f5a6b\",\n outcomes: [{ summary: \"Skipped: merge request has no linked issue\" }],\n payload: PAYLOAD_MERGE_REQUEST,\n receivedAt: secondsAgo(3 * 60),\n },\n {\n id: \"log-12m\",\n connectionId: \"gh-abstergo\",\n repositoryId: \"ab-animus\",\n eventKind: \"issue\",\n status: \"failed\",\n deliveryIdentifier: \"9c1185a5-c5e9-4e3f-8a1b-7d6e5f4c3b2a\",\n outcomes: [{ summary: \"Failed at task creation: project not found\" }],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedAt: secondsAgo(12 * 60),\n },\n {\n id: \"log-47m\",\n connectionId: \"gl-platform\",\n repositoryId: \"pl-gateway\",\n eventKind: \"push\",\n status: \"processed\",\n deliveryIdentifier: \"f7c3bc1d-8c5a-4b2e-9f0a-1b2c3d4e5f60\",\n outcomes: [\n {\n summary: \"Created task #1839 from issue #311\",\n task: {\n id: 1839,\n name: \"Refresh the onboarding handbook\",\n projectName: \"Handbook\",\n description:\n \"The onboarding handbook is out of date. Review each section and update the steps that changed in the last release.\",\n },\n },\n {\n summary: \"Created task #1840 from issue #312\",\n task: {\n id: 1840,\n name: \"Document webhook scopes\",\n projectName: \"Handbook\",\n description:\n \"Explain the connection and repository webhook scopes, and when each one applies.\",\n },\n },\n ],\n payload: PAYLOAD_PUSH,\n receivedAt: secondsAgo(47 * 60),\n },\n // Earlier today\n {\n id: \"log-today-1\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"other\",\n status: \"unhandled\",\n deliveryIdentifier: \"1574bddb-75c3-4b1e-8a9c-0d1e2f3a4b5c\",\n outcomes: [],\n payload: JSON.stringify(\n { zen: \"Keep it logically awesome.\", hook_id: 552012 },\n null,\n 2\n ),\n receivedAt: at(2026, 7, 11, 10, 0),\n },\n {\n id: \"log-today-2\",\n connectionId: \"gh-binford\",\n repositoryId: \"bi-tool-time\",\n eventKind: \"pull_request_review\",\n status: \"processed\",\n deliveryIdentifier: \"5f2b1c8e-7a3d-4e6f-9b0c-1d2e3f4a5b6c\",\n outcomes: [\n {\n summary: \"Referenced task #1699 from pull request #58\",\n task: {\n id: 1699,\n name: \"Refresh the Tool Time build badge\",\n projectName: \"Tool Time\",\n description:\n \"The build badge shows an old status. Update it when the pipeline finishes.\",\n },\n },\n ],\n payload: PAYLOAD_MERGE_REQUEST,\n receivedAt: at(2026, 7, 11, 7, 12),\n },\n // Yesterday\n {\n id: \"log-yesterday-1\",\n connectionId: \"gl-content\",\n repositoryId: \"co-marketing\",\n eventKind: \"issue\",\n status: \"received\",\n deliveryIdentifier: \"0716d970-2b9e-4a1d-9c3f-5e6a7b8c9d01\",\n outcomes: [],\n receivedAt: at(2026, 7, 10, 13, 20),\n },\n {\n id: \"log-yesterday-2\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"issue\",\n status: \"duplicate\",\n deliveryIdentifier: \"fa3ebd6742c360b2d9652b7f78d9bd7d\",\n outcomes: [],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedAt: at(2026, 7, 10, 9, 5),\n },\n // Older, this year — date only\n {\n id: \"log-aug-8\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-backend\",\n eventKind: \"repository\",\n status: \"skipped\",\n deliveryIdentifier: \"2c9d0e1f-3a4b-4c5d-8e9f-0a1b2c3d4e5f\",\n outcomes: [{ summary: \"Skipped: repository events are not processed\" }],\n receivedAt: at(2026, 7, 8, 16, 42),\n },\n {\n id: \"log-jul-30\",\n connectionId: \"gl-acme-ce\",\n repositoryId: \"acme-ce\",\n eventKind: \"push\",\n status: \"failed\",\n deliveryIdentifier: \"7d8e9f0a-1b2c-4d3e-9f0a-2b3c4d5e6f70\",\n outcomes: [{ summary: \"Failed to match a repository for this push\" }],\n payload: PAYLOAD_PUSH,\n receivedAt: at(2026, 6, 30, 11, 9),\n },\n {\n id: \"log-jun-12\",\n connectionId: \"gh-abstergo\",\n repositoryId: \"ab-animus\",\n eventKind: \"issue\",\n status: \"processed\",\n deliveryIdentifier: \"aa11bb22-cc33-4d44-9e55-6f7788990011\",\n outcomes: [\n {\n summary: \"Created task #1720 from issue #204\",\n task: {\n id: 1720,\n name: \"Animus sync drops issue labels\",\n projectName: \"Animus\",\n description:\n \"Issue labels are lost when Animus syncs from GitHub. Map the incoming labels onto task labels.\",\n },\n },\n ],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedAt: at(2026, 5, 12, 8, 30),\n },\n // Older, earlier year — date with year\n {\n id: \"log-mar-2025\",\n connectionId: \"gl-platform\",\n repositoryId: \"pl-gateway\",\n eventKind: \"issue\",\n status: \"processed\",\n deliveryIdentifier: \"bb22cc33-dd44-4e55-9f66-7a8899001122\",\n outcomes: [\n {\n summary: \"Created task #1533 from issue #88\",\n task: {\n id: 1533,\n name: \"Gateway times out on large payloads\",\n projectName: \"API Gateway\",\n description:\n \"Large webhook payloads time out at the gateway. Raise the body limit or stream the request.\",\n },\n },\n ],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedAt: at(2025, 2, 3, 10, 15),\n },\n];\n\n/* --- Lightweight, Prism-style JSON syntax highlighter -------------------- */\n/* design-system has no `prismjs` dependency (it's an app dependency), so for */\n/* this throwaway mock we tokenize JSON ourselves and colour the tokens with */\n/* the same token classes Prism uses, styled via PayloadPre below. */\n\nconst escapeHtml = (value: string): string =>\n value.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\nconst highlightJson = (json: string): string =>\n escapeHtml(json).replace(\n /(\"(?:\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(?:true|false)\\b|\\bnull\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/g,\n (match) => {\n let cls = \"tok-number\";\n\n if (/^\"/.test(match)) {\n cls = /:$/.test(match) ? \"tok-key\" : \"tok-string\";\n } else if (/true|false/.test(match)) {\n cls = \"tok-boolean\";\n } else if (/null/.test(match)) {\n cls = \"tok-null\";\n }\n\n return `<span class=\"${cls}\">${match}</span>`;\n }\n );\n\nconst PAYLOAD_COLLAPSED_LINES = 6;\n\nconst PayloadPre = styled.pre<{ $collapsed: boolean }>`\n margin: 0;\n padding: 12px 14px;\n border: 1px solid var(--color-theme-400);\n border-radius: 6px;\n background-color: var(--color-theme-200);\n color: var(--color-theme-800);\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n font-size: 12px;\n line-height: 18px;\n overflow-x: auto;\n white-space: pre;\n position: relative;\n\n ${({ $collapsed }) =>\n $collapsed\n ? `max-height: ${PAYLOAD_COLLAPSED_LINES * 18 + 24}px;\n overflow-y: hidden;`\n : \"\"}\n\n .tok-key {\n color: var(--color-coral-lighter);\n }\n .tok-string {\n color: var(--color-green-pale-lighter);\n }\n .tok-number {\n color: var(--color-orange-lighter);\n }\n .tok-boolean {\n color: var(--color-blue-sky-lighter);\n }\n .tok-null {\n color: var(--color-purple-lighter);\n }\n`;\n\nconst PayloadWrap = styled.div`\n .payload-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 24px;\n margin-bottom: 4px;\n }\n`;\n\nconst PayloadBlock = ({ payload }: { payload: string }): ReactElement => {\n const [collapsed, setCollapsed] = useState(true);\n\n const lineCount = useMemo(() => payload.split(\"\\n\").length, [payload]);\n const html = useMemo(() => highlightJson(payload), [payload]);\n const canToggle = lineCount > PAYLOAD_COLLAPSED_LINES;\n\n return (\n <PayloadWrap>\n <div className=\"payload-header\">\n <Caption1 color=\"secondary\" weight=\"bold\">\n Payload\n </Caption1>\n {canToggle ? (\n <Button\n variant=\"text colored\"\n size=\"small\"\n onClick={() => setCollapsed((value) => !value)}\n >\n {collapsed ? \"Show More\" : \"Show Less\"}\n </Button>\n ) : null}\n </div>\n <PayloadPre\n $collapsed={collapsed && canToggle}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </PayloadWrap>\n );\n};\n\n/* --- A single, expandable log row ---------------------------------------- */\n\nconst LogRowWrap = styled.div`\n border-top: 1px solid var(--color-theme-300);\n\n .lr-summary {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n min-height: 56px;\n padding: 8px 8px 8px 12px;\n background: none;\n border: 0;\n text-align: left;\n cursor: pointer;\n font-family: inherit;\n\n &:hover {\n background-color: var(--color-theme-200);\n }\n }\n\n /* Matches the app's ExpandToggle: the icon points up when expanded and\n rotates 180° (pointing down) when collapsed. */\n .lr-expand {\n flex-shrink: 0;\n fill: var(--color-theme-600);\n color: var(--color-theme-600);\n transform: rotate(180deg);\n transition: transform 200ms ease;\n }\n\n .lr-expand.open {\n transform: rotate(0deg);\n }\n\n .lr-conn {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 180px;\n min-width: 0;\n flex-shrink: 0;\n }\n\n .lr-conn svg {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n }\n\n .lr-conn .lr-conn-name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .lr-event {\n flex: 1 1 0%;\n min-width: 0;\n }\n\n .lr-time {\n width: 120px;\n flex-shrink: 0;\n text-align: right;\n white-space: nowrap;\n }\n\n .lr-status {\n width: 110px;\n flex-shrink: 0;\n display: flex;\n }\n\n .lr-outcomes {\n width: 96px;\n flex-shrink: 0;\n text-align: right;\n }\n\n .lr-detail {\n padding: 4px 16px 20px 44px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .lr-field-label {\n display: block;\n margin-bottom: 4px;\n }\n\n .lr-id {\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n word-break: break-all;\n }\n\n .lr-outcome-list {\n margin: 0;\n padding-left: 16px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n /* Summary text and the \"Open Task\" link share one row and wrap together. */\n .lr-outcome {\n display: flex;\n align-items: baseline;\n flex-wrap: wrap;\n gap: 4px 8px;\n }\n\n /* A quiet, underlined text link — same treatment as the \"Show changes\"\n link in the task History of Changes, not a button. */\n .lr-open-task {\n padding: 0;\n border: 0;\n background: none;\n font: inherit;\n font-size: 13px;\n line-height: 18px;\n color: var(--color-theme-600);\n text-decoration: underline;\n cursor: pointer;\n white-space: nowrap;\n }\n\n .lr-open-task:hover {\n color: var(--color-theme-800);\n }\n`;\n\ninterface LogRowProps {\n log: WebhookLog;\n connection?: WebhookConnection;\n onOpenTask: (task: WebhookOutcomeTask) => void;\n}\n\nconst LogRow = ({ log, connection, onOpenTask }: LogRowProps): ReactElement => {\n const [open, setOpen] = useState(false);\n const ConnIcon = connectionIcon(connection?.service);\n\n return (\n <LogRowWrap>\n <button\n type=\"button\"\n className=\"lr-summary\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n >\n <CollapseExpandSingleIcon\n className={open ? \"lr-expand open\" : \"lr-expand\"}\n />\n <span className=\"lr-conn\">\n <ConnIcon />\n <Body2 className=\"lr-conn-name\" weight=\"bold\">\n {connection?.name ?? \"Unknown\"}\n </Body2>\n </span>\n <Body2 className=\"lr-event\" color=\"tertiary\">\n {EVENT_KIND_LABELS[log.eventKind]}\n </Body2>\n <Caption1 className=\"lr-time\" color=\"tertiary\">\n {formatReceivedAt(log.receivedAt)}\n </Caption1>\n <span className=\"lr-status\">\n <StatusChip status={log.status} />\n </span>\n <Caption1 className=\"lr-outcomes\" color=\"tertiary\">\n {log.outcomes.length > 0\n ? `${log.outcomes.length} ${\n log.outcomes.length === 1 ? \"outcome\" : \"outcomes\"\n }`\n : \"\"}\n </Caption1>\n </button>\n\n {open ? (\n <div className=\"lr-detail\">\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Webhook identifier\n </Caption1>\n <Body2 className=\"lr-id\" color=\"tertiary\">\n {log.deliveryIdentifier}\n </Body2>\n </div>\n\n {log.outcomes.length > 0 ? (\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Outcomes\n </Caption1>\n <ul className=\"lr-outcome-list\">\n {log.outcomes.map((outcome, index) => (\n <li key={index} className=\"lr-outcome\">\n <Body2 color=\"tertiary\">{outcome.summary}</Body2>\n {outcome.task ? (\n <Tooltip title=\"See the task without closing the log\">\n <button\n type=\"button\"\n className=\"lr-open-task\"\n onClick={() =>\n onOpenTask(outcome.task as WebhookOutcomeTask)\n }\n >\n Open Task\n </button>\n </Tooltip>\n ) : null}\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n\n {log.payload ? <PayloadBlock payload={log.payload} /> : null}\n </div>\n ) : null}\n </LogRowWrap>\n );\n};\n\n/* --- Task preview sheet --------------------------------------------------- */\n/* Opens the outcome's task in a right-side sheet, on top of the (still open) */\n/* log dialog. Uses the same Sheet setup as the Task sheet stories — position */\n/* \"right\", stretch mode, and a Close control — so it reads as the real task */\n/* sheet. The body is a representative stand-in for the app's full task sheet. */\n\nconst StyledTaskSheet = styled.div`\n display: grid;\n min-height: 100%;\n padding: 8px;\n grid-template-columns: 1fr;\n\n @media (min-width: ${LG}) {\n grid-template-columns: 1fr 328px;\n }\n`;\n\nconst StyledTaskMain = styled.div`\n padding: 24px 24px 0;\n min-width: 0;\n\n @media (min-width: ${LG}) {\n grid-column: 1;\n }\n\n .task-header {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n margin-bottom: 8px;\n }\n\n .task-title {\n min-width: 0;\n }\n\n .metadata {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n margin-bottom: 24px;\n }\n\n .metadata .seg:not(:last-child) {\n padding-right: 12px;\n margin-right: 12px;\n border-right: 1px solid var(--border-primary);\n }\n\n .description {\n padding-bottom: 16px;\n margin-bottom: 16px;\n border-bottom: 1px solid var(--border-primary);\n }\n`;\n\nconst StyledTaskProperties = styled.div`\n padding: 0 24px;\n\n @media (min-width: ${LG}) {\n grid-column: 2;\n padding: 24px;\n background-color: var(--color-theme-200);\n border-radius: 8px;\n }\n\n .field {\n margin-bottom: 24px;\n }\n\n .field:last-child {\n margin-bottom: 0;\n }\n\n .field-label {\n display: flex;\n align-items: center;\n max-width: 280px;\n margin-bottom: 4px;\n }\n\n .field-control {\n width: 100%;\n }\n\n .assignee-row {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n`;\n\ninterface SheetFieldProps {\n label: string;\n children: ReactNode;\n}\n\nconst SheetField = ({ label, children }: SheetFieldProps): ReactElement => (\n <div className=\"field\">\n <div className=\"field-label\">\n <Label size=\"small\">{label}</Label>\n </div>\n {children}\n </div>\n);\n\ninterface TaskPreviewSheetProps {\n task: WebhookOutcomeTask | null;\n open: boolean;\n onClose: () => void;\n}\n\nconst TaskPreviewSheet = ({\n task,\n open,\n onClose,\n}: TaskPreviewSheetProps): ReactElement | null => {\n if (!task) {\n return null;\n }\n\n const controls = [\n {\n tooltip: \"Close\",\n disabled: false,\n onClick: onClose,\n icon: <CancelCrossIcon />,\n className: \"\",\n },\n ];\n\n return (\n <Sheet\n open={open}\n onClose={onClose}\n controls={controls}\n position=\"right\"\n animation=\"right\"\n mode=\"stretch\"\n >\n <StyledTaskSheet>\n <StyledTaskMain>\n <div className=\"task-header\">\n <CompleteCheckbox />\n <Header2 className=\"task-title\">\n #{task.id}: {task.name}\n </Header2>\n </div>\n\n <div className=\"metadata\">\n <Caption1 className=\"seg\" color=\"secondary\">\n {task.projectName}\n </Caption1>\n <Caption1 className=\"seg\" color=\"secondary\">\n Task #{task.id}\n </Caption1>\n <Caption1 className=\"seg\" color=\"secondary\">\n Created from a webhook delivery\n </Caption1>\n </div>\n\n <div className=\"description\">\n <Body2>{task.description}</Body2>\n </div>\n </StyledTaskMain>\n\n <StyledTaskProperties>\n <SheetField label=\"Task List\">\n <SelectTrigger className=\"field-control\">Inbox</SelectTrigger>\n </SheetField>\n\n <SheetField label=\"Assignees\">\n <div className=\"assignee-row\">\n <RoundAvatar\n $bg={AVATAR_COLORS.purple}\n $size={28}\n $bordered={false}\n >\n IS\n </RoundAvatar>\n <Body2>Ilija Studen</Body2>\n </div>\n </SheetField>\n\n <SheetField label=\"Start and Due Date\">\n <SelectTrigger className=\"field-control\">Not set</SelectTrigger>\n </SheetField>\n </StyledTaskProperties>\n </StyledTaskSheet>\n </Sheet>\n );\n};\n\n/* --- The dialog ---------------------------------------------------------- */\n\n/** Wider than the default 540px dialog so the log columns have room. */\nconst WebhookLogsDialogStyled = styled(Dialog)`\n && {\n width: calc(100vw - 64px);\n max-width: 760px;\n }\n`;\n\nconst DialogTitleBar = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n\n .title-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n`;\n\nconst LogListHeader = styled.div`\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 0 8px 8px 44px;\n\n .lh-conn {\n width: 180px;\n flex-shrink: 0;\n }\n .lh-event {\n flex: 1 1 0%;\n min-width: 0;\n }\n .lh-time {\n width: 120px;\n flex-shrink: 0;\n text-align: right;\n }\n .lh-status {\n width: 110px;\n flex-shrink: 0;\n text-align: left;\n }\n .lh-outcomes {\n width: 96px;\n flex-shrink: 0;\n text-align: right;\n }\n`;\n\nconst EmptyLogs = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 40px 0;\n text-align: center;\n\n svg {\n fill: var(--color-theme-500);\n }\n`;\n\nexport interface WebhookLogsDialogProps {\n open: boolean;\n onClose: () => void;\n /** Pre-filter to a single connection (used when opened from its row menu). */\n initialConnectionId?: string;\n /**\n * Pre-filter to a set of connections (e.g. the connections a project's\n * repositories belong to). Takes precedence over `initialConnectionId`.\n */\n connectionIds?: string[];\n /**\n * Pre-filter to a set of repositories (e.g. the repositories connected to a\n * project, when opened from the project \"...\" menu). Seeds the Repository\n * filter; IDs should exist in `WEBHOOK_REPOSITORIES` so their chips render.\n */\n repositoryIds?: string[];\n}\n\nexport const WebhookLogsDialog = ({\n open,\n onClose,\n initialConnectionId,\n connectionIds,\n repositoryIds,\n}: WebhookLogsDialogProps): ReactElement => {\n const [filters, setFilters] = useState<SelectedType>((): SelectedType => {\n const initial: SelectedType = {};\n if (connectionIds && connectionIds.length > 0) {\n initial.connection = connectionIds;\n } else if (initialConnectionId) {\n initial.connection = [initialConnectionId];\n }\n if (repositoryIds && repositoryIds.length > 0) {\n initial.repository = repositoryIds;\n }\n return initial;\n });\n\n // The task opened from an outcome's \"Open Task\" link. The dialog stays open\n // underneath; the sheet layers on top. `lastTask` keeps the content mounted\n // through the sheet's slide-out so it does not blank out mid-animation.\n const [activeTask, setActiveTask] = useState<WebhookOutcomeTask | null>(null);\n const lastTaskRef = useRef<WebhookOutcomeTask | null>(null);\n if (activeTask) {\n lastTaskRef.current = activeTask;\n }\n\n const connectionsById = useMemo(() => {\n const map: Record<string, WebhookConnection> = {};\n WEBHOOK_CONNECTIONS.forEach((connection) => {\n map[connection.id] = connection;\n });\n return map;\n }, []);\n\n const filterData = useMemo(() => {\n // The Repository options narrow to the connection(s) currently selected in\n // the Connection filter; with no connection selected, every repository is\n // offered. Displayed as \"path (connection name)\" (matching the project\n // \"...\" menu Repositories list) and sorted by repository path.\n const selectedConnections = filters.connection ?? [];\n const repositorySubmenu = WEBHOOK_REPOSITORIES.filter(\n (repository) =>\n selectedConnections.length === 0 ||\n selectedConnections.includes(repository.connectionId)\n )\n .slice()\n .sort((a, b) => a.path.localeCompare(b.path))\n .map((repository) => ({\n id: repository.id,\n name: `${repository.path} (${\n connectionsById[repository.connectionId]?.name ?? \"Unknown\"\n })`,\n }));\n\n return [\n {\n id: \"connection\",\n title: \"Connection\",\n submenu: WEBHOOK_CONNECTIONS.map((connection) => ({\n id: connection.id,\n name: connection.name,\n })),\n },\n {\n id: \"repository\",\n title: \"Repository\",\n searchPlaceholder: \"Search repositories\",\n disableInternalSort: true,\n submenu: repositorySubmenu,\n },\n {\n id: \"event_type\",\n title: \"Event Type\",\n submenu: EVENT_TYPE_OPTIONS.map(({ id, label }) => ({\n id,\n name: label,\n })),\n },\n {\n id: \"status\",\n title: \"Processing Status\",\n submenu: (Object.keys(STATUS_LABELS) as WebhookStatus[]).map(\n (status) => ({ id: status, name: STATUS_LABELS[status] })\n ),\n },\n ];\n }, [filters.connection, connectionsById]);\n\n const visibleLogs = useMemo(() => {\n const byConnection = filters.connection ?? [];\n const byRepository = filters.repository ?? [];\n const byEvent = filters.event_type ?? [];\n const byStatus = filters.status ?? [];\n\n return WEBHOOK_LOGS.filter((log) => {\n if (byConnection.length && !byConnection.includes(log.connectionId)) {\n return false;\n }\n if (byRepository.length && !byRepository.includes(log.repositoryId)) {\n return false;\n }\n if (byEvent.length && !byEvent.includes(log.eventKind)) {\n return false;\n }\n if (byStatus.length && !byStatus.includes(log.status)) {\n return false;\n }\n return true;\n }).sort((a, b) => b.receivedAt - a.receivedAt);\n }, [filters]);\n\n // When the Connection filter narrows, drop any selected repositories that no\n // longer belong to a selected connection — otherwise a stale repository\n // selection would silently filter every log out.\n const handleFiltersChange = useCallback((next: SelectedType) => {\n const selectedConnections = next.connection ?? [];\n const selectedRepositories = next.repository ?? [];\n\n if (selectedConnections.length && selectedRepositories.length) {\n const allowedRepositoryIds = new Set(\n WEBHOOK_REPOSITORIES.filter((repository) =>\n selectedConnections.includes(repository.connectionId)\n ).map((repository) => repository.id)\n );\n const prunedRepositories = selectedRepositories.filter((id) =>\n allowedRepositoryIds.has(id)\n );\n\n if (prunedRepositories.length !== selectedRepositories.length) {\n const updated = { ...next };\n if (prunedRepositories.length) {\n updated.repository = prunedRepositories;\n } else {\n delete updated.repository;\n }\n setFilters(updated);\n return;\n }\n }\n\n setFilters(next);\n }, []);\n\n return (\n <>\n <WebhookLogsDialogStyled\n open={open}\n onClose={onClose}\n enableBackgroundClick\n >\n <Dialog.Title disableDefaultHeading>\n <DialogTitleBar>\n <Header3>Webhook Logs</Header3>\n <div className=\"title-actions\">\n <Filter\n data={filterData}\n selected={filters}\n label=\"Filter\"\n clearAllText=\"Clear All\"\n noResultText=\"No results\"\n emptyFilterText=\"No filters to show\"\n onChange={handleFiltersChange}\n />\n <IconButton variant=\"text gray\" onClick={onClose}>\n <CancelCrossIcon />\n </IconButton>\n </div>\n </DialogTitleBar>\n </Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n {visibleLogs.length > 0 ? (\n <>\n <LogListHeader>\n <Caption2 className=\"lh-conn\" color=\"secondary\" weight=\"bold\">\n CONNECTION\n </Caption2>\n <Caption2 className=\"lh-event\" color=\"secondary\" weight=\"bold\">\n EVENT TYPE\n </Caption2>\n <Caption2 className=\"lh-time\" color=\"secondary\" weight=\"bold\">\n TIME\n </Caption2>\n <Caption2 className=\"lh-status\" color=\"secondary\" weight=\"bold\">\n STATUS\n </Caption2>\n <Caption2\n className=\"lh-outcomes\"\n color=\"secondary\"\n weight=\"bold\"\n >\n OUTCOMES\n </Caption2>\n </LogListHeader>\n {visibleLogs.map((log) => (\n <LogRow\n key={log.id}\n log={log}\n connection={connectionsById[log.connectionId]}\n onOpenTask={setActiveTask}\n />\n ))}\n </>\n ) : (\n <EmptyLogs>\n <AccessLogIcon />\n <Body2 color=\"tertiary\">\n No webhook logs match the selected filters.\n </Body2>\n </EmptyLogs>\n )}\n </Dialog.Content>\n </WebhookLogsDialogStyled>\n\n <TaskPreviewSheet\n task={activeTask ?? lastTaskRef.current}\n open={Boolean(activeTask)}\n onClose={() => setActiveTask(null)}\n />\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -3,8 +3,15 @@ export declare const SAMPLE_NOTE = "Kickoff open questions before we lock the co
3
3
  export interface NoteCardProps {
4
4
  title?: string;
5
5
  body?: string;
6
+ /**
7
+ * The project the note belongs to, above the title — the same line, in the
8
+ * same treatment, that a TaskCard uses. Off by default: only a surface that
9
+ * mixes projects needs it.
10
+ */
11
+ showProjectName?: boolean;
12
+ projectName?: string;
6
13
  }
7
- export declare const NoteCard: ({ title, body, }: NoteCardProps) => ReactElement;
14
+ export declare const NoteCard: ({ title, body, showProjectName, projectName, }: NoteCardProps) => ReactElement;
8
15
  export declare const NotePlaceholder: (props: React.ButtonHTMLAttributes<HTMLButtonElement>) => ReactElement;
9
16
  export declare const NoteSkeleton: () => ReactElement;
10
17
  //# sourceMappingURL=NoteCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NoteCard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/stackedCard/content/NoteCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AA4B5C,eAAO,MAAM,WAAW,wTAImC,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,QAAQ,GAAI,kBAGtB,aAAa,KAAG,YAUlB,CAAC;AAIF,eAAO,MAAM,eAAe,GAC1B,OAAO,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,KACnD,YAEF,CAAC;AAGF,eAAO,MAAM,YAAY,QAAO,YAY/B,CAAC"}
1
+ {"version":3,"file":"NoteCard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/stackedCard/content/NoteCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAiC5C,eAAO,MAAM,WAAW,wTAImC,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,QAAQ,GAAI,gDAKtB,aAAa,KAAG,YAelB,CAAC;AAIF,eAAO,MAAM,eAAe,GAC1B,OAAO,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,KACnD,YAEF,CAAC;AAGF,eAAO,MAAM,YAAY,QAAO,YAY/B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import React from "react";
3
3
  import styled from "styled-components";
4
- import { EntityDots, Placeholder } from "./shared";
4
+ import { CardProjectLine, EntityDots, Placeholder, StyledTitleBlock } from "./shared";
5
5
  import { NoteIcon } from "../../../components/Icons";
6
6
  import { SkeletonLoader } from "../../../components/Loaders";
7
7
  import { StackedCardRow as StackRow } from "../../../components/StackedCard";
@@ -25,12 +25,16 @@ export const NoteCard = _ref => {
25
25
  let _ref$title = _ref.title,
26
26
  title = _ref$title === void 0 ? "Kickoff notes" : _ref$title,
27
27
  _ref$body = _ref.body,
28
- body = _ref$body === void 0 ? SAMPLE_NOTE : _ref$body;
28
+ body = _ref$body === void 0 ? SAMPLE_NOTE : _ref$body,
29
+ _ref$showProjectName = _ref.showProjectName,
30
+ showProjectName = _ref$showProjectName === void 0 ? false : _ref$showProjectName,
31
+ _ref$projectName = _ref.projectName,
32
+ projectName = _ref$projectName === void 0 ? "Marketing Site" : _ref$projectName;
29
33
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StackRow, {
30
34
  role: "title"
31
- }, /*#__PURE__*/React.createElement(Body2, {
35
+ }, /*#__PURE__*/React.createElement(StyledTitleBlock, null, showProjectName ? /*#__PURE__*/React.createElement(CardProjectLine, null, projectName) : null, /*#__PURE__*/React.createElement(Body2, {
32
36
  weight: "bold"
33
- }, title), /*#__PURE__*/React.createElement(EntityDots, {
37
+ }, title)), /*#__PURE__*/React.createElement(EntityDots, {
34
38
  "aria-label": "Note options"
35
39
  })), /*#__PURE__*/React.createElement(StackRow, {
36
40
  role: "custom",
@@ -1 +1 @@
1
- {"version":3,"file":"NoteCard.js","names":["React","styled","EntityDots","Placeholder","NoteIcon","SkeletonLoader","StackedCardRow","StackRow","Body2","StyledNoteBody","withConfig","displayName","componentId","SAMPLE_NOTE","NoteCard","_ref","_ref$title","title","_ref$body","body","createElement","Fragment","role","weight","direction","color","NotePlaceholder","props","_extends","icon","label","NoteSkeleton","style","height","width"],"sources":["../../../../../src/presentation/stackedCard/content/NoteCard.tsx"],"sourcesContent":["import React, { ReactElement } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { EntityDots, Placeholder } from \"./shared\";\nimport { NoteIcon } from \"../../../components/Icons\";\nimport { SkeletonLoader } from \"../../../components/Loaders\";\nimport { StackedCardRow as StackRow } from \"../../../components/StackedCard\";\nimport { Body2 } from \"../../../components/Typography\";\n\n/**\n * NoteCard — the new fifth type. A multi-line text card (Milanote-style): a\n * title row that owns the \"…\" menu, then padded body rows. The body clamps at a\n * line limit and fades out; auto-height, so the card grows with its content.\n * Inline editing lands in task 4/8 — this is the read view + placeholder.\n */\n\n/* The body clamps at a max height and fades out with a mask so long notes end\n softly instead of hard-cropping. white-space: pre-line keeps authored breaks. */\nconst StyledNoteBody = styled(Body2)`\n display: block;\n max-height: 132px;\n overflow: hidden;\n white-space: pre-line;\n -webkit-mask-image: linear-gradient(180deg, #000 72%, transparent);\n mask-image: linear-gradient(180deg, #000 72%, transparent);\n`;\n\nexport const SAMPLE_NOTE = `Kickoff open questions before we lock the columns:\n\n• Who owns the migration off react-dnd, and does it block the canvas work or run in parallel?\n• Confirm the outline-placeholder choreography reads the same in a scrolled column.\n• Do we ship the note type in v1, or defer inline editing?`;\n\nexport interface NoteCardProps {\n title?: string;\n body?: string;\n}\n\nexport const NoteCard = ({\n title = \"Kickoff notes\",\n body = SAMPLE_NOTE,\n}: NoteCardProps): ReactElement => (\n <>\n <StackRow role=\"title\">\n <Body2 weight=\"bold\">{title}</Body2>\n <EntityDots aria-label=\"Note options\" />\n </StackRow>\n <StackRow role=\"custom\" direction=\"column\">\n <StyledNoteBody color=\"secondary\">{body}</StyledNoteBody>\n </StackRow>\n </>\n);\n\n/* ---- placeholder + skeleton ---- */\n\nexport const NotePlaceholder = (\n props: React.ButtonHTMLAttributes<HTMLButtonElement>\n): ReactElement => (\n <Placeholder icon={<NoteIcon />} label=\"Write a note\" {...props} />\n);\n\n/* Skeleton mirrors the note anatomy: a title line, then several body lines. */\nexport const NoteSkeleton = (): ReactElement => (\n <>\n <StackRow role=\"title\">\n <SkeletonLoader style={{ height: 14, width: \"50%\" }} />\n </StackRow>\n <StackRow role=\"custom\" direction=\"column\">\n <SkeletonLoader style={{ height: 10, width: \"100%\" }} />\n <SkeletonLoader style={{ height: 10, width: \"96%\" }} />\n <SkeletonLoader style={{ height: 10, width: \"88%\" }} />\n <SkeletonLoader style={{ height: 10, width: \"70%\" }} />\n </StackRow>\n </>\n);\n"],"mappings":";AAAA,OAAOA,KAAK,MAAwB,OAAO;AAE3C,OAAOC,MAAM,MAAM,mBAAmB;AAEtC,SAASC,UAAU,EAAEC,WAAW,QAAQ,UAAU;AAClD,SAASC,QAAQ,QAAQ,2BAA2B;AACpD,SAASC,cAAc,QAAQ,6BAA6B;AAC5D,SAASC,cAAc,IAAIC,QAAQ,QAAQ,iCAAiC;AAC5E,SAASC,KAAK,QAAQ,gCAAgC;;AAEtD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAMC,cAAc,GAAGR,MAAM,CAACO,KAAK,CAAC,CAAAE,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,oMAOnC;AAED,OAAO,MAAMC,WAAW,wTAImC;AAO3D,OAAO,MAAMC,QAAQ,GAAGC,IAAA;EAAA,IAAAC,UAAA,GAAAD,IAAA,CACtBE,KAAK;IAALA,KAAK,GAAAD,UAAA,cAAG,eAAe,GAAAA,UAAA;IAAAE,SAAA,GAAAH,IAAA,CACvBI,IAAI;IAAJA,IAAI,GAAAD,SAAA,cAAGL,WAAW,GAAAK,SAAA;EAAA,oBAElBlB,KAAA,CAAAoB,aAAA,CAAApB,KAAA,CAAAqB,QAAA,qBACErB,KAAA,CAAAoB,aAAA,CAACb,QAAQ;IAACe,IAAI,EAAC;EAAO,gBACpBtB,KAAA,CAAAoB,aAAA,CAACZ,KAAK;IAACe,MAAM,EAAC;EAAM,GAAEN,KAAa,CAAC,eACpCjB,KAAA,CAAAoB,aAAA,CAAClB,UAAU;IAAC,cAAW;EAAc,CAAE,CAC/B,CAAC,eACXF,KAAA,CAAAoB,aAAA,CAACb,QAAQ;IAACe,IAAI,EAAC,QAAQ;IAACE,SAAS,EAAC;EAAQ,gBACxCxB,KAAA,CAAAoB,aAAA,CAACX,cAAc;IAACgB,KAAK,EAAC;EAAW,GAAEN,IAAqB,CAChD,CACV,CAAC;AAAA,CACJ;;AAED;;AAEA,OAAO,MAAMO,eAAe,GAC1BC,KAAoD,iBAEpD3B,KAAA,CAAAoB,aAAA,CAACjB,WAAW,EAAAyB,QAAA;EAACC,IAAI,eAAE7B,KAAA,CAAAoB,aAAA,CAAChB,QAAQ,MAAE,CAAE;EAAC0B,KAAK,EAAC;AAAc,GAAKH,KAAK,CAAG,CACnE;;AAED;AACA,OAAO,MAAMI,YAAY,GAAGA,CAAA,kBAC1B/B,KAAA,CAAAoB,aAAA,CAAApB,KAAA,CAAAqB,QAAA,qBACErB,KAAA,CAAAoB,aAAA,CAACb,QAAQ;EAACe,IAAI,EAAC;AAAO,gBACpBtB,KAAA,CAAAoB,aAAA,CAACf,cAAc;EAAC2B,KAAK,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEC,KAAK,EAAE;EAAM;AAAE,CAAE,CAC9C,CAAC,eACXlC,KAAA,CAAAoB,aAAA,CAACb,QAAQ;EAACe,IAAI,EAAC,QAAQ;EAACE,SAAS,EAAC;AAAQ,gBACxCxB,KAAA,CAAAoB,aAAA,CAACf,cAAc;EAAC2B,KAAK,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEC,KAAK,EAAE;EAAO;AAAE,CAAE,CAAC,eACxDlC,KAAA,CAAAoB,aAAA,CAACf,cAAc;EAAC2B,KAAK,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEC,KAAK,EAAE;EAAM;AAAE,CAAE,CAAC,eACvDlC,KAAA,CAAAoB,aAAA,CAACf,cAAc;EAAC2B,KAAK,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEC,KAAK,EAAE;EAAM;AAAE,CAAE,CAAC,eACvDlC,KAAA,CAAAoB,aAAA,CAACf,cAAc;EAAC2B,KAAK,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEC,KAAK,EAAE;EAAM;AAAE,CAAE,CAC9C,CACV,CACH","ignoreList":[]}
1
+ {"version":3,"file":"NoteCard.js","names":["React","styled","CardProjectLine","EntityDots","Placeholder","StyledTitleBlock","NoteIcon","SkeletonLoader","StackedCardRow","StackRow","Body2","StyledNoteBody","withConfig","displayName","componentId","SAMPLE_NOTE","NoteCard","_ref","_ref$title","title","_ref$body","body","_ref$showProjectName","showProjectName","_ref$projectName","projectName","createElement","Fragment","role","weight","direction","color","NotePlaceholder","props","_extends","icon","label","NoteSkeleton","style","height","width"],"sources":["../../../../../src/presentation/stackedCard/content/NoteCard.tsx"],"sourcesContent":["import React, { ReactElement } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport {\n CardProjectLine,\n EntityDots,\n Placeholder,\n StyledTitleBlock,\n} from \"./shared\";\nimport { NoteIcon } from \"../../../components/Icons\";\nimport { SkeletonLoader } from \"../../../components/Loaders\";\nimport { StackedCardRow as StackRow } from \"../../../components/StackedCard\";\nimport { Body2 } from \"../../../components/Typography\";\n\n/**\n * NoteCard — the new fifth type. A multi-line text card (Milanote-style): a\n * title row that owns the \"…\" menu, then padded body rows. The body clamps at a\n * line limit and fades out; auto-height, so the card grows with its content.\n * Inline editing lands in task 4/8 — this is the read view + placeholder.\n */\n\n/* The body clamps at a max height and fades out with a mask so long notes end\n softly instead of hard-cropping. white-space: pre-line keeps authored breaks. */\nconst StyledNoteBody = styled(Body2)`\n display: block;\n max-height: 132px;\n overflow: hidden;\n white-space: pre-line;\n -webkit-mask-image: linear-gradient(180deg, #000 72%, transparent);\n mask-image: linear-gradient(180deg, #000 72%, transparent);\n`;\n\nexport const SAMPLE_NOTE = `Kickoff open questions before we lock the columns:\n\n• Who owns the migration off react-dnd, and does it block the canvas work or run in parallel?\n• Confirm the outline-placeholder choreography reads the same in a scrolled column.\n• Do we ship the note type in v1, or defer inline editing?`;\n\nexport interface NoteCardProps {\n title?: string;\n body?: string;\n /**\n * The project the note belongs to, above the title — the same line, in the\n * same treatment, that a TaskCard uses. Off by default: only a surface that\n * mixes projects needs it.\n */\n showProjectName?: boolean;\n projectName?: string;\n}\n\nexport const NoteCard = ({\n title = \"Kickoff notes\",\n body = SAMPLE_NOTE,\n showProjectName = false,\n projectName = \"Marketing Site\",\n}: NoteCardProps): ReactElement => (\n <>\n <StackRow role=\"title\">\n <StyledTitleBlock>\n {showProjectName ? (\n <CardProjectLine>{projectName}</CardProjectLine>\n ) : null}\n <Body2 weight=\"bold\">{title}</Body2>\n </StyledTitleBlock>\n <EntityDots aria-label=\"Note options\" />\n </StackRow>\n <StackRow role=\"custom\" direction=\"column\">\n <StyledNoteBody color=\"secondary\">{body}</StyledNoteBody>\n </StackRow>\n </>\n);\n\n/* ---- placeholder + skeleton ---- */\n\nexport const NotePlaceholder = (\n props: React.ButtonHTMLAttributes<HTMLButtonElement>\n): ReactElement => (\n <Placeholder icon={<NoteIcon />} label=\"Write a note\" {...props} />\n);\n\n/* Skeleton mirrors the note anatomy: a title line, then several body lines. */\nexport const NoteSkeleton = (): ReactElement => (\n <>\n <StackRow role=\"title\">\n <SkeletonLoader style={{ height: 14, width: \"50%\" }} />\n </StackRow>\n <StackRow role=\"custom\" direction=\"column\">\n <SkeletonLoader style={{ height: 10, width: \"100%\" }} />\n <SkeletonLoader style={{ height: 10, width: \"96%\" }} />\n <SkeletonLoader style={{ height: 10, width: \"88%\" }} />\n <SkeletonLoader style={{ height: 10, width: \"70%\" }} />\n </StackRow>\n </>\n);\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,64 @@
1
+ import { ReactElement } from "react";
2
+ /**
3
+ * ProjectCard — a project as a stacked card.
4
+ *
5
+ * The sixth content type, and the second one that mirrors a project-management
6
+ * record rather than something authored on the surface (TaskCard is the first).
7
+ * It composes the same shell and the same rows; nothing in `components/StackedCard`
8
+ * knows it exists.
9
+ *
10
+ * The face is the app's Projects page, read off `ProjectListGroup.jsx`:
11
+ * - the NAME is the card's title (`Header3`, as in the grid card);
12
+ * - the CLIENT sits under it — `Entity.Property "entity-property-client"`, the
13
+ * company the project is for;
14
+ * - the DESCRIPTION is the project's `body`, the grid card's `Body2` tertiary
15
+ * excerpt, clamped because the whole text lives on the project and this is a
16
+ * reference to it, not a copy;
17
+ * - the LEADER and the LABEL share one row. The label is a FILLED pill whose
18
+ * background is the label's own colour and whose text is a darker shade of
19
+ * it (`ProjectLabel.jsx`: `EntityLabel` with `backgroundColor: label.color`,
20
+ * `color: label.darker_text_color`) — the design system's `Chip`, not the
21
+ * colour-text `Tag` the column cards use for task labels.
22
+ *
23
+ * There is deliberately NO progress indicator. A single percentage is the one
24
+ * number on a project that cannot be read without knowing how it was computed,
25
+ * and a card is a place people put a project to talk ABOUT it — the number
26
+ * invites a conversation about the number instead.
27
+ */
28
+ export interface ProjectCardPerson {
29
+ name: string;
30
+ initials: string;
31
+ /** Avatar colours stand in for the server-rendered avatar: data, not theme. */
32
+ color: string;
33
+ }
34
+ /** A project label carries both of the colours the app stores for it. */
35
+ export interface ProjectCardLabel {
36
+ text: string;
37
+ /** `label.color` — the pill's background. */
38
+ color: string;
39
+ /** `label.darker_text_color` — the pill's text. */
40
+ textColor: string;
41
+ }
42
+ /**
43
+ * What an internal project's client line says.
44
+ *
45
+ * A project with no client belongs to the account's own company, and printing
46
+ * that company's name back at someone who works there says nothing. So the line
47
+ * states the fact instead.
48
+ */
49
+ export declare const INTERNAL_CLIENT_LABEL = "Internal";
50
+ /** One rule for the client line, so no surface can label the same project twice. */
51
+ export declare const projectClientLine: (client: string | null | undefined) => string;
52
+ export interface ProjectCardProps {
53
+ name?: string;
54
+ /** The client company. `null` is an internal project — the line reads "Internal". */
55
+ client?: string | null;
56
+ /** The project's `body`; the excerpt row exists only when it has one. */
57
+ description?: string;
58
+ /** A project need not have a leader. */
59
+ leader?: ProjectCardPerson;
60
+ /** A project need not have a label. */
61
+ label?: ProjectCardLabel;
62
+ }
63
+ export declare const ProjectCard: ({ name, client, description, leader, label, }: ProjectCardProps) => ReactElement;
64
+ //# sourceMappingURL=ProjectCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectCard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/stackedCard/content/ProjectCard.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAe5C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,MACrC,CAAC;AA4DlC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,uCAAuC;IACvC,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED,eAAO,MAAM,WAAW,GAAI,+CAMzB,gBAAgB,KAAG,YAmDrB,CAAC"}