@redsift/products 12.5.8 → 12.5.9-muiv7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -4,7 +4,7 @@ import * as _redsift_design_system from '@redsift/design-system';
4
4
  import { ButtonColor, Theme, ValueOf, ContainerProps, HeadingProps, IconProps, StylingProps, Comp, ButtonProps } from '@redsift/design-system';
5
5
  import * as _redsift_pickers from '@redsift/pickers';
6
6
  import { ItemProps, MenuButtonProps, MenuButtonContentProps, MenuButtonContentHeaderProps, MenuButtonContentMenuProps } from '@redsift/pickers';
7
- import { RecommendationsData, JmapProps, DmarcProps, DkimProps, SpfProps, EhloProps, FcrdnsProps, EhloCheckProps, TlsProps, CardStatus, DomainAnalyzerSpfProps, DomainAnalyzerDkimProps, MtaProps, ExtsecrepProps, DnsSecurityProps, InvestigateProps } from '@redsift/signal-logic';
7
+ import { JmapProps, InvestigateProps, SpfProps, DmarcProps, DkimProps, DnsSecurityProps, ExtsecrepProps, MtaProps, DomainAnalyzerDkimProps, DomainAnalyzerSpfProps, CardStatus, TlsProps, EhloProps, FcrdnsProps, EhloCheckProps, RecommendationsData } from '@redsift/signal-logic';
8
8
  export { BIMI_CHECKER_SIGNAL_TYPES, BimiCheckerSignalType, CARD_STATUS, DOMAIN_ANALYZER_SIGNAL_TYPES, DomainAnalyzerSignalType, PUBLIC_INVESTIGATE_SIGNAL_TYPES, PublicInvestigateSignalType, RecommendationSignal, RecommendationsAnalysis, RecommendationsData, SIGNAL_TYPES, SignalType, getSignalStatus } from '@redsift/signal-logic';
9
9
 
