@arc-ui/community-components 3.2.0 → 3.4.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 (158) hide show
  1. package/.turbo/turbo-build.log +133 -13
  2. package/CHANGELOG.md +31 -0
  3. package/lib/Accordion/Accordion.cjs +2 -3
  4. package/lib/Accordion/Accordion.mjs +2 -3
  5. package/lib/ActionTile/ActionTile.cjs +4 -5
  6. package/lib/ActionTile/ActionTile.mjs +10 -11
  7. package/lib/ActionTile/styles.css +1 -1
  8. package/lib/ArticleSidebar/ArticleSidebar.cjs +9 -10
  9. package/lib/ArticleSidebar/ArticleSidebar.mjs +46 -47
  10. package/lib/Author/Author.cjs +2 -3
  11. package/lib/Author/Author.mjs +2 -3
  12. package/lib/BannerWithTabs/BannerWithTabs.cjs +4 -5
  13. package/lib/BannerWithTabs/BannerWithTabs.mjs +8 -9
  14. package/lib/ContentInfoWidget/ContentInfoWidget.cjs +3 -2
  15. package/lib/ContentInfoWidget/ContentInfoWidget.mjs +8 -7
  16. package/lib/CopyLead/CopyLead.cjs +32 -23
  17. package/lib/CopyLead/CopyLead.mjs +60 -51
  18. package/lib/DownloadList/DownloadList.cjs +6 -8
  19. package/lib/DownloadList/DownloadList.mjs +11 -13
  20. package/lib/FAQs/FAQs.cjs +5 -6
  21. package/lib/FAQs/FAQs.mjs +22 -23
  22. package/lib/FeaturePost/FeaturePost.cjs +14 -15
  23. package/lib/FeaturePost/FeaturePost.mjs +54 -55
  24. package/lib/Highlights/Highlights.cjs +11 -12
  25. package/lib/Highlights/Highlights.mjs +24 -25
  26. package/lib/InlineLinkGroup/InlineLinkGroup.cjs +25 -0
  27. package/lib/InlineLinkGroup/InlineLinkGroup.mjs +23 -0
  28. package/lib/InlineLinkGroup/styles.css +1 -0
  29. package/lib/LinkTile/LinkTile.cjs +6 -6
  30. package/lib/LinkTile/LinkTile.mjs +7 -7
  31. package/lib/LinkTile/styles.css +1 -1
  32. package/lib/ProductNavigation/ProductNavigation.cjs +6 -7
  33. package/lib/ProductNavigation/ProductNavigation.mjs +18 -19
  34. package/lib/PromoListing/PromoListing.cjs +7 -8
  35. package/lib/PromoListing/PromoListing.mjs +17 -18
  36. package/lib/PromoListingThumbnailSignpost/PromoListingThumbnailSignpost.cjs +7 -8
  37. package/lib/PromoListingThumbnailSignpost/PromoListingThumbnailSignpost.mjs +9 -10
  38. package/lib/Quote/Quote.cjs +5 -6
  39. package/lib/Quote/Quote.mjs +9 -10
  40. package/lib/SectionHeading/SectionHeading.cjs +2 -3
  41. package/lib/SectionHeading/SectionHeading.mjs +2 -3
  42. package/lib/Statistics/Statistics.cjs +21 -19
  43. package/lib/Statistics/Statistics.mjs +35 -33
  44. package/lib/Statistics/styles.css +1 -1
  45. package/lib/Summary/Summary.cjs +4 -4
  46. package/lib/Summary/Summary.mjs +13 -13
  47. package/lib/ThumbnailSignpost/ThumbnailSignpost.cjs +2 -3
  48. package/lib/ThumbnailSignpost/ThumbnailSignpost.mjs +2 -3
  49. package/lib/VideoHeroCard/VideoHeroCard.cjs +76 -0
  50. package/lib/VideoHeroCard/VideoHeroCard.mjs +74 -0
  51. package/lib/VideoPortraitCard/VideoPortraitCard.cjs +22 -0
  52. package/lib/VideoPortraitCard/VideoPortraitCard.mjs +20 -0
  53. package/lib/_shared/cjs/{Accordion-DfNGOjTm.cjs → Accordion-QqDoB3pY.cjs} +8 -9
  54. package/lib/_shared/cjs/{Author-D4dKNQem.cjs → Author-aL8YXi7C.cjs} +4 -5
  55. package/lib/_shared/cjs/Preview-Dx1kCzJ1.cjs +102 -0
  56. package/lib/_shared/cjs/{SectionHeading-DeSFM0HV.cjs → SectionHeading-Dj-dJfv3.cjs} +4 -5
  57. package/lib/_shared/cjs/{ThumbnailSignpost-GkOiwt-Z.cjs → ThumbnailSignpost-SBnrGooA.cjs} +4 -5
  58. package/lib/_shared/cjs/VideoCardThumbnail-BqYgpk0u.cjs +440 -0
  59. package/lib/_shared/cjs/dash.all.min-BPXzla24.cjs +6 -0
  60. package/lib/_shared/cjs/{tslib.es6-BxB9I209.cjs → filter-attrs-C26zOt4_.cjs} +25 -0
  61. package/lib/_shared/cjs/hls-Ckhp5fVA.cjs +36628 -0
  62. package/lib/_shared/cjs/index-DjiIVIaV.cjs +96 -0
  63. package/lib/_shared/cjs/index-oGP6D6gL.cjs +14826 -0
  64. package/lib/_shared/cjs/{index.es-Dq8bYrbW.cjs → index.es-B0J3cvrY.cjs} +1 -1
  65. package/lib/_shared/cjs/mixin-BFwaXKGB.cjs +1027 -0
  66. package/lib/_shared/cjs/react-CEvhi3LL.cjs +737 -0
  67. package/lib/_shared/cjs/react-CqsEClV0.cjs +466 -0
  68. package/lib/_shared/cjs/react-DE6M3seI.cjs +496 -0
  69. package/lib/_shared/cjs/react-Dri2yjKm.cjs +554 -0
  70. package/lib/_shared/cjs/react-DxToimBj.cjs +4239 -0
  71. package/lib/_shared/cjs/react-JTfV8OSA.cjs +325 -0
  72. package/lib/_shared/cjs/react-caXJFZ8W.cjs +400 -0
  73. package/lib/_shared/cjs/react-fep2ei7j.cjs +727 -0
  74. package/lib/_shared/esm/{Accordion-cd1oYvBv.mjs → Accordion-DtU7jbCv.mjs} +16 -17
  75. package/lib/_shared/esm/Author-CJQFrQM9.mjs +27 -0
  76. package/lib/_shared/esm/Preview-CmbKOgEO.mjs +100 -0
  77. package/lib/_shared/esm/{SectionHeading-CpDLCndw.mjs → SectionHeading-BskdQ2Tt.mjs} +10 -11
  78. package/lib/_shared/esm/{ThumbnailSignpost-BeRiXbUp.mjs → ThumbnailSignpost-CBSdQiHw.mjs} +13 -14
  79. package/lib/_shared/esm/VideoCardThumbnail-VfOKmPCv.mjs +437 -0
  80. package/lib/_shared/esm/dash.all.min-CbWI_8dN.mjs +4 -0
  81. package/lib/_shared/esm/{tslib.es6-D6Wu-xwB.mjs → filter-attrs-D-1kWaCP.mjs} +25 -1
  82. package/lib/_shared/esm/hls-AFbJDS9D.mjs +36625 -0
  83. package/lib/_shared/esm/index-CrcIrdjn.mjs +14799 -0
  84. package/lib/_shared/esm/index-DYnuIO1L.mjs +94 -0
  85. package/lib/_shared/esm/{index.es-Bfdys5__.mjs → index.es-DraZ-qKh.mjs} +1 -1
  86. package/lib/_shared/esm/mixin-BGGG8VrM.mjs +1024 -0
  87. package/lib/_shared/esm/react-BGimq-TB.mjs +4237 -0
  88. package/lib/_shared/esm/react-BHT4t_eQ.mjs +494 -0
  89. package/lib/_shared/esm/react-BSd0sGcO.mjs +464 -0
  90. package/lib/_shared/esm/react-CSr43fZV.mjs +552 -0
  91. package/lib/_shared/esm/react-Ca6E7Fr-.mjs +398 -0
  92. package/lib/_shared/esm/react-DG070IvZ.mjs +725 -0
  93. package/lib/_shared/esm/react-DZyqy7W7.mjs +735 -0
  94. package/lib/_shared/esm/react-WW_9iHcl.mjs +323 -0
  95. package/lib/index.cjs +299 -181
  96. package/lib/index.cjs.map +1 -1
  97. package/lib/index.d.cts +77 -63
  98. package/lib/index.d.mts +77 -63
  99. package/lib/index.mjs +297 -181
  100. package/lib/index.mjs.map +1 -1
  101. package/lib/styles.css +1 -1
  102. package/package.json +15 -12
  103. package/rollup.config.js +1 -1
  104. package/src/components/ActionTile/ActionTile.module.css +56 -37
  105. package/src/components/ActionTile/ActionTile.tsx +1 -1
  106. package/src/components/ArticleSidebar/ArticleSidebar.tsx +4 -6
  107. package/src/components/Author/Author.tsx +0 -3
  108. package/src/components/BannerWithTabs/BannerWithTabs.tsx +4 -6
  109. package/src/components/ContentInfoWidget/ContentInfoWidget.tsx +3 -4
  110. package/src/components/CopyLead/components/MediaContent/MediaContent.tsx +7 -6
  111. package/src/components/CopyLead/templates/Content/Content.tsx +5 -3
  112. package/src/components/CopyLead/templates/Media/Media.tsx +5 -6
  113. package/src/components/DownloadList/DownloadList.tsx +8 -8
  114. package/src/components/FeaturePost/FeaturePost.tsx +3 -7
  115. package/src/components/Highlights/Highlights.tsx +3 -2
  116. package/src/components/Highlights/components/HighlightItem/HighlightItem.tsx +3 -2
  117. package/src/components/Highlights/components/HighlightList/HighlightList.tsx +5 -2
  118. package/src/components/InlineLinkGroup/InlineLinkGroup.module.css +81 -0
  119. package/src/components/InlineLinkGroup/InlineLinkGroup.tsx +67 -0
  120. package/src/components/InlineLinkGroup/index.ts +5 -0
  121. package/src/components/LinkTile/LinkTile.module.css +62 -26
  122. package/src/components/LinkTile/LinkTile.tsx +8 -1
  123. package/src/components/PromoListing/PromoListing.tsx +3 -11
  124. package/src/components/PromoListingThumbnailSignpost/PromoListingThumbnailSignpost.tsx +2 -0
  125. package/src/components/Quote/Quote.tsx +1 -7
  126. package/src/components/Statistics/Statistics.module.css +0 -10
  127. package/src/components/Statistics/Statistics.tsx +35 -32
  128. package/src/components/Summary/Summary.tsx +3 -1
  129. package/src/components/VideoHeroCard/VideoHeroCard.tsx +63 -0
  130. package/src/components/VideoHeroCard/components/VideoHeroCardContent/VideoHeroCardContent.module.css +32 -0
  131. package/src/components/VideoHeroCard/components/VideoHeroCardContent/VideoHeroCardContent.tsx +97 -0
  132. package/src/components/VideoHeroCard/components/VideoHeroCardContent/index.ts +4 -0
  133. package/src/components/VideoHeroCard/index.ts +1 -0
  134. package/src/components/VideoPortraitCard/VideoPortraitCard.tsx +54 -0
  135. package/src/components/VideoPortraitCard/index.ts +4 -0
  136. package/src/components/index.ts +3 -1
  137. package/src/internal/MultiLineText/MultiLineText.tsx +25 -0
  138. package/src/internal/MultiLineText/index.ts +1 -0
  139. package/src/internal/VideoCardPlayer/VideoCardPlayer.module.css +54 -0
  140. package/src/internal/VideoCardPlayer/VideoCardPlayer.tsx +62 -0
  141. package/src/internal/VideoCardPlayer/components/VideoCardPlayIcon/VideoCardPlayIcon.module.css +41 -0
  142. package/src/internal/VideoCardPlayer/components/VideoCardPlayIcon/VideoCardPlayIcon.tsx +28 -0
  143. package/src/internal/VideoCardPlayer/components/VideoCardPlayIcon/index.ts +1 -0
  144. package/src/internal/VideoCardPlayer/components/VideoCardThumbnail/VideoCardThumbnail.module.css +58 -0
  145. package/src/internal/VideoCardPlayer/components/VideoCardThumbnail/VideoCardThumbnail.tsx +38 -0
  146. package/src/internal/VideoCardPlayer/components/VideoCardThumbnail/index.ts +1 -0
  147. package/src/internal/VideoCardPlayer/index.ts +2 -0
  148. package/src/internal/VideoCardPlayer/types/player-props.ts +6 -0
  149. package/versions.json +1 -1
  150. package/lib/HeroLink/HeroLink.cjs +0 -35
  151. package/lib/HeroLink/HeroLink.mjs +0 -33
  152. package/lib/HeroLink/styles.css +0 -1
  153. package/lib/_shared/cjs/filter-attrs-BizjMsy0.cjs +0 -27
  154. package/lib/_shared/esm/Author-HnYsFTPT.mjs +0 -28
  155. package/lib/_shared/esm/filter-attrs-DZ7RCEZm.mjs +0 -25
  156. package/src/components/HeroLink/HeroLink.module.css +0 -44
  157. package/src/components/HeroLink/HeroLink.tsx +0 -136
  158. package/src/components/HeroLink/index.ts +0 -2
