@shipfox/client-triggers 16.0.0 → 21.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,6 +6,7 @@ import { Callout } from '@shipfox/react-ui/callout';
6
6
  import { CodeBlock, CodeBlockBody, CodeBlockContent, CodeBlockCopyButton, CodeBlockFilename, CodeBlockFiles, CodeBlockHeader, CodeBlockItem } from '@shipfox/react-ui/code-block';
7
7
  import { EmptyState } from '@shipfox/react-ui/empty-state';
8
8
  import { Icon } from '@shipfox/react-ui/icon';
9
+ import { Panel, PanelBody, PanelHeader, PanelTitle } from '@shipfox/react-ui/panel';
9
10
  import { RelativeTime } from '@shipfox/react-ui/relative-time';
10
11
  import { Skeleton } from '@shipfox/react-ui/skeleton';
11
12
  import { Tooltip, TooltipContent, TooltipTrigger } from '@shipfox/react-ui/tooltip';
@@ -16,7 +17,6 @@ import { useMemo } from 'react';
16
17
  import { useTriggerEventQuery } from '#hooks/api/trigger-events.js';
17
18
  import { triggerEventResult } from './trigger-event-result.js';
18
19
  import { TriggerSourceIcon } from './trigger-source-icon.js';
19
- const PANEL_CLASS = 'min-h-0 rounded-8 border border-border-neutral-base bg-background-neutral-base';
20
20
  const DETAIL_RAIL_CLASS = '@min-[820px]:sticky @min-[820px]:top-16 @min-[820px]:max-h-[calc(var(--app-content-h,100dvh_-_96px)_-_32px)] @min-[820px]:min-h-[min(320px,calc(var(--app-content-h,100dvh_-_96px)_-_32px))]';