10
10
  /**
@@ -220,132 +220,6 @@ declare const RadarSimpleMenuButton: Comp<Omit<MenuButtonProps, 'children'> & {
220
220
  icon?: Omit<IconProps, 'ref'>;
221
221
  } & Pick<MenuButtonContentMenuProps, 'children'>, HTMLDivElement>;
222
222
 
223
- type SignalData = {
224
- signalType: string;
225
- jmap?: {
226
- extsecrep?: Record<string, any>;
227
- [key: string]: unknown;
228
- };
229
- shortDescription?: unknown;
230
- [key: string]: unknown;
231
- };
232
- type ErrorLike = {
233
- name?: string;
234
- message?: string;
235
- stack?: string;
236
- };
237
- type CardEnabledOverrides = Record<string, boolean | undefined>;
238
- interface SignalCardListProps extends Omit<ComponentProps<'div'>, 'children'> {
239
- /** Array of signal data objects containing DMARC, DKIM, SPF information */
240
- signals?: SignalData[];
241
- /** Error object to display if signal loading fails */
242
- error?: ErrorLike | null;
243
- /** Map of signal types to enabled/disabled state */
244
- isCardEnabledMap?: CardEnabledOverrides;
245
- /** Signal types to display in the priority section (shown first). Defaults to DMARC, DKIM, SPF */
246
- prioritySignalTypes?: string[];
247
- /** Initial selected signal type for external selection control */
248
- initialSelectedSignalType?: string | null;
249
- /** Callback when a signal card is selected */
250
- onSelectSignalType?: (signalType: string) => void;
251
- /** Custom header renderer for adding content at the top of each card, after the title */
252
- renderCardHeader?: (signal: SignalData) => React.ReactNode;
253
- /** Override the promo banner button href on all cards and the email provider banner CTA link (e.g. to add UTM parameters). For per-card promo banners, only used when renderCardHeader is not provided. Defaults to the OnDMARC signup URL (`https://iam.redsift.cloud/signup?redirectapp=cloud&product=ondmarc`). */
254
- cardPromoHref?: string;
255
- /**
256
- * Optional callback fired when the user clicks any CTA link that navigates
257
- * to the promo/signup href. This includes:
258
- * - The "Protect your domain" promo banner inside each card (shown when
259
- * `renderCardHeader` is not provided; uses `cardPromoHref` or the default
260
- * OnDMARC signup URL)
261
- * - The "Set up monitoring" link in the email provider banner (only rendered
262
- * when `cardPromoHref` is set)
263
- *
264
- * Fires alongside the normal navigation (does not prevent default).
265
- */
266
- onCardPromoClick?: () => void;
267
- /** Override the promo banner text on all cards. Only used when renderCardHeader is not provided. Defaults to the translated OnDMARC trial copy. */
268
- cardPromoText?: string;
269
- /** Override the promo banner button label on all cards. Defaults to the translated 'Protect your domain'. */
270
- cardPromoButtonLabel?: string;
271
- /** Custom footer renderer for adding content at the bottom of each card */
272
- renderCardFooter?: (signal: SignalData) => React.ReactNode;
273
- /**
274
- * Heading text for the priority signals section.
275
- * Defaults to "Required for the selected compliance profile"
276
- */
277
- prioritySectionHeading?: string;
278
- /**
279
- * Heading text for the remaining signals section.
280
- * Defaults to "Not required for the selected compliance profile"
281
- */
282
- remainingSectionHeading?: string;
283
- /** Use Investigate handbook colors instead of Design System CSS variables */
284
- useInvestigateColors?: boolean;
285
- /**
286
- * Enable collapsible sections inside all child cards.
287
- * @default true
288
- */
289
- isCollapsible?: boolean;
290
- /**
291
- * Controlled collapsed state for all sections in all child cards.
292
- * Used with isCollapsible to manage collapsed state externally.
293
- */
294
- areAllCollapsed?: boolean;
295
- /**
296
- * Callback fired when the collapse-all toggle changes in any child card.
297
- */
298
- onCollapseAll?: (areAllCollapsed: boolean) => void;
299
- /**
300
- * AI-powered recommendations data including analysis and per-protocol signals.
301
- * When provided (and showRecommendations is not false), renders a RecommendationsSummary
302
- * section above the signal cards.
303
- */
304
- recommendations?: RecommendationsData | null;
305
- /**
306
- * Whether recommendations data is still loading.
307
- * When true, shows a skeleton/shimmer placeholder for the recommendations section.
308
- */
309
- recommendationsLoading?: boolean;
310
- /**
311
- * Whether to show the recommendations section.
312
- * @default true
313
- */
314
- showRecommendations?: boolean;
315
- /**
316
- * Structured data for the CTA card in the recommendations section.
317
- * The DS owns the layout; the consumer provides the content and click handler.
318
- */
319
- recommendationsCTA?: {
320
- title: string;
321
- description: string;
322
- buttonLabel: string;
323
- onClickCTA: () => void;
324
- };
325
- /**
326
- * Callback when user clicks "See more details" on a status card.
327
- * The consumer uses this to scroll to and expand the corresponding signal card.
328
- */
329
- onExpandSignalCard?: (signalType: string) => void;
330
- /**
331
- * Callback for the "Check another email" button in the header.
332
- * When provided, renders a styled button with a sync icon and translated label.
333
- * Only rendered when a checked email is found in the signal data.
334
- */
335
- onCheckAnotherEmail?: () => void;
336
- /**
337
- * Render prop for custom action area in the header.
338
- * Overrides the default "Check another email" button when provided.
339
- * Only rendered when a checked email is found in the signal data.
340
- */
341
- renderHeaderAction?: () => ReactNode;
342
- /**
343
- * Whether to show the "Powered by OnDMARC" branding in the header.
344
- * @default true
345
- */
346
- showBranding?: boolean;
347
- }
348
-
349
223
  /**
350
224
  * Common props shared by all signal card components. These cover layout options
351
225
  * that ultimately map to `SignalCardNormal`.
@@ -377,139 +251,113 @@ interface SignalCardSharedProps extends Omit<ComponentProps<'div'>, 'children' |
377
251
  onCollapseAll?: (areAllCollapsed: boolean) => void;
378
252
  }
379
253
 
380
- /**
381
- * Extended JMAP props for DMARC card including required extsecrep data
382
- */
383
- interface SignalCardDmarcJmapProps extends JmapProps {
384
- extsecrep: {
385
- dmarc?: DmarcProps;
386
- dkim?: DkimProps | DkimProps[];
387
- spf?: SpfProps;
388
- };
389
- }
390
254
  /**
391
255
  * Component props.
392
256
  */
