@flamingo-stack/openframe-frontend-core 0.0.383 → 0.0.384-snapshot.20260708165506

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 (105) hide show
  1. package/dist/{chunk-FL6YJLPC.cjs → chunk-4PXS3XNY.cjs} +7 -7
  2. package/dist/{chunk-FL6YJLPC.cjs.map → chunk-4PXS3XNY.cjs.map} +1 -1
  3. package/dist/{chunk-KGSOMSHT.cjs → chunk-4RGWQE26.cjs} +25 -25
  4. package/dist/{chunk-KGSOMSHT.cjs.map → chunk-4RGWQE26.cjs.map} +1 -1
  5. package/dist/{chunk-ZFIDR55N.cjs → chunk-5SMNVXIF.cjs} +9 -9
  6. package/dist/{chunk-ZFIDR55N.cjs.map → chunk-5SMNVXIF.cjs.map} +1 -1
  7. package/dist/{chunk-KQQ6U4UW.js → chunk-AIMUYSOW.js} +4 -4
  8. package/dist/{chunk-LI7OAUSA.js → chunk-BFLPXPWF.js} +4 -4
  9. package/dist/{chunk-AJJF43ZL.js → chunk-CES6HK7Y.js} +2 -2
  10. package/dist/{chunk-WVJFSCXR.cjs → chunk-FLYWXXYF.cjs} +26 -26
  11. package/dist/{chunk-WVJFSCXR.cjs.map → chunk-FLYWXXYF.cjs.map} +1 -1
  12. package/dist/{chunk-VQCV3GGI.cjs → chunk-FX75P47M.cjs} +186 -121
  13. package/dist/chunk-FX75P47M.cjs.map +1 -0
  14. package/dist/{chunk-CNDLMBFN.js → chunk-IZIVDLN5.js} +349 -284
  15. package/dist/chunk-IZIVDLN5.js.map +1 -0
  16. package/dist/{chunk-SGMZQTP6.js → chunk-KOYLFI7L.js} +2 -2
  17. package/dist/{chunk-YW6K7IYF.cjs → chunk-KUUKMK6R.cjs} +31 -31
  18. package/dist/{chunk-YW6K7IYF.cjs.map → chunk-KUUKMK6R.cjs.map} +1 -1
  19. package/dist/{chunk-AHCBZ6TC.cjs → chunk-L3I7HAZ2.cjs} +62 -62
  20. package/dist/{chunk-AHCBZ6TC.cjs.map → chunk-L3I7HAZ2.cjs.map} +1 -1
  21. package/dist/{chunk-MY7TV47R.js → chunk-LB5NHXL2.js} +2 -2
  22. package/dist/{chunk-6SR7HXGW.js → chunk-MKTUZSHY.js} +4 -4
  23. package/dist/{chunk-KBG3PLKS.js → chunk-OHVOXFGF.js} +2 -2
  24. package/dist/{chunk-EGFLSQEJ.js → chunk-QS4HXEQH.js} +4 -4
  25. package/dist/{chunk-KFTCNBSJ.cjs → chunk-RPBA7EVD.cjs} +5 -5
  26. package/dist/{chunk-KFTCNBSJ.cjs.map → chunk-RPBA7EVD.cjs.map} +1 -1
  27. package/dist/{chunk-7TU6MLIQ.cjs → chunk-U6ZRFH6F.cjs} +12 -12
  28. package/dist/{chunk-7TU6MLIQ.cjs.map → chunk-U6ZRFH6F.cjs.map} +1 -1
  29. package/dist/{chunk-ZD6GZX7E.js → chunk-UT4OHF5S.js} +2 -2
  30. package/dist/{chunk-S2V4EPKL.cjs → chunk-WT37HVVE.cjs} +15 -15
  31. package/dist/{chunk-S2V4EPKL.cjs.map → chunk-WT37HVVE.cjs.map} +1 -1
  32. package/dist/{chunk-BALSUWWU.cjs → chunk-XS6VOGM6.cjs} +37 -37
  33. package/dist/{chunk-BALSUWWU.cjs.map → chunk-XS6VOGM6.cjs.map} +1 -1
  34. package/dist/{chunk-W456FUZG.cjs → chunk-ZHHJEUXL.cjs} +57 -57
  35. package/dist/{chunk-W456FUZG.cjs.map → chunk-ZHHJEUXL.cjs.map} +1 -1
  36. package/dist/{chunk-B45U4FY5.js → chunk-ZI2ACZJG.js} +2 -2
  37. package/dist/{chunk-EBOK7SG7.js → chunk-ZLD3BKEI.js} +2 -2
  38. package/dist/components/case-studies/index.cjs +8 -8
  39. package/dist/components/case-studies/index.js +2 -2
  40. package/dist/components/chat/approval-batch-message.d.ts +20 -0
  41. package/dist/components/chat/approval-batch-message.d.ts.map +1 -1
  42. package/dist/components/chat/index.cjs +4 -2
  43. package/dist/components/chat/index.cjs.map +1 -1
  44. package/dist/components/chat/index.js +3 -1
  45. package/dist/components/contact/index.cjs +3 -3
  46. package/dist/components/contact/index.js +2 -2
  47. package/dist/components/docs/index.cjs +5 -5
  48. package/dist/components/docs/index.js +4 -4
  49. package/dist/components/embeds/index.cjs +3 -3
  50. package/dist/components/embeds/index.js +2 -2
  51. package/dist/components/faq/index.cjs +3 -3
  52. package/dist/components/faq/index.js +2 -2
  53. package/dist/components/features/index.cjs +2 -2
  54. package/dist/components/features/index.js +1 -1
  55. package/dist/components/features/notifications/approval-request-notification-tile.d.ts.map +1 -1
  56. package/dist/components/features/notifications/notification-tile.d.ts +8 -2
  57. package/dist/components/features/notifications/notification-tile.d.ts.map +1 -1
  58. package/dist/components/features/notifications/types.d.ts +11 -1
  59. package/dist/components/features/notifications/types.d.ts.map +1 -1
  60. package/dist/components/help-center-pages/index.cjs +20 -20
  61. package/dist/components/help-center-pages/index.js +11 -11
  62. package/dist/components/index.cjs +122 -120
  63. package/dist/components/index.cjs.map +1 -1
  64. package/dist/components/index.js +11 -9
  65. package/dist/components/index.js.map +1 -1
  66. package/dist/components/navigation/index.cjs +2 -2
  67. package/dist/components/navigation/index.js +1 -1
  68. package/dist/components/onboarding-guides/index.cjs +5 -5
  69. package/dist/components/onboarding-guides/index.js +4 -4
  70. package/dist/components/related-content/index.cjs +3 -3
  71. package/dist/components/related-content/index.js +2 -2
  72. package/dist/components/tickets/index.cjs +5 -5
  73. package/dist/components/tickets/index.js +4 -4
  74. package/dist/components/ui/data-table/data-table-body.d.ts +6 -1
  75. package/dist/components/ui/data-table/data-table-body.d.ts.map +1 -1
  76. package/dist/components/ui/data-table/data-table-row.d.ts +7 -1
  77. package/dist/components/ui/data-table/data-table-row.d.ts.map +1 -1
  78. package/dist/components/ui/data-table/index.d.ts +1 -1
  79. package/dist/components/ui/index.cjs +4 -2
  80. package/dist/components/ui/index.cjs.map +1 -1
  81. package/dist/components/ui/index.js +3 -1
  82. package/dist/index.cjs +4 -2
  83. package/dist/index.cjs.map +1 -1
  84. package/dist/index.js +3 -1
  85. package/package.json +1 -1
  86. package/src/components/chat/approval-batch-message.tsx +28 -15
  87. package/src/components/features/notifications/approval-request-notification-tile.tsx +70 -46
  88. package/src/components/features/notifications/notification-tile.tsx +125 -41
  89. package/src/components/features/notifications/types.ts +11 -1
  90. package/src/components/ui/data-table/data-table-body.tsx +7 -0
  91. package/src/components/ui/data-table/data-table-row.tsx +12 -1
  92. package/src/stories/NotificationDrawer.stories.tsx +220 -31
  93. package/dist/chunk-CNDLMBFN.js.map +0 -1
  94. package/dist/chunk-VQCV3GGI.cjs.map +0 -1
  95. /package/dist/{chunk-KQQ6U4UW.js.map → chunk-AIMUYSOW.js.map} +0 -0
  96. /package/dist/{chunk-LI7OAUSA.js.map → chunk-BFLPXPWF.js.map} +0 -0
  97. /package/dist/{chunk-AJJF43ZL.js.map → chunk-CES6HK7Y.js.map} +0 -0
  98. /package/dist/{chunk-SGMZQTP6.js.map → chunk-KOYLFI7L.js.map} +0 -0
  99. /package/dist/{chunk-MY7TV47R.js.map → chunk-LB5NHXL2.js.map} +0 -0
  100. /package/dist/{chunk-6SR7HXGW.js.map → chunk-MKTUZSHY.js.map} +0 -0
  101. /package/dist/{chunk-KBG3PLKS.js.map → chunk-OHVOXFGF.js.map} +0 -0
  102. /package/dist/{chunk-EGFLSQEJ.js.map → chunk-QS4HXEQH.js.map} +0 -0
  103. /package/dist/{chunk-ZD6GZX7E.js.map → chunk-UT4OHF5S.js.map} +0 -0
  104. /package/dist/{chunk-B45U4FY5.js.map → chunk-ZI2ACZJG.js.map} +0 -0
  105. /package/dist/{chunk-EBOK7SG7.js.map → chunk-ZLD3BKEI.js.map} +0 -0