21
21
  export function TriggerEventDetail({ workspaceId, workspaceSlug, eventId, onBack }) {
22
22
  const query = useTriggerEventQuery(eventId);
@@ -46,10 +46,10 @@ export function TriggerEventDetailView({ workspaceId, workspaceSlug, event, onBa
46
46
  ]);
47
47
  return /*#__PURE__*/ _jsxs("aside", {
48
48
  "aria-label": "Event details",
49
- className: cn(PANEL_CLASS, DETAIL_RAIL_CLASS, 'flex min-h-0 flex-col overflow-hidden'),
49
+ className: cn(DETAIL_RAIL_CLASS, 'flex min-h-0 flex-col gap-group'),
50
50
  children: [
51
51
  /*#__PURE__*/ _jsxs("div", {
52
- className: "flex shrink-0 flex-col gap-cluster border-b border-border-neutral-base p-panel-compact",
52
+ className: "flex shrink-0 flex-col gap-cluster p-panel-compact",
53
53
  children: [
54
54
  /*#__PURE__*/ _jsx(Button, {
55
55
  type: "button",
@@ -119,7 +119,7 @@ export function TriggerEventDetailView({ workspaceId, workspaceSlug, event, onBa
119
119
  ]
120
120
  }),
121
121
  /*#__PURE__*/ _jsxs("div", {
122
- className: "flex min-h-0 flex-1 flex-col gap-section overflow-y-auto p-panel-compact scrollbar",
122
+ className: "flex min-h-0 flex-1 flex-col gap-group overflow-y-auto scrollbar",
123
123
  children: [
124
124
  /*#__PURE__*/ _jsx(EventRuns, {
125
125
  workspaceId: workspaceId,
@@ -146,92 +146,106 @@ function triggerEventFullLabel(event) {
146
146
  function TriggerEventDetailPlaceholder() {
147
147
  return /*#__PURE__*/ _jsx("aside", {
148
148
  "aria-label": "Event details",
149
- className: cn(PANEL_CLASS, 'hidden min-h-[240px] items-center justify-center p-panel @min-[820px]:flex'),
150
- children: /*#__PURE__*/ _jsx(EmptyState, {
151
- icon: "pulseLine",
152
- variant: "compact",
153
- title: "No event selected"
149
+ className: "hidden min-h-[240px] @min-[820px]:flex",
150
+ children: /*#__PURE__*/ _jsx(Panel, {
151
+ className: "flex min-h-0 flex-1 items-center justify-center p-panel",
152
+ children: /*#__PURE__*/ _jsx(EmptyState, {
153
+ icon: "pulseLine",
154
+ variant: "compact",
155
+ title: "No event selected"
156
+ })
154
157
  })
155
158
  });
156
159
  }
157
160
  function TriggerEventDetailLoading({ onBack }) {
158
- return /*#__PURE__*/ _jsxs("aside", {
159
- "aria-label": "Event details",
160
- className: cn(PANEL_CLASS, DETAIL_RAIL_CLASS, 'flex min-h-[320px] flex-col gap-group p-panel-compact'),
161
- children: [
162
- /*#__PURE__*/ _jsx(Button, {
163
- type: "button",
164
- variant: "transparentMuted",
165
- size: "sm",
166
- iconLeft: "arrowLeftLine",
167
- className: "self-start @min-[820px]:hidden",
168
- onClick: onBack,
169
- children: "Back to events"
170
- }),
171
- /*#__PURE__*/ _jsxs("div", {
172
- className: "flex flex-col gap-inline",
173
- children: [
174
- /*#__PURE__*/ _jsx(Skeleton, {
175
- className: "h-16 w-160"
176
- }),
177
- /*#__PURE__*/ _jsx(Skeleton, {
178
- className: "h-12 w-120"
179
- })
180
- ]
181
- }),
182
- /*#__PURE__*/ _jsx(Skeleton, {
183
- className: "h-96"
184
- }),
185
- /*#__PURE__*/ _jsx(Skeleton, {
186
- className: "h-160"
187
- })
188
- ]
189
- });
190
- }
191
- function TriggerEventDetailError({ onBack, onRetry }) {
192
- return /*#__PURE__*/ _jsxs("aside", {
161
+ return /*#__PURE__*/ _jsx("aside", {
193
162
  "aria-label": "Event details",
194
- className: cn(PANEL_CLASS, DETAIL_RAIL_CLASS, 'flex min-h-[320px] flex-col gap-group p-panel-compact'),
195
- children: [
196
- /*#__PURE__*/ _jsx(Button, {
197
- type: "button",
198
- variant: "transparentMuted",
199
- size: "sm",
200
- iconLeft: "arrowLeftLine",
201
- className: "self-start @min-[820px]:hidden",
202
- onClick: onBack,
203
- children: "Back to events"
204
- }),
205
- /*#__PURE__*/ _jsx(Callout, {
206
- role: "alert",
207
- type: "error",
208
- children: /*#__PURE__*/ _jsxs("div", {
209
- className: "flex items-center justify-between gap-cluster",
163
+ className: cn(DETAIL_RAIL_CLASS, 'flex min-h-[320px] flex-col'),
164
+ children: /*#__PURE__*/ _jsxs(Panel, {
165
+ className: "flex min-h-[320px] flex-col gap-group p-panel-compact",
166
+ children: [
167
+ /*#__PURE__*/ _jsx(Button, {
168
+ type: "button",
169
+ variant: "transparentMuted",
170
+ size: "sm",
171
+ iconLeft: "arrowLeftLine",
172
+ className: "self-start @min-[820px]:hidden",
173
+ onClick: onBack,
174
+ children: "Back to events"
175
+ }),
176
+ /*#__PURE__*/ _jsxs("div", {
177
+ className: "flex flex-col gap-inline",
210
178
  children: [
211
- /*#__PURE__*/ _jsx(Text, {
212
- size: "sm",
213
- children: "Event detail could not be loaded."
179
+ /*#__PURE__*/ _jsx(Skeleton, {
180
+ className: "h-16 w-160"
214
181
  }),
215
- /*#__PURE__*/ _jsx(Button, {
216
- type: "button",
217
- variant: "secondary",
218
- size: "xs",
219
- onClick: onRetry,
220
- children: "Retry"
182
+ /*#__PURE__*/ _jsx(Skeleton, {
183
+ className: "h-12 w-120"
221
184
  })
222
185
  ]
186
+ }),
187
+ /*#__PURE__*/ _jsx(Skeleton, {
188
+ className: "h-96"
189
+ }),
190
+ /*#__PURE__*/ _jsx(Skeleton, {
191
+ className: "h-160"
223
192
  })
224
- })
225
- ]
193
+ ]
194
+ })
195
+ });
196
+ }
197
+ function TriggerEventDetailError({ onBack, onRetry }) {
198
+ return /*#__PURE__*/ _jsx("aside", {
199
+ "aria-label": "Event details",
200
+ className: cn(DETAIL_RAIL_CLASS, 'flex min-h-[320px] flex-col'),
201
+ children: /*#__PURE__*/ _jsxs(Panel, {
202
+ className: "flex min-h-[320px] flex-col gap-group p-panel-compact",
203
+ children: [
204
+ /*#__PURE__*/ _jsx(Button, {
205
+ type: "button",
206
+ variant: "transparentMuted",
207
+ size: "sm",
208
+ iconLeft: "arrowLeftLine",
209
+ className: "self-start @min-[820px]:hidden",
210
+ onClick: onBack,
211
+ children: "Back to events"
212
+ }),
213
+ /*#__PURE__*/ _jsx(Callout, {
214
+ role: "alert",
215
+ type: "error",
216
+ children: /*#__PURE__*/ _jsxs("div", {
217
+ className: "flex items-center justify-between gap-cluster",
218
+ children: [
219
+ /*#__PURE__*/ _jsx(Text, {
220
+ size: "sm",
221
+ children: "Event detail could not be loaded."
222
+ }),
223
+ /*#__PURE__*/ _jsx(Button, {
224
+ type: "button",
225
+ variant: "secondary",
226
+ size: "xs",
227
+ onClick: onRetry,
228
+ children: "Retry"
229
+ })
230
+ ]
231
+ })
232
+ })
233
+ ]
234
+ })
226
235
  });
227
236
  }
228
237
  function EventRuns({ workspaceId, workspaceSlug, event }) {
229
238
  if (event.decisions.length === 0) {
230
239
  if (event.outcome === 'discarded') {
231
- return /*#__PURE__*/ _jsx(Text, {
232
- size: "sm",
233
- className: "text-foreground-neutral-muted",
234
- children: "No workflows are subscribed to this event."
240
+ return /*#__PURE__*/ _jsx(Panel, {
241
+ children: /*#__PURE__*/ _jsx(PanelBody, {
242
+ className: "p-panel-compact",
243
+ children: /*#__PURE__*/ _jsx(Text, {
244
+ size: "sm",
245
+ className: "text-foreground-neutral-muted",
246
+ children: "No workflows are subscribed to this event."
247
+ })
248
+ })
235
249
  });
236
250
  }
237
251
  return null;
@@ -265,25 +279,23 @@ function EventRunsWithProjects({ workspaceId, workspaceSlug, event }) {
265
279
  });
266
280
  }
267
281
  function EventRunsList({ workspaceSlug, projectSlugs, projectDetailLookupEnabled = false, event }) {
268
- return /*#__PURE__*/ _jsxs("section", {
269
- "aria-labelledby": "trigger-event-runs-heading",
270
- className: "flex flex-col gap-inline",
282
+ return /*#__PURE__*/ _jsxs(Panel, {
271
283
  children: [
272
- /*#__PURE__*/ _jsx(Text, {
273
- id: "trigger-event-runs-heading",
274
- size: "sm",
275
- bold: true,
276
- children: "Matched workflows"
284
+ /*#__PURE__*/ _jsx(PanelHeader, {
285
+ children: /*#__PURE__*/ _jsx(PanelTitle, {
286
+ children: "Matched workflows"
287
+ })
277
288
  }),
278
- /*#__PURE__*/ _jsx("ul", {
279
- className: "-mx-inline flex flex-col gap-tight",
280
- children: event.decisions.map((decision)=>/*#__PURE__*/ _jsx(DecisionRow, {
281
- workspaceSlug: workspaceSlug,
282
- projectId: decision.projectId ?? undefined,
283
- projectSlug: decision.projectId ? projectSlugs.get(decision.projectId) : undefined,
284
- projectDetailLookupEnabled: projectDetailLookupEnabled,
285
- decision: decision
286
- }, decision.id))
289
+ /*#__PURE__*/ _jsx(PanelBody, {
290
+ children: /*#__PURE__*/ _jsx("ul", {
291
+ children: event.decisions.map((decision)=>/*#__PURE__*/ _jsx(DecisionRow, {
292
+ workspaceSlug: workspaceSlug,
293
+ projectId: decision.projectId ?? undefined,
294
+ projectSlug: decision.projectId ? projectSlugs.get(decision.projectId) : undefined,
295
+ projectDetailLookupEnabled: projectDetailLookupEnabled,
296
+ decision: decision
297
+ }, decision.id))
298
+ })
287
299
  })
288
300
  ]
289
301
  });
@@ -293,34 +305,37 @@ function DecisionRow({ projectId, projectSlug, workspaceSlug, projectDetailLooku
293
305
  const projectQuery = useProjectQuery(canRenderRunLink && projectDetailLookupEnabled && !projectSlug ? projectId : undefined);
294
306
  const resolvedProjectSlug = projectSlug ?? projectQuery.data?.slug;
295
307
  if (decision.decision !== 'triggered' || !decision.runId || !decision.runName) {
296
- return /*#__PURE__*/ _jsxs("li", {
297
- className: "flex min-w-0 items-start gap-inline rounded-6 p-tight",
298
- children: [
299
- /*#__PURE__*/ _jsx(Icon, {
300
- name: "cornerDownRightLine",
301
- className: "size-14 shrink-0 text-foreground-neutral-disabled",
302
- "aria-hidden": "true"
303
- }),
304
- /*#__PURE__*/ _jsxs("div", {
305
- className: "flex min-w-0 flex-col gap-tight",
306
- children: [
307
- /*#__PURE__*/ _jsx(Text, {
308
- size: "sm",
309
- className: "min-w-0 truncate text-foreground-neutral-base",
310
- children: decision.subscriptionName
311
- }),
312
- decision.reason ? /*#__PURE__*/ _jsx(Text, {
313
- size: "xs",
314
- className: "text-foreground-highlight-error",
315
- children: decision.reason
316
- }) : /*#__PURE__*/ _jsx(Text, {
317
- size: "xs",
318
- className: "text-foreground-neutral-disabled",
319
- children: "No run created"
320
- })
321
- ]
322
- })
323
- ]
308
+ return /*#__PURE__*/ _jsx("li", {
309
+ className: "border-b border-border-neutral-base px-row py-row last:border-b-0",
310
+ children: /*#__PURE__*/ _jsxs("div", {
311
+ className: "flex min-w-0 items-start gap-inline",
312
+ children: [
313
+ /*#__PURE__*/ _jsx(Icon, {
314
+ name: "cornerDownRightLine",
315
+ className: "size-14 shrink-0 text-foreground-neutral-disabled",
316
+ "aria-hidden": "true"
317
+ }),
318
+ /*#__PURE__*/ _jsxs("div", {
319
+ className: "flex min-w-0 flex-col gap-tight",
320
+ children: [
321
+ /*#__PURE__*/ _jsx(Text, {
322
+ size: "sm",
323
+ className: "min-w-0 truncate text-foreground-neutral-base",
324
+ children: decision.subscriptionName
325
+ }),
326
+ decision.reason ? /*#__PURE__*/ _jsx(Text, {
327
+ size: "xs",
328
+ className: "text-foreground-highlight-error",
329
+ children: decision.reason
330
+ }) : /*#__PURE__*/ _jsx(Text, {
331
+ size: "xs",
332
+ className: "text-foreground-neutral-disabled",
333
+ children: "No run created"
334
+ })
335
+ ]
336
+ })
337
+ ]
338
+ })
324
339
  });
325
340
  }
326
341
  const row = /*#__PURE__*/ _jsxs(_Fragment, {
@@ -349,8 +364,9 @@ function DecisionRow({ projectId, projectSlug, workspaceSlug, projectDetailLooku
349
364
  })
350
365
  ]
351
366
  });
352
- const rowClassName = 'flex min-w-0 items-start gap-inline rounded-6 p-tight hover:bg-background-components-hover focus-visible:outline-none focus-visible:shadow-button-neutral-focus';
367
+ const rowClassName = 'flex min-w-0 items-start gap-inline px-row py-row hover:bg-background-neutral-hover focus-visible:outline-none focus-visible:shadow-button-neutral-focus';
353
368
  return /*#__PURE__*/ _jsx("li", {
369
+ className: "border-b border-border-neutral-base last:border-b-0",
354
370
  children: workspaceSlug && resolvedProjectSlug ? /*#__PURE__*/ _jsx(Link, {
355
371
  to: "/w/$workspaceSlug/p/$projectSlug/runs/$workflowRunId",
356
372
  params: {
@@ -374,46 +390,46 @@ function EventPayload({ payload }) {
374
390
  code: payload
375
391
  }
376
392
  ];
377
- return /*#__PURE__*/ _jsxs("section", {
378
- "aria-labelledby": "trigger-event-payload-heading",
379
- className: "flex flex-col gap-inline",
393
+ return /*#__PURE__*/ _jsxs(Panel, {
380
394
  children: [
381
- /*#__PURE__*/ _jsx(Text, {
382
- id: "trigger-event-payload-heading",
383
- size: "sm",
384
- bold: true,
385
- children: "Payload"
395
+ /*#__PURE__*/ _jsx(PanelHeader, {
396
+ children: /*#__PURE__*/ _jsx(PanelTitle, {
397
+ children: "Payload"
398
+ })
386
399
  }),
387
- /*#__PURE__*/ _jsxs(CodeBlock, {
388
- data: data,
389
- className: "flex h-auto flex-col overflow-visible rounded-8 bg-background-contrast-base shadow-none",
390
- children: [
391
- /*#__PURE__*/ _jsxs(CodeBlockHeader, {
392
- className: "sticky top-0 z-10 shrink-0 border-b border-border-contrast-base bg-background-contrast-base p-tight",
393
- children: [
394
- /*#__PURE__*/ _jsx(CodeBlockFiles, {
395
- children: (item)=>/*#__PURE__*/ _jsx(CodeBlockFilename, {
396
- value: item.filename,
397
- children: item.filename
400
+ /*#__PURE__*/ _jsx(PanelBody, {
401
+ className: "p-0",
402
+ children: /*#__PURE__*/ _jsxs(CodeBlock, {
403
+ data: data,
404
+ className: "flex h-auto flex-col overflow-visible rounded-none bg-background-contrast-base shadow-none",
405
+ children: [
406
+ /*#__PURE__*/ _jsxs(CodeBlockHeader, {
407
+ className: "sticky top-0 z-10 shrink-0 border-b border-border-contrast-base bg-background-contrast-base p-tight",
408
+ children: [
409
+ /*#__PURE__*/ _jsx(CodeBlockFiles, {
410
+ children: (item)=>/*#__PURE__*/ _jsx(CodeBlockFilename, {
411
+ value: item.filename,
412
+ children: item.filename
413
+ })
414
+ }),
415
+ /*#__PURE__*/ _jsx(CodeBlockCopyButton, {})
416
+ ]
417
+ }),
418
+ /*#__PURE__*/ _jsx(CodeBlockBody, {
419
+ className: "min-h-0 scrollbar",
420
+ children: (item)=>/*#__PURE__*/ _jsx(CodeBlockItem, {
421
+ value: item.filename,
422
+ lineNumbers: false,
423
+ className: "px-0 pb-0 [&>div]:rounded-none [&>div]:border-0 [&>div]:bg-background-contrast-base [&_code]:!text-foreground-neutral-on-color",
424
+ children: /*#__PURE__*/ _jsx(CodeBlockContent, {
425
+ language: "json",
426
+ syntaxHighlighting: false,
427
+ children: item.code
398
428
  })
399
- }),
400
- /*#__PURE__*/ _jsx(CodeBlockCopyButton, {})
401
- ]
402
- }),
403
- /*#__PURE__*/ _jsx(CodeBlockBody, {
404
- className: "min-h-0 scrollbar",
405
- children: (item)=>/*#__PURE__*/ _jsx(CodeBlockItem, {
406
- value: item.filename,
407
- lineNumbers: false,
408
- className: "px-0 pb-0 [&>div]:rounded-none [&>div]:border-0 [&>div]:bg-background-contrast-base [&>div]:dark:bg-background-contrast-base [&_code]:!text-foreground-neutral-on-color",
409
- children: /*#__PURE__*/ _jsx(CodeBlockContent, {
410
- language: "json",
411
- syntaxHighlighting: false,
412
- children: item.code
413
429
  })
414
- })
415
- })
416
- ]
430
+ })
431
+ ]
432
+ })
417
433
  })
418
434
  ]
419
435
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/trigger-event-detail.tsx"],"sourcesContent":["import {useProjectQuery, useProjectsInfiniteQuery} from '@shipfox/client-projects';\nimport {Badge} from '@shipfox/react-ui/badge';\nimport {Button} from '@shipfox/react-ui/button';\nimport {Callout} from '@shipfox/react-ui/callout';\nimport {\n CodeBlock,\n CodeBlockBody,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockFilename,\n CodeBlockFiles,\n CodeBlockHeader,\n CodeBlockItem,\n} from '@shipfox/react-ui/code-block';\nimport {EmptyState} from '@shipfox/react-ui/empty-state';\nimport {Icon} from '@shipfox/react-ui/icon';\nimport {RelativeTime} from '@shipfox/react-ui/relative-time';\nimport {Skeleton} from '@shipfox/react-ui/skeleton';\nimport {Tooltip, TooltipContent, TooltipTrigger} from '@shipfox/react-ui/tooltip';\nimport {Code, Text} from '@shipfox/react-ui/typography';\nimport {cn} from '@shipfox/react-ui/utils';\nimport {Link} from '@tanstack/react-router';\nimport {useMemo} from 'react';\nimport type {\n TriggerEventDetail as TriggerEventDetailModel,\n TriggerEventMatchedWorkflowResult,\n} from '#core/trigger-event.js';\nimport {useTriggerEventQuery} from '#hooks/api/trigger-events.js';\nimport {triggerEventResult} from './trigger-event-result.js';\nimport {TriggerSourceIcon} from './trigger-source-icon.js';\n\nconst PANEL_CLASS =\n 'min-h-0 rounded-8 border border-border-neutral-base bg-background-neutral-base';\nconst DETAIL_RAIL_CLASS =\n '@min-[820px]:sticky @min-[820px]:top-16 @min-[820px]:max-h-[calc(var(--app-content-h,100dvh_-_96px)_-_32px)] @min-[820px]:min-h-[min(320px,calc(var(--app-content-h,100dvh_-_96px)_-_32px))]';\n\nexport interface TriggerEventDetailProps {\n workspaceId?: string | undefined;\n workspaceSlug?: string | undefined;\n eventId?: string | undefined;\n onBack: () => void;\n}\n\nexport function TriggerEventDetail({\n workspaceId,\n workspaceSlug,\n eventId,\n onBack,\n}: TriggerEventDetailProps) {\n const query = useTriggerEventQuery(eventId);\n\n if (!eventId) return <TriggerEventDetailPlaceholder />;\n if (query.data) {\n return (\n <TriggerEventDetailView\n workspaceId={workspaceId}\n workspaceSlug={workspaceSlug}\n event={query.data}\n onBack={onBack}\n />\n );\n }\n if (query.isError)\n return <TriggerEventDetailError onBack={onBack} onRetry={() => query.refetch()} />;\n return <TriggerEventDetailLoading onBack={onBack} />;\n}\n\nexport function TriggerEventDetailView({\n workspaceId,\n workspaceSlug,\n event,\n onBack,\n}: {\n workspaceId?: string | undefined;\n workspaceSlug?: string | undefined;\n event: TriggerEventDetailModel;\n onBack: () => void;\n}) {\n const result = triggerEventResult(event);\n const eventLabel = triggerEventDisplayLabel(event);\n const fullEventLabel = triggerEventFullLabel(event);\n const formattedPayload = useMemo(\n () => JSON.stringify(event.payload ?? null, null, 2) ?? 'null',\n [event.payload],\n );\n\n return (\n <aside\n aria-label=\"Event details\"\n className={cn(PANEL_CLASS, DETAIL_RAIL_CLASS, 'flex min-h-0 flex-col overflow-hidden')}\n >\n <div className=\"flex shrink-0 flex-col gap-cluster border-b border-border-neutral-base p-panel-compact\">\n <Button\n type=\"button\"\n variant=\"transparentMuted\"\n size=\"sm\"\n iconLeft=\"arrowLeftLine\"\n className=\"self-start @min-[820px]:hidden\"\n onClick={onBack}\n >\n Back to events\n </Button>\n <div className=\"flex min-w-0 items-start justify-between gap-cluster\">\n <div className=\"flex min-w-0 flex-col gap-tight\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n aria-label={fullEventLabel}\n className=\"flex min-w-0 items-center gap-inline rounded-6 border-0 bg-transparent p-0 text-left outline-none focus-visible:shadow-button-neutral-focus\"\n >\n <TriggerSourceIcon\n provider={event.provider}\n source={event.source}\n aria-hidden=\"true\"\n className=\"size-16 shrink-0 text-foreground-neutral-muted\"\n />\n <Code as=\"span\" variant=\"label\" className=\"truncate text-foreground-neutral-base\">\n {eventLabel}\n </Code>\n </button>\n </TooltipTrigger>\n <TooltipContent>\n <Code as=\"span\" variant=\"label\" className=\"block max-w-[360px] break-words\">\n {fullEventLabel}\n </Code>\n </TooltipContent>\n </Tooltip>\n <Text size=\"xs\" className=\"truncate text-foreground-neutral-muted\">\n <RelativeTime value={event.receivedAt} />\n </Text>\n </div>\n <Badge variant={result.badge} size=\"xs\">\n {result.label}\n </Badge>\n </div>\n </div>\n\n <div\n key={event.id}\n className=\"flex min-h-0 flex-1 flex-col gap-section overflow-y-auto p-panel-compact scrollbar\"\n >\n <EventRuns workspaceId={workspaceId} workspaceSlug={workspaceSlug} event={event} />\n <EventPayload payload={formattedPayload} />\n </div>\n </aside>\n );\n}\n\nfunction triggerEventDisplayLabel(event: Pick<TriggerEventDetailModel, 'event' | 'source'>) {\n return event.event || event.source;\n}\n\nfunction triggerEventFullLabel(event: Pick<TriggerEventDetailModel, 'event' | 'source'>) {\n return [event.source, event.event].filter(Boolean).join(' · ');\n}\n\nfunction TriggerEventDetailPlaceholder() {\n return (\n <aside\n aria-label=\"Event details\"\n className={cn(\n PANEL_CLASS,\n 'hidden min-h-[240px] items-center justify-center p-panel @min-[820px]:flex',\n )}\n >\n <EmptyState icon=\"pulseLine\" variant=\"compact\" title=\"No event selected\" />\n </aside>\n );\n}\n\nfunction TriggerEventDetailLoading({onBack}: {onBack: () => void}) {\n return (\n <aside\n aria-label=\"Event details\"\n className={cn(\n PANEL_CLASS,\n DETAIL_RAIL_CLASS,\n 'flex min-h-[320px] flex-col gap-group p-panel-compact',\n )}\n >\n <Button\n type=\"button\"\n variant=\"transparentMuted\"\n size=\"sm\"\n iconLeft=\"arrowLeftLine\"\n className=\"self-start @min-[820px]:hidden\"\n onClick={onBack}\n >\n Back to events\n </Button>\n <div className=\"flex flex-col gap-inline\">\n <Skeleton className=\"h-16 w-160\" />\n <Skeleton className=\"h-12 w-120\" />\n </div>\n <Skeleton className=\"h-96\" />\n <Skeleton className=\"h-160\" />\n </aside>\n );\n}\n\nfunction TriggerEventDetailError({onBack, onRetry}: {onBack: () => void; onRetry: () => void}) {\n return (\n <aside\n aria-label=\"Event details\"\n className={cn(\n PANEL_CLASS,\n DETAIL_RAIL_CLASS,\n 'flex min-h-[320px] flex-col gap-group p-panel-compact',\n )}\n >\n <Button\n type=\"button\"\n variant=\"transparentMuted\"\n size=\"sm\"\n iconLeft=\"arrowLeftLine\"\n className=\"self-start @min-[820px]:hidden\"\n onClick={onBack}\n >\n Back to events\n </Button>\n <Callout role=\"alert\" type=\"error\">\n <div className=\"flex items-center justify-between gap-cluster\">\n <Text size=\"sm\">Event detail could not be loaded.</Text>\n <Button type=\"button\" variant=\"secondary\" size=\"xs\" onClick={onRetry}>\n Retry\n </Button>\n </div>\n </Callout>\n </aside>\n );\n}\n\nfunction EventRuns({\n workspaceId,\n workspaceSlug,\n event,\n}: {\n workspaceId?: string | undefined;\n workspaceSlug?: string | undefined;\n event: TriggerEventDetailModel;\n}) {\n if (event.decisions.length === 0) {\n if (event.outcome === 'discarded') {\n return (\n <Text size=\"sm\" className=\"text-foreground-neutral-muted\">\n No workflows are subscribed to this event.\n </Text>\n );\n }\n return null;\n }\n\n if (!workspaceId) {\n return <EventRunsList workspaceSlug={workspaceSlug} projectSlugs={new Map()} event={event} />;\n }\n\n return (\n <EventRunsWithProjects workspaceId={workspaceId} workspaceSlug={workspaceSlug} event={event} />\n );\n}\n\nfunction EventRunsWithProjects({\n workspaceId,\n workspaceSlug,\n event,\n}: {\n workspaceId: string;\n workspaceSlug?: string | undefined;\n event: TriggerEventDetailModel;\n}) {\n const projectsQuery = useProjectsInfiniteQuery(workspaceId);\n const projectSlugs = useMemo(\n () =>\n new Map(\n projectsQuery.data?.pages\n .flatMap((page) => page.projects)\n .map((project) => [project.id, project.slug] as const),\n ),\n [projectsQuery.data],\n );\n return (\n <EventRunsList\n workspaceSlug={workspaceSlug}\n projectSlugs={projectSlugs}\n projectDetailLookupEnabled={!projectsQuery.isPending}\n event={event}\n />\n );\n}\n\nfunction EventRunsList({\n workspaceSlug,\n projectSlugs,\n projectDetailLookupEnabled = false,\n event,\n}: {\n workspaceSlug?: string | undefined;\n projectSlugs: ReadonlyMap<string, string>;\n projectDetailLookupEnabled?: boolean;\n event: TriggerEventDetailModel;\n}) {\n return (\n <section aria-labelledby=\"trigger-event-runs-heading\" className=\"flex flex-col gap-inline\">\n <Text id=\"trigger-event-runs-heading\" size=\"sm\" bold>\n Matched workflows\n </Text>\n <ul className=\"-mx-inline flex flex-col gap-tight\">\n {event.decisions.map((decision) => (\n <DecisionRow\n key={decision.id}\n workspaceSlug={workspaceSlug}\n projectId={decision.projectId ?? undefined}\n projectSlug={decision.projectId ? projectSlugs.get(decision.projectId) : undefined}\n projectDetailLookupEnabled={projectDetailLookupEnabled}\n decision={decision}\n />\n ))}\n </ul>\n </section>\n );\n}\n\nfunction DecisionRow({\n projectId,\n projectSlug,\n workspaceSlug,\n projectDetailLookupEnabled,\n decision,\n}: {\n projectId?: string | undefined;\n projectSlug?: string | undefined;\n workspaceSlug?: string | undefined;\n projectDetailLookupEnabled: boolean;\n decision: TriggerEventMatchedWorkflowResult;\n}) {\n const canRenderRunLink =\n decision.decision === 'triggered' && Boolean(decision.runId && decision.runName);\n const projectQuery = useProjectQuery(\n canRenderRunLink && projectDetailLookupEnabled && !projectSlug ? projectId : undefined,\n );\n const resolvedProjectSlug = projectSlug ?? projectQuery.data?.slug;\n\n if (decision.decision !== 'triggered' || !decision.runId || !decision.runName) {\n return (\n <li className=\"flex min-w-0 items-start gap-inline rounded-6 p-tight\">\n <Icon\n name=\"cornerDownRightLine\"\n className=\"size-14 shrink-0 text-foreground-neutral-disabled\"\n aria-hidden=\"true\"\n />\n <div className=\"flex min-w-0 flex-col gap-tight\">\n <Text size=\"sm\" className=\"min-w-0 truncate text-foreground-neutral-base\">\n {decision.subscriptionName}\n </Text>\n {decision.reason ? (\n <Text size=\"xs\" className=\"text-foreground-highlight-error\">\n {decision.reason}\n </Text>\n ) : (\n <Text size=\"xs\" className=\"text-foreground-neutral-disabled\">\n No run created\n </Text>\n )}\n </div>\n </li>\n );\n }\n\n const row = (\n <>\n <Icon\n name=\"cornerDownRightLine\"\n className=\"size-14 shrink-0 text-foreground-neutral-muted\"\n aria-hidden=\"true\"\n />\n <span className=\"flex min-w-0 flex-col gap-tight\">\n <Text as=\"span\" size=\"sm\" className=\"min-w-0 truncate text-foreground-neutral-base\">\n {decision.subscriptionName}\n </Text>\n <Code as=\"span\" variant=\"label\" className=\"truncate text-foreground-neutral-muted\">\n {decision.runName}\n </Code>\n </span>\n </>\n );\n const rowClassName =\n 'flex min-w-0 items-start gap-inline rounded-6 p-tight hover:bg-background-components-hover focus-visible:outline-none focus-visible:shadow-button-neutral-focus';\n\n return (\n <li>\n {workspaceSlug && resolvedProjectSlug ? (\n <Link\n to=\"/w/$workspaceSlug/p/$projectSlug/runs/$workflowRunId\"\n params={{\n workspaceSlug,\n projectSlug: resolvedProjectSlug,\n workflowRunId: decision.runId,\n }}\n className={rowClassName}\n >\n {row}\n </Link>\n ) : (\n <div className={rowClassName}>{row}</div>\n )}\n </li>\n );\n}\n\nfunction EventPayload({payload}: {payload: string}) {\n const data = [{language: 'json', filename: 'payload.json', code: payload}];\n\n return (\n <section aria-labelledby=\"trigger-event-payload-heading\" className=\"flex flex-col gap-inline\">\n <Text id=\"trigger-event-payload-heading\" size=\"sm\" bold>\n Payload\n </Text>\n <CodeBlock\n data={data}\n className=\"flex h-auto flex-col overflow-visible rounded-8 bg-background-contrast-base shadow-none\"\n >\n <CodeBlockHeader className=\"sticky top-0 z-10 shrink-0 border-b border-border-contrast-base bg-background-contrast-base p-tight\">\n <CodeBlockFiles>\n {(item) => <CodeBlockFilename value={item.filename}>{item.filename}</CodeBlockFilename>}\n </CodeBlockFiles>\n <CodeBlockCopyButton />\n </CodeBlockHeader>\n <CodeBlockBody className=\"min-h-0 scrollbar\">\n {(item) => (\n <CodeBlockItem\n value={item.filename}\n lineNumbers={false}\n className=\"px-0 pb-0 [&>div]:rounded-none [&>div]:border-0 [&>div]:bg-background-contrast-base [&>div]:dark:bg-background-contrast-base [&_code]:!text-foreground-neutral-on-color\"\n >\n <CodeBlockContent language=\"json\" syntaxHighlighting={false}>\n {item.code}\n </CodeBlockContent>\n </CodeBlockItem>\n )}\n </CodeBlockBody>\n </CodeBlock>\n </section>\n );\n}\n"],"names":["useProjectQuery","useProjectsInfiniteQuery","Badge","Button","Callout","CodeBlock","CodeBlockBody","CodeBlockContent","CodeBlockCopyButton","CodeBlockFilename","CodeBlockFiles","CodeBlockHeader","CodeBlockItem","EmptyState","Icon","RelativeTime","Skeleton","Tooltip","TooltipContent","TooltipTrigger","Code","Text","cn","Link","useMemo","useTriggerEventQuery","triggerEventResult","TriggerSourceIcon","PANEL_CLASS","DETAIL_RAIL_CLASS","TriggerEventDetail","workspaceId","workspaceSlug","eventId","onBack","query","TriggerEventDetailPlaceholder","data","TriggerEventDetailView","event","isError","TriggerEventDetailError","onRetry","refetch","TriggerEventDetailLoading","result","eventLabel","triggerEventDisplayLabel","fullEventLabel","triggerEventFullLabel","formattedPayload","JSON","stringify","payload","aside","aria-label","className","div","type","variant","size","iconLeft","onClick","asChild","button","provider","source","aria-hidden","as","value","receivedAt","badge","label","EventRuns","EventPayload","id","filter","Boolean","join","icon","title","role","decisions","length","outcome","EventRunsList","projectSlugs","Map","EventRunsWithProjects","projectsQuery","pages","flatMap","page","projects","map","project","slug","projectDetailLookupEnabled","isPending","section","aria-labelledby","bold","ul","decision","DecisionRow","projectId","undefined","projectSlug","get","canRenderRunLink","runId","runName","projectQuery","resolvedProjectSlug","li","name","subscriptionName","reason","row","span","rowClassName","to","params","workflowRunId","language","filename","code","item","lineNumbers","syntaxHighlighting"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/components/trigger-event-detail.tsx"],"sourcesContent":["import {useProjectQuery, useProjectsInfiniteQuery} from '@shipfox/client-projects';\nimport {Badge} from '@shipfox/react-ui/badge';\nimport {Button} from '@shipfox/react-ui/button';\nimport {Callout} from '@shipfox/react-ui/callout';\nimport {\n CodeBlock,\n CodeBlockBody,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockFilename,\n CodeBlockFiles,\n CodeBlockHeader,\n CodeBlockItem,\n} from '@shipfox/react-ui/code-block';\nimport {EmptyState} from '@shipfox/react-ui/empty-state';\nimport {Icon} from '@shipfox/react-ui/icon';\nimport {Panel, PanelBody, PanelHeader, PanelTitle} from '@shipfox/react-ui/panel';\nimport {RelativeTime} from '@shipfox/react-ui/relative-time';\nimport {Skeleton} from '@shipfox/react-ui/skeleton';\nimport {Tooltip, TooltipContent, TooltipTrigger} from '@shipfox/react-ui/tooltip';\nimport {Code, Text} from '@shipfox/react-ui/typography';\nimport {cn} from '@shipfox/react-ui/utils';\nimport {Link} from '@tanstack/react-router';\nimport {useMemo} from 'react';\nimport type {\n TriggerEventDetail as TriggerEventDetailModel,\n TriggerEventMatchedWorkflowResult,\n} from '#core/trigger-event.js';\nimport {useTriggerEventQuery} from '#hooks/api/trigger-events.js';\nimport {triggerEventResult} from './trigger-event-result.js';\nimport {TriggerSourceIcon} from './trigger-source-icon.js';\n\nconst DETAIL_RAIL_CLASS =\n '@min-[820px]:sticky @min-[820px]:top-16 @min-[820px]:max-h-[calc(var(--app-content-h,100dvh_-_96px)_-_32px)] @min-[820px]:min-h-[min(320px,calc(var(--app-content-h,100dvh_-_96px)_-_32px))]';\n\nexport interface TriggerEventDetailProps {\n workspaceId?: string | undefined;\n workspaceSlug?: string | undefined;\n eventId?: string | undefined;\n onBack: () => void;\n}\n\nexport function TriggerEventDetail({\n workspaceId,\n workspaceSlug,\n eventId,\n onBack,\n}: TriggerEventDetailProps) {\n const query = useTriggerEventQuery(eventId);\n\n if (!eventId) return <TriggerEventDetailPlaceholder />;\n if (query.data) {\n return (\n <TriggerEventDetailView\n workspaceId={workspaceId}\n workspaceSlug={workspaceSlug}\n event={query.data}\n onBack={onBack}\n />\n );\n }\n if (query.isError)\n return <TriggerEventDetailError onBack={onBack} onRetry={() => query.refetch()} />;\n return <TriggerEventDetailLoading onBack={onBack} />;\n}\n\nexport function TriggerEventDetailView({\n workspaceId,\n workspaceSlug,\n event,\n onBack,\n}: {\n workspaceId?: string | undefined;\n workspaceSlug?: string | undefined;\n event: TriggerEventDetailModel;\n onBack: () => void;\n}) {\n const result = triggerEventResult(event);\n const eventLabel = triggerEventDisplayLabel(event);\n const fullEventLabel = triggerEventFullLabel(event);\n const formattedPayload = useMemo(\n () => JSON.stringify(event.payload ?? null, null, 2) ?? 'null',\n [event.payload],\n );\n\n return (\n <aside\n aria-label=\"Event details\"\n className={cn(DETAIL_RAIL_CLASS, 'flex min-h-0 flex-col gap-group')}\n >\n <div className=\"flex shrink-0 flex-col gap-cluster p-panel-compact\">\n <Button\n type=\"button\"\n variant=\"transparentMuted\"\n size=\"sm\"\n iconLeft=\"arrowLeftLine\"\n className=\"self-start @min-[820px]:hidden\"\n onClick={onBack}\n >\n Back to events\n </Button>\n <div className=\"flex min-w-0 items-start justify-between gap-cluster\">\n <div className=\"flex min-w-0 flex-col gap-tight\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n aria-label={fullEventLabel}\n className=\"flex min-w-0 items-center gap-inline rounded-6 border-0 bg-transparent p-0 text-left outline-none focus-visible:shadow-button-neutral-focus\"\n >\n <TriggerSourceIcon\n provider={event.provider}\n source={event.source}\n aria-hidden=\"true\"\n className=\"size-16 shrink-0 text-foreground-neutral-muted\"\n />\n <Code as=\"span\" variant=\"label\" className=\"truncate text-foreground-neutral-base\">\n {eventLabel}\n </Code>\n </button>\n </TooltipTrigger>\n <TooltipContent>\n <Code as=\"span\" variant=\"label\" className=\"block max-w-[360px] break-words\">\n {fullEventLabel}\n </Code>\n </TooltipContent>\n </Tooltip>\n <Text size=\"xs\" className=\"truncate text-foreground-neutral-muted\">\n <RelativeTime value={event.receivedAt} />\n </Text>\n </div>\n <Badge variant={result.badge} size=\"xs\">\n {result.label}\n </Badge>\n </div>\n </div>\n\n <div\n key={event.id}\n className=\"flex min-h-0 flex-1 flex-col gap-group overflow-y-auto scrollbar\"\n >\n <EventRuns workspaceId={workspaceId} workspaceSlug={workspaceSlug} event={event} />\n <EventPayload payload={formattedPayload} />\n </div>\n </aside>\n );\n}\n\nfunction triggerEventDisplayLabel(event: Pick<TriggerEventDetailModel, 'event' | 'source'>) {\n return event.event || event.source;\n}\n\nfunction triggerEventFullLabel(event: Pick<TriggerEventDetailModel, 'event' | 'source'>) {\n return [event.source, event.event].filter(Boolean).join(' · ');\n}\n\nfunction TriggerEventDetailPlaceholder() {\n return (\n <aside aria-label=\"Event details\" className=\"hidden min-h-[240px] @min-[820px]:flex\">\n <Panel className=\"flex min-h-0 flex-1 items-center justify-center p-panel\">\n <EmptyState icon=\"pulseLine\" variant=\"compact\" title=\"No event selected\" />\n </Panel>\n </aside>\n );\n}\n\nfunction TriggerEventDetailLoading({onBack}: {onBack: () => void}) {\n return (\n <aside\n aria-label=\"Event details\"\n className={cn(DETAIL_RAIL_CLASS, 'flex min-h-[320px] flex-col')}\n >\n <Panel className=\"flex min-h-[320px] flex-col gap-group p-panel-compact\">\n <Button\n type=\"button\"\n variant=\"transparentMuted\"\n size=\"sm\"\n iconLeft=\"arrowLeftLine\"\n className=\"self-start @min-[820px]:hidden\"\n onClick={onBack}\n >\n Back to events\n </Button>\n <div className=\"flex flex-col gap-inline\">\n <Skeleton className=\"h-16 w-160\" />\n <Skeleton className=\"h-12 w-120\" />\n </div>\n <Skeleton className=\"h-96\" />\n <Skeleton className=\"h-160\" />\n </Panel>\n </aside>\n );\n}\n\nfunction TriggerEventDetailError({onBack, onRetry}: {onBack: () => void; onRetry: () => void}) {\n return (\n <aside\n aria-label=\"Event details\"\n className={cn(DETAIL_RAIL_CLASS, 'flex min-h-[320px] flex-col')}\n >\n <Panel className=\"flex min-h-[320px] flex-col gap-group p-panel-compact\">\n <Button\n type=\"button\"\n variant=\"transparentMuted\"\n size=\"sm\"\n iconLeft=\"arrowLeftLine\"\n className=\"self-start @min-[820px]:hidden\"\n onClick={onBack}\n >\n Back to events\n </Button>\n <Callout role=\"alert\" type=\"error\">\n <div className=\"flex items-center justify-between gap-cluster\">\n <Text size=\"sm\">Event detail could not be loaded.</Text>\n <Button type=\"button\" variant=\"secondary\" size=\"xs\" onClick={onRetry}>\n Retry\n </Button>\n </div>\n </Callout>\n </Panel>\n </aside>\n );\n}\n\nfunction EventRuns({\n workspaceId,\n workspaceSlug,\n event,\n}: {\n workspaceId?: string | undefined;\n workspaceSlug?: string | undefined;\n event: TriggerEventDetailModel;\n}) {\n if (event.decisions.length === 0) {\n if (event.outcome === 'discarded') {\n return (\n <Panel>\n <PanelBody className=\"p-panel-compact\">\n <Text size=\"sm\" className=\"text-foreground-neutral-muted\">\n No workflows are subscribed to this event.\n </Text>\n </PanelBody>\n </Panel>\n );\n }\n return null;\n }\n\n if (!workspaceId) {\n return <EventRunsList workspaceSlug={workspaceSlug} projectSlugs={new Map()} event={event} />;\n }\n\n return (\n <EventRunsWithProjects workspaceId={workspaceId} workspaceSlug={workspaceSlug} event={event} />\n );\n}\n\nfunction EventRunsWithProjects({\n workspaceId,\n workspaceSlug,\n event,\n}: {\n workspaceId: string;\n workspaceSlug?: string | undefined;\n event: TriggerEventDetailModel;\n}) {\n const projectsQuery = useProjectsInfiniteQuery(workspaceId);\n const projectSlugs = useMemo(\n () =>\n new Map(\n projectsQuery.data?.pages\n .flatMap((page) => page.projects)\n .map((project) => [project.id, project.slug] as const),\n ),\n [projectsQuery.data],\n );\n return (\n <EventRunsList\n workspaceSlug={workspaceSlug}\n projectSlugs={projectSlugs}\n projectDetailLookupEnabled={!projectsQuery.isPending}\n event={event}\n />\n );\n}\n\nfunction EventRunsList({\n workspaceSlug,\n projectSlugs,\n projectDetailLookupEnabled = false,\n event,\n}: {\n workspaceSlug?: string | undefined;\n projectSlugs: ReadonlyMap<string, string>;\n projectDetailLookupEnabled?: boolean;\n event: TriggerEventDetailModel;\n}) {\n return (\n <Panel>\n <PanelHeader>\n <PanelTitle>Matched workflows</PanelTitle>\n </PanelHeader>\n <PanelBody>\n <ul>\n {event.decisions.map((decision) => (\n <DecisionRow\n key={decision.id}\n workspaceSlug={workspaceSlug}\n projectId={decision.projectId ?? undefined}\n projectSlug={decision.projectId ? projectSlugs.get(decision.projectId) : undefined}\n projectDetailLookupEnabled={projectDetailLookupEnabled}\n decision={decision}\n />\n ))}\n </ul>\n </PanelBody>\n </Panel>\n );\n}\n\nfunction DecisionRow({\n projectId,\n projectSlug,\n workspaceSlug,\n projectDetailLookupEnabled,\n decision,\n}: {\n projectId?: string | undefined;\n projectSlug?: string | undefined;\n workspaceSlug?: string | undefined;\n projectDetailLookupEnabled: boolean;\n decision: TriggerEventMatchedWorkflowResult;\n}) {\n const canRenderRunLink =\n decision.decision === 'triggered' && Boolean(decision.runId && decision.runName);\n const projectQuery = useProjectQuery(\n canRenderRunLink && projectDetailLookupEnabled && !projectSlug ? projectId : undefined,\n );\n const resolvedProjectSlug = projectSlug ?? projectQuery.data?.slug;\n\n if (decision.decision !== 'triggered' || !decision.runId || !decision.runName) {\n return (\n <li className=\"border-b border-border-neutral-base px-row py-row last:border-b-0\">\n <div className=\"flex min-w-0 items-start gap-inline\">\n <Icon\n name=\"cornerDownRightLine\"\n className=\"size-14 shrink-0 text-foreground-neutral-disabled\"\n aria-hidden=\"true\"\n />\n <div className=\"flex min-w-0 flex-col gap-tight\">\n <Text size=\"sm\" className=\"min-w-0 truncate text-foreground-neutral-base\">\n {decision.subscriptionName}\n </Text>\n {decision.reason ? (\n <Text size=\"xs\" className=\"text-foreground-highlight-error\">\n {decision.reason}\n </Text>\n ) : (\n <Text size=\"xs\" className=\"text-foreground-neutral-disabled\">\n No run created\n </Text>\n )}\n </div>\n </div>\n </li>\n );\n }\n\n const row = (\n <>\n <Icon\n name=\"cornerDownRightLine\"\n className=\"size-14 shrink-0 text-foreground-neutral-muted\"\n aria-hidden=\"true\"\n />\n <span className=\"flex min-w-0 flex-col gap-tight\">\n <Text as=\"span\" size=\"sm\" className=\"min-w-0 truncate text-foreground-neutral-base\">\n {decision.subscriptionName}\n </Text>\n <Code as=\"span\" variant=\"label\" className=\"truncate text-foreground-neutral-muted\">\n {decision.runName}\n </Code>\n </span>\n </>\n );\n const rowClassName =\n 'flex min-w-0 items-start gap-inline px-row py-row hover:bg-background-neutral-hover focus-visible:outline-none focus-visible:shadow-button-neutral-focus';\n\n return (\n <li className=\"border-b border-border-neutral-base last:border-b-0\">\n {workspaceSlug && resolvedProjectSlug ? (\n <Link\n to=\"/w/$workspaceSlug/p/$projectSlug/runs/$workflowRunId\"\n params={{\n workspaceSlug,\n projectSlug: resolvedProjectSlug,\n workflowRunId: decision.runId,\n }}\n className={rowClassName}\n >\n {row}\n </Link>\n ) : (\n <div className={rowClassName}>{row}</div>\n )}\n </li>\n );\n}\n\nfunction EventPayload({payload}: {payload: string}) {\n const data = [{language: 'json', filename: 'payload.json', code: payload}];\n\n return (\n <Panel>\n <PanelHeader>\n <PanelTitle>Payload</PanelTitle>\n </PanelHeader>\n <PanelBody className=\"p-0\">\n <CodeBlock\n data={data}\n className=\"flex h-auto flex-col overflow-visible rounded-none bg-background-contrast-base shadow-none\"\n >\n <CodeBlockHeader className=\"sticky top-0 z-10 shrink-0 border-b border-border-contrast-base bg-background-contrast-base p-tight\">\n <CodeBlockFiles>\n {(item) => (\n <CodeBlockFilename value={item.filename}>{item.filename}</CodeBlockFilename>\n )}\n </CodeBlockFiles>\n <CodeBlockCopyButton />\n </CodeBlockHeader>\n <CodeBlockBody className=\"min-h-0 scrollbar\">\n {(item) => (\n <CodeBlockItem\n value={item.filename}\n lineNumbers={false}\n className=\"px-0 pb-0 [&>div]:rounded-none [&>div]:border-0 [&>div]:bg-background-contrast-base [&_code]:!text-foreground-neutral-on-color\"\n >\n <CodeBlockContent language=\"json\" syntaxHighlighting={false}>\n {item.code}\n </CodeBlockContent>\n </CodeBlockItem>\n )}\n </CodeBlockBody>\n </CodeBlock>\n </PanelBody>\n </Panel>\n );\n}\n"],"names":["useProjectQuery","useProjectsInfiniteQuery","Badge","Button","Callout","CodeBlock","CodeBlockBody","CodeBlockContent","CodeBlockCopyButton","CodeBlockFilename","CodeBlockFiles","CodeBlockHeader","CodeBlockItem","EmptyState","Icon","Panel","PanelBody","PanelHeader","PanelTitle","RelativeTime","Skeleton","Tooltip","TooltipContent","TooltipTrigger","Code","Text","cn","Link","useMemo","useTriggerEventQuery","triggerEventResult","TriggerSourceIcon","DETAIL_RAIL_CLASS","TriggerEventDetail","workspaceId","workspaceSlug","eventId","onBack","query","TriggerEventDetailPlaceholder","data","TriggerEventDetailView","event","isError","TriggerEventDetailError","onRetry","refetch","TriggerEventDetailLoading","result","eventLabel","triggerEventDisplayLabel","fullEventLabel","triggerEventFullLabel","formattedPayload","JSON","stringify","payload","aside","aria-label","className","div","type","variant","size","iconLeft","onClick","asChild","button","provider","source","aria-hidden","as","value","receivedAt","badge","label","EventRuns","EventPayload","id","filter","Boolean","join","icon","title","role","decisions","length","outcome","EventRunsList","projectSlugs","Map","EventRunsWithProjects","projectsQuery","pages","flatMap","page","projects","map","project","slug","projectDetailLookupEnabled","isPending","ul","decision","DecisionRow","projectId","undefined","projectSlug","get","canRenderRunLink","runId","runName","projectQuery","resolvedProjectSlug","li","name","subscriptionName","reason","row","span","rowClassName","to","params","workflowRunId","language","filename","code","item","lineNumbers","syntaxHighlighting"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"events-page.d.ts","sourceRoot":"","sources":["../../src/pages/events-page.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,mBAAmB,EAAsB,MAAM,wBAAwB,CAAC;AAMrF,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;CAChE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,WAAW,EACX,aAAa,EACb,OAAO,EACP,eAAe,GAChB,EAAE,eAAe,+BA2DjB"}
1
+ {"version":3,"file":"events-page.d.ts","sourceRoot":"","sources":["../../src/pages/events-page.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,mBAAmB,EAAsB,MAAM,wBAAwB,CAAC;AAMrF,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;CAChE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,WAAW,EACX,aAAa,EACb,OAAO,EACP,eAAe,GAChB,EAAE,eAAe,+BA8CjB"}