@package-broker/ui 2.0.0-rc.3 → 2.0.0-rc.4

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 (153) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/api-types.d.ts +8185 -2807
  3. package/dist/api-types.d.ts.map +1 -1
  4. package/dist/api.d.ts +1 -1
  5. package/dist/api.d.ts.map +1 -1
  6. package/dist/api.js +10 -0
  7. package/dist/api.js.map +1 -1
  8. package/dist/app-path.d.ts +2 -0
  9. package/dist/app-path.d.ts.map +1 -0
  10. package/dist/app-path.js +2 -0
  11. package/dist/app-path.js.map +1 -0
  12. package/dist/app.d.ts +2 -0
  13. package/dist/app.d.ts.map +1 -1
  14. package/dist/app.js +16 -3
  15. package/dist/app.js.map +1 -1
  16. package/dist/assets/access.62e9484517a0.js +1 -0
  17. package/dist/assets/app.45b156168495.css +2 -0
  18. package/dist/assets/{app.e8434f3343de.js → app.c064670cdc0d.js} +5 -5
  19. package/dist/assets/audit.b7c40b9dc998.js +1 -0
  20. package/dist/assets/{chunk.3704953b4a66.js → chunk.28a4d8aab337.js} +1 -1
  21. package/dist/assets/chunk.3fcd6998795a.js +1 -0
  22. package/dist/assets/chunk.51497edc7697.js +4 -0
  23. package/dist/assets/chunk.56d473a1587d.js +1 -0
  24. package/dist/assets/chunk.675b635d9462.js +1 -0
  25. package/dist/assets/{chunk.bb25fc845269.js → chunk.6ea6bdcaa465.js} +1 -1
  26. package/dist/assets/{chunk.f922af39a279.js → chunk.741aec8d1ff9.js} +1 -1
  27. package/dist/assets/chunk.815f9a91c741.js +1 -0
  28. package/dist/assets/chunk.8442124f6802.js +1 -0
  29. package/dist/assets/{chunk.862544cf5835.js → chunk.965b76812604.js} +1 -1
  30. package/dist/assets/{chunk.bf48b04e6a00.js → chunk.a6d755a9789f.js} +1 -1
  31. package/dist/assets/chunk.d18497920e4d.js +1 -0
  32. package/dist/assets/{chunk.ce96495b8b55.js → chunk.d813fefb410d.js} +1 -1
  33. package/dist/assets/chunk.e3b0c44298fc.js +0 -0
  34. package/dist/assets/{chunk.7cb6f6b4daaa.js → chunk.f54ea1378c8c.js} +1 -1
  35. package/dist/assets/chunk.fd375c54b526.js +1 -0
  36. package/dist/assets/import.e7a1e5834631.js +1 -0
  37. package/dist/assets/index.html +9 -6
  38. package/dist/assets/manifest.json +66 -38
  39. package/dist/assets/notifications.19225fe12044.js +1 -0
  40. package/dist/assets/npm-login.e059678af13d.js +1 -0
  41. package/dist/assets/packages.ab5ab25b1c75.js +2 -0
  42. package/dist/assets/projects.927fe18c785c.js +1 -0
  43. package/dist/assets/setup.8e977608d413.js +1 -0
  44. package/dist/assets/setup.html +2 -2
  45. package/dist/assets/sources.ae50f239f80f.js +1 -0
  46. package/dist/assets/tokens.6b86d8d97e07.js +4 -0
  47. package/dist/auth.d.ts +22 -3
  48. package/dist/auth.d.ts.map +1 -1
  49. package/dist/auth.js +129 -19
  50. package/dist/auth.js.map +1 -1
  51. package/dist/components/ui/status-badge.d.ts +5 -0
  52. package/dist/components/ui/status-badge.d.ts.map +1 -1
  53. package/dist/components/ui/status-badge.js +10 -0
  54. package/dist/components/ui/status-badge.js.map +1 -1
  55. package/dist/package-limits.d.ts +3 -0
  56. package/dist/package-limits.d.ts.map +1 -0
  57. package/dist/package-limits.js +3 -0
  58. package/dist/package-limits.js.map +1 -0
  59. package/dist/page-hash.d.ts +1 -1
  60. package/dist/page-hash.d.ts.map +1 -1
  61. package/dist/page-hash.js.map +1 -1
  62. package/dist/pages/access/grant-form.d.ts.map +1 -1
  63. package/dist/pages/access/grant-form.js +1 -1
  64. package/dist/pages/access/grant-form.js.map +1 -1
  65. package/dist/pages/audit.d.ts.map +1 -1
  66. package/dist/pages/notification-actions.d.ts +41 -0
  67. package/dist/pages/notification-actions.d.ts.map +1 -0
  68. package/dist/pages/notification-actions.js +187 -0
  69. package/dist/pages/notification-actions.js.map +1 -0
  70. package/dist/pages/notification-draft.d.ts +13 -0
  71. package/dist/pages/notification-draft.d.ts.map +1 -0
  72. package/dist/pages/notification-draft.js +75 -0
  73. package/dist/pages/notification-draft.js.map +1 -0
  74. package/dist/pages/notification-form.d.ts +35 -0
  75. package/dist/pages/notification-form.d.ts.map +1 -0
  76. package/dist/pages/notification-form.js +167 -0
  77. package/dist/pages/notification-form.js.map +1 -0
  78. package/dist/pages/notifications-controller.d.ts +41 -0
  79. package/dist/pages/notifications-controller.d.ts.map +1 -0
  80. package/dist/pages/notifications-controller.js +184 -0
  81. package/dist/pages/notifications-controller.js.map +1 -0
  82. package/dist/pages/notifications.d.ts +10 -0
  83. package/dist/pages/notifications.d.ts.map +1 -0
  84. package/dist/pages/notifications.js +301 -0
  85. package/dist/pages/notifications.js.map +1 -0
  86. package/dist/pages/npm-login.d.ts +2 -0
  87. package/dist/pages/npm-login.d.ts.map +1 -0
  88. package/dist/pages/npm-login.js +62 -0
  89. package/dist/pages/npm-login.js.map +1 -0
  90. package/dist/pages/packages/npm-workflow.d.ts +31 -0
  91. package/dist/pages/packages/npm-workflow.d.ts.map +1 -0
  92. package/dist/pages/packages/npm-workflow.js +381 -0
  93. package/dist/pages/packages/npm-workflow.js.map +1 -0
  94. package/dist/pages/packages/package-detail.d.ts +9 -0
  95. package/dist/pages/packages/package-detail.d.ts.map +1 -0
  96. package/dist/pages/packages/package-detail.js +242 -0
  97. package/dist/pages/packages/package-detail.js.map +1 -0
  98. package/dist/pages/packages/source-actions.d.ts +2 -1
  99. package/dist/pages/packages/source-actions.d.ts.map +1 -1
  100. package/dist/pages/packages/source-actions.js +8 -1
  101. package/dist/pages/packages/source-actions.js.map +1 -1
  102. package/dist/pages/packages.d.ts +15 -4
  103. package/dist/pages/packages.d.ts.map +1 -1
  104. package/dist/pages/packages.js +136 -19
  105. package/dist/pages/packages.js.map +1 -1
  106. package/dist/pages/projects/project-form.js +1 -1
  107. package/dist/pages/projects/project-form.js.map +1 -1
  108. package/dist/pages/projects.d.ts.map +1 -1
  109. package/dist/pages/projects.js +1 -1
  110. package/dist/pages/projects.js.map +1 -1
  111. package/dist/pages/sources/source-form.d.ts +3 -2
  112. package/dist/pages/sources/source-form.d.ts.map +1 -1
  113. package/dist/pages/sources/source-form.js +22 -12
  114. package/dist/pages/sources/source-form.js.map +1 -1
  115. package/dist/pages/sources.d.ts +9 -3
  116. package/dist/pages/sources.d.ts.map +1 -1
  117. package/dist/pages/sources.js +55 -11
  118. package/dist/pages/sources.js.map +1 -1
  119. package/dist/pages/tokens/issue-token-form.js +1 -1
  120. package/dist/pages/tokens/issue-token-form.js.map +1 -1
  121. package/dist/pages/tokens/principal-form.d.ts.map +1 -1
  122. package/dist/pages/tokens/principal-form.js +4 -0
  123. package/dist/pages/tokens/principal-form.js.map +1 -1
  124. package/dist/pages/tokens/trusted-publishers-controller.d.ts +42 -0
  125. package/dist/pages/tokens/trusted-publishers-controller.d.ts.map +1 -0
  126. package/dist/pages/tokens/trusted-publishers-controller.js +202 -0
  127. package/dist/pages/tokens/trusted-publishers-controller.js.map +1 -0
  128. package/dist/pages/tokens/trusted-publishers.d.ts +6 -0
  129. package/dist/pages/tokens/trusted-publishers.d.ts.map +1 -0
  130. package/dist/pages/tokens/trusted-publishers.js +116 -0
  131. package/dist/pages/tokens/trusted-publishers.js.map +1 -0
  132. package/dist/pages/tokens.d.ts +53 -0
  133. package/dist/pages/tokens.d.ts.map +1 -1
  134. package/dist/pages/tokens.js +9 -2
  135. package/dist/pages/tokens.js.map +1 -1
  136. package/dist/setup.d.ts +3 -2
  137. package/dist/setup.d.ts.map +1 -1
  138. package/dist/setup.js +66 -9
  139. package/dist/setup.js.map +1 -1
  140. package/package.json +3 -3
  141. package/dist/assets/access.6859f43998ca.js +0 -1
  142. package/dist/assets/app.f15f8f21f88b.css +0 -2
  143. package/dist/assets/audit.576009342714.js +0 -1
  144. package/dist/assets/chunk.297a2d571f9c.js +0 -4
  145. package/dist/assets/chunk.6e23a75a1324.js +0 -1
  146. package/dist/assets/chunk.855a50f45830.js +0 -1
  147. package/dist/assets/chunk.976a2ff4338e.js +0 -1
  148. package/dist/assets/import.e2a1e35fcb8d.js +0 -1
  149. package/dist/assets/packages.a8726e5144de.js +0 -1
  150. package/dist/assets/projects.711deb86b7c9.js +0 -1
  151. package/dist/assets/setup.dfed30ecfbad.js +0 -1
  152. package/dist/assets/sources.d0ba0048bd96.js +0 -1
  153. package/dist/assets/tokens.f48d235e8d25.js +0 -4