@@ -7,6 +7,7 @@ import { BtIconArrowRightFill } from "@arc-ui/icons/BtIconArrowRightFill";
7
7
  import { SectionHeading, type SectionHeadingProps } from "../SectionHeading";
8
8
  import { HighlightList } from "./components/HighlightList/HighlightList";
9
9
  import { type HighlightListItem } from "./types";
10
+ import { filterAttrs } from "@arc-ui/community-utils/filter-attrs";
10
11
 
11
12
  /**
12
13
  * Use `Highlights` to give supporting information about a page or proposition. I
@@ -22,11 +23,12 @@ export const Highlights: React.FC<HighlightsProps> = ({
22
23
  listItems,
23
24
  columns = "2",
24
25
  cta,
26
+ ...props
25
27
  }) => {
26
28
  const isMaxWidthArcBreakpointXs = useMediaQuery("(max-width: 767px)");
27
29
 
28
30
  return (
29
- <div>
31
+ <div {...filterAttrs(props)}>
30
32
  <SectionHeading
31
33
  isPadded
32
34
  id={id}
@@ -38,7 +40,6 @@ export const Highlights: React.FC<HighlightsProps> = ({
38
40
  />
39
41
 
40
42
  <HighlightList
41
- data-testid="highlights-list-container"
42
43
  listItems={listItems}
43
44
  columns={columns}
44
45
  isSmallIcon={isMaxWidthArcBreakpointXs}
@@ -5,9 +5,8 @@ import { Icon } from "@arc-ui/components/Icon";
5
5
  import { Text } from "@arc-ui/components/Text";
6
6
  import { Link } from "@arc-ui/components/Link";
7
7
  import { VerticalSpace } from "@arc-ui/components/VerticalSpace";
8
-
8
+ import { filterAttrs } from "@arc-ui/community-utils/filter-attrs";
9
9
  import { type HighlightLink } from "../../types";
10
-
11
10
  import styles from "../../Highlights.module.css";
12
11
  import { getListHeadingLevel } from "../../utils/getListHeadingLevel";
13
12
 
@@ -18,6 +17,7 @@ export const HighlightItem: React.FC<HighlightItemProps> = ({
18
17
  link,
19
18
  isSmallIcon,
20
19
  headingLevel,
20
+ ...props
21
21
  }) => {
22
22
  const listHeadingLevel = getListHeadingLevel(headingLevel || "2");
23
23
 
@@ -25,6 +25,7 @@ export const HighlightItem: React.FC<HighlightItemProps> = ({
25
25
  <div
26
26
  data-testid="highlight-item-container"
27
27
  className={styles.highlightItem}
28
+ {...filterAttrs(props)}
28
29
  >
29
30
  {icon && (
30
31
  <div className={styles.Icon}>
@@ -4,7 +4,7 @@ import classNames from "classnames";
4
4
  import { type HighlightListItem } from "../../types/highlight-list-item";
5
5
  import { HighlightItem } from "../HighlightItem/HighlightItem";
6
6
  import { HeadingLevel } from "@arc-ui/components/Heading";
7
-
7
+ import { filterAttrs } from "@arc-ui/community-utils/filter-attrs";
8
8
  import styles from "../../Highlights.module.css";
9
9
 
10
10
  export const HighlightList: React.FC<HighlightListProps> = ({
@@ -12,6 +12,7 @@ export const HighlightList: React.FC<HighlightListProps> = ({
12
12
  columns,
13
13
  isSmallIcon,
14
14
  headingLevel,
15
+ ...props
15
16
  }) => {
16
17
  const id = useId();
17
18
 
@@ -22,8 +23,9 @@ export const HighlightList: React.FC<HighlightListProps> = ({
22
23
  styles.highlights,
23
24
  styles[`highlights${columns}Column`],
24
25
  )}
26
+ {...filterAttrs(props)}
25
27
  >
26
- {listItems.map(({ icon, heading, text, link }, i) => (
28
+ {listItems.map(({ icon, heading, text, link, ...itemProps }, i) => (
27
29
  <HighlightItem
28
30
  key={`highlight-${id}-${i}`}
29
31
  icon={icon}
@@ -32,6 +34,7 @@ export const HighlightList: React.FC<HighlightListProps> = ({
32
34
  link={link}
33
35
  isSmallIcon={isSmallIcon}
34
36
  headingLevel={headingLevel}
37
+ {...itemProps}
35
38
  />
36
39
  ))}
37
40
  </div>
@@ -0,0 +1,81 @@
1
+ @import url("@arc-ui/tokens-arc/dist/custom-media.css");
2
+
3
+ .quick-help {
4
+ display: flex;
5
+ flex-direction: column;
6
+ align-items: center;
7
+ width: 100%;
8
+ }
9
+
10
+ /* remove default list styles */
11
+ .quick-help ul,
12
+ .quick-help li {
13
+ list-style: none;
14
+ margin: 0;
15
+ padding: 0;
16
+ }
17
+
18
+ .quick-help-label {
19
+ display: flex;
20
+ flex-direction: row;
21
+ align-items: center;
22
+ padding-bottom: var(--sem-space-padding-110);
23
+ width: 100%;
24
+ }
25
+
26
+ /* container for links */
27
+ .quick-help-container {
28
+ display: flex;
29
+ flex-direction: row;
30
+ flex-wrap: wrap;
31
+ align-items: center;
32
+ gap: var(--sem-space-padding-70);
33
+ width: 100%;
34
+ }
35
+
36
+ /* each link item */
37
+ .quick-help-item {
38
+ display: flex;
39
+ align-items: center;
40
+ gap: var(--arc-spacing-4);
41
+ width: auto;
42
+ flex: 0 0 auto;
43
+ }
44
+
45
+ /* hide arrow icon on desktop/tablet */
46
+ .quick-help-item svg {
47
+ display: none;
48
+ width: 24px;
49
+ height: 24px;
50
+ }
51
+
52
+ /* separator between links */
53
+ .quick-help-separator {
54
+ display: flex;
55
+ align-items: center;
56
+ }
57
+
58
+ .quick-help-separator-line {
59
+ width: 1px;
60
+ height: 14px;
61
+ background: var(--sem-color-border-secondary-light-minimal);
62
+ }
63
+
64
+ /* XS breakpoint: stack vertically */
65
+ @media not (--arc-custom-media-min-width-s-px) {
66
+ .quick-help-container {
67
+ flex-direction: column;
68
+ align-items: flex-start;
69
+ gap: var(--sem-space-padding-70);
70
+ }
71
+
72
+ /* show arrow icon */
73
+ .quick-help-item svg {
74
+ display: block;
75
+ }
76
+
77
+ /* hide separators */
78
+ .quick-help-separator {
79
+ display: none;
80
+ }
81
+ }
@@ -0,0 +1,67 @@
1
+ import React from "react";
2
+ import { Link } from "@arc-ui/components/Link";
3
+ import { Icon } from "@arc-ui/components/Icon";
4
+ import { Heading } from "@arc-ui/components/Heading";
5
+ import { BtIconArrowAltRight } from "@arc-ui/icons/BtIconArrowAltRight";
6
+ import { filterAttrs } from "@arc-ui/community-utils/filter-attrs";
7
+ import styles from "./InlineLinkGroup.module.css";
8
+
9
+ export const InlineLinkGroup: React.FC<InlineLinkGroupProps> = ({
10
+ label,
11
+ links,
12
+ ...props
13
+ }) => {
14
+ return (
15
+ <div className={styles["quick-help"]} {...filterAttrs(props)}>
16
+ {label && (
17
+ <div className={styles["quick-help-label"]}>
18
+ <Heading size="xxs" fontStyle="overline">
19
+ {label}
20
+ </Heading>
21
+ </div>
22
+ )}
23
+
24
+ <ul className={styles["quick-help-container"]}>
25
+ {links.map((link, index) => (
26
+ <React.Fragment key={index}>
27
+ <li className={styles["quick-help-item"]}>
28
+ <Link
29
+ href={link.href}
30
+ onClick={link.onClick}
31
+ aria-label={link.ariaLabel}
32
+ >
33
+ {link.label}
34
+ </Link>
35
+
36
+ <Icon icon={BtIconArrowAltRight} size={24} color="brand" />
37
+ </li>
38
+
39
+ {index < links.length - 1 && (
40
+ <li className={styles["quick-help-separator"]} aria-hidden="true">
41
+ <div className={styles["quick-help-separator-line"]} />
42
+ </li>
43
+ )}
44
+ </React.Fragment>
45
+ ))}
46
+ </ul>
47
+ </div>
48
+ );
49
+ };
50
+
51
+ export interface InlineLinkGroupProps {
52
+ /** Optional overline label displayed above the link group */
53
+ label?: string;
54
+ /** Array of link items to display */
55
+ links: InlineLinkGroupItem[];
56
+ }
57
+
58
+ export interface InlineLinkGroupItem {
59
+ /** Display text for the link */
60
+ label: string;
61
+ /** URL the link navigates to */
62
+ href: string;
63
+ /** Optional click handler for the link */
64
+ onClick?: () => void;
65
+ /** Optional accessible label for screen readers */
66
+ ariaLabel?: string;
67
+ }
@@ -0,0 +1,5 @@
1
+ export { InlineLinkGroup } from "./InlineLinkGroup";
2
+ export type {
3
+ InlineLinkGroupProps,
4
+ InlineLinkGroupItem,
5
+ } from "./InlineLinkGroup";
@@ -1,57 +1,93 @@
1
+ @import url("@arc-ui/tokens-arc/dist/custom-media.css");
2
+
1
3
  .link-tile {
4
+ box-sizing: border-box;
2
5
  display: flex;
3
6
  flex-direction: column;
7
+ justify-content: center;
8
+ align-items: center;
4
9
  width: 306px;
5
- border: 1px solid #c8c8c8;
6
- border-radius: 32px;
7
- padding: 24px;
8
- background: #ffffff;
10
+ height: 96px;
11
+ border: var(--sem-border-width-xxs) solid
12
+ var(--sem-color-border-secondary-light-minimal);
13
+ border-radius: var(--sem-border-radius-xl);
14
+ padding: var(--sem-space-padding-110) var(--sem-space-padding-70)
15
+ var(--sem-space-padding-110) var(--sem-space-padding-110);
16
+ background: var(--sem-color-bg-secondary-light-default);
9
17
  text-decoration: none;
10
18
  cursor: pointer;
11
- transition:
12
- border-color 0.2s ease,
13
- border-radius 0.2s ease;
19
+ transition: border-color 0.2s ease;
20
+ flex: none;
21
+ align-self: stretch;
22
+ position: relative;
23
+ overflow: visible;
14
24
  }