@@ -1,6 +1,11 @@
1
1
  import type { Meta, StoryObj } from '@storybook/nextjs-vite';
2
2
  import * as React from 'react';
3
3
  import { Button } from '../components/ui/button';
4
+ import { BracketCurlyIcon } from '../components/icons-v2-generated/coding/bracket-curly-icon';
5
+ import { MonitorIcon } from '../components/icons-v2-generated/devices/monitor-icon';
6
+ import { AlertTriangleIcon } from '../components/icons-v2-generated/interface/alert-triangle-icon';
7
+ import { BannedIcon } from '../components/icons-v2-generated/security/banned-icon';
8
+ import { UserPlusIcon } from '../components/icons-v2-generated/users/user-plus-icon';
4
9
  import {
5
10
  ADMIN_APPROVAL_REQUEST_CONTEXT_TYPE,
6
11
  ApprovalRequestNotificationTile,
@@ -44,47 +49,100 @@ const meta = {
44
49
  export default meta;
45
50
  type Story = StoryObj<typeof meta>;
46
51
 
52
+ /** Inline avatar stand-in so the image slot renders without network access. */
53
+ const CUSTOMER_AVATAR =
54
+ 'data:image/svg+xml;utf8,' +
55
+ encodeURIComponent(
56
+ '<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><rect width="32" height="32" fill="#5EFC8D"/><circle cx="16" cy="12" r="6" fill="#212121"/><path d="M4 32c0-6.6 5.4-12 12-12s12 5.4 12 12" fill="#212121"/></svg>',
57
+ );
58
+
59
+ /** Seed an approval-request notification in a given resolution state. */
60
+ const approvalSeed = (
61
+ n: number,
62
+ resolution: string | null,
63
+ resolvedByName: string | null,
64
+ minutesAgo: number,
65
+ ): Notification => ({
66
+ id: `seed-approval-${n}`,
67
+ variant: 'warning',
68
+ title: 'Clear stuck print queue',
69
+ description: 'Mingo wants to restart the Spooler service on SRV-PRINT01.',
70
+ createdAt: Date.now() - 1_000 * 60 * minutesAgo,
71
+ read: false,
72
+ meta: {
73
+ contextType: ADMIN_APPROVAL_REQUEST_CONTEXT_TYPE,
74
+ approvalRequestId: `seed-req-${n}`,
75
+ approvalType: 'ADMIN',
76
+ resolution,
77
+ resolvedByName,
78
+ toolCalls: [
79
+ {
80
+ toolExecutionRequestId: `seed-ter-${n}`,
81
+ toolName: 'run_command',
82
+ toolTitle: 'Restart print spooler',
83
+ toolType: 'OPENFRAME_RMM',
84
+ toolExplanation: 'Restarts the Spooler service to clear a stuck print queue.',
85
+ requiresApproval: true,
86
+ toolCallArguments: { command: 'Restart-Service -Name Spooler -Force' },
87
+ },
88
+ ],
89
+ },
90
+ });
91
+
47
92
  const SEED: Notification[] = [
48
93
  {
49
94
  id: 'seed-1',
50
- variant: 'success',
51
- title: 'Device Deployment Complete',
52
- description: 'HP EliteBook deployed to Marketing Dept',
95
+ severity: 'INFO',
96
+ type: 'New Customer Created',
97
+ imageUrl: CUSTOMER_AVATAR,
98
+ title: 'Acme Corp',
99
+ description: 'Added by John Smith',
53
100
  createdAt: Date.now() - 1_000 * 30,
54
101
  read: false,
55
102
  },
103
+ approvalSeed(1, null, null, 2),
56
104
  {
57
105
  id: 'seed-2',
58
106
  variant: 'success',
59
- title: 'Device Deployment Complete',
60
- description: 'HP EliteBook deployed to Marketing Dept',
107
+ type: 'Device Deployment Complete',
108
+ icon: <MonitorIcon size={16} />,
109
+ title: 'HP EliteBook',
110
+ description: 'Deployed to Marketing Dept',
61
111
  createdAt: Date.now() - 1_000 * 60 * 5,
62
112
  read: false,
63
113
  },
64
114
  {
65
115
  id: 'seed-3',
66
- variant: 'error',
67
- title: 'Policy Violation Detected',
68
- description: 'USB storage device connected to ACME-WS01',
116
+ severity: 'DANGER',
117
+ type: 'Policy Violation Detected',
118
+ icon: <BannedIcon size={16} />,
119
+ title: 'ACME-WS01',
120
+ description: 'USB storage device connected',
69
121
  createdAt: Date.now() - 1_000 * 60 * 12,
70
122
  read: false,
71
123
  },
72
124
  {
73
125
  id: 'seed-4',
74
- variant: 'error',
75
- title: 'Disk Space Check Failed',
76
- description: 'C: drive at 95% capacity on SRV-DB01',
126
+ severity: 'WARNING',
127
+ type: 'Disk Space Check Failed',
128
+ icon: <AlertTriangleIcon size={16} />,
129
+ title: 'SRV-DB01',
130
+ description: 'C: drive at 95% capacity',
77
131
  createdAt: Date.now() - 1_000 * 60 * 35,
78
132
  read: false,
79
133
  },
134
+ approvalSeed(2, 'APPROVED', 'John Smith', 45),
80
135
  {
81
136
  id: 'seed-5',
82
137
  variant: 'success',
83
- title: 'Script Execution Complete',
84
- description: 'Windows Update script finished on 45 devices',
138
+ type: 'Script Execution Complete',
139
+ icon: <BracketCurlyIcon size={16} />,
140
+ title: 'Windows Update',
141
+ description: 'Script finished on 45 devices',
85
142
  createdAt: Date.now() - 1_000 * 60 * 60,
86
143
  read: false,
87
144
  },
145
+ approvalSeed(3, 'REJECTED', 'Jane Doe', 90),
88
146
  {
89
147
  id: 'seed-6',
90
148
  variant: 'warning',
@@ -93,6 +151,7 @@ const SEED: Notification[] = [
93
151
  createdAt: Date.now() - 1_000 * 60 * 60 * 2,
94
152
  read: false,
95
153
  },
154
+ approvalSeed(4, 'CANCELLED', null, 180),
96
155
  ];
97
156
 
98
157
  function AutoOpen() {
@@ -104,7 +163,9 @@ function AutoOpen() {
104
163
  }
105
164
 
106
165
  /**
107
- * Static preview of every tile variant — settled (non-live) state.
166
+ * Static preview of every tile variant — settled (non-live) state. The `type`
167
+ * header label picks up the variant color; tiles without an icon/image fall
168
+ * back to the severity dot in the header slot.
108
169
  */
109
170
  export const AllTileVariants: Story = {
110
171
  render: () => {
@@ -115,6 +176,7 @@ export const AllTileVariants: Story = {
115
176
  notification={{
116
177
  id: 't-default',
117
178
  variant: 'default',
179
+ type: 'System Notice',
118
180
  title: 'Heads up',
119
181
  description: 'Neutral notification, no specific status.',
120
182
  ...base,
@@ -125,8 +187,9 @@ export const AllTileVariants: Story = {
125
187
  notification={{
126
188
  id: 't-success',
127
189
  variant: 'success',
128
- title: 'Device Deployment Complete',
129
- description: 'HP EliteBook deployed to Marketing Dept',
190
+ type: 'Device Deployment Complete',
191
+ title: 'HP EliteBook',
192
+ description: 'Deployed to Marketing Dept',
130
193
  ...base,
131
194
  }}
132
195
  onComplete={() => {}}
@@ -135,8 +198,9 @@ export const AllTileVariants: Story = {
135
198
  notification={{
136
199
  id: 't-error',
137
200
  variant: 'error',
138
- title: 'Policy Violation Detected',
139
- description: 'USB storage device connected to ACME-WS01',
201
+ type: 'Policy Violation Detected',
202
+ title: 'ACME-WS01',
203
+ description: 'USB storage device connected',
140
204
  ...base,
141
205
  }}
142
206
  onComplete={() => {}}
@@ -145,6 +209,7 @@ export const AllTileVariants: Story = {
145
209
  notification={{
146
210
  id: 't-warning',
147
211
  variant: 'warning',
212
+ type: 'Approval Required',
148
213
  title: 'Tech Required',
149
214
  description: 'Approval is required to execute the command.',
150
215
  ...base,
@@ -155,12 +220,97 @@ export const AllTileVariants: Story = {
155
220
  notification={{
156
221
  id: 't-info',
157
222
  variant: 'info',
223
+ type: 'Agent Update',
158
224
  title: 'Update available',
159
225
  description: 'A new agent version is ready to install.',
160
226
  ...base,
161
227
  }}
162
228
  onComplete={() => {}}
163
229
  />
230
+ <NotificationTile
231
+ notification={{
232
+ id: 't-legacy',
233
+ variant: 'default',
234
+ title: 'Legacy notification',
235
+ description: 'No type, icon or image — header shows the dot fallback.',
236
+ ...base,
237
+ }}
238
+ onComplete={() => {}}
239
+ />
240
+ </div>
241
+ );
242
+ },
243
+ };
244
+
245
+ /**
246
+ * The new header fields: `severity` colors the type label and icon slot
247
+ * (INFO grey, WARNING amber, DANGER red) and overrides `variant`; `imageUrl`
248
+ * wins over `icon`, which wins over the dot fallback.
249
+ */
250
+ export const SeverityIconAndImage: Story = {
251
+ render: () => {
252
+ const base = { createdAt: Date.now() - 60_000, read: true } as const;
253
+ return (
254
+ <div className="flex max-w-md flex-col gap-2">
255
+ <NotificationTile
256
+ notification={{
257
+ id: 's-image',
258
+ severity: 'INFO',
259
+ type: 'New Customer Created',
260
+ imageUrl: CUSTOMER_AVATAR,
261
+ title: 'Acme Corp',
262
+ description: 'Added by John Smith',
263
+ ...base,
264
+ }}
265
+ onComplete={() => {}}
266
+ />
267
+ <NotificationTile
268
+ notification={{
269
+ id: 's-icon-info',
270
+ severity: 'INFO',
271
+ type: 'New User Invited',
272
+ icon: <UserPlusIcon size={16} />,
273
+ title: 'jane.doe@acme.com',
274
+ description: 'Invited by John Smith',
275
+ ...base,
276
+ }}
277
+ onComplete={() => {}}
278
+ />
279
+ <NotificationTile
280
+ notification={{
281
+ id: 's-icon-warning',
282
+ severity: 'WARNING',
283
+ type: 'Disk Space Warning',
284
+ icon: <AlertTriangleIcon size={16} />,
285
+ title: 'SRV-DB01',
286
+ description: 'C: drive at 85% capacity',
287
+ ...base,
288
+ }}
289
+ onComplete={() => {}}
290
+ />
291
+ <NotificationTile
292
+ notification={{
293
+ id: 's-icon-danger',
294
+ severity: 'DANGER',
295
+ type: 'Policy Violation Detected',
296
+ icon: <BannedIcon size={16} />,
297
+ title: 'ACME-WS01',
298
+ description: 'USB storage device connected',
299
+ ...base,
300
+ }}
301
+ onComplete={() => {}}
302
+ />
303
+ <NotificationTile
304
+ notification={{
305
+ id: 's-dot-danger',
306
+ severity: 'DANGER',
307
+ type: 'Agent Offline',
308
+ title: 'ACME-WS07',
309
+ description: 'No icon configured — severity dot fallback.',
310
+ ...base,
311
+ }}
312
+ onComplete={() => {}}
313
+ />
164
314
  </div>
165
315
  );
166
316
  },
@@ -179,9 +329,11 @@ export const LiveTile: Story = {
179
329
  key={tick}
180
330
  notification={{
181
331
  id: 'live-tile',
182
- variant: 'success',
183
- title: 'Device Deployment Complete',
184
- description: 'HP EliteBook deployed to Marketing Dept',
332
+ severity: 'INFO',
333
+ type: 'New Customer Created',
334
+ imageUrl: CUSTOMER_AVATAR,
335
+ title: 'Acme Corp',
336
+ description: 'Added by John Smith',
185
337
  createdAt: Date.now(),
186
338
  read: false,
187
339
  }}
@@ -212,7 +364,9 @@ export const DrawerEmpty: Story = {
212
364
 
213
365
  /**
214
366
  * Drawer pre-seeded to mirror the Figma reference, with the toggle row and the
215
- * history button wired.
367
+ * history button wired. Includes approval-request notifications in every
368
+ * resolution state: pending (buttons), approved, rejected and cancelled
369
+ * (status tag + resolver name in place of the buttons).
216
370
  */
217
371
  export const DrawerWithSeedData: Story = {
218
372
  render: function DrawerWithSeedDataRender() {
@@ -222,11 +376,13 @@ export const DrawerWithSeedData: Story = {
222
376
  onHistoryClick={() => alert('Navigate to /notifications')}
223
377
  historyHref="/notifications"
224
378
  onShowPopupsChange={(v) => console.log('showPopups →', v)}
379
+ renderTile={renderApprovalTile}
225
380
  >
226
381
  <AutoOpen />
227
382
  <NotificationDrawer />
228
383
  <p className="text-h6 text-ods-text-secondary">
229
- Six seeded notifications matching the Figma reference.
384
+ Seeded notifications matching the Figma reference, including approvals
385
+ in all four resolution states.
230
386
  </p>
231
387
  </NotificationsProvider>
232
388
  );
@@ -312,8 +468,13 @@ function PlaygroundControls() {
312
468
  useNotifications();
313
469
  const approvalSeq = React.useRef(0);
314
470
 
315
- const fire = (variant: NotificationVariant, title: string, description: string) => {
316
- addNotification({ variant, title, description });
471
+ const fire = (
472
+ variant: NotificationVariant,
473
+ title: string,
474
+ description: string,
475
+ extra?: Partial<Pick<Notification, 'type' | 'icon' | 'imageUrl' | 'severity'>>,
476
+ ) => {
477
+ addNotification({ variant, title, description, ...extra });
317
478
  };
318
479
 
319
480
  const fireWithDeepLink = () => {
@@ -417,7 +578,9 @@ function PlaygroundControls() {
417
578
  <Button
418
579
  variant="accent"
419
580
  onClick={() =>
420
- fire('success', 'Device Deployment Complete', 'HP EliteBook deployed to Marketing Dept')
581
+ fire('success', 'HP EliteBook', 'Deployed to Marketing Dept', {
582
+ type: 'Device Deployment Complete',
583
+ })
421
584
  }
422
585
  >
423
586
  Fire success
@@ -425,23 +588,49 @@ function PlaygroundControls() {
425
588
  <Button
426
589
  variant="destructive"
427
590
  onClick={() =>
428
- fire('error', 'Policy Violation Detected', 'USB storage device connected to ACME-WS01')
591
+ fire('error', 'ACME-WS01', 'USB storage device connected', {
592
+ type: 'Policy Violation Detected',
593
+ severity: 'DANGER',
594
+ icon: <BannedIcon size={16} />,
595
+ })
429
596
  }
430
597
  >
431
- Fire error
598
+ Fire danger + icon
432
599
  </Button>
433
600
  <Button
434
601
  variant="outline"
435
- onClick={() => fire('warning', 'Tech Required', 'Approval is required to execute the command.')}
602
+ onClick={() =>
603
+ fire('warning', 'Tech Required', 'Approval is required to execute the command.', {
604
+ type: 'Approval Required',
605
+ severity: 'WARNING',
606
+ icon: <AlertTriangleIcon size={16} />,
607
+ })
608
+ }
436
609
  >
437
- Fire warning
610
+ Fire warning + icon
438
611
  </Button>
439
612
  <Button
440
613
  variant="transparent"
441
- onClick={() => fire('info', 'Update available', 'A new agent version is ready to install.')}
614
+ onClick={() =>
615
+ fire('info', 'Update available', 'A new agent version is ready to install.', {
616
+ type: 'Agent Update',
617
+ })
618
+ }
442
619
  >
443
620
  Fire info
444
621
  </Button>
622
+ <Button
623
+ variant="outline"
624
+ onClick={() =>
625
+ fire('info', 'Acme Corp', 'Added by John Smith', {
626
+ type: 'New Customer Created',
627
+ severity: 'INFO',
628
+ imageUrl: CUSTOMER_AVATAR,
629
+ })
630
+ }
631
+ >
632
+ Fire with image
633
+ </Button>
445
634
  <Button
446
635
  variant="outline"
447
636
  onClick={() => fire('default', 'Heads up', 'Neutral notification without a specific status.')}