@arc-ui/community-components 3.16.0 → 3.17.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.
Files changed (52) hide show
  1. package/.turbo/turbo-build.log +14 -14
  2. package/CHANGELOG.md +21 -0
  3. package/lib/ComparisonTable/ComparisonTable.cjs +317 -0
  4. package/lib/ComparisonTable/ComparisonTable.mjs +310 -0
  5. package/lib/ComparisonTable/styles.css +1 -0
  6. package/lib/FeaturePost/FeaturePost.cjs +12 -11
  7. package/lib/FeaturePost/FeaturePost.mjs +12 -11
  8. package/lib/FeaturePost/styles.css +1 -1
  9. package/lib/Highlights/Highlights.cjs +7 -7
  10. package/lib/Highlights/Highlights.mjs +7 -7
  11. package/lib/ProductCard/ProductCard.cjs +13 -35
  12. package/lib/ProductCard/ProductCard.mjs +12 -34
  13. package/lib/_shared/cjs/ProductCardPriceIncrease-BP39clav.cjs +38 -0
  14. package/lib/_shared/esm/ProductCardPriceIncrease-CJyG2wv-.mjs +35 -0
  15. package/lib/index.cjs +507 -199
  16. package/lib/index.cjs.map +1 -1
  17. package/lib/index.d.cts +213 -22
  18. package/lib/index.d.mts +213 -22
  19. package/lib/index.mjs +502 -200
  20. package/lib/index.mjs.map +1 -1
  21. package/lib/styles.css +1 -1
  22. package/package.json +6 -6
  23. package/src/components/ComparisonTable/ComparisonTable.module.css +503 -0
  24. package/src/components/ComparisonTable/ComparisonTable.tsx +104 -0
  25. package/src/components/ComparisonTable/components/Cell/Cell.tsx +44 -0
  26. package/src/components/ComparisonTable/components/ControlCell/ControlCell.tsx +21 -0
  27. package/src/components/ComparisonTable/components/DesktopRow/DesktopRow.tsx +59 -0
  28. package/src/components/ComparisonTable/components/DesktopTable/DesktopTable.tsx +150 -0
  29. package/src/components/ComparisonTable/components/FeatureCell/FeatureCell.module.css +56 -0
  30. package/src/components/ComparisonTable/components/FeatureCell/FeatureCell.tsx +96 -0
  31. package/src/components/ComparisonTable/components/HeaderCell/HeaderCell.tsx +59 -0
  32. package/src/components/ComparisonTable/components/MobileRow/MobileRow.tsx +77 -0
  33. package/src/components/ComparisonTable/components/MobileTable/MobileTable.tsx +103 -0
  34. package/src/components/ComparisonTable/components/Section/Section.tsx +75 -0
  35. package/src/components/ComparisonTable/components/SectionToggle/SectionToggle.tsx +63 -0
  36. package/src/components/ComparisonTable/components/SubHeaderCell/SubHeaderCell.tsx +62 -0
  37. package/src/components/ComparisonTable/index.ts +22 -0
  38. package/src/components/ComparisonTable/types/comparison-column.ts +22 -0
  39. package/src/components/ComparisonTable/types/comparison-row.ts +23 -0
  40. package/src/components/ComparisonTable/types/comparison-section.ts +39 -0
  41. package/src/components/ComparisonTable/types/comparison-sub-row.ts +8 -0
  42. package/src/components/ComparisonTable/utils/group-rows.ts +69 -0
  43. package/src/components/ComparisonTable/utils/use-section-state.ts +45 -0
  44. package/src/components/FeaturePost/FeaturePost.module.css +24 -2
  45. package/src/components/FeaturePost/FeaturePost.tsx +26 -25
  46. package/src/components/FeaturePost/types/feature-post-cta-footer.ts +4 -3
  47. package/src/components/Highlights/Highlights.tsx +5 -32
  48. package/src/components/ProductCard/ProductCardPrice/ProductCardPrice.tsx +11 -3
  49. package/src/components/ProductCard/ProductCardPriceIncrease/ProductCardPriceIncrease.module.css +1 -2
  50. package/src/components/ProductCard/ProductCardPriceIncrease/ProductCardPriceIncrease.tsx +14 -3
  51. package/src/components/index.ts +1 -0
  52. package/versions.json +1 -1