15
25
 
16
26
  .link-tile-content {
17
27
  display: flex;
28
+ flex-direction: row;
29
+ justify-content: center;
18
30
  align-items: center;
19
- justify-content: space-between;
20
- gap: 8px;
31
+ gap: var(--sem-space-padding-40);
32
+ width: 100%;
33
+ height: 48px;
34
+ flex: none;
35
+ align-self: stretch;
36
+ }
37
+
38
+ .link-tile-icon {
39
+ display: flex;
40
+ width: 32px;
41
+ height: 32px;
42
+ color: var(--sem-color-fg-primary-light-default);
43
+ transition: color 0.2s ease;
44
+ flex: none;
45
+ flex-shrink: 0;
46
+ order: 1;
21
47
  }
22
48
 
23
49
  .link-tile-text {
24
- font-family: "BT Curve", sans-serif;
25
- font-size: 16px;
26
- font-weight: 500;
27
- line-height: 24px;
50
+ font-family: var(--sem-font-family-heading);
51
+ font-size: var(--sem-font-size-100);
52
+ font-weight: var(--sem-font-weight-semi);
53
+ line-height: var(--sem-line-height-base-scale-xs);
28
54
  letter-spacing: 0;
29
- color: #5514b4;
55
+ color: var(--sem-color-fg-primary-light-default);
30
56
  transition: color 0.2s ease;
31
57
  flex: 1;
58
+ order: 0;
32
59
  }