393
- interface SignalCardDmarcProps extends SignalCardSharedProps {
257
+ interface SignalCardGoogleYahooComplianceProps extends SignalCardSharedProps {
394
258
  /**
395
- * JMAP email data containing DMARC, DKIM, SPF information
259
+ * Domain name (currently not used but maintained for API compatibility)
396
260
  */
397
- jmap: SignalCardDmarcJmapProps;
261
+ domain?: string | null;
398
262
  /**
399
- * Whether this is being used in domain analyzer mode
263
+ * JMAP extsecrep data containing authentication results
400
264
  */
401
- isDomainAnalyzer?: boolean;
265
+ jmap?: JmapProps | null;
266
+ /**
267
+ * Investigate data with FCrDNS and EHLO check results
268
+ */
269
+ investigate?: InvestigateProps | null;
402
270
  }
403
271
 
404
- type SpfData = SpfProps;
405
272
  /**
406
273
  * Component props.
407
274
  */
408
- interface SignalCardSpfProps extends SignalCardSharedProps {
409
- /** JMAP email data containing SPF information */
410
- jmap: {
411
- extsecrep: {
412
- spf?: SpfData;
413
- };
414
- };
275
+ interface SignalCardUrlsProps extends SignalCardSharedProps {
276
+ /**
277
+ * Investigate data containing extracted URLs
278
+ */
279
+ investigate?: InvestigateProps | null;
415
280
  }
416
281
 
417
- type DkimResult = DkimProps;
418
- type DmarcResult$1 = DmarcProps | null;
419
282
  /**
420
- * Component props.
283
+ * External security report data structure
421
284
  */
422
- interface SignalCardDkimProps extends SignalCardSharedProps {
423
- /** JMAP email data containing DKIM, DMARC information */
424
- jmap: {
425
- extsecrep: {
426
- dkim?: DkimResult | DkimResult[] | null;
427
- dmarc?: DmarcResult$1;
428
- };
429
- };
285
+ interface ExtsecrepData {
286
+ /** SPF check data */
287
+ spf?: SpfProps | null;
288
+ /** DMARC policy data */
289
+ dmarc?: DmarcProps | null;
290
+ /** DKIM signature data - can be array or object */
291
+ dkim?: DkimProps | DkimProps[] | null;
430
292
  }
431
-
432
293
  /**
433
294
  * Component props.
434
295
  */
435
- interface SignalCardFcrdnsProps extends SignalCardSharedProps {
436
- /** JMAP data containing EHLO information */
296
+ interface SignalCardAmpProps extends SignalCardSharedProps {
297
+ /** JMAP data containing authentication information */
437
298
  jmap: {
438
- extsecrep: {
439
- ehlo?: EhloProps;
440
- };
441
- };
442
- /** Investigation data with FCrDNS and EHLO check results */
443
- investigate?: {
444
- fcrdns?: FcrdnsProps | null;
445
- ehloCheck?: EhloCheckProps | null;
299
+ /** External security report with SPF, DMARC, DKIM data */
300
+ extsecrep: ExtsecrepData;
301
+ /** From email address information */
302
+ from?: {
303
+ email?: string | null;
304
+ } | null;
446
305
  };
447
306
  }
448
307
 
449
308
  /**
450
309
  * Component props.
451
310
  */
452
- interface SignalCardTlsProps extends SignalCardSharedProps {
453
- /** JMAP email data containing TLS information */
454
- jmap: {
455
- extsecrep: {
456
- tls?: TlsProps;
457
- };
458
- };
311
+ interface SignalCardDnssecProps extends SignalCardSharedProps {
312
+ /** JMAP data containing DNS security information */
313
+ jmap?: {
314
+ extsecrep?: {
315
+ dnsSecurity?: DnsSecurityProps | null;
316
+ } | null;
317
+ } | null;
318
+ /** Custom short description (overrides default based on result) */
319
+ shortDescription?: ReactNode;
459
320
  }
460
321
 
461
- type DmarcResult = {
462
- status?: CardStatus | string | null;
463
- errors?: string[] | null;
464
- };
465
- type DmarcData$1 = {
466
- raw?: string | null;
467
- result?: DmarcResult | null;
468
- txtExtractedFrom?: string | null;
469
- policyDomain?: string | null;
470
- fromDomain?: string | null;
471
- domainPublished?: string | null;
472
- };
473
- type Originator = {
474
- domain?: string | null;
475
- orgDomain?: string | null;
322
+ type ExtsecrepThreatLevel = ExtsecrepProps;
323
+ type FromInfo = {
324
+ name?: string | null;
325
+ email?: string | null;
476
326
  } | null;
477
- interface SignalCardDmarcDomainProps extends SignalCardSharedProps {
327
+ /**
328
+ * Component props.
329
+ */
330
+ interface SignalCardThreatInvProps extends SignalCardSharedProps {
331
+ /** JMAP email data containing threat intelligence information */
478
332
  jmap: {
479
- extsecrep: {
480
- dmarc: DmarcData$1;
481
- originator?: Originator;
482
- };
333
+ extsecrep: ExtsecrepThreatLevel;
334
+ from?: FromInfo;
483
335
  };
336
+ /** Whether this is being used in domain analyzer mode */
337
+ isDomainAnalyzer?: boolean;
484
338
  }
485
339
 
486
- /**
487
- * SPF report item from the BIMI Checker API
488
- */
489
- interface SpfReportItem {
490
- status?: string;
340
+ type SubdoReportEntry = {
491
341
  message?: string;
492
342
  spfError?: string;
493
- }
494
- interface SpfDetails {
495
- raw?: string | string[] | null;
496
- status?: string | null;
497
- txtExtractedFrom?: string | null;
498
- report?: SpfReportItem[];
343
+ raw?: string;
344
+ value?: unknown;
345
+ details?: unknown;
499
346
  [key: string]: unknown;
500
- }
347
+ };
501
348
  /**
502
- * Props for the SignalCardSpfDomain component.
503
- *
504
- * Simplified SPF Domain Card for BIMI Checker - shows only pass/fail status and raw SPF record.
349
+ * Component props.
505
350
  */
506
- interface SignalCardSpfDomainProps extends SignalCardSharedProps {
351
+ interface SignalCardSubdoProps extends SignalCardSharedProps {
507
352
  /**
508
- * JMAP data containing SPF authentication results
353
+ * JMAP data containing SPF subdomain takeover report
509
354
  */
510
355
  jmap?: {
511
356
  extsecrep?: {
512
- spf?: SpfDetails | null;
357
+ spf?: {
358
+ domain?: string | null;
359
+ report?: SubdoReportEntry[] | null;
360
+ } | null;
513
361
  } | null;
514
362
  } | null;
515
363
  }
@@ -517,19 +365,34 @@ interface SignalCardSpfDomainProps extends SignalCardSharedProps {
517
365
  /**
518
366
  * Component props.
519
367
  */
520
- interface SignalCardSpfDomainAnalyzerProps extends SignalCardSharedProps {
368
+ interface SignalCardMtaStsProps extends SignalCardSharedProps {
369
+ /** JMAP email data containing MTA-STS information */
370
+ jmap?: {
371
+ extsecrep?: {
372
+ mta?: MtaProps | null;
373
+ } | null;
374
+ } | null;
375
+ /** Domain to analyze */
376
+ domain?: string;
377
+ }
378
+
379
+ /**
380
+ * Component props.
381
+ */
382
+ interface SignalCardBimiProps extends SignalCardSharedProps {
521
383
  /**
522
- * JMAP data containing SPF analysis results
384
+ * JMAP data containing BIMI and DMARC information from the email security report.
523
385
  */
524
386
  jmap: {
525
387
  extsecrep: {
526
- spf: DomainAnalyzerSpfProps;
527
- originator?: {
528
- domain?: string | null;
529
- orgDomain?: string | null;
530
- } | null;
388
+ bimi?: any;
389
+ dmarc?: any;
531
390
  };
532
391
  };
392
+ /**
393
+ * Optional callback invoked when the component mounts.
394
+ */
395
+ onComponentMount?: () => void;
533
396
  }
534
397
 
535
398
  /**
@@ -538,7 +401,7 @@ interface SignalCardSpfDomainAnalyzerProps extends SignalCardSharedProps {
538
401
  */
539
402
  type ExtractionCaptionType = 'email' | 'dns' | 'dns-details' | 'policy' | 'email-details';
540
403
 
541
- type DmarcData = {
404
+ type DmarcData$1 = {
542
405
  domain?: string | null;
543
406
  } | null;
544
407
  /**
@@ -552,7 +415,7 @@ interface SignalCardDkimDomainAnalyzerProps extends SignalCardSharedProps {
552
415
  */
553
416
  jmap: {
554
417
  extsecrep: {
555
- dmarc?: DmarcData;
418
+ dmarc?: DmarcData$1;
556
419
  dkim?: DomainAnalyzerDkimProps;
557
420
  };
558
421
  };
@@ -561,145 +424,282 @@ interface SignalCardDkimDomainAnalyzerProps extends SignalCardSharedProps {
561
424
  /**
562
425
  * Component props.
563
426
  */
564
- interface SignalCardBimiProps extends SignalCardSharedProps {
427
+ interface SignalCardSpfDomainAnalyzerProps extends SignalCardSharedProps {
565
428
  /**
566
- * JMAP data containing BIMI and DMARC information from the email security report.
429
+ * JMAP data containing SPF analysis results
567
430
  */
568
431
  jmap: {
569
432
  extsecrep: {
570
- bimi?: any;
571
- dmarc?: any;
433
+ spf: DomainAnalyzerSpfProps;
434
+ originator?: {
435
+ domain?: string | null;
436
+ orgDomain?: string | null;
437
+ } | null;
572
438
  };
573
439
  };
574
- /**
575
- * Optional callback invoked when the component mounts.
576
- */
577
- onComponentMount?: () => void;
578
440
  }
579
441
 
580
442
  /**
581
- * Component props.
443
+ * SPF report item from the BIMI Checker API
582
444
  */
583
- interface SignalCardMtaStsProps extends SignalCardSharedProps {
584
- /** JMAP email data containing MTA-STS information */
585
- jmap?: {
586
- extsecrep?: {
587
- mta?: MtaProps | null;
588
- } | null;
589
- } | null;
590
- /** Domain to analyze */
591
- domain?: string;
592
- }
593
-
594
- type SubdoReportEntry = {
445
+ interface SpfReportItem {
446
+ status?: string;
595
447
  message?: string;
596
448
  spfError?: string;
597
- raw?: string;
598
- value?: unknown;
599
- details?: unknown;
449
+ }
450
+ interface SpfDetails {
451
+ raw?: string | string[] | null;
452
+ status?: string | null;
453
+ txtExtractedFrom?: string | null;
454
+ report?: SpfReportItem[];
600
455
  [key: string]: unknown;
601
- };
456
+ }
602
457
  /**
603
- * Component props.
458
+ * Props for the SignalCardSpfDomain component.
459
+ *
460
+ * Simplified SPF Domain Card for BIMI Checker - shows only pass/fail status and raw SPF record.
604
461
  */
605
- interface SignalCardSubdoProps extends SignalCardSharedProps {
462
+ interface SignalCardSpfDomainProps extends SignalCardSharedProps {
606
463
  /**
607
- * JMAP data containing SPF subdomain takeover report
464
+ * JMAP data containing SPF authentication results
608
465
  */
609
466
  jmap?: {
610
467
  extsecrep?: {
611
- spf?: {
612
- domain?: string | null;
613
- report?: SubdoReportEntry[] | null;
614
- } | null;
468
+ spf?: SpfDetails | null;
615
469
  } | null;
616
470
  } | null;
617
471
  }
618
472
 
619
- type ExtsecrepThreatLevel = ExtsecrepProps;
620
- type FromInfo = {
621
- name?: string | null;
622
- email?: string | null;
473
+ type DmarcResult$1 = {
474
+ status?: CardStatus | string | null;
475
+ errors?: string[] | null;
476
+ };
477
+ type DmarcData = {
478
+ raw?: string | null;
479
+ result?: DmarcResult$1 | null;
480
+ txtExtractedFrom?: string | null;
481
+ policyDomain?: string | null;
482
+ fromDomain?: string | null;
483
+ domainPublished?: string | null;
484
+ };
485
+ type Originator = {
486
+ domain?: string | null;
487
+ orgDomain?: string | null;
623
488
  } | null;
489
+ interface SignalCardDmarcDomainProps extends SignalCardSharedProps {
490
+ jmap: {
491
+ extsecrep: {
492
+ dmarc: DmarcData;
493
+ originator?: Originator;
494
+ };
495
+ };
496
+ }
497
+
624
498
  /**
625
499
  * Component props.
626
500
  */
627
- interface SignalCardThreatInvProps extends SignalCardSharedProps {
628
- /** JMAP email data containing threat intelligence information */
501
+ interface SignalCardTlsProps extends SignalCardSharedProps {
502
+ /** JMAP email data containing TLS information */
629
503
  jmap: {
630
- extsecrep: ExtsecrepThreatLevel;
631
- from?: FromInfo;
504
+ extsecrep: {
505
+ tls?: TlsProps;
506
+ };
632
507
  };
633
- /** Whether this is being used in domain analyzer mode */
634
- isDomainAnalyzer?: boolean;
635
508
  }
636
509
 
637
510
  /**
638
511
  * Component props.
639
512
  */
640
- interface SignalCardDnssecProps extends SignalCardSharedProps {
641
- /** JMAP data containing DNS security information */
642
- jmap?: {
643
- extsecrep?: {
644
- dnsSecurity?: DnsSecurityProps | null;
645
- } | null;
646
- } | null;
647
- /** Custom short description (overrides default based on result) */
648
- shortDescription?: ReactNode;
513
+ interface SignalCardFcrdnsProps extends SignalCardSharedProps {
514
+ /** JMAP data containing EHLO information */
515
+ jmap: {
516
+ extsecrep: {
517
+ ehlo?: EhloProps;
518
+ };
519
+ };
520
+ /** Investigation data with FCrDNS and EHLO check results */
521
+ investigate?: {
522
+ fcrdns?: FcrdnsProps | null;
523
+ ehloCheck?: EhloCheckProps | null;
524
+ };
649
525
  }
650
526
 
527
+ type DkimResult = DkimProps;
528
+ type DmarcResult = DmarcProps | null;
651
529
  /**
652
- * External security report data structure
530
+ * Component props.
653
531
  */
654
- interface ExtsecrepData {
655
- /** SPF check data */
656
- spf?: SpfProps | null;
657
- /** DMARC policy data */
658
- dmarc?: DmarcProps | null;
659
- /** DKIM signature data - can be array or object */
660
- dkim?: DkimProps | DkimProps[] | null;
532
+ interface SignalCardDkimProps extends SignalCardSharedProps {
533
+ /** JMAP email data containing DKIM, DMARC information */
534
+ jmap: {
535
+ extsecrep: {
536
+ dkim?: DkimResult | DkimResult[] | null;
537
+ dmarc?: DmarcResult;
538
+ };
539
+ };
661
540
  }
541
+
542
+ type SpfData = SpfProps;
662
543
  /**
663
544
  * Component props.
664
545
  */
665
- interface SignalCardAmpProps extends SignalCardSharedProps {
666
- /** JMAP data containing authentication information */
546
+ interface SignalCardSpfProps extends SignalCardSharedProps {
547
+ /** JMAP email data containing SPF information */
667
548
  jmap: {
668
- /** External security report with SPF, DMARC, DKIM data */
669
- extsecrep: ExtsecrepData;
670
- /** From email address information */
671
- from?: {
672
- email?: string | null;
673
- } | null;
549
+ extsecrep: {
550
+ spf?: SpfData;
551
+ };
674
552
  };
675
553
  }
676
554
 
555
+ /**
556
+ * Extended JMAP props for DMARC card including required extsecrep data
557
+ */
558
+ interface SignalCardDmarcJmapProps extends JmapProps {
559
+ extsecrep: {
560
+ dmarc?: DmarcProps;
561
+ dkim?: DkimProps | DkimProps[];
562
+ spf?: SpfProps;
563
+ };
564
+ }
677
565
  /**
678
566
  * Component props.
679
567
  */
680
- interface SignalCardUrlsProps extends SignalCardSharedProps {
568
+ interface SignalCardDmarcProps extends SignalCardSharedProps {
681
569
  /**
682
- * Investigate data containing extracted URLs
570
+ * JMAP email data containing DMARC, DKIM, SPF information
683
571
  */
684
- investigate?: InvestigateProps | null;
572
+ jmap: SignalCardDmarcJmapProps;
573
+ /**
574
+ * Whether this is being used in domain analyzer mode
575
+ */
576
+ isDomainAnalyzer?: boolean;
685
577
  }
686
578
 
687
- /**
688
- * Component props.
689
- */
690
- interface SignalCardGoogleYahooComplianceProps extends SignalCardSharedProps {
579
+ type SignalData = {
580
+ signalType: string;
581
+ jmap?: {
582
+ extsecrep?: Record<string, any>;
583
+ [key: string]: unknown;
584
+ };
585
+ shortDescription?: unknown;
586
+ [key: string]: unknown;
587
+ };
588
+ type ErrorLike = {
589
+ name?: string;
590
+ message?: string;
591
+ stack?: string;
592
+ };
593
+ type CardEnabledOverrides = Record<string, boolean | undefined>;
594
+ interface SignalCardListProps extends Omit<ComponentProps<'div'>, 'children'> {
595
+ /** Array of signal data objects containing DMARC, DKIM, SPF information */
596
+ signals?: SignalData[];
597
+ /** Error object to display if signal loading fails */
598
+ error?: ErrorLike | null;
599
+ /** Map of signal types to enabled/disabled state */
600
+ isCardEnabledMap?: CardEnabledOverrides;
601
+ /** Signal types to display in the priority section (shown first). Defaults to DMARC, DKIM, SPF */
602
+ prioritySignalTypes?: string[];
603
+ /** Initial selected signal type for external selection control */
604
+ initialSelectedSignalType?: string | null;
605
+ /** Callback when a signal card is selected */
606
+ onSelectSignalType?: (signalType: string) => void;
607
+ /** Custom header renderer for adding content at the top of each card, after the title */
608
+ renderCardHeader?: (signal: SignalData) => React.ReactNode;
609
+ /** Override the promo banner button href on all cards and the email provider banner CTA link (e.g. to add UTM parameters). For per-card promo banners, only used when renderCardHeader is not provided. Defaults to the OnDMARC signup URL (`https://iam.redsift.cloud/signup?redirectapp=cloud&product=ondmarc`). */
610
+ cardPromoHref?: string;
691
611
  /**
692
- * Domain name (currently not used but maintained for API compatibility)
612
+ * Optional callback fired when the user clicks any CTA link that navigates
613
+ * to the promo/signup href. This includes:
614
+ * - The "Protect your domain" promo banner inside each card (shown when
615
+ * `renderCardHeader` is not provided; uses `cardPromoHref` or the default
616
+ * OnDMARC signup URL)
617
+ * - The "Set up monitoring" link in the email provider banner (only rendered
618
+ * when `cardPromoHref` is set)
619
+ *
620
+ * Fires alongside the normal navigation (does not prevent default).
693
621
  */
694
- domain?: string | null;
622
+ onCardPromoClick?: () => void;
623
+ /** Override the promo banner text on all cards. Only used when renderCardHeader is not provided. Defaults to the translated OnDMARC trial copy. */
624
+ cardPromoText?: string;
625
+ /** Override the promo banner button label on all cards. Defaults to the translated 'Protect your domain'. */
626
+ cardPromoButtonLabel?: string;
627
+ /** Custom footer renderer for adding content at the bottom of each card */
628
+ renderCardFooter?: (signal: SignalData) => React.ReactNode;
695
629
  /**
696
- * JMAP extsecrep data containing authentication results
630
+ * Heading text for the priority signals section.
631
+ * Defaults to "Required for the selected compliance profile"
697
632
  */
698
- jmap?: JmapProps | null;
633
+ prioritySectionHeading?: string;
699
634
  /**
700
- * Investigate data with FCrDNS and EHLO check results
635
+ * Heading text for the remaining signals section.
636
+ * Defaults to "Not required for the selected compliance profile"
701
637
  */
702
- investigate?: InvestigateProps | null;
638
+ remainingSectionHeading?: string;
639
+ /** Use Investigate handbook colors instead of Design System CSS variables */
640
+ useInvestigateColors?: boolean;
641
+ /**
642
+ * Enable collapsible sections inside all child cards.
643
+ * @default true
644
+ */
645
+ isCollapsible?: boolean;
646
+ /**
647
+ * Controlled collapsed state for all sections in all child cards.
648
+ * Used with isCollapsible to manage collapsed state externally.
649
+ */
650
+ areAllCollapsed?: boolean;
651
+ /**
652
+ * Callback fired when the collapse-all toggle changes in any child card.
653
+ */
654
+ onCollapseAll?: (areAllCollapsed: boolean) => void;
655
+ /**
656
+ * AI-powered recommendations data including analysis and per-protocol signals.
657
+ * When provided (and showRecommendations is not false), renders a RecommendationsSummary
658
+ * section above the signal cards.
659
+ */
660
+ recommendations?: RecommendationsData | null;
661
+ /**
662
+ * Whether recommendations data is still loading.
663
+ * When true, shows a skeleton/shimmer placeholder for the recommendations section.
664
+ */
665
+ recommendationsLoading?: boolean;
666
+ /**
667
+ * Whether to show the recommendations section.
668
+ * @default true
669
+ */
670
+ showRecommendations?: boolean;
671
+ /**
672
+ * Structured data for the CTA card in the recommendations section.
673
+ * The DS owns the layout; the consumer provides the content and click handler.
674
+ */
675
+ recommendationsCTA?: {
676
+ title: string;
677
+ description: string;
678
+ buttonLabel: string;
679
+ onClickCTA: () => void;
680
+ };
681
+ /**
682
+ * Callback when user clicks "See more details" on a status card.
683
+ * The consumer uses this to scroll to and expand the corresponding signal card.
684
+ */
685
+ onExpandSignalCard?: (signalType: string) => void;
686
+ /**
687
+ * Callback for the "Check another email" button in the header.
688
+ * When provided, renders a styled button with a sync icon and translated label.
689
+ * Only rendered when a checked email is found in the signal data.
690
+ */
691
+ onCheckAnotherEmail?: () => void;
692
+ /**
693
+ * Render prop for custom action area in the header.
694
+ * Overrides the default "Check another email" button when provided.
695
+ * Only rendered when a checked email is found in the signal data.
696
+ */
697
+ renderHeaderAction?: () => ReactNode;
698
+ /**
699
+ * Whether to show the "Powered by OnDMARC" branding in the header.
700
+ * @default true
701
+ */
702
+ showBranding?: boolean;
703
703
  }
704
704
 
705
705
  /**