package/lib/index.d.cts CHANGED
@@ -281,7 +281,8 @@ interface FeaturePostAppButtonFooter {
281
281
 
282
282
  interface FeaturePostCtaFooter {
283
283
  type: "cta";
284
- button: Pick<ButtonProps, "label" | "onClick" | "href" | "target" | "ariaLabel">;
284
+ /** CTA button options. The button style defaults to `secondary`. */
285
+ button: Pick<ButtonV2Props, "label" | "onClick" | "href" | "target" | "ariaLabel" | "buttonStyle">;
285
286
  author?: AuthorProps;
286
287
  }
287
288
 
@@ -375,26 +376,8 @@ interface HighlightsProps extends Omit<SectionHeadingProps, "isPadded"> {
375
376
  * Optional CTA rendered at the end of Highlights.
376
377
  * Only ONE CTA is allowed.
377
378
  */
378
- cta?: HighlightsCTAProps;
379
+ cta?: ButtonV2Props;
379
380
  }
380
- /**
381
- * CTA configuration for Highlights
382
- */
383
- type HighlightsCTAProps = Pick<ButtonV2Props, "label" | "href" | "onClick" | "iconPosition" | "ariaLabel" | "target"> & {
384
- /**
385
- * Allowed button styles only.
386
- * Primary is intentionally NOT supported.
387
- */
388
- buttonStyle: "secondary" | "compact";
389
- /**
390
- * Icon override & Active icon override
391
- * - undefined → uses default BtIconArrowRightFill for compact style
392
- * - null → icon disabled
393
- * - string → custom icon
394
- */
395
- icon?: string | null;
396
- iconActive?: string | null;
397
- };
398
381
 
399
382
  /**
400
383
  * Use `PromoListing` to give supporting information about a page or proposition in the form of the card components (`ImpactCard`, `InformationCard`, `MediaCard` and `TypographyCard`).
@@ -980,6 +963,8 @@ interface ProductCardPriceIncreaseProps {
980
963
  headingLevel?: HeadingLevel;
981
964
  /** List of price increase entries (e.g. ["£48.99 by April 2027"]) */
982
965
  items: string[];
966
+ /** Optional prop to hide the left border */
967
+ hideBorder?: boolean;
983
968
  }
984
969
 
985
970
  declare const ProductCardPrice: React$1.FC<ProductCardPriceProps>;
@@ -1002,5 +987,211 @@ interface ProductCardGridProps extends Omit<SectionHeadingProps, "isPadded" | "i
1002
987
  hideTabs?: boolean;
1003
988
  }
1004
989
 