@@ -0,0 +1,167 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useId, useState } from 'react';
3
+ import { Alert, AlertDescription } from '../components/ui/alert.js';
4
+ import { Button } from '../components/ui/button.js';
5
+ import { Input } from '../components/ui/input.js';
6
+ import { Label } from '../components/ui/label.js';
7
+ import { Textarea } from '../components/ui/textarea.js';
8
+ import { EVENT_CHOICES, } from './notification-actions.js';
9
+ const EXAMPLE_IDS = {
10
+ id: '01JEXAMPLEEVENT00000000000',
11
+ operationId: '01JEXAMPLE0PERATI0N0000000',
12
+ organizationId: '01JEXAMPLE0RGANIZATI0N0000',
13
+ projectId: '01JEXAMPLEPR0JECT000000000',
14
+ };
15
+ const EXAMPLE_DATA = {
16
+ 'npm.package.published': {},
17
+ 'npm.package.released': { releaseCause: 'approval_and_scan' },
18
+ 'npm.package.unpublished': { removalScope: 'version', removalKind: 'window' },
19
+ 'npm.package.deprecation_changed': { deprecated: true },
20
+ 'npm.package.dist_tag_changed': {
21
+ tag: 'latest',
22
+ previousVersion: '1.2.2',
23
+ version: '1.2.3',
24
+ cause: 'explicit',
25
+ },
26
+ };
27
+ /** The canonical envelope for made-up package data; nothing is sent or fetched. */
28
+ export function exampleEnvelope(type) {
29
+ return {
30
+ schemaVersion: 1,
31
+ ...EXAMPLE_IDS,
32
+ type,
33
+ occurredAt: '2026-11-01T12:00:00.000Z',
34
+ package: { ecosystem: 'npm', name: '@example/library', version: '1.2.3' },
35
+ data: EXAMPLE_DATA[type],
36
+ };
37
+ }
38
+ function lookup(envelope, path) {
39
+ let value = envelope;
40
+ for (const part of path.split('.')) {
41
+ if (value === null || typeof value !== 'object' || !Object.hasOwn(value, part))
42
+ return undefined;
43
+ value = value[part];
44
+ }
45
+ return value;
46
+ }
47
+ /**
48
+ * A local approximation of json-v1 rendering for the preview: a whole-string `{{path}}` value is
49
+ * replaced by the example value. The broker validates the template when it is saved.
50
+ */
51
+ export function previewBody(type, template) {
52
+ const envelope = exampleEnvelope(type);
53
+ if (template.trim() === '')
54
+ return JSON.stringify(envelope, null, 2);
55
+ let parsed;
56
+ try {
57
+ parsed = JSON.parse(template);
58
+ }
59
+ catch {
60
+ return 'The template is not valid JSON.';
61
+ }
62
+ let missing = false;
63
+ const walk = (value) => {
64
+ if (Array.isArray(value))
65
+ return value.map(walk);
66
+ if (value !== null && typeof value === 'object')
67
+ return Object.fromEntries(Object.entries(value).map(([key, child]) => [key, walk(child)]));
68
+ const match = typeof value === 'string' ? /^\{\{([A-Za-z.]+)\}\}$/.exec(value) : null;
69
+ if (match === null)
70
+ return value;
71
+ const found = lookup(envelope, match[1]);
72
+ if (found === undefined || (found !== null && typeof found === 'object'))
73
+ missing = true;
74
+ return found;
75
+ };
76
+ const rendered = walk(parsed);
77
+ return missing
78
+ ? 'The template names a value this event does not have.'
79
+ : JSON.stringify(rendered, null, 2);
80
+ }
81
+ const NO_SECRET = { url: '', signingKey: '', template: '', headers: [] };
82
+ export function NotificationForm(props) {
83
+ const ids = useId();
84
+ const editing = props.endpoint;
85
+ const [options, setOptions] = useState(() => props.restoredOptions ?? {
86
+ name: editing?.name ?? '',
87
+ method: editing?.method ?? 'POST',
88
+ events: [...(editing?.events ?? ['npm.package.published'])],
89
+ packagePattern: editing?.packagePattern ?? '*',
90
+ });
91
+ const [replacing, setReplacing] = useState(editing === null || props.requireSecret === true);
92
+ const [secret, setSecret] = useState(NO_SECRET);
93
+ const [busy, setBusy] = useState(false);
94
+ const [error, setError] = useState(null);
95
+ const [preview, setPreview] = useState(null);
96
+ useEffect(() => () => setSecret(NO_SECRET), []);
97
+ const eventsChanged = editing !== null && [...options.events].sort().join() !== [...editing.events].sort().join();
98
+ const templateBlocks = editing?.templateConfigured === true && eventsChanged && !replacing;
99
+ const id = (name) => `${ids}-${name}`;
100
+ const submit = async (event) => {
101
+ event.preventDefault();
102
+ if (busy || props.disabled)
103
+ return;
104
+ if (options.events.length === 0) {
105
+ setError('Choose at least one event.');
106
+ document.getElementById(id('events'))?.focus();
107
+ return;
108
+ }
109
+ if (templateBlocks) {
110
+ setError('This endpoint has a body template. Replace the delivery settings with a template that fits the new events.');
111
+ return;
112
+ }
113
+ setBusy(true);
114
+ setError(null);
115
+ const outcome = await props.onSubmit({
116
+ options,
117
+ ...(replacing
118
+ ? {
119
+ secret: {
120
+ url: secret.url,
121
+ signingKey: secret.signingKey,
122
+ headers: secret.headers.filter((header) => header.name !== ''),
123
+ template: secret.template.trim() === '' ? null : secret.template,
124
+ },
125
+ }
126
+ : {}),
127
+ });
128
+ setBusy(false);
129
+ if (outcome.ok || outcome.reauth) {
130
+ setSecret(NO_SECRET);
131
+ setPreview(null);
132
+ }
133
+ if (!outcome.ok)
134
+ setError(outcome.message);
135
+ };
136
+ return (_jsxs("form", { onSubmit: (event) => void submit(event), "aria-label": editing === null ? 'New notification endpoint' : `Edit ${editing.name}`, className: "grid max-w-5xl items-start gap-x-6 gap-y-4 lg:grid-cols-2", children: [_jsx("h3", { className: "text-lg font-semibold lg:col-span-2", children: editing === null ? 'New notification endpoint' : `Edit ${editing.name}` }), _jsx("p", { className: "lg:col-span-2", children: `Project ${props.projectName} · The broker sends a signed HTTPS request to your receiver when a selected package event commits in this project.` }), _jsxs("div", { className: "grid gap-1", children: [_jsx(Label, { htmlFor: id('name'), children: "Name" }), _jsx(Input, { id: id('name'), required: true, maxLength: 80, value: options.name, onChange: (event) => setOptions({ ...options, name: event.target.value }) })] }), _jsxs("div", { className: "grid gap-1", children: [_jsx(Label, { htmlFor: id('pattern'), children: "Package filter" }), _jsx(Input, { id: id('pattern'), required: true, maxLength: 50, value: options.packagePattern, "aria-describedby": id('pattern-help'), onChange: (event) => setOptions({ ...options, packagePattern: event.target.value }) }), _jsx("p", { id: id('pattern-help'), className: "text-sm text-neutral-600", children: "* matches any characters, including /. Examples: * for every package, @acme/* for one scope. Matching is exact and case-sensitive on the stored name; legacy package names with capital letters are stored with each capital written as ! followed by the lower-case letter, for example !my!package for MyPackage." })] }), _jsxs("fieldset", { id: id('events'), tabIndex: -1, className: "grid gap-2 lg:col-span-2", "aria-describedby": id('events-help'), children: [_jsx("legend", { className: "font-medium", children: "Events" }), _jsx("p", { id: id('events-help'), className: "text-sm text-neutral-600", children: "Only events committed after the endpoint is enabled are sent." }), EVENT_CHOICES.map((choice) => (_jsxs("label", { className: "flex min-h-11 items-start gap-2", children: [_jsx("input", { type: "checkbox", className: "mt-1 size-4", checked: options.events.includes(choice.value), onChange: (event) => setOptions({
137
+ ...options,
138
+ events: event.target.checked
139
+ ? [...options.events, choice.value]
140
+ : options.events.filter((value) => value !== choice.value),
141
+ }) }), _jsxs("span", { children: [_jsx("span", { className: "font-medium", children: choice.label }), _jsx("span", { className: "block text-sm text-neutral-600", children: choice.help })] })] }, choice.value)))] }), _jsxs("fieldset", { className: "grid gap-2 lg:col-span-2", children: [_jsx("legend", { className: "font-medium", children: "Request method" }), ['POST', 'PUT'].map((method) => (_jsxs("label", { className: "flex min-h-11 items-center gap-2", children: [_jsx("input", { type: "radio", name: id('method'), checked: options.method === method, onChange: () => setOptions({ ...options, method }) }), method] }, method)))] }), editing === null ? null : (_jsxs("div", { className: "grid gap-2 lg:col-span-2", children: [_jsx("p", { children: `Delivery settings: destination configured, signing key configured, custom headers ${editing.headersConfigured ? 'configured' : 'none'}, body template ${editing.templateConfigured ? 'configured' : 'none (standard envelope)'}. Saved settings are never shown again.` }), _jsxs("label", { className: "flex min-h-11 items-center gap-2", children: [_jsx("input", { type: "checkbox", checked: replacing, onChange: (event) => {
142
+ setReplacing(event.target.checked);
143
+ if (!event.target.checked)
144
+ setSecret(NO_SECRET);
145
+ } }), "Replace delivery settings (needs recent sign-in; disables the endpoint)"] })] })), !replacing ? null : (_jsxs("fieldset", { className: "grid gap-4 lg:col-span-2 lg:grid-cols-2", children: [_jsx("legend", { className: "font-medium", children: "Delivery settings" }), _jsxs("div", { className: "grid gap-1 lg:col-span-2", children: [_jsx(Label, { htmlFor: id('url'), children: "Destination URL" }), _jsx(Input, { id: id('url'), type: "url", required: true, autoComplete: "off", maxLength: 2048, value: secret.url, "aria-describedby": id('url-help'), onChange: (event) => setSecret({ ...secret, url: event.target.value }) }), _jsx("p", { id: id('url-help'), className: "text-sm text-neutral-600", children: "HTTPS on port 443 to a public host. Redirects are not followed. The address is stored sealed and never shown again, so tokens in the path or query stay private." })] }), _jsxs("div", { className: "grid gap-1 lg:col-span-2", children: [_jsx(Label, { htmlFor: id('key'), children: "Signing key" }), _jsx(Input, { id: id('key'), type: "password", required: true, autoComplete: "off", pattern: "[A-Za-z0-9_\\-]{43}", value: secret.signingKey, "aria-describedby": id('key-help'), onChange: (event) => setSecret({ ...secret, signingKey: event.target.value }) }), _jsx("p", { id: id('key-help'), className: "text-sm text-neutral-600", children: "32 random bytes as 43 base64url characters, shared with your receiver to verify the X-Package-Broker-Signature header." })] }), _jsxs("div", { className: "grid gap-2 lg:col-span-2", children: [_jsx("p", { className: "font-medium", children: "Custom headers (optional)" }), _jsx("p", { className: "text-sm text-neutral-600", children: "Authorization or X- headers only, up to 16. Values are stored sealed." }), secret.headers.map((header, index) => (_jsxs("div", { className: "grid gap-2 sm:grid-cols-[1fr_2fr_auto]", children: [_jsxs("div", { className: "grid gap-1", children: [_jsx(Label, { htmlFor: id(`header-name-${index}`), children: "Header name" }), _jsx(Input, { id: id(`header-name-${index}`), value: header.name, autoComplete: "off", onChange: (event) => setSecret({
146
+ ...secret,
147
+ headers: secret.headers.map((item, at) => at === index ? { ...item, name: event.target.value } : item),
148
+ }) })] }), _jsxs("div", { className: "grid gap-1", children: [_jsx(Label, { htmlFor: id(`header-value-${index}`), children: "Header value" }), _jsx(Input, { id: id(`header-value-${index}`), type: "password", value: header.value, autoComplete: "off", onChange: (event) => setSecret({
149
+ ...secret,
150
+ headers: secret.headers.map((item, at) => at === index ? { ...item, value: event.target.value } : item),
151
+ }) })] }), _jsx(Button, { type: "button", variant: "outline", className: "min-h-11 self-end", onClick: () => setSecret({
152
+ ...secret,
153
+ headers: secret.headers.filter((_, at) => at !== index),
154
+ }), children: "Remove header" })] }, index))), secret.headers.length < 16 ? (_jsx(Button, { type: "button", variant: "outline", className: "min-h-11 w-full sm:w-auto", onClick: () => setSecret({ ...secret, headers: [...secret.headers, { name: '', value: '' }] }), children: "Add header" })) : null] }), _jsxs("div", { className: "grid gap-1 lg:col-span-2", children: [_jsx(Label, { htmlFor: id('template'), children: "Body template (optional)" }), _jsx(Textarea, { id: id('template'), rows: 5, maxLength: 8192, value: secret.template, "aria-describedby": id('template-help'), onChange: (event) => setSecret({ ...secret, template: event.target.value }) }), _jsxs("p", { id: id('template-help'), className: "text-sm text-neutral-600", children: ["Leave empty to send the standard event envelope. A template is JSON in which a string value written as ", '"{{package.name}}"', " is replaced by that event value. It must fit every selected event."] })] }), _jsxs("div", { className: "grid gap-2 lg:col-span-2", children: [_jsx(Button, { type: "button", variant: "outline", className: "min-h-11 w-full sm:w-auto", disabled: options.events.length === 0, onClick: () => setPreview(previewBody(options.events[0], secret.template)), children: "Preview with example data" }), preview === null ? null : (_jsx("pre", { "aria-label": "Example body", className: "max-h-64 overflow-auto rounded-md border bg-neutral-50 p-2 text-xs", children: preview }))] })] })), templateBlocks ? (_jsx(Alert, { className: "lg:col-span-2", children: _jsx(AlertDescription, { children: "This endpoint has a body template checked against its current events. To change the events, replace the delivery settings with a template that fits them." }) })) : null, _jsx("p", { className: "lg:col-span-2", children: editing === null
155
+ ? 'The endpoint is added disabled. Adding it needs a recent sign-in. Nothing is sent until you enable it.'
156
+ : 'Saving any change, including a rename, starts a new revision and cancels deliveries still waiting for the previous one.' }), error === null ? null : (_jsx("p", { role: "alert", className: "text-red-700 lg:col-span-2", children: error })), _jsxs("div", { className: "flex flex-wrap gap-2 lg:col-span-2", children: [_jsx(Button, { type: "submit", className: "min-h-11 w-full sm:w-auto", disabled: busy || props.disabled, "aria-busy": busy, children: busy
157
+ ? editing === null
158
+ ? 'Adding endpoint…'
159
+ : 'Saving endpoint…'
160
+ : editing === null
161
+ ? 'Add endpoint'
162
+ : 'Save endpoint' }), _jsx(Button, { type: "button", variant: "outline", className: "min-h-11 w-full sm:w-auto", disabled: busy, onClick: () => {
163
+ setSecret(NO_SECRET);
164
+ props.onCancel();
165
+ }, children: "Cancel" })] })] }));
166
+ }
167
+ //# sourceMappingURL=notification-form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-form.js","sourceRoot":"","sources":["../../src/pages/notification-form.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { ShellServices } from '../auth.js';
2
+ import type { Delivery, DeliveryDetail, Endpoint } from './notification-actions.js';
3
+ export type DeliveryFilter = Delivery['state'] | 'all';
4
+ export interface NotificationsState {
5
+ readonly project: string | null;
6
+ readonly items: readonly Endpoint[];
7
+ readonly next: string | null;
8
+ readonly hasPrevious: boolean;
9
+ readonly loading: boolean;
10
+ /** Why the list is not shown: the project is unknown to this user, access is refused, or the broker has notifications off. */
11
+ readonly blocked: 'denied' | 'unavailable' | 'error' | null;
12
+ readonly selected: string | null;
13
+ readonly deliveries: readonly Delivery[];
14
+ readonly deliveriesNext: string | null;
15
+ readonly deliveriesHasPrevious: boolean;
16
+ readonly deliveriesLoading: boolean;
17
+ readonly deliveriesError: boolean;
18
+ readonly filter: DeliveryFilter;
19
+ readonly detail: DeliveryDetail | null;
20
+ readonly detailError: boolean;
21
+ }
22
+ /** List and history reads. Responses carry configured flags only, never delivery settings. */
23
+ export declare function createNotificationsController(services: ShellServices): {
24
+ mutationScope(): () => boolean;
25
+ snapshot: () => NotificationsState;
26
+ subscribe(listener: () => void): () => void;
27
+ load(project?: string | null): Promise<void>;
28
+ nextPage(): Promise<void>;
29
+ previousPage(): Promise<void>;
30
+ /** Replaces one row after a confirmed write; null removes it. */
31
+ replace(id: string, endpoint: Endpoint | null): void;
32
+ select(id: string | null): Promise<void>;
33
+ filterHistory(filter: DeliveryFilter): Promise<void>;
34
+ reloadHistory: () => Promise<void>;
35
+ nextHistory(): Promise<void>;
36
+ previousHistory(): Promise<void>;
37
+ openDelivery(id: string): Promise<void>;
38
+ dispose(): void;
39
+ };
40
+ export type NotificationsController = ReturnType<typeof createNotificationsController>;
41
+ //# sourceMappingURL=notifications-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications-controller.d.ts","sourceRoot":"","sources":["../../src/pages/notifications-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAEpF,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;AAEvD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,8HAA8H;IAC9H,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,aAAa,GAAG,OAAO,GAAG,IAAI,CAAC;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,SAAS,QAAQ,EAAE,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAoBD,8FAA8F;AAC9F,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,aAAa;;;wBA8C7C,MAAM,IAAI;mBAMV,MAAM,GAAG,IAAI,GAAmB,OAAO,CAAC,IAAI,CAAC;gBAwC/C,OAAO,CAAC,IAAI,CAAC;oBAKT,OAAO,CAAC,IAAI,CAAC;IAKnC,iEAAiE;gBACrD,MAAM,YAAY,QAAQ,GAAG,IAAI,GAAG,IAAI;eAanC,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;0BAelB,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;yBAtH9B,OAAO,CAAC,IAAI,CAAC;mBA4HpB,OAAO,CAAC,IAAI,CAAC;uBAKT,OAAO,CAAC,IAAI,CAAC;qBAKf,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;eAYlC,IAAI;EAOlB;AAED,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAAC"}
@@ -0,0 +1,184 @@
1
+ const initial = {
2
+ project: null,
3
+ items: [],
4
+ next: null,
5
+ hasPrevious: false,
6
+ loading: false,
7
+ blocked: null,
8
+ selected: null,
9
+ deliveries: [],
10
+ deliveriesNext: null,
11
+ deliveriesHasPrevious: false,
12
+ deliveriesLoading: false,
13
+ deliveriesError: false,
14
+ filter: 'all',
15
+ detail: null,
16
+ detailError: false,
17
+ };
18
+ /** List and history reads. Responses carry configured flags only, never delivery settings. */
19
+ export function createNotificationsController(services) {
20
+ let state = initial;
21
+ let scopeEpoch = 0;
22
+ let listEpoch = 0;
23
+ let historyEpoch = 0;
24
+ let cursors = [undefined];
25
+ let historyCursors = [undefined];
26
+ const listeners = new Set();
27
+ const set = (patch) => {
28
+ state = { ...state, ...patch };
29
+ for (const listener of listeners)
30
+ listener();
31
+ };
32
+ async function loadHistory() {
33
+ const { project, selected, filter } = state;
34
+ if (project === null || selected === null)
35
+ return;
36
+ const version = ++historyEpoch;
37
+ set({ deliveriesLoading: true, deliveriesError: false });
38
+ const cursor = historyCursors[historyCursors.length - 1];
39
+ const result = await services.client.request('get', '/_pb/projects/{project}/notifications/{id}/deliveries', {
40
+ params: { project, id: selected },
41
+ query: {
42
+ ...(cursor === undefined ? {} : { cursor }),
43
+ ...(filter === 'all' ? {} : { state: filter }),
44
+ },
45
+ });
46
+ if (version !== historyEpoch)
47
+ return;
48
+ set({
49
+ deliveriesLoading: false,
50
+ deliveriesError: !result.ok,
51
+ deliveries: result.ok ? result.data.items : [],
52
+ deliveriesNext: result.ok ? result.data.next : null,
53
+ deliveriesHasPrevious: historyCursors.length > 1,
54
+ });
55
+ }
56
+ const controller = {
57
+ mutationScope() {
58
+ const epoch = scopeEpoch;
59
+ return () => epoch === scopeEpoch;
60
+ },
61
+ snapshot: () => state,
62
+ subscribe(listener) {
63
+ listeners.add(listener);
64
+ return () => {
65
+ listeners.delete(listener);
66
+ };
67
+ },
68
+ async load(project = state.project) {
69
+ if (project !== state.project) {
70
+ scopeEpoch++;
71
+ cursors = [undefined];
72
+ historyCursors = [undefined];
73
+ historyEpoch++;
74
+ set({ ...initial, project });
75
+ }
76
+ if (project === null)
77
+ return;
78
+ const version = ++listEpoch;
79
+ set({ loading: true, blocked: null });
80
+ const cursor = cursors[cursors.length - 1];
81
+ const result = await services.client.request('get', '/_pb/projects/{project}/notifications', {
82
+ params: { project },
83
+ query: cursor === undefined ? {} : { cursor },
84
+ });
85
+ if (version !== listEpoch)
86
+ return;
87
+ if (!result.ok) {
88
+ set({
89
+ loading: false,
90
+ items: [],
91
+ next: null,
92
+ blocked: result.status === 403 ? 'denied' : result.status === 404 ? 'unavailable' : 'error',
93
+ });
94
+ return;
95
+ }
96
+ const selected = state.selected !== null && result.data.items.some((item) => item.id === state.selected)
97
+ ? state.selected
98
+ : null;
99
+ set({
100
+ loading: false,
101
+ items: result.data.items,
102
+ next: result.data.next,
103
+ hasPrevious: cursors.length > 1,
104
+ selected,
105
+ ...(selected === null ? { deliveries: [], detail: null } : {}),
106
+ });
107
+ },
108
+ async nextPage() {
109
+ if (state.loading || state.next === null)
110
+ return;
111
+ cursors.push(state.next);
112
+ await controller.load();
113
+ },
114
+ async previousPage() {
115
+ if (state.loading || cursors.length < 2)
116
+ return;
117
+ cursors.pop();
118
+ await controller.load();
119
+ },
120
+ /** Replaces one row after a confirmed write; null removes it. */
121
+ replace(id, endpoint) {
122
+ set({
123
+ items: endpoint === null
124
+ ? state.items.filter((item) => item.id !== id)
125
+ : state.items.some((item) => item.id === id)
126
+ ? state.items.map((item) => (item.id === id ? endpoint : item))
127
+ : [...state.items, endpoint],
128
+ ...(endpoint === null && state.selected === id
129
+ ? { selected: null, deliveries: [], detail: null }
130
+ : {}),
131
+ });
132
+ },
133
+ async select(id) {
134
+ historyCursors = [undefined];
135
+ historyEpoch++;
136
+ set({
137
+ selected: id,
138
+ deliveries: [],
139
+ deliveriesNext: null,
140
+ deliveriesHasPrevious: false,
141
+ deliveriesError: false,
142
+ detail: null,
143
+ detailError: false,
144
+ filter: 'all',
145
+ });
146
+ await loadHistory();
147
+ },
148
+ async filterHistory(filter) {
149
+ historyCursors = [undefined];
150
+ set({ filter, detail: null });
151
+ await loadHistory();
152
+ },
153
+ reloadHistory: loadHistory,
154
+ async nextHistory() {
155
+ if (state.deliveriesLoading || state.deliveriesNext === null)
156
+ return;
157
+ historyCursors.push(state.deliveriesNext);
158
+ await loadHistory();
159
+ },
160
+ async previousHistory() {
161
+ if (state.deliveriesLoading || historyCursors.length < 2)
162
+ return;
163
+ historyCursors.pop();
164
+ await loadHistory();
165
+ },
166
+ async openDelivery(id) {
167
+ const { project, selected } = state;
168
+ if (project === null || selected === null)
169
+ return;
170
+ set({ detailError: false });
171
+ const result = await services.client.request('get', '/_pb/projects/{project}/notifications/{id}/deliveries/{delivery}', { params: { project, id: selected, delivery: id } });
172
+ if (state.selected !== selected)
173
+ return;
174
+ set(result.ok ? { detail: result.data } : { detail: null, detailError: true });
175
+ },
176
+ dispose() {
177
+ scopeEpoch++;
178
+ listEpoch++;
179
+ historyEpoch++;
180
+ },
181
+ };
182
+ return controller;
183
+ }
184
+ //# sourceMappingURL=notifications-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications-controller.js","sourceRoot":"","sources":["../../src/pages/notifications-controller.ts"],"names":[],"mappings":"AAwBA,MAAM,OAAO,GAAuB;IAClC,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,EAAE;IACd,cAAc,EAAE,IAAI;IACpB,qBAAqB,EAAE,KAAK;IAC5B,iBAAiB,EAAE,KAAK;IACxB,eAAe,EAAE,KAAK;IACtB,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,IAAI;IACZ,WAAW,EAAE,KAAK;CACnB,CAAC;AAEF,8FAA8F;AAC9F,MAAM,UAAU,6BAA6B,CAAC,QAAuB;IACnE,IAAI,KAAK,GAAG,OAAO,CAAC;IACpB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,OAAO,GAA2B,CAAC,SAAS,CAAC,CAAC;IAClD,IAAI,cAAc,GAA2B,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IACxC,MAAM,GAAG,GAAG,CAAC,KAAkC,EAAE,EAAE;QACjD,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC;QAC/B,KAAK,MAAM,QAAQ,IAAI,SAAS;YAAE,QAAQ,EAAE,CAAC;IAC/C,CAAC,CAAC;IAEF,KAAK,UAAU,WAAW;QACxB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QAC5C,IAAI,OAAO,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO;QAClD,MAAM,OAAO,GAAG,EAAE,YAAY,CAAC;QAC/B,GAAG,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,CAC1C,KAAK,EACL,uDAAuD,EACvD;YACE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE;YACjC,KAAK,EAAE;gBACL,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC3C,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;aAC/C;SACF,CACF,CAAC;QACF,IAAI,OAAO,KAAK,YAAY;YAAE,OAAO;QACrC,GAAG,CAAC;YACF,iBAAiB,EAAE,KAAK;YACxB,eAAe,EAAE,CAAC,MAAM,CAAC,EAAE;YAC3B,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAC9C,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;YACnD,qBAAqB,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC;SACjD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,aAAa;YACX,MAAM,KAAK,GAAG,UAAU,CAAC;YACzB,OAAO,GAAG,EAAE,CAAC,KAAK,KAAK,UAAU,CAAC;QACpC,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;QACrB,SAAS,CAAC,QAAoB;YAC5B,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,UAAyB,KAAK,CAAC,OAAO;YAC/C,IAAI,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC9B,UAAU,EAAE,CAAC;gBACb,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;gBACtB,cAAc,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC7B,YAAY,EAAE,CAAC;gBACf,GAAG,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/B,CAAC;YACD,IAAI,OAAO,KAAK,IAAI;gBAAE,OAAO;YAC7B,MAAM,OAAO,GAAG,EAAE,SAAS,CAAC;YAC5B,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,uCAAuC,EAAE;gBAC3F,MAAM,EAAE,EAAE,OAAO,EAAE;gBACnB,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE;aAC9C,CAAC,CAAC;YACH,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO;YAClC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,GAAG,CAAC;oBACF,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,EAAE;oBACT,IAAI,EAAE,IAAI;oBACV,OAAO,EACL,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO;iBACrF,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GACZ,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,QAAQ,CAAC;gBACrF,CAAC,CAAC,KAAK,CAAC,QAAQ;gBAChB,CAAC,CAAC,IAAI,CAAC;YACX,GAAG,CAAC;gBACF,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;gBACxB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;gBACtB,WAAW,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;gBAC/B,QAAQ;gBACR,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,QAAQ;YACZ,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;gBAAE,OAAO;YACjD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QACD,KAAK,CAAC,YAAY;YAChB,IAAI,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO;YAChD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QACD,iEAAiE;QACjE,OAAO,CAAC,EAAU,EAAE,QAAyB;YAC3C,GAAG,CAAC;gBACF,KAAK,EACH,QAAQ,KAAK,IAAI;oBACf,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;oBAC9C,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;wBAC1C,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;wBAC/D,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAClC,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE;oBAC5C,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;oBAClD,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,EAAiB;YAC5B,cAAc,GAAG,CAAC,SAAS,CAAC,CAAC;YAC7B,YAAY,EAAE,CAAC;YACf,GAAG,CAAC;gBACF,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE,EAAE;gBACd,cAAc,EAAE,IAAI;gBACpB,qBAAqB,EAAE,KAAK;gBAC5B,eAAe,EAAE,KAAK;gBACtB,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,KAAK;gBAClB,MAAM,EAAE,KAAK;aACd,CAAC,CAAC;YACH,MAAM,WAAW,EAAE,CAAC;QACtB,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,MAAsB;YACxC,cAAc,GAAG,CAAC,SAAS,CAAC,CAAC;YAC7B,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9B,MAAM,WAAW,EAAE,CAAC;QACtB,CAAC;QACD,aAAa,EAAE,WAAW;QAC1B,KAAK,CAAC,WAAW;YACf,IAAI,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI;gBAAE,OAAO;YACrE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC1C,MAAM,WAAW,EAAE,CAAC;QACtB,CAAC;QACD,KAAK,CAAC,eAAe;YACnB,IAAI,KAAK,CAAC,iBAAiB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO;YACjE,cAAc,CAAC,GAAG,EAAE,CAAC;YACrB,MAAM,WAAW,EAAE,CAAC;QACtB,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,EAAU;YAC3B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;YACpC,IAAI,OAAO,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAO;YAClD,GAAG,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,CAC1C,KAAK,EACL,kEAAkE,EAClE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CACpD,CAAC;YACF,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ;gBAAE,OAAO;YACxC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO;YACL,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,CAAC;QACjB,CAAC;KACF,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type ShellServices } from '../auth.js';
2
+ import { type NotificationsController } from './notifications-controller.js';
3
+ export declare function NotificationsView(props: {
4
+ services: ShellServices;
5
+ controller: NotificationsController;
6
+ project: string | null;
7
+ projectName: string | null;
8
+ }): import("react").JSX.Element;
9
+ export declare function NotificationsPage(): import("react").JSX.Element;
10
+ //# sourceMappingURL=notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/pages/notifications.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAwB7D,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,+BAA+B,CAAC;AA0BvC,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,uBAAuB,CAAC;IACpC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,+BAmYA;AAgMD,wBAAgB,iBAAiB,gCA0BhC"}