33
60
 
61
+ .link-tile-icon svg,
34
62
  .link-tile .link-tile-content svg {
35
- color: #5514b4;
36
- flex-shrink: 0;
63
+ color: inherit;
37
64
  transition: color 0.2s ease;
38
65
  }
39
66
 
40
- .link-tile:hover {
41
- border-color: #5514b4;
67
+ .link-tile:not(:has(svg)) {
68
+ padding: var(--sem-space-padding-110);
42
69
  }
43
70
 
44
71
  .link-tile:active {
45
- border-radius: 32px;
72
+ border-radius: var(--sem-border-radius-xl);
46
73
  }
47
74
 
48
- .link-tile:hover .link-tile-text,
49
- .link-tile:hover .link-tile-content svg {
50
- color: #3f187f;
51
- }
52
-
53
- @media (width <= 1023px) {
75
+ @media (--arc-custom-media-min-width-l-px) {
54
76
  .link-tile {
55
- padding: 24px 16px 24px 24px;
77
+ padding: var(--sem-space-padding-110) var(--sem-space-padding-70)
78
+ var(--sem-space-padding-110) var(--sem-space-padding-110);
56
79
  }
57
80
  }
81
+
82
+ .link-tile:hover {
83
+ border-color: transparent;
84
+ box-shadow: inset 0 0 0 2px var(--button-v2-colors-light-text-hover);
85
+ }
86
+
87
+ .link-tile:hover .link-tile-text {
88
+ color: var(--button-v2-colors-light-text-hover);
89
+ }
90
+
91
+ .link-tile:hover .link-tile-icon {
92
+ color: var(--button-v2-colors-light-text-hover);
93
+ }
@@ -24,7 +24,11 @@ export const LinkTile: React.FC<LinkTileProps> = ({
24
24
  {text && (
25
25
  <div className={styles["link-tile-content"]}>
26
26
  <span className={styles["link-tile-text"]}>{text}</span>
27
- {showIcon && <Icon icon={BtIconArrowAltRight} size={32} />}
27
+ {showIcon && (
28
+ <span className={styles["link-tile-icon"]}>
29
+ <Icon icon={BtIconArrowAltRight} size={32} />
30
+ </span>
31
+ )}
28
32
  </div>
29
33
  )}
30
34
  </Component>
@@ -32,7 +36,10 @@ export const LinkTile: React.FC<LinkTileProps> = ({
32
36
  };
33
37
 
34
38
  export interface LinkTileProps extends React.HTMLAttributes<HTMLDivElement> {
39
+ /** Display text for the tile */
35
40
  text?: string;
41
+ /** URL the tile navigates to. Renders as an anchor tag when provided */
36
42
  href?: string;
43
+ /** Whether to show the arrow icon. Defaults to true */
37
44
  showIcon?: boolean;
38
45
  }
@@ -1,17 +1,12 @@
1
1
  import React, { useId, ComponentType } from "react";
2
-
3
2
  import classNames from "classnames";
4
-
5
3
  import { ArcSizeBreakpointsL, ArcSizeBreakpointsM } from "@arc-ui/tokens-arc";
6
-
7
4
  import { Carousel } from "@arc-ui/components/Carousel";
8
5
  import { Heading, type HeadingLevel } from "@arc-ui/components/Heading";
9
6
  import { useMediaQuery } from "@arc-ui/components/use-media-query";
10
-
11
7
  import { SectionHeading, type SectionHeadingProps } from "../SectionHeading";
12
-
13
8
  import { MediaCard, type MediaCardProps } from "@arc-ui/components/MediaCard";
14
-
9
+ import { filterAttrs } from "@arc-ui/community-utils/filter-attrs";
15
10
  import {
16
11
  ImpactCard,
17
12
  type ImpactCardProps,
@@ -49,6 +44,7 @@ export const PromoListing: React.FC<PromoListingProps> = ({
49
44
  button = { buttonStyle: "secondary" },
50
45
  overlineHeadingLevel,
51
46
  overlineLabel,
47
+ ...props
52
48
  }) => {
53
49
  const componentId = useId();
54
50
 
@@ -97,7 +93,7 @@ export const PromoListing: React.FC<PromoListingProps> = ({
97
93
  };
98
94
 
99
95
  return (
100
- <div className={styles.PromoListing}>
96
+ <div className={styles.PromoListing} {...filterAttrs(props)}>
101
97
  {overlineLabel && (
102
98
  <>
103
99
  <Heading level={overlineHeadingLevel} fontStyle="overline">
@@ -230,8 +226,4 @@ interface PromoListingButton
230
226
  * Style variant for the button. Defaults to "secondary".
231
227
  */
232
228
  buttonStyle?: "secondary" | "compact";
233
- /**
234
- * Optional prop to pass additional props to the button. Only data-* and aria-* will work.
235
- */
236
- [key: string]: unknown;
237
229
  }
@@ -22,6 +22,7 @@ export const PromoListingThumbnailSignpost: React.FC<
22
22
  content,
23
23
  headingLevel,
24
24
  thumbnailList,
25
+ isHeadingWordWrap,
25
26
  ...props
26
27
  }) => {
27
28
  return (
@@ -35,6 +36,7 @@ export const PromoListingThumbnailSignpost: React.FC<
35
36
  heading={heading}
36
37
  headingLevel={headingLevel}
37
38
  content={content}
39
+ isHeadingWordWrap={isHeadingWordWrap}
38
40
  />
39
41
  <ul className={styles.list}>
40
42
  {thumbnailList.map((thumbnail, index) => (
@@ -38,13 +38,7 @@ export const Quote: React.FC<QuoteProps> = ({
38
38
  </svg>
39
39
  <p className={styles.quoteContent}>{content}</p>
40
40
  </blockquote>
41
- {author && (
42
- <Author
43
- name={author.name}
44
- title={author.title}
45
- avatar={author.avatar}
46
- />
47
- )}
41
+ {author && <Author {...author} />}
48
42
  </div>
49
43
  );
50
44
  };
@@ -13,13 +13,3 @@
13
13
  .mutedText {
14
14
  color: var(--sem-color-text-primary-light-subtle);
15
15
  }
16
-
17
- .statWrapper {
18
- margin-bottom: -12px;
19
- }
20
-
21
- @media (--arc-custom-media-min-width-s-px) {
22
- .statWrapper {
23
- margin-bottom: 0;
24
- }
25
- }
@@ -1,16 +1,14 @@
1
1
  import React, { useId } from "react";
2
-
2
+ import { filterAttrs } from "@arc-ui/community-utils/filter-attrs";
3
3
  import { Columns, ColumnsCol } from "@arc-ui/components/Columns";
4
4
  import { Rule } from "@arc-ui/components/Rule";
5
5
  import { Text } from "@arc-ui/components/Text";
6
6
  import { Align } from "@arc-ui/components/Align";
7
7
  import { Heading } from "@arc-ui/components/Heading";
8
8
  import { VerticalSpace } from "@arc-ui/components/VerticalSpace";
9
-
9
+ import { Hidden } from "@arc-ui/components/Hidden";
10
10
  import { SectionHeading, type SectionHeadingProps } from "../SectionHeading";
11
-
12
11
  import styles from "./Statistics.module.css";
13
-
14
12
  import { getLinkProps } from "./helpers/get-link-props";
15
13
  import { type Statistic } from "./types/statistic";
16
14
 
@@ -21,11 +19,12 @@ export const Statistics: React.FC<StatisticsProps> = ({
21
19
  heading,
22
20
  content,
23
21
  statistics,
22
+ ...props
24
23
  }) => {
25
24
  const componentId = useId();
26
25
 
27
26
  return (
28
- <Columns>
27
+ <Columns isGutterless {...filterAttrs(props)}>
29
28
  <ColumnsCol spanM={9}>
30
29
  <SectionHeading
31
30
  id={id}
@@ -34,7 +33,6 @@ export const Statistics: React.FC<StatisticsProps> = ({
34
33
  headingLevel={headingLevel}
35
34
  content={content}
36
35
  />
37
- <VerticalSpace size="16" />
38
36
  </ColumnsCol>
39
37
  <ColumnsCol spanL={9}>
40
38
  <ul className={styles.list}>
@@ -54,38 +52,43 @@ export const Statistics: React.FC<StatisticsProps> = ({
54
52
  <Heading color="brand" size="xxl">
55
53
  {stat}
56
54
  </Heading>
55
+ <Hidden s m l xl xxl>
56
+ <VerticalSpace size="12" />
57
+ </Hidden>
57
58
  </div>
58
59
  </Align>
59
60
  </ColumnsCol>
60
61
  <ColumnsCol spanS={6} spanM={4}>
61
- <Text>{copy}</Text>
62
- {link && (
63
- <>
64
- <VerticalSpace size="12" />
65
- <a
66
- href={link.href}
67
- aria-label={link.ariaLabel}
68
- {...getLinkProps(link)}
69
- >
70
- {link.text}
71
- </a>
72
- </>
73
- )}
74
- {source && (
75
- <>
76
- <VerticalSpace size="12" />
62
+ <Align vertical="center">
63
+ <Text>{copy}</Text>
64
+ {link && (
65
+ <>
66
+ <VerticalSpace size="12" />
67
+ <a
68
+ href={link.href}
69
+ aria-label={link.ariaLabel}
70
+ {...getLinkProps(link)}
71
+ >
72
+ {link.text}
73
+ </a>
74
+ </>
75
+ )}
76
+ {source && (
77
+ <>
78
+ <VerticalSpace size="12" />
79
+ <Text size="xs">
80
+ <span className={styles.mutedText}>{source}</span>
81
+ </Text>
82
+ </>
83
+ )}
84
+ {sourceUrl && (
77
85
  <Text size="xs">
78
- <span className={styles.mutedText}>{source}</span>
86
+ <a className={styles.mutedText} href={sourceUrl}>
87
+ {sourceUrl}
88
+ </a>
79
89
  </Text>
80
- </>
81
- )}
82
- {sourceUrl && (
83
- <Text size="xs">
84
- <a className={styles.mutedText} href={sourceUrl}>
85
- {sourceUrl}
86
- </a>
87
- </Text>
88
- )}
90
+ )}
91
+ </Align>
89
92
  </ColumnsCol>
90
93
  </Columns>
91
94
  </li>
@@ -8,13 +8,14 @@ import { Box } from "@arc-ui/components/Box";
8
8
  import { Rule } from "@arc-ui/components/Rule";
9
9
  import { VerticalSpace } from "@arc-ui/components/VerticalSpace";
10
10
  import { useMediaQuery } from "@arc-ui/components/use-media-query";
11
-
11
+ import { filterAttrs } from "@arc-ui/community-utils/filter-attrs";
12
12
  import styles from "./Summary.module.css";
13
13
 
14
14
  export const Summary: React.FC<SummaryProps> = ({
15
15
  content,
16
16
  noBorder = false,
17
17
  headingLevel = "3",
18
+ ...props
18
19
  }) => {
19
20
  const isMinWidthArcBreakpointM = useMediaQuery(
20
21
  `(min-width: ${ArcSizeBreakpointsM})`,
@@ -25,6 +26,7 @@ export const Summary: React.FC<SummaryProps> = ({
25
26
  isBorderRadius
26
27
  {...(!noBorder ? { borderWidth: "thin" } : { elevationLevel: "1" })}
27
28
  padding="24"
29
+ {...filterAttrs(props)}
28
30
  >
29
31
  <div className={styles.row}>
30
32
  {content.map(({ heading, text }, i) => (
@@ -0,0 +1,63 @@
1
+ import React from "react";
2
+
3
+ import { Visible } from "@arc-ui/components/Visible";
4
+ import { Spacing } from "@arc-ui/components/Spacing";
5
+
6
+ import {
7
+ VideoCardPlayer,
8
+ VideoCardPlayerProps,
9
+ VideoCardThumbnail,
10
+ } from "../../internal/VideoCardPlayer";
11
+
12
+ import {
13
+ VideoHeroCardContent,
14
+ VideoHeroCardContentProps,
15
+ } from "./components/VideoHeroCardContent";
16
+
17
+ export const VideoHeroCard = ({
18
+ content,
19
+ thumbnailImg,
20
+ player,
21
+ ...props
22
+ }: VideoHeroCardProps) => {
23
+ return (
24
+ <VideoCardPlayer
25
+ thumbnail={
26
+ <VideoCardThumbnail
27
+ src={thumbnailImg}
28
+ orientation="landscape"
29
+ contentVisibility={{ l: true, xl: true, xxl: true }}
30
+ >
31
+ <VideoHeroCardContent {...content} background="dark" />
32
+ </VideoCardThumbnail>
33
+ }
34
+ orientation="landscape"
35
+ playIconSize="l"
36
+ player={player}
37
+ {...props}
38
+ >
39
+ {content && (
40
+ <Visible xs s m>
41
+ <Spacing all={{ xs: "16", s: "32" }}>
42
+ <VideoHeroCardContent {...content} background="light" />
43
+ </Spacing>
44
+ </Visible>
45
+ )}
46
+ </VideoCardPlayer>
47
+ );
48
+ };
49
+
50
+ export interface VideoHeroCardProps {
51
+ /**
52
+ * Content for the video card.
53
+ */
54
+ content: Omit<VideoHeroCardContentProps, "background">;
55
+ /**
56
+ * Thumbnail for the video hero card.
57
+ */
58
+ thumbnailImg: string;
59
+ /**
60
+ * Configuration for the video player.
61
+ */
62
+ player: VideoCardPlayerProps["player"];
63
+ }