1005
- export { Accordion, ActionTile, ArticleCarousel, ArticleSidebar, Author, BannerWithTabs, BusinessSegmentSwitcher, ContentInfoWidget, CopyLead, DownloadList, FAQs, FeaturePost, HeaderBarNotification, Highlights, InlineLinkGroup, LinkTile, PartnerBrandLogos, ProductCard, ProductCardBenefits, ProductCardGrid, ProductCardPrice, ProductCardPriceIncrease, ProductNavigation, PromoListing, PromoListingThumbnailSignpost, Quote, SectionHeading, Statistics, Summary, ThumbnailSignpost, VideoHeroCard, VideoPortraitCard };
1006
- export type { AccordionProps, ActionTileProps, ArticleCarouselProps, ArticleSidebarProps, AuthorProps, BannerWithTabsProps, BentoGridContent, BentoInformationCard, BentoMediaCard, BusinessSegmentSwitcherProps, ContentInfoWidgetProps, CopyLeadProps, DownloadListProps, FAQsProps, FeaturePostProps, HeaderBarNotificationProps, HighlightsProps, InlineLinkGroupItem, InlineLinkGroupProps, LinkTileProps, ListProps, LogoTileItem, PartnerBrandLogosProps, PartnerLogosSubgroup, ProductCardBenefitsProps, ProductCardGridProps, ProductCardPriceIncreaseProps, ProductCardPriceProps, ProductCardProps, ProductNavigationProps, PromoListingProps, PromoListingThumbnailSignpostProps, QuoteProps, SectionHeadingProps, StatisticsProps, SummaryProps, Tab, ThumbnailSignpostProps, VideoHeroCardProps, VideoPortraitCardProps };
990
+ declare const SubHeaderCell: React$1.FC<SubHeaderCellProps>;
991
+ interface SubHeaderCellProps {
992
+ /**
993
+ * Price shown at the top of the sub-header cell (prefix, value, suffix).
994
+ */
995
+ price: ProductCardPriceProps;
996
+ /**
997
+ * Optional upcoming price-increase details rendered beneath the price.
998
+ */
999
+ priceIncrease?: ProductCardPriceIncreaseProps;
1000
+ /**
1001
+ * Optional call-to-action button rendered at the bottom of the cell. Rendered full-width.
1002
+ */
1003
+ button?: ButtonV2Props;
1004
+ /**
1005
+ * Zero-based index of the column this cell belongs to. Used to highlight every other column, starting with the first.
1006
+ */
1007
+ columnIndex?: number;
1008
+ }
1009
+
1010
+ interface ComparisonColumn {
1011
+ /**
1012
+ * Stable identifier for the column; used as a React key.
1013
+ */
1014
+ id: string;
1015
+ /**
1016
+ * Visible label rendered in the column header cell (e.g. a plan name).
1017
+ */
1018
+ label: string;
1019
+ /**
1020
+ * Optional promotional text displayed in a branded banner above the column
1021
+ * header label. When set, the banner is rendered inside the header cell with
1022
+ * a dark brand background.
1023
+ */
1024
+ promoted?: string;
1025
+ /**
1026
+ * Optional sub-header content (price, upcoming price increase, call-to-action) rendered in a row beneath the header. When any column defines this, the sub-header row is shown.
1027
+ */
1028
+ subheader?: SubHeaderCellProps;
1029
+ }
1030
+
1031
+ interface ComparisonSubRow {
1032
+ /**
1033
+ * One cell per column, in the same order as `columns`. Length MUST equal columns.length.
1034
+ */
1035
+ cells: React$1.ReactNode[];
1036
+ }
1037
+
1038
+ declare const FeatureCell: React$1.FC<FeatureCellProps>;
1039
+ interface FeatureCellProps {
1040
+ /**
1041
+ * Icon shown alongside the package name.
1042
+ */
1043
+ icon: string;
1044
+ /**
1045
+ * Package / plan title.
1046
+ */
1047
+ title: string;
1048
+ /**
1049
+ * Optional supporting copy shown beneath the title.
1050
+ */
1051
+ description?: string;
1052
+ /**
1053
+ * Optional popover content shown when the user interacts with the info icon.
1054
+ */
1055
+ popoverContent?: string | React$1.ReactNode;
1056
+ }
1057
+
1058
+ interface ComparisonRow {
1059
+ /**
1060
+ * Feature label rendered as the row's full-width header, spanning all columns above the content row(s).
1061
+ */
1062
+ feature: FeatureCellProps;
1063
+ /**
1064
+ * One cell per column for the row's primary content row, in the same order as `columns`. Length MUST equal columns.length.
1065
+ */
1066
+ cells: React$1.ReactNode[];
1067
+ /**
1068
+ * Optional additional content rows rendered beneath the primary row, for the less common case where a feature spans multiple rows.
1069
+ */
1070
+ subRows?: ComparisonSubRow[];
1071
+ /**
1072
+ * Id of the `ComparisonSection` this row belongs to. Omit to render the row before all sections. An id with no matching section logs a dev warning and renders the row unsectioned.
1073
+ */
1074
+ sectionId?: string;
1075
+ }
1076
+
1077
+ interface ComparisonSection {
1078
+ /**
1079
+ * Stable identifier for the section; used as a React key and to link the toggle to its content region for accessibility.
1080
+ */
1081
+ id: string;
1082
+ /**
1083
+ * Heading shown in the section's toggle button.
1084
+ */
1085
+ heading: React$1.ReactNode;
1086
+ /**
1087
+ * Heading level for the section heading, for correct document outline. Defaults to a sensible level.
1088
+ */
1089
+ headingLevel?: HeadingLevel;
1090
+ /**
1091
+ * Initial open state when the section is uncontrolled. Defaults to `false`.
1092
+ */
1093
+ defaultOpen?: boolean;
1094
+ /**
1095
+ * Controlled open state. When provided, the section is controlled and `onOpenChange` should update it.
1096
+ */
1097
+ open?: boolean;
1098
+ /**
1099
+ * Called with the next open state when the toggle is activated. Required for controlled usage; optional otherwise.
1100
+ */
1101
+ onOpenChange?: (open: boolean) => void;
1102
+ }
1103
+
1104
+ declare const ComparisonTable: React$1.FC<ComparisonTableProps>;
1105
+ interface ComparisonTableProps {
1106
+ /**
1107
+ * Column definitions driving the header cells and the number of content cells
1108
+ * per row. Each `ComparisonColumn` has:
1109
+ *
1110
+ * - `id` (`string`) — Stable identifier; used as a React key.
1111
+ * - `label` (`string`) — Visible text in the column header (e.g. a plan name).
1112
+ * - `promoted` (`string`, optional) — Promotional banner text shown above the label in a branded Surface.
1113
+ * - `subheader` (`SubHeaderCellProps`, optional) — Price, price-increase items, and a CTA button rendered in a row beneath the header.
1114
+ */
1115
+ columns: ComparisonColumn[];
1116
+ /**
1117
+ * All rows. Rows without `sectionId` render first, before any sections. Rows
1118
+ * with a `sectionId` render inside the matching section, in input order. On
1119
+ * mobile each row is a full-width feature header above its content row(s); on
1120
+ * desktop the feature becomes the left-hand column of the row. Each
1121
+ * `ComparisonRow` has:
1122
+ *
1123
+ * - `feature` (`FeatureCellProps`) — Icon, title, description, and optional popover for the feature label.
1124
+ * - `cells` (`ReactNode[]`) — One cell per column, in the same order as `columns`. Supports strings or rich ReactNode content (e.g. tick/cross icons).
1125
+ * - `subRows` (`ComparisonSubRow[]`, optional) — Additional content rows beneath the primary row, for features spanning multiple rows.
1126
+ * - `sectionId` (`string`, optional) — Id of the section the row belongs to. An unknown id logs a dev warning and the row renders unsectioned.
1127
+ */
1128
+ rows?: ComparisonRow[];
1129
+ /**
1130
+ * Section metadata only. Sections render in array order, after unsectioned
1131
+ * rows, each with a full-width toggle that expands or collapses the rows whose
1132
+ * `sectionId` matches. A section with no matching rows is hidden. Each `ComparisonSection` has:
1133
+ *
1134
+ * - `id` (`string`) — Stable identifier; used as a React key and for accessibility linking.
1135
+ * - `heading` (`ReactNode`) — Text shown in the section's toggle button.
1136
+ * - `headingLevel` (`HeadingLevel`, optional) — Semantic heading level for the document outline.
1137
+ * - `defaultOpen` (`boolean`, optional) — Initial open state when uncontrolled. Defaults to `false`.
1138
+ * - `open` (`boolean`, optional) — Controlled open state.
1139
+ * - `onOpenChange` (`(open: boolean) => void`, optional) — Callback for controlled usage.
1140
+ */
1141
+ sections?: ComparisonSection[];
1142
+ /**
1143
+ * Optional controls. On mobile they render in a full-width cell beneath the header; on desktop they render in the left-hand feature column beside the sub-header. Omit to hide the control row entirely.
1144
+ */
1145
+ controls?: React$1.ReactNode;
1146
+ /**
1147
+ * When `true`, wraps the table in a rounded, clipped container with an inset shadow overlay border. Defaults to `false`.
1148
+ */
1149
+ hasBorder?: boolean;
1150
+ /**
1151
+ * When `true`, the desktop column header row sticks to the top of the scroll container as the body scrolls. Defaults to `false`.
1152
+ */
1153
+ hasStickyHeader?: boolean;
1154
+ }
1155
+
1156
+ declare const HeaderCell: React$1.FC<HeaderCellProps>;
1157
+ interface HeaderCellProps {
1158
+ /**
1159
+ * Content rendered inside the column header cell (typically a column label).
1160
+ */
1161
+ children?: string;
1162
+ /**
1163
+ * Zero-based index of the column this header cell belongs to. Used to highlight every other column, starting with the first.
1164
+ */
1165
+ columnIndex?: number;
1166
+ /**
1167
+ * Optional promotional text displayed in a branded banner above the column label.
1168
+ */
1169
+ promoted?: string;
1170
+ }
1171
+
1172
+ declare const Cell: React$1.FC<CellProps>;
1173
+ interface CellProps {
1174
+ /**
1175
+ * Content rendered inside the content cell (text or an Arc primitive such as a tick/cross).
1176
+ */
1177
+ children?: React$1.ReactNode;
1178
+ /**
1179
+ * Zero-based index of the column this cell belongs to. Used to highlight every other column, starting with the first.
1180
+ */
1181
+ columnIndex?: number;
1182
+ /**
1183
+ * Whether this cell sits in the last row of the table. Highlighted cells in the last row get rounded bottom corners.
1184
+ */
1185
+ isLastRow?: boolean;
1186
+ }
1187
+
1188
+ declare const ControlCell: React$1.FC<ControlCellProps>;
1189
+ interface ControlCellProps {
1190
+ /**
1191
+ * Control content rendered for this column.
1192
+ */
1193
+ children?: React$1.ReactNode;
1194
+ }
1195
+
1196
+ export { Accordion, ActionTile, ArticleCarousel, ArticleSidebar, Author, BannerWithTabs, BusinessSegmentSwitcher, Cell, ComparisonTable, ContentInfoWidget, ControlCell, CopyLead, DownloadList, FAQs, FeatureCell, FeaturePost, HeaderBarNotification, HeaderCell, Highlights, InlineLinkGroup, LinkTile, PartnerBrandLogos, ProductCard, ProductCardBenefits, ProductCardGrid, ProductCardPrice, ProductCardPriceIncrease, ProductNavigation, PromoListing, PromoListingThumbnailSignpost, Quote, SectionHeading, Statistics, SubHeaderCell, Summary, ThumbnailSignpost, VideoHeroCard, VideoPortraitCard };
1197
+ export type { AccordionProps, ActionTileProps, ArticleCarouselProps, ArticleSidebarProps, AuthorProps, BannerWithTabsProps, BentoGridContent, BentoInformationCard, BentoMediaCard, BusinessSegmentSwitcherProps, CellProps, ComparisonColumn, ComparisonRow, ComparisonSection, ComparisonSubRow, ComparisonTableProps, ContentInfoWidgetProps, ControlCellProps, CopyLeadProps, DownloadListProps, FAQsProps, FeatureCellProps, FeaturePostProps, HeaderBarNotificationProps, HeaderCellProps, HighlightsProps, InlineLinkGroupItem, InlineLinkGroupProps, LinkTileProps, ListProps, LogoTileItem, PartnerBrandLogosProps, PartnerLogosSubgroup, ProductCardBenefitsProps, ProductCardGridProps, ProductCardPriceIncreaseProps, ProductCardPriceProps, ProductCardProps, ProductNavigationProps, PromoListingProps, PromoListingThumbnailSignpostProps, QuoteProps, SectionHeadingProps, StatisticsProps, SubHeaderCellProps, SummaryProps, Tab, ThumbnailSignpostProps, VideoHeroCardProps, VideoPortraitCardProps };
package/lib/index.d.mts CHANGED
@@ -281,7 +281,8 @@ interface FeaturePostAppButtonFooter {
281
281
 
282
282
  interface FeaturePostCtaFooter {
283
283
  type: "cta";
284
- button: Pick<ButtonProps, "label" | "onClick" | "href" | "target" | "ariaLabel">;
284
+ /** CTA button options. The button style defaults to `secondary`. */
285
+ button: Pick<ButtonV2Props, "label" | "onClick" | "href" | "target" | "ariaLabel" | "buttonStyle">;
285
286
  author?: AuthorProps;
286
287
  }
287
288
 
@@ -375,26 +376,8 @@ interface HighlightsProps extends Omit<SectionHeadingProps, "isPadded"> {
375
376
  * Optional CTA rendered at the end of Highlights.
376
377
  * Only ONE CTA is allowed.
377
378
  */
378
- cta?: HighlightsCTAProps;
379
+ cta?: ButtonV2Props;
379
380
  }
380
- /**
381
- * CTA configuration for Highlights
382
- */
383
- type HighlightsCTAProps = Pick<ButtonV2Props, "label" | "href" | "onClick" | "iconPosition" | "ariaLabel" | "target"> & {
384
- /**
385
- * Allowed button styles only.
386
- * Primary is intentionally NOT supported.
387
- */
388
- buttonStyle: "secondary" | "compact";
389
- /**
390
- * Icon override & Active icon override
391
- * - undefined → uses default BtIconArrowRightFill for compact style
392
- * - null → icon disabled
393
- * - string → custom icon
394
- */
395
- icon?: string | null;
396
- iconActive?: string | null;
397
- };
398
381
 
399
382
  /**
400
383
  * Use `PromoListing` to give supporting information about a page or proposition in the form of the card components (`ImpactCard`, `InformationCard`, `MediaCard` and `TypographyCard`).
@@ -980,6 +963,8 @@ interface ProductCardPriceIncreaseProps {
980
963
  headingLevel?: HeadingLevel;
981
964
  /** List of price increase entries (e.g. ["£48.99 by April 2027"]) */
982
965
  items: string[];
966
+ /** Optional prop to hide the left border */
967
+ hideBorder?: boolean;
983
968
  }
984
969
 
985
970
  declare const ProductCardPrice: React$1.FC<ProductCardPriceProps>;
@@ -1002,5 +987,211 @@ interface ProductCardGridProps extends Omit<SectionHeadingProps, "isPadded" | "i
1002
987
  hideTabs?: boolean;
1003
988
  }
1004
989
 
1005
- export { Accordion, ActionTile, ArticleCarousel, ArticleSidebar, Author, BannerWithTabs, BusinessSegmentSwitcher, ContentInfoWidget, CopyLead, DownloadList, FAQs, FeaturePost, HeaderBarNotification, Highlights, InlineLinkGroup, LinkTile, PartnerBrandLogos, ProductCard, ProductCardBenefits, ProductCardGrid, ProductCardPrice, ProductCardPriceIncrease, ProductNavigation, PromoListing, PromoListingThumbnailSignpost, Quote, SectionHeading, Statistics, Summary, ThumbnailSignpost, VideoHeroCard, VideoPortraitCard };
1006
- export type { AccordionProps, ActionTileProps, ArticleCarouselProps, ArticleSidebarProps, AuthorProps, BannerWithTabsProps, BentoGridContent, BentoInformationCard, BentoMediaCard, BusinessSegmentSwitcherProps, ContentInfoWidgetProps, CopyLeadProps, DownloadListProps, FAQsProps, FeaturePostProps, HeaderBarNotificationProps, HighlightsProps, InlineLinkGroupItem, InlineLinkGroupProps, LinkTileProps, ListProps, LogoTileItem, PartnerBrandLogosProps, PartnerLogosSubgroup, ProductCardBenefitsProps, ProductCardGridProps, ProductCardPriceIncreaseProps, ProductCardPriceProps, ProductCardProps, ProductNavigationProps, PromoListingProps, PromoListingThumbnailSignpostProps, QuoteProps, SectionHeadingProps, StatisticsProps, SummaryProps, Tab, ThumbnailSignpostProps, VideoHeroCardProps, VideoPortraitCardProps };
990
+ declare const SubHeaderCell: React$1.FC<SubHeaderCellProps>;
991
+ interface SubHeaderCellProps {
992
+ /**
993
+ * Price shown at the top of the sub-header cell (prefix, value, suffix).
994
+ */
995
+ price: ProductCardPriceProps;
996
+ /**
997
+ * Optional upcoming price-increase details rendered beneath the price.
998
+ */
999
+ priceIncrease?: ProductCardPriceIncreaseProps;
1000
+ /**
1001
+ * Optional call-to-action button rendered at the bottom of the cell. Rendered full-width.
1002
+ */
1003
+ button?: ButtonV2Props;
1004
+ /**
1005
+ * Zero-based index of the column this cell belongs to. Used to highlight every other column, starting with the first.
1006
+ */
1007
+ columnIndex?: number;
1008
+ }
1009
+
1010
+ interface ComparisonColumn {
1011
+ /**
1012
+ * Stable identifier for the column; used as a React key.
1013
+ */
1014
+ id: string;
1015
+ /**
1016
+ * Visible label rendered in the column header cell (e.g. a plan name).
1017
+ */
1018
+ label: string;
1019
+ /**
1020
+ * Optional promotional text displayed in a branded banner above the column
1021
+ * header label. When set, the banner is rendered inside the header cell with
1022
+ * a dark brand background.
1023
+ */
1024
+ promoted?: string;
1025
+ /**
1026
+ * Optional sub-header content (price, upcoming price increase, call-to-action) rendered in a row beneath the header. When any column defines this, the sub-header row is shown.
1027
+ */
1028
+ subheader?: SubHeaderCellProps;
1029
+ }
1030
+
1031
+ interface ComparisonSubRow {
1032
+ /**
1033
+ * One cell per column, in the same order as `columns`. Length MUST equal columns.length.
1034
+ */
1035
+ cells: React$1.ReactNode[];
1036
+ }
1037
+
1038
+ declare const FeatureCell: React$1.FC<FeatureCellProps>;
1039
+ interface FeatureCellProps {
1040
+ /**
1041
+ * Icon shown alongside the package name.
1042
+ */
1043
+ icon: string;
1044
+ /**
1045
+ * Package / plan title.
1046
+ */
1047
+ title: string;
1048
+ /**
1049
+ * Optional supporting copy shown beneath the title.
1050
+ */
1051
+ description?: string;
1052
+ /**
1053
+ * Optional popover content shown when the user interacts with the info icon.
1054
+ */
1055
+ popoverContent?: string | React$1.ReactNode;
1056
+ }
1057
+
1058
+ interface ComparisonRow {
1059
+ /**
1060
+ * Feature label rendered as the row's full-width header, spanning all columns above the content row(s).
1061
+ */
1062
+ feature: FeatureCellProps;
1063
+ /**
1064
+ * One cell per column for the row's primary content row, in the same order as `columns`. Length MUST equal columns.length.
1065
+ */
1066
+ cells: React$1.ReactNode[];
1067
+ /**
1068
+ * Optional additional content rows rendered beneath the primary row, for the less common case where a feature spans multiple rows.
1069
+ */
1070
+ subRows?: ComparisonSubRow[];
1071
+ /**
1072
+ * Id of the `ComparisonSection` this row belongs to. Omit to render the row before all sections. An id with no matching section logs a dev warning and renders the row unsectioned.
1073
+ */
1074
+ sectionId?: string;
1075
+ }
1076
+
1077
+ interface ComparisonSection {
1078
+ /**
1079
+ * Stable identifier for the section; used as a React key and to link the toggle to its content region for accessibility.
1080
+ */
1081
+ id: string;
1082
+ /**
1083
+ * Heading shown in the section's toggle button.
1084
+ */
1085
+ heading: React$1.ReactNode;
1086
+ /**
1087
+ * Heading level for the section heading, for correct document outline. Defaults to a sensible level.
1088
+ */
1089
+ headingLevel?: HeadingLevel;
1090
+ /**
1091
+ * Initial open state when the section is uncontrolled. Defaults to `false`.
1092
+ */
1093
+ defaultOpen?: boolean;
1094
+ /**
1095
+ * Controlled open state. When provided, the section is controlled and `onOpenChange` should update it.
1096
+ */
1097
+ open?: boolean;
1098
+ /**
1099
+ * Called with the next open state when the toggle is activated. Required for controlled usage; optional otherwise.
1100
+ */
1101
+ onOpenChange?: (open: boolean) => void;
1102
+ }
1103
+
1104
+ declare const ComparisonTable: React$1.FC<ComparisonTableProps>;
1105
+ interface ComparisonTableProps {
1106
+ /**
1107
+ * Column definitions driving the header cells and the number of content cells
1108
+ * per row. Each `ComparisonColumn` has:
1109
+ *
1110
+ * - `id` (`string`) — Stable identifier; used as a React key.
1111
+ * - `label` (`string`) — Visible text in the column header (e.g. a plan name).
1112
+ * - `promoted` (`string`, optional) — Promotional banner text shown above the label in a branded Surface.
1113
+ * - `subheader` (`SubHeaderCellProps`, optional) — Price, price-increase items, and a CTA button rendered in a row beneath the header.
1114
+ */
1115
+ columns: ComparisonColumn[];
1116
+ /**
1117
+ * All rows. Rows without `sectionId` render first, before any sections. Rows
1118
+ * with a `sectionId` render inside the matching section, in input order. On
1119
+ * mobile each row is a full-width feature header above its content row(s); on
1120
+ * desktop the feature becomes the left-hand column of the row. Each
1121
+ * `ComparisonRow` has:
1122
+ *
1123
+ * - `feature` (`FeatureCellProps`) — Icon, title, description, and optional popover for the feature label.
1124
+ * - `cells` (`ReactNode[]`) — One cell per column, in the same order as `columns`. Supports strings or rich ReactNode content (e.g. tick/cross icons).
1125
+ * - `subRows` (`ComparisonSubRow[]`, optional) — Additional content rows beneath the primary row, for features spanning multiple rows.
1126
+ * - `sectionId` (`string`, optional) — Id of the section the row belongs to. An unknown id logs a dev warning and the row renders unsectioned.
1127
+ */
1128
+ rows?: ComparisonRow[];
1129
+ /**
1130
+ * Section metadata only. Sections render in array order, after unsectioned
1131
+ * rows, each with a full-width toggle that expands or collapses the rows whose
1132
+ * `sectionId` matches. A section with no matching rows is hidden. Each `ComparisonSection` has:
1133
+ *
1134
+ * - `id` (`string`) — Stable identifier; used as a React key and for accessibility linking.
1135
+ * - `heading` (`ReactNode`) — Text shown in the section's toggle button.
1136
+ * - `headingLevel` (`HeadingLevel`, optional) — Semantic heading level for the document outline.
1137
+ * - `defaultOpen` (`boolean`, optional) — Initial open state when uncontrolled. Defaults to `false`.
1138
+ * - `open` (`boolean`, optional) — Controlled open state.
1139
+ * - `onOpenChange` (`(open: boolean) => void`, optional) — Callback for controlled usage.
1140
+ */
1141
+ sections?: ComparisonSection[];
1142
+ /**
1143
+ * Optional controls. On mobile they render in a full-width cell beneath the header; on desktop they render in the left-hand feature column beside the sub-header. Omit to hide the control row entirely.
1144
+ */
1145
+ controls?: React$1.ReactNode;
1146
+ /**
1147
+ * When `true`, wraps the table in a rounded, clipped container with an inset shadow overlay border. Defaults to `false`.
1148
+ */
1149
+ hasBorder?: boolean;
1150
+ /**
1151
+ * When `true`, the desktop column header row sticks to the top of the scroll container as the body scrolls. Defaults to `false`.
1152
+ */
1153
+ hasStickyHeader?: boolean;
1154
+ }
1155
+
1156
+ declare const HeaderCell: React$1.FC<HeaderCellProps>;
1157
+ interface HeaderCellProps {
1158
+ /**
1159
+ * Content rendered inside the column header cell (typically a column label).
1160
+ */
1161
+ children?: string;
1162
+ /**
1163
+ * Zero-based index of the column this header cell belongs to. Used to highlight every other column, starting with the first.
1164
+ */
1165
+ columnIndex?: number;
1166
+ /**
1167
+ * Optional promotional text displayed in a branded banner above the column label.
1168
+ */
1169
+ promoted?: string;
1170
+ }
1171
+
1172
+ declare const Cell: React$1.FC<CellProps>;
1173
+ interface CellProps {
1174
+ /**
1175
+ * Content rendered inside the content cell (text or an Arc primitive such as a tick/cross).
1176
+ */
1177
+ children?: React$1.ReactNode;
1178
+ /**
1179
+ * Zero-based index of the column this cell belongs to. Used to highlight every other column, starting with the first.
1180
+ */
1181
+ columnIndex?: number;
1182
+ /**
1183
+ * Whether this cell sits in the last row of the table. Highlighted cells in the last row get rounded bottom corners.
1184
+ */
1185
+ isLastRow?: boolean;
1186
+ }
1187
+
1188
+ declare const ControlCell: React$1.FC<ControlCellProps>;
1189
+ interface ControlCellProps {
1190
+ /**
1191
+ * Control content rendered for this column.
1192
+ */
1193
+ children?: React$1.ReactNode;
1194
+ }
1195
+
1196
+ export { Accordion, ActionTile, ArticleCarousel, ArticleSidebar, Author, BannerWithTabs, BusinessSegmentSwitcher, Cell, ComparisonTable, ContentInfoWidget, ControlCell, CopyLead, DownloadList, FAQs, FeatureCell, FeaturePost, HeaderBarNotification, HeaderCell, Highlights, InlineLinkGroup, LinkTile, PartnerBrandLogos, ProductCard, ProductCardBenefits, ProductCardGrid, ProductCardPrice, ProductCardPriceIncrease, ProductNavigation, PromoListing, PromoListingThumbnailSignpost, Quote, SectionHeading, Statistics, SubHeaderCell, Summary, ThumbnailSignpost, VideoHeroCard, VideoPortraitCard };
1197
+ export type { AccordionProps, ActionTileProps, ArticleCarouselProps, ArticleSidebarProps, AuthorProps, BannerWithTabsProps, BentoGridContent, BentoInformationCard, BentoMediaCard, BusinessSegmentSwitcherProps, CellProps, ComparisonColumn, ComparisonRow, ComparisonSection, ComparisonSubRow, ComparisonTableProps, ContentInfoWidgetProps, ControlCellProps, CopyLeadProps, DownloadListProps, FAQsProps, FeatureCellProps, FeaturePostProps, HeaderBarNotificationProps, HeaderCellProps, HighlightsProps, InlineLinkGroupItem, InlineLinkGroupProps, LinkTileProps, ListProps, LogoTileItem, PartnerBrandLogosProps, PartnerLogosSubgroup, ProductCardBenefitsProps, ProductCardGridProps, ProductCardPriceIncreaseProps, ProductCardPriceProps, ProductCardProps, ProductNavigationProps, PromoListingProps, PromoListingThumbnailSignpostProps, QuoteProps, SectionHeadingProps, StatisticsProps, SubHeaderCellProps, SummaryProps, Tab, ThumbnailSignpostProps, VideoHeroCardProps, VideoPortraitCardProps };