@vodafone_de/brix-components 17.1.2 → 18.0.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 (224) hide show
  1. package/dist/{BorderRadius-Co-IV3fn.js → BorderRadius-0jhn76gB.js} +2 -2
  2. package/dist/{BorderWidth-OZWeXaq_.js → BorderWidth-CwrNKc0Q.js} +2 -2
  3. package/dist/ButtonAppearanceHelper-3qIbHGWJ.js +102 -0
  4. package/dist/CornerStyle-n77nckhh.js +7 -0
  5. package/dist/{colorUtils-CfSj2Iqa.js → colorUtils-c9PiZEci.js} +1 -1
  6. package/dist/components/Accordion/index.js +8 -4
  7. package/dist/components/Accordion/validate.d.ts +2 -2
  8. package/dist/components/AccordionGroup/validate.d.ts +2 -2
  9. package/dist/components/ArtDirectedImage/index.js +3 -3
  10. package/dist/components/ArtDirectedImage/validate.d.ts +0 -9
  11. package/dist/components/Badge/index.js +1 -1
  12. package/dist/components/Badge/validate.d.ts +1 -1
  13. package/dist/components/BottomBar/index.js +5 -5
  14. package/dist/components/Button/ButtonAppearanceHelper.test.d.ts +1 -0
  15. package/dist/components/Button/index.js +2 -2
  16. package/dist/components/Button/validate.d.ts +1 -1
  17. package/dist/components/ButtonAsLink/index.js +1 -1
  18. package/dist/components/ButtonGroup/validate.d.ts +1 -1
  19. package/dist/components/Calendar/components/Footer/helpers/getFooterText.test.d.ts +1 -0
  20. package/dist/components/Calendar/index.js +66 -62
  21. package/dist/components/Callout/index.js +1 -1
  22. package/dist/components/Card/index.js +1 -1
  23. package/dist/components/Carousel/index.js +1 -1
  24. package/dist/components/Checkbox/index.js +2 -2
  25. package/dist/components/Collapsible/index.js +1 -1
  26. package/dist/components/ColorSwatch/index.js +2 -2
  27. package/dist/components/ConsentMessage/index.js +1 -1
  28. package/dist/components/Container/index.js +1 -1
  29. package/dist/components/DateInput/index.js +2 -2
  30. package/dist/components/Dialog/index.js +8 -3
  31. package/dist/components/Dialog/validate.d.ts +1 -1
  32. package/dist/components/DiscoveryCard/index.js +5 -5
  33. package/dist/components/DiscoveryCard/validate.d.ts +3 -12
  34. package/dist/components/DiscoveryCardGroup/index.js +2 -2
  35. package/dist/components/DiscoveryCardGroup/validate.d.ts +9 -36
  36. package/dist/components/EnergySnippet/validate.d.ts +1 -1
  37. package/dist/components/FeatureCardGroup/components/FeatureCard/index.js +9 -8
  38. package/dist/components/FeatureCardGroup/components/FeatureCard/validate.d.ts +2 -11
  39. package/dist/components/FeatureCardGroup/index.js +1 -1
  40. package/dist/components/FeatureCardGroup/validate.d.ts +6 -15
  41. package/dist/components/Fieldset/index.js +8 -3
  42. package/dist/components/Fieldset/validate.d.ts +3 -3
  43. package/dist/components/FilterGroup/index.js +2 -2
  44. package/dist/components/FilterGroup/validate.d.ts +5 -5
  45. package/dist/components/Footnote/index.js +1 -1
  46. package/dist/components/FootnoteContent/index.js +1 -1
  47. package/dist/components/FootnoteSection/index.js +1 -1
  48. package/dist/components/FootnoteSection/validate.d.ts +2 -2
  49. package/dist/components/Form/index.js +1 -1
  50. package/dist/components/Form/validate.d.ts +4 -4
  51. package/dist/components/GoogleMap/index.js +31 -19
  52. package/dist/components/GoogleMap/props.d.ts +13 -1
  53. package/dist/components/GoogleMap/styled.d.ts +1 -1
  54. package/dist/components/GoogleMap/validate.d.ts +12 -3
  55. package/dist/components/Grid/index.js +2 -2
  56. package/dist/components/GridItem/index.js +2 -2
  57. package/dist/components/IconButton/index.js +4 -4
  58. package/dist/components/IconButton/validate.d.ts +1 -1
  59. package/dist/components/IconLoader/validate.d.ts +1 -1
  60. package/dist/components/IconSnippet/index.js +14 -24
  61. package/dist/components/IconSnippet/validate.d.ts +3 -3
  62. package/dist/components/IconSnippetList/index.js +1 -1
  63. package/dist/components/IconSnippetList/validate.d.ts +3 -3
  64. package/dist/components/Image/index.js +4 -52
  65. package/dist/components/Image/validate.d.ts +0 -9
  66. package/dist/components/ImageHeader/index.js +25 -19
  67. package/dist/components/ImageHeader/styled.d.ts +17 -0
  68. package/dist/components/ImageHeader/validate.d.ts +3 -12
  69. package/dist/components/InfoBanner/index.js +1 -1
  70. package/dist/components/InfoBanner/validate.d.ts +2 -2
  71. package/dist/components/InlineLink/index.js +1 -1
  72. package/dist/components/Input/index.js +1 -1
  73. package/dist/components/Input/validate.d.ts +1 -0
  74. package/dist/components/Legend/index.d.ts +1 -1
  75. package/dist/components/Legend/index.js +54 -68
  76. package/dist/components/Legend/validate.d.ts +6 -6
  77. package/dist/components/Link/index.js +1 -1
  78. package/dist/components/Link/validate.d.ts +1 -1
  79. package/dist/components/LinkAsButton/index.js +1 -1
  80. package/dist/components/LinkAsButton/validate.d.ts +1 -1
  81. package/dist/components/LinkList/index.js +25 -15
  82. package/dist/components/LinkList/styled.d.ts +1 -1
  83. package/dist/components/LinkListItem/index.js +15 -342
  84. package/dist/components/LinkListItem/props.d.ts +0 -4
  85. package/dist/components/LinkListItem/styled.d.ts +1 -1
  86. package/dist/components/LinkListItem/validate.d.ts +2 -3
  87. package/dist/components/LoadingSpinner/index.js +11 -10
  88. package/dist/components/LocalStyle/index.js +1 -1
  89. package/dist/components/MediaText/index.js +2 -2
  90. package/dist/components/MediaText/validate.d.ts +1 -10
  91. package/dist/components/Notification/index.js +20 -34
  92. package/dist/components/Notification/validate.d.ts +3 -3
  93. package/dist/components/OpenTextFootnoteAdapter/index.js +3 -3
  94. package/dist/components/PasswordInput/index.js +2 -2
  95. package/dist/components/PickerGroup/components/Picker/index.js +2 -2
  96. package/dist/components/PickerGroup/components/Picker/validate.d.ts +1 -1
  97. package/dist/components/PickerGroup/index.js +1 -1
  98. package/dist/components/PickerGroup/validate.d.ts +1 -1
  99. package/dist/components/Price/index.d.ts +0 -1
  100. package/dist/components/Price/index.js +61 -8
  101. package/dist/components/Price/props.d.ts +6 -6
  102. package/dist/components/ProductCard/index.js +4 -4
  103. package/dist/components/ProductCard/validate.d.ts +3 -12
  104. package/dist/components/QuickLinkList/components/QuickLink/index.js +2 -2
  105. package/dist/components/QuickLinkList/index.js +1 -1
  106. package/dist/components/RadioGroup/index.js +2 -2
  107. package/dist/components/Rating/index.js +1 -1
  108. package/dist/components/RichText/index.js +1 -1
  109. package/dist/components/RichText/parseHtml.d.ts +2 -1
  110. package/dist/components/RichTextContentful/getOptions.d.ts +6 -2
  111. package/dist/components/RichTextContentful/helpers/listHelpers.d.ts +1 -0
  112. package/dist/components/RichTextContentful/index.js +1 -1
  113. package/dist/components/RichTextContentful/props.d.ts +2 -1
  114. package/dist/components/RichTextContentful/styled.d.ts +5 -1
  115. package/dist/components/SearchInput/index.js +2 -2
  116. package/dist/components/SelectInput/index.js +1 -1
  117. package/dist/components/SuggestInput/components/SuggestInputList/index.d.ts +1 -1
  118. package/dist/components/SuggestInput/components/SuggestInputList/props.d.ts +0 -2
  119. package/dist/components/SuggestInput/index.js +20 -22
  120. package/dist/components/Switch/index.js +2 -2
  121. package/dist/components/TabGroup/index.js +11 -4
  122. package/dist/components/TabGroup/validate.d.ts +2 -2
  123. package/dist/components/Table/index.js +2 -2
  124. package/dist/components/TabularPrice/index.js +3 -2
  125. package/dist/components/TextList/components/TextListItem/index.js +1 -1
  126. package/dist/components/TextList/index.js +1 -1
  127. package/dist/components/Textarea/index.js +1 -1
  128. package/dist/components/TimeInput/index.js +2 -2
  129. package/dist/components/ToggleButtonProvider/validate.d.ts +8 -8
  130. package/dist/components/Tray/index.d.ts +1 -1
  131. package/dist/components/Tray/index.js +20 -14
  132. package/dist/components/Tray/validate.d.ts +1 -1
  133. package/dist/components/UtilityLink/index.js +1 -18
  134. package/dist/components/Video/componentName.d.ts +1 -0
  135. package/dist/components/Video/i18n.d.ts +42 -0
  136. package/dist/components/Video/index.d.ts +5 -0
  137. package/dist/components/Video/index.js +902 -0
  138. package/dist/components/Video/props.d.ts +52 -0
  139. package/dist/components/Video/styled.d.ts +2 -0
  140. package/dist/components/Video/validate.d.ts +84 -0
  141. package/dist/components/Video/validate.test.d.ts +1 -0
  142. package/dist/components/YouTubeVideo/index.js +1 -1
  143. package/dist/contentful/props/index.d.ts +2 -0
  144. package/dist/contentful/registry/ContentFulComponentName.d.ts +1 -1
  145. package/dist/contentful/registry/SupportedBrixProps.d.ts +2 -2
  146. package/dist/contentful/registry/index.js +1 -1
  147. package/dist/contentful/validation/index.d.ts +1 -0
  148. package/dist/contentful/validation/index.js +38 -9
  149. package/dist/{cssVars-DIZd9rHN.js → cssVars-DKs5LlTN.js} +112 -108
  150. package/dist/foundations/BrixComponentProps/componentNames.d.ts +1 -1
  151. package/dist/foundations/BrixComponentProps/validate.d.ts +3 -0
  152. package/dist/foundations/GlobalStyle/index.js +1 -1
  153. package/dist/foundations/colorMaps.d.ts +18 -0
  154. package/dist/foundations/cssVars.d.ts +1 -7
  155. package/dist/foundations/cssVars.test.d.ts +1 -0
  156. package/dist/foundations/layout/index.js +23 -6
  157. package/dist/foundations/typographyAndIconSizeCssVars.d.ts +7 -0
  158. package/dist/getSizesFromGridConfig-C-GBct4J.js +28 -0
  159. package/dist/{index-XoIBkRyI.js → index-BLp5wi_X.js} +199 -171
  160. package/dist/{index-B7QEcUdq.js → index-BXTweg2t.js} +26 -52
  161. package/dist/{index-BR6u6rvI.js → index-CW-UuGll.js} +2 -2
  162. package/dist/{index-iCvdBgcJ.js → index-C_6tWuWh.js} +1 -1
  163. package/dist/{index-C9M-9a7m.js → index-Cms5ie2I.js} +4 -4
  164. package/dist/{index-DQ_p1dIc.js → index-CpuHeI4h.js} +2 -2
  165. package/dist/{index-BIa9NKUU.js → index-DqdKVD9N.js} +3 -3
  166. package/dist/{index-B0jIyAgf.js → index-E0RMtc9X.js} +1 -1
  167. package/dist/{index-CWByESA7.js → index-h88pZ6zH.js} +2 -2
  168. package/dist/{index-Dn3We7oE.js → index-p9ZTAIzJ.js} +3 -3
  169. package/dist/index-xzvddlgp.js +345 -0
  170. package/dist/index.d.ts +2 -0
  171. package/dist/index.js +227 -222
  172. package/dist/opentext/index.js +1 -1
  173. package/dist/opentext/map/googleMap.d.ts +2 -1
  174. package/dist/{props-BPxy0GPb.js → props-Bod9bL2v.js} +4 -4
  175. package/dist/{props-P3bM0HEk.js → props-E4PNCuS6.js} +1 -4
  176. package/dist/props-n71pckjd.js +5 -0
  177. package/dist/{styled-DRNdxc1V.js → styled-BJ9cE7xy.js} +2 -2
  178. package/dist/styled-BrSdmb0C.js +52 -0
  179. package/dist/{styled-bzTYGIm_.js → styled-DDY0xAl_.js} +1 -1
  180. package/dist/{styled-DhKlciPC.js → styled-Dfbxuq_p.js} +1 -1
  181. package/dist/styled-R9Zq1ahD.js +21 -0
  182. package/dist/{styled-DYgC4qQm.js → styled-ldBsCamo.js} +2 -2
  183. package/dist/{youTubeVideo-BOudL3DM.js → youTubeVideo-CsdIB_iu.js} +30 -56
  184. package/package.json +2 -1
  185. package/dist/ButtonAppearanceHelper-BQUk7S3X.js +0 -92
  186. package/dist/components/AccordionGroup/stories/scrollToViewFixedHeaderStoryObj.d.ts +0 -2
  187. package/dist/components/Carousel/stories/productCards.d.ts +0 -8
  188. package/dist/components/Flex/stories/alignCenterArgs.d.ts +0 -2
  189. package/dist/components/Flex/stories/alignEndArgs.d.ts +0 -2
  190. package/dist/components/Flex/stories/alignStartArgs.d.ts +0 -2
  191. package/dist/components/Flex/stories/autoAndFullItemArgs.d.ts +0 -2
  192. package/dist/components/Flex/stories/autoAndFullItemVerticalArgs.d.ts +0 -2
  193. package/dist/components/Flex/stories/fullAndAutoItemArgs.d.ts +0 -2
  194. package/dist/components/Flex/stories/fullAndAutoItemVerticalArgs.d.ts +0 -2
  195. package/dist/components/Flex/stories/justifyBetweenArgs.d.ts +0 -2
  196. package/dist/components/Flex/stories/justifyBetweenVerticalArgs.d.ts +0 -2
  197. package/dist/components/Flex/stories/justifyCenterArgs.d.ts +0 -2
  198. package/dist/components/Flex/stories/justifyCenterVerticalArgs.d.ts +0 -2
  199. package/dist/components/Flex/stories/justifyEndArgs.d.ts +0 -2
  200. package/dist/components/Flex/stories/justifyEndVerticalArgs.d.ts +0 -2
  201. package/dist/components/Flex/stories/justifyStartArgs.d.ts +0 -2
  202. package/dist/components/Flex/stories/justifyStartVerticalArgs.d.ts +0 -2
  203. package/dist/components/Flex/stories/twoFullItemsArgs.d.ts +0 -2
  204. package/dist/components/Flex/stories/twoFullItemsVerticalArgs.d.ts +0 -2
  205. package/dist/components/Flex/stories/xlGapSpacingArgs.d.ts +0 -2
  206. package/dist/components/Grid/stories/alignGridCenterArgs.d.ts +0 -2
  207. package/dist/components/Grid/stories/alignGridItemArgs.d.ts +0 -2
  208. package/dist/components/Grid/stories/alignGridRightArgs.d.ts +0 -2
  209. package/dist/components/Grid/stories/grid12Args.d.ts +0 -2
  210. package/dist/components/Grid/stories/grid222222Args.d.ts +0 -2
  211. package/dist/components/Grid/stories/grid3333Args.d.ts +0 -2
  212. package/dist/components/Grid/stories/grid363Args.d.ts +0 -2
  213. package/dist/components/Grid/stories/grid444Args.d.ts +0 -2
  214. package/dist/components/Grid/stories/grid64Args.d.ts +0 -2
  215. package/dist/components/Grid/stories/grid66Args.d.ts +0 -2
  216. package/dist/components/Grid/stories/grid75Args.d.ts +0 -2
  217. package/dist/components/Grid/stories/nestingArgs.d.ts +0 -2
  218. package/dist/components/Grid/stories/noSpacingArgs.d.ts +0 -2
  219. package/dist/components/Grid/stories/offsetArgs.d.ts +0 -2
  220. package/dist/components/Grid/stories/responsiveArgs.d.ts +0 -2
  221. package/dist/components/Grid/stories/stretchArgs.d.ts +0 -2
  222. package/dist/components/Grid/stories/tagOrderedListArgs.d.ts +0 -2
  223. package/dist/components/Grid/stories/tagUnorderedListArgs.d.ts +0 -2
  224. package/dist/getSizesFromGridConfig-BqDW79mt.js +0 -48
@@ -0,0 +1,902 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useRef, useEffect } from "react";
4
+ import "../../index-C_6tWuWh.js";
5
+ import "../../index-E0RMtc9X.js";
6
+ import "../../hooks/useLinkComponent/index.js";
7
+ import "../../styled-R9Zq1ahD.js";
8
+ import "../../hooks/useImageComponent/index.js";
9
+ import "../../styled-BrSdmb0C.js";
10
+ import { a as aspectRatio16_9 } from "../../props-CLadRD1u.js";
11
+ import styled, { keyframes, css } from "styled-components";
12
+ import { translateLayoutPropsToCss } from "../../foundations/layout/index.js";
13
+ import { getBorderRadius } from "../../foundations/token/getBorderRadius/index.js";
14
+ import { getBottomSpacing } from "../../foundations/token/getBottomSpacing/index.js";
15
+ import { getObjectColor } from "../../foundations/token/getObjectColor/index.js";
16
+ import { b as borderRadiusMd } from "../../BorderRadius-0jhn76gB.js";
17
+ import { d as colorObjectBrand } from "../../ObjectColor-CSHEae46.js";
18
+ import { s as spacingMd } from "../../Spacing-Dj-qX3Z5.js";
19
+ import { s as shouldForwardProp } from "../../shouldForwardProp-CONMmlMa.js";
20
+ const i18n = {
21
+ play: "Abspielen",
22
+ pause: "Pausieren",
23
+ restart: "Von vorne abspielen",
24
+ rewind: "{seektime} Sekunden zurückspulen",
25
+ fastForward: "{seektime} Sekunden vorspulen",
26
+ seek: "Wiedergabeposition",
27
+ seekLabel: "{currentTime} von {duration}",
28
+ played: "Abgespielt",
29
+ buffered: "Geladen",
30
+ currentTime: "Aktuelle Zeit",
31
+ duration: "Gesamtdauer",
32
+ volume: "Lautstärke",
33
+ mute: "Stummschalten",
34
+ unmute: "Stummschaltung aufheben",
35
+ captions: "Untertitel",
36
+ enableCaptions: "Untertitel einblenden",
37
+ disableCaptions: "Untertitel ausblenden",
38
+ enterFullscreen: "Vollbild aktivieren",
39
+ exitFullscreen: "Vollbild beenden",
40
+ pip: "Bild-in-Bild",
41
+ airplay: "AirPlay",
42
+ settings: "Einstellungen",
43
+ menuBack: "Zurück zum Menü",
44
+ speed: "Geschwindigkeit",
45
+ normal: "Normal",
46
+ quality: "Qualität",
47
+ loop: "Wiederholen",
48
+ start: "Anfang",
49
+ end: "Ende",
50
+ all: "Alle",
51
+ reset: "Zurücksetzen",
52
+ disabled: "Aus",
53
+ enabled: "Ein",
54
+ download: "Herunterladen",
55
+ frameTitle: "Videoplayer: {title}",
56
+ advertisement: "Werbung"
57
+ };
58
+ const plyrFadeIn = keyframes({
59
+ "0%": {
60
+ opacity: 0
61
+ },
62
+ to: {
63
+ opacity: 1
64
+ }
65
+ });
66
+ const plyrPopup = keyframes({
67
+ "0%": {
68
+ opacity: 0.5,
69
+ transform: "translateY(10px)"
70
+ },
71
+ to: {
72
+ opacity: 1,
73
+ transform: "translateY(0)"
74
+ }
75
+ });
76
+ const plyrProgress = keyframes({
77
+ to: {
78
+ backgroundPosition: "var(--plyr-progress-loading-size, 25px) 0"
79
+ }
80
+ });
81
+ const VideoStyled = styled.div.withConfig({
82
+ shouldForwardProp,
83
+ displayName: "VideoStyled",
84
+ componentId: "sc-2y53u0-0"
85
+ })(
86
+ ({
87
+ roundedCorners,
88
+ aspectRatio = aspectRatio16_9,
89
+ bottomSpacing = spacingMd
90
+ }) => ({
91
+ position: "relative",
92
+ width: "100%",
93
+ // The box is sized by the aspect ratio, never by the video itself: the
94
+ // player keeps its height before the first frame is decoded, so nothing
95
+ // shifts once the media loads.
96
+ aspectRatio,
97
+ overflow: "hidden",
98
+ ...roundedCorners && {
99
+ borderRadius: getBorderRadius(borderRadiusMd)
100
+ },
101
+ ...getBottomSpacing({
102
+ bottomSpacing
103
+ }),
104
+ // Ensure Plyr fills the container
105
+ //
106
+ // Ported subset of `plyr/dist/plyr.css` (Plyr v3, default video controls only).
107
+ // This intentionally excludes anything audio-, YouTube- or Vimeo-specific, since
108
+ // this component only ever renders a self-hosted <video> with Plyr's default UI.
109
+ // Kept as scoped styled-components CSS (instead of a global stylesheet import) so
110
+ // it doesn't leak outside this component and doesn't require consumers to import a
111
+ // separate `dist/brix.css` (see ADR-003, ADR-014).
112
+ ".plyr": {
113
+ display: "flex",
114
+ flexDirection: "column",
115
+ position: "relative",
116
+ width: "100%",
117
+ // Fill the aspect-ratio box set on the container above
118
+ height: "100%",
119
+ maxWidth: "100%",
120
+ minWidth: "200px",
121
+ lineHeight: 1.7,
122
+ zIndex: 0,
123
+ // Recolor Plyr's controls (progress, volume, hover/focus states)
124
+ // from its default blue to the brand object color
125
+ // https://github.com/sampotts/plyr#customizing-the-css
126
+ "--plyr-color-main": getObjectColor(colorObjectBrand),
127
+ "& video": {
128
+ display: "block",
129
+ height: "100%",
130
+ width: "100%",
131
+ // Letterbox instead of distorting when the media ratio differs
132
+ // from the configured aspectRatio
133
+ objectFit: "contain"
134
+ },
135
+ "&:focus": {
136
+ outline: 0
137
+ },
138
+ // .plyr--video: self-hosted video player wrapper
139
+ "&.plyr--video": {
140
+ overflow: "hidden"
141
+ },
142
+ "&.plyr--video.plyr--menu-open": {
143
+ overflow: "visible"
144
+ },
145
+ // .plyr__video-wrapper: positioned wrapper for the native <video> element and poster
146
+ "& .plyr__video-wrapper": {
147
+ background: "var(--plyr-video-background, #000)",
148
+ borderRadius: "inherit",
149
+ height: "100%",
150
+ margin: "auto",
151
+ overflow: "hidden",
152
+ position: "relative",
153
+ width: "100%"
154
+ },
155
+ "& .plyr__video-wrapper--fixed-ratio": {
156
+ aspectRatio: "16/9",
157
+ "@supports not (aspect-ratio: 16/9)": {
158
+ height: 0,
159
+ paddingBottom: "56.25%",
160
+ position: "relative"
161
+ }
162
+ },
163
+ "& .plyr__video-wrapper--fixed-ratio video": {
164
+ border: 0,
165
+ height: "100%",
166
+ left: 0,
167
+ position: "absolute",
168
+ top: 0,
169
+ width: "100%"
170
+ },
171
+ // .plyr__poster: poster image shown before playback starts
172
+ "& .plyr__poster": {
173
+ backgroundColor: "var(--plyr-video-background, #000)",
174
+ backgroundPosition: "50% 50%",
175
+ backgroundRepeat: "no-repeat",
176
+ backgroundSize: "contain",
177
+ height: "100%",
178
+ left: 0,
179
+ opacity: 0,
180
+ position: "absolute",
181
+ top: 0,
182
+ transition: "opacity 0.2s ease",
183
+ width: "100%",
184
+ zIndex: 1
185
+ },
186
+ "&.plyr--stopped.plyr__poster-enabled .plyr__poster": {
187
+ opacity: 1
188
+ },
189
+ // .plyr__controls: control bar container (play/pause, progress, volume, time, settings, fullscreen)
190
+ "& .plyr__controls": {
191
+ alignItems: "center",
192
+ display: "flex",
193
+ justifyContent: "flex-end",
194
+ textAlign: "center"
195
+ },
196
+ "& .plyr__controls .plyr__progress__container": {
197
+ flex: 1,
198
+ minWidth: 0
199
+ },
200
+ "& .plyr__controls .plyr__controls__item": {
201
+ marginLeft: "calc(var(--plyr-control-spacing, 10px) / 4)"
202
+ },
203
+ "& .plyr__controls .plyr__controls__item:first-child": {
204
+ marginLeft: 0,
205
+ marginRight: "auto"
206
+ },
207
+ "& .plyr__controls .plyr__controls__item.plyr__progress__container": {
208
+ paddingLeft: "calc(var(--plyr-control-spacing, 10px) / 4)"
209
+ },
210
+ "& .plyr__controls .plyr__controls__item.plyr__time": {
211
+ padding: "0 calc(var(--plyr-control-spacing, 10px) / 2)"
212
+ },
213
+ "& .plyr__controls .plyr__controls__item.plyr__progress__container:first-child, & .plyr__controls .plyr__controls__item.plyr__time:first-child, & .plyr__controls .plyr__controls__item.plyr__time + .plyr__time": {
214
+ paddingLeft: 0
215
+ },
216
+ "& [data-plyr=airplay], & [data-plyr=captions], & [data-plyr=fullscreen], & [data-plyr=pip]": {
217
+ display: "none"
218
+ },
219
+ "& .plyr__controls:empty": {
220
+ display: "none"
221
+ },
222
+ "&.plyr--airplay-supported [data-plyr=airplay], &.plyr--captions-enabled [data-plyr=captions], &.plyr--fullscreen-enabled [data-plyr=fullscreen], &.plyr--pip-supported [data-plyr=pip]": {
223
+ display: "inline-block"
224
+ },
225
+ "&.plyr--video .plyr__controls": {
226
+ background: "var(--plyr-video-controls-background, linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.75)))",
227
+ borderBottomLeftRadius: "inherit",
228
+ borderBottomRightRadius: "inherit",
229
+ bottom: 0,
230
+ color: "var(--plyr-video-control-color, #fff)",
231
+ left: 0,
232
+ padding: "calc(var(--plyr-control-spacing, 10px) / 2)",
233
+ paddingTop: "calc(var(--plyr-control-spacing, 10px) * 2)",
234
+ position: "absolute",
235
+ right: 0,
236
+ transition: "opacity 0.4s ease-in-out, transform 0.4s ease-in-out",
237
+ zIndex: 3,
238
+ "@media (min-width: 480px)": {
239
+ padding: "var(--plyr-control-spacing, 10px)",
240
+ paddingTop: "calc(var(--plyr-control-spacing, 10px) * 3.5)"
241
+ }
242
+ },
243
+ "&.plyr--video.plyr--hide-controls .plyr__controls": {
244
+ opacity: 0,
245
+ pointerEvents: "none",
246
+ transform: "translateY(100%)"
247
+ },
248
+ "&.plyr--video .plyr__control:focus-visible, &.plyr--video .plyr__control:hover, &.plyr--video .plyr__control[aria-expanded=true]": {
249
+ background: "var(--plyr-video-control-background-hover, var(--plyr-color-main, #00b2ff))",
250
+ color: "var(--plyr-video-control-color-hover, #fff)"
251
+ },
252
+ // .plyr__control: shared button styles for all control bar buttons
253
+ "& .plyr__control": {
254
+ background: "transparent",
255
+ border: 0,
256
+ borderRadius: "var(--plyr-control-radius, 4px)",
257
+ color: "inherit",
258
+ cursor: "pointer",
259
+ flexShrink: 0,
260
+ overflow: "visible",
261
+ padding: "calc(var(--plyr-control-spacing, 10px) * 0.7)",
262
+ position: "relative",
263
+ transition: "all 0.1s ease-in-out"
264
+ },
265
+ "& .plyr__control svg": {
266
+ display: "block",
267
+ fill: "currentColor",
268
+ height: "var(--plyr-control-icon-size, 18px)",
269
+ pointerEvents: "none",
270
+ width: "var(--plyr-control-icon-size, 18px)"
271
+ },
272
+ "& .plyr__control:focus": {
273
+ outline: 0
274
+ },
275
+ "& .plyr__control:focus-visible": {
276
+ outline: "2px dashed var(--plyr-focus-visible-color, var(--plyr-color-main, #00b2ff))",
277
+ outlineOffset: "2px"
278
+ },
279
+ "& a.plyr__control": {
280
+ textDecoration: "none"
281
+ },
282
+ // .plyr__sr-only: visually hidden labels (e.g. "Abspielen" inside the
283
+ // overlaid play button) that must stay available to screen readers
284
+ "& .plyr__sr-only": {
285
+ clip: "rect(1px, 1px, 1px, 1px)",
286
+ border: 0,
287
+ height: "1px",
288
+ overflow: "hidden",
289
+ padding: 0,
290
+ position: "absolute",
291
+ width: "1px"
292
+ },
293
+ "& .plyr__control.plyr__control--pressed .icon--not-pressed, & .plyr__control.plyr__control--pressed .label--not-pressed, & .plyr__control:not(.plyr__control--pressed) .icon--pressed, & .plyr__control:not(.plyr__control--pressed) .label--pressed": {
294
+ display: "none"
295
+ },
296
+ // .plyr__control--overlaid: big centered play button shown before playback starts
297
+ "& .plyr__control--overlaid": {
298
+ background: "var(--plyr-video-control-background-hover, var(--plyr-color-main, #00b2ff))",
299
+ border: 0,
300
+ borderRadius: "100%",
301
+ color: "var(--plyr-video-control-color, #fff)",
302
+ display: "none",
303
+ left: "50%",
304
+ opacity: 0.9,
305
+ padding: "calc(var(--plyr-control-spacing, 10px) * 1.5)",
306
+ position: "absolute",
307
+ top: "50%",
308
+ transform: "translate(-50%, -50%)",
309
+ transition: "0.3s",
310
+ zIndex: 2,
311
+ "& svg": {
312
+ left: "2px",
313
+ position: "relative",
314
+ // Plyr's overlaid play icon uses a fixed 35x35 viewBox that isn't
315
+ // covered by any of the design system's icon size tokens
316
+ // (`src/foundations/types/IconSize.ts`), so the literal Plyr default
317
+ // is kept as-is here.
318
+ height: "35px",
319
+ width: "35px"
320
+ }
321
+ },
322
+ "& .plyr__control--overlaid:focus, & .plyr__control--overlaid:hover": {
323
+ opacity: 1
324
+ },
325
+ "&.plyr--playing .plyr__control--overlaid": {
326
+ opacity: 0,
327
+ visibility: "hidden"
328
+ },
329
+ "&.plyr--full-ui.plyr--video .plyr__control--overlaid": {
330
+ display: "block"
331
+ },
332
+ // .plyr__time: current time / duration labels
333
+ "& .plyr__time": {
334
+ fontSize: "var(--plyr-font-size-time, var(--plyr-font-size-small, 13px))"
335
+ },
336
+ "& .plyr__time + .plyr__time:before": {
337
+ content: '"⁄"',
338
+ marginRight: "var(--plyr-control-spacing, 10px)"
339
+ },
340
+ "@media (max-width: 767px)": {
341
+ "& .plyr__time + .plyr__time": {
342
+ display: "none"
343
+ }
344
+ },
345
+ // .plyr__tooltip: hover/focus tooltips for control bar buttons and the progress bar
346
+ "& .plyr__tooltip": {
347
+ background: "var(--plyr-tooltip-background, #fff)",
348
+ borderRadius: "var(--plyr-tooltip-radius, 5px)",
349
+ bottom: "100%",
350
+ boxShadow: "var(--plyr-tooltip-shadow, 0 1px 2px rgba(0, 0, 0, 0.15))",
351
+ color: "var(--plyr-tooltip-color, #4a5464)",
352
+ fontSize: "var(--plyr-font-size-small, 13px)",
353
+ fontWeight: "var(--plyr-font-weight-regular, 400)",
354
+ left: "50%",
355
+ lineHeight: 1.3,
356
+ marginBottom: "calc(var(--plyr-control-spacing, 10px) / 2 * 2)",
357
+ opacity: 0,
358
+ padding: "calc(var(--plyr-control-spacing, 10px) / 2) calc(var(--plyr-control-spacing, 10px) / 2 * 1.5)",
359
+ pointerEvents: "none",
360
+ position: "absolute",
361
+ transform: "translate(-50%, 10px) scale(0.8)",
362
+ transformOrigin: "50% 100%",
363
+ transition: "transform 0.2s ease 0.1s, opacity 0.2s ease 0.1s",
364
+ whiteSpace: "nowrap",
365
+ zIndex: 2,
366
+ "&:before": {
367
+ borderLeft: "var(--plyr-tooltip-arrow-size, 4px) solid transparent",
368
+ borderRight: "var(--plyr-tooltip-arrow-size, 4px) solid transparent",
369
+ borderTop: "var(--plyr-tooltip-arrow-size, 4px) solid var(--plyr-tooltip-background, #fff)",
370
+ bottom: "calc(var(--plyr-tooltip-arrow-size, 4px) * -1)",
371
+ content: '""',
372
+ height: 0,
373
+ left: "50%",
374
+ position: "absolute",
375
+ transform: "translateX(-50%)",
376
+ width: 0,
377
+ zIndex: 2
378
+ }
379
+ },
380
+ "& .plyr__control:focus-visible .plyr__tooltip, & .plyr__control:hover .plyr__tooltip, & .plyr__tooltip--visible": {
381
+ opacity: 1,
382
+ transform: "translate(-50%) scale(1)"
383
+ },
384
+ "& .plyr__control:hover .plyr__tooltip": {
385
+ zIndex: 3
386
+ },
387
+ "& .plyr__controls > .plyr__control:first-child .plyr__tooltip, & .plyr__controls > .plyr__control:first-child + .plyr__control .plyr__tooltip": {
388
+ left: 0,
389
+ transform: "translateY(10px) scale(0.8)",
390
+ transformOrigin: "0 100%"
391
+ },
392
+ "& .plyr__controls > .plyr__control:last-child .plyr__tooltip": {
393
+ left: "auto",
394
+ right: 0,
395
+ transform: "translateY(10px) scale(0.8)",
396
+ transformOrigin: "100% 100%"
397
+ },
398
+ // .plyr__progress: seek bar (range input + buffered progress)
399
+ "& .plyr__progress": {
400
+ left: "calc(var(--plyr-range-thumb-height, 13px) * 0.5)",
401
+ marginRight: "var(--plyr-range-thumb-height, 13px)",
402
+ position: "relative",
403
+ "& input[type=range]": {
404
+ position: "relative",
405
+ zIndex: 2
406
+ },
407
+ "& .plyr__tooltip": {
408
+ left: 0,
409
+ maxWidth: "120px",
410
+ overflowWrap: "break-word"
411
+ }
412
+ },
413
+ "& .plyr__progress input[type=range], & .plyr__progress__buffer": {
414
+ marginLeft: "calc(var(--plyr-range-thumb-height, 13px) * -0.5)",
415
+ marginRight: "calc(var(--plyr-range-thumb-height, 13px) * -0.5)",
416
+ width: "calc(100% + var(--plyr-range-thumb-height, 13px))"
417
+ },
418
+ "& .plyr__progress__buffer": {
419
+ appearance: "none",
420
+ background: "transparent",
421
+ border: 0,
422
+ borderRadius: "100px",
423
+ height: "var(--plyr-range-track-height, 5px)",
424
+ left: 0,
425
+ marginTop: "calc(var(--plyr-range-track-height, 5px) / 2 * -1)",
426
+ padding: 0,
427
+ position: "absolute",
428
+ top: "50%",
429
+ "&::-webkit-progress-bar": {
430
+ background: "transparent"
431
+ },
432
+ "&::-webkit-progress-value": {
433
+ background: "currentColor",
434
+ borderRadius: "100px",
435
+ minWidth: "var(--plyr-range-track-height, 5px)",
436
+ transition: "width 0.2s ease"
437
+ },
438
+ "&::-moz-progress-bar": {
439
+ background: "currentColor",
440
+ borderRadius: "100px",
441
+ minWidth: "var(--plyr-range-track-height, 5px)",
442
+ transition: "width 0.2s ease"
443
+ },
444
+ "&::-ms-fill": {
445
+ borderRadius: "100px",
446
+ transition: "width 0.2s ease"
447
+ }
448
+ },
449
+ "&.plyr--loading .plyr__progress__buffer": {
450
+ backgroundImage: "linear-gradient(-45deg, var(--plyr-progress-loading-background, rgba(35, 40, 47, 0.6)) 25%, transparent 25%, transparent 50%, var(--plyr-progress-loading-background, rgba(35, 40, 47, 0.6)) 50%, var(--plyr-progress-loading-background, rgba(35, 40, 47, 0.6)) 75%, transparent 75%, transparent)",
451
+ backgroundRepeat: "repeat-x",
452
+ backgroundSize: "var(--plyr-progress-loading-size, 25px) var(--plyr-progress-loading-size, 25px)",
453
+ color: "transparent"
454
+ },
455
+ "&.plyr--video.plyr--loading .plyr__progress__buffer": {
456
+ backgroundColor: "var(--plyr-video-progress-buffered-background, rgba(255, 255, 255, 0.25))"
457
+ },
458
+ "&.plyr--video .plyr__progress__buffer": {
459
+ color: "var(--plyr-video-progress-buffered-background, rgba(255, 255, 255, 0.25))"
460
+ },
461
+ "& .plyr__progress__marker": {
462
+ backgroundColor: "var(--plyr-progress-marker-background, #fff)",
463
+ borderRadius: "1px",
464
+ height: "var(--plyr-range-track-height, 5px)",
465
+ position: "absolute",
466
+ top: "50%",
467
+ transform: "translate(-50%, -50%)",
468
+ width: "var(--plyr-progress-marker-width, 3px)",
469
+ zIndex: 3
470
+ },
471
+ // Range inputs (progress + volume) across browser engines
472
+ // Hide the native media UI in WebKit/Blink — without this, Chrome and
473
+ // Safari paint their own controls on top of Plyr's.
474
+ "&.plyr--full-ui ::-webkit-media-controls": {
475
+ display: "none"
476
+ },
477
+ "&.plyr--full-ui ::-webkit-media-text-track-container": {
478
+ display: "none"
479
+ },
480
+ "&.plyr--full-ui input[type=range]::-moz-focus-outer": {
481
+ border: 0
482
+ },
483
+ "&.plyr--no-transition": {
484
+ transition: "none !important"
485
+ },
486
+ // Fullscreen (native and JS fallback)
487
+ "&.plyr:fullscreen, &.plyr--fullscreen-fallback": {
488
+ background: "#000",
489
+ borderRadius: "0 !important",
490
+ height: "100%",
491
+ margin: 0,
492
+ width: "100%",
493
+ "& video": {
494
+ height: "100%"
495
+ },
496
+ "& .plyr__control .icon--exit-fullscreen": {
497
+ display: "block",
498
+ "& + svg": {
499
+ display: "none"
500
+ }
501
+ },
502
+ "& .plyr__captions": {
503
+ fontSize: "var(--plyr-font-size-xlarge, 21px)"
504
+ },
505
+ "&.plyr--hide-controls": {
506
+ cursor: "none"
507
+ }
508
+ },
509
+ "&.plyr--fullscreen-fallback": {
510
+ inset: 0,
511
+ position: "fixed",
512
+ zIndex: 1e7
513
+ },
514
+ "&.plyr--full-ui input[type=range]": {
515
+ appearance: "none",
516
+ background: "transparent",
517
+ border: 0,
518
+ borderRadius: "calc(var(--plyr-range-thumb-height, 13px) * 2)",
519
+ color: "var(--plyr-range-fill-background, var(--plyr-color-main, #00b2ff))",
520
+ display: "block",
521
+ height: "calc(var(--plyr-range-thumb-active-shadow-width, 3px) * 2 + var(--plyr-range-thumb-height, 13px))",
522
+ margin: 0,
523
+ minWidth: 0,
524
+ padding: 0,
525
+ transition: "box-shadow 0.3s ease",
526
+ width: "100%",
527
+ "&::-webkit-slider-runnable-track": {
528
+ background: "transparent",
529
+ backgroundImage: "linear-gradient(to right, currentColor var(--value, 0), transparent var(--value, 0))",
530
+ border: 0,
531
+ borderRadius: "calc(var(--plyr-range-track-height, 5px) / 2)",
532
+ height: "var(--plyr-range-track-height, 5px)",
533
+ transition: "box-shadow 0.3s ease",
534
+ userSelect: "none"
535
+ },
536
+ "&::-webkit-slider-thumb": {
537
+ appearance: "none",
538
+ background: "var(--plyr-range-thumb-background, #fff)",
539
+ border: 0,
540
+ borderRadius: "100%",
541
+ boxShadow: "var(--plyr-range-thumb-shadow, 0 1px 1px rgba(35, 40, 47, 0.15), 0 0 0 1px rgba(35, 40, 47, 0.2))",
542
+ height: "var(--plyr-range-thumb-height, 13px)",
543
+ marginTop: "calc((var(--plyr-range-thumb-height, 13px) - var(--plyr-range-track-height, 5px)) / 2 * -1)",
544
+ position: "relative",
545
+ transition: "all 0.2s ease",
546
+ width: "var(--plyr-range-thumb-height, 13px)"
547
+ },
548
+ "&::-moz-range-track": {
549
+ background: "transparent",
550
+ border: 0,
551
+ borderRadius: "calc(var(--plyr-range-track-height, 5px) / 2)",
552
+ height: "var(--plyr-range-track-height, 5px)",
553
+ transition: "box-shadow 0.3s ease",
554
+ userSelect: "none"
555
+ },
556
+ "&::-moz-range-thumb": {
557
+ background: "var(--plyr-range-thumb-background, #fff)",
558
+ border: 0,
559
+ borderRadius: "100%",
560
+ boxShadow: "var(--plyr-range-thumb-shadow, 0 1px 1px rgba(35, 40, 47, 0.15), 0 0 0 1px rgba(35, 40, 47, 0.2))",
561
+ height: "var(--plyr-range-thumb-height, 13px)",
562
+ position: "relative",
563
+ transition: "all 0.2s ease",
564
+ width: "var(--plyr-range-thumb-height, 13px)"
565
+ },
566
+ "&::-moz-range-progress": {
567
+ background: "currentColor",
568
+ borderRadius: "calc(var(--plyr-range-track-height, 5px) / 2)",
569
+ height: "var(--plyr-range-track-height, 5px)"
570
+ },
571
+ "&::-ms-track": {
572
+ color: "transparent"
573
+ },
574
+ "&:focus": {
575
+ outline: 0
576
+ },
577
+ // Vendor pseudo-elements must stay in separate rules: a selector
578
+ // list containing a pseudo-element the engine does not know
579
+ // invalidates the whole rule.
580
+ "&:focus-visible::-webkit-slider-runnable-track": {
581
+ outline: "2px dashed var(--plyr-focus-visible-color, var(--plyr-color-main, #00b2ff))",
582
+ outlineOffset: "2px"
583
+ },
584
+ "&:focus-visible::-moz-range-track": {
585
+ outline: "2px dashed var(--plyr-focus-visible-color, var(--plyr-color-main, #00b2ff))",
586
+ outlineOffset: "2px"
587
+ },
588
+ "&:focus-visible::-ms-track": {
589
+ outline: "2px dashed var(--plyr-focus-visible-color, var(--plyr-color-main, #00b2ff))",
590
+ outlineOffset: "2px"
591
+ }
592
+ },
593
+ "&.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track": {
594
+ backgroundColor: "var(--plyr-video-range-track-background, var(--plyr-video-progress-buffered-background, rgba(255, 255, 255, 0.25)))"
595
+ },
596
+ "&.plyr--full-ui.plyr--video input[type=range]::-moz-range-track": {
597
+ backgroundColor: "var(--plyr-video-range-track-background, var(--plyr-video-progress-buffered-background, rgba(255, 255, 255, 0.25)))"
598
+ },
599
+ "&.plyr--full-ui.plyr--video input[type=range]::-ms-track": {
600
+ backgroundColor: "var(--plyr-video-range-track-background, var(--plyr-video-progress-buffered-background, rgba(255, 255, 255, 0.25)))"
601
+ },
602
+ // .plyr__volume: volume slider + mute toggle
603
+ "& .plyr__volume": {
604
+ alignItems: "center",
605
+ display: "flex",
606
+ position: "relative"
607
+ },
608
+ "& .plyr__volume input[type=range]": {
609
+ marginLeft: "calc(var(--plyr-control-spacing, 10px) / 2)",
610
+ marginRight: "calc(var(--plyr-control-spacing, 10px) / 2)",
611
+ maxWidth: "90px",
612
+ minWidth: "60px",
613
+ position: "relative",
614
+ zIndex: 2
615
+ },
616
+ // .plyr__menu / .plyr__menu__container: settings menu (quality, speed, captions)
617
+ "& .plyr__menu": {
618
+ display: "flex",
619
+ position: "relative",
620
+ "& .plyr__control svg": {
621
+ transition: "transform 0.3s ease"
622
+ },
623
+ "& .plyr__control[aria-expanded=true] svg": {
624
+ transform: "rotate(90deg)"
625
+ },
626
+ "& .plyr__control[aria-expanded=true] .plyr__tooltip": {
627
+ display: "none"
628
+ }
629
+ },
630
+ "& .plyr__menu__container": {
631
+ background: "var(--plyr-menu-background, rgba(255, 255, 255, 0.9))",
632
+ borderRadius: "var(--plyr-menu-radius, 8px)",
633
+ bottom: "100%",
634
+ boxShadow: "var(--plyr-menu-shadow, 0 1px 2px rgba(0, 0, 0, 0.15))",
635
+ color: "var(--plyr-menu-color, #4a5464)",
636
+ fontSize: "var(--plyr-font-size-base, 15px)",
637
+ marginBottom: "10px",
638
+ position: "absolute",
639
+ right: "-3px",
640
+ textAlign: "left",
641
+ whiteSpace: "nowrap",
642
+ zIndex: 3,
643
+ "& > div": {
644
+ overflow: "hidden",
645
+ transition: "height 0.35s cubic-bezier(0.4, 0, 0.2, 1), width 0.35s cubic-bezier(0.4, 0, 0.2, 1)"
646
+ },
647
+ "&:after": {
648
+ border: "var(--plyr-menu-arrow-size, 4px) solid transparent",
649
+ borderTopColor: "var(--plyr-menu-background, rgba(255, 255, 255, 0.9))",
650
+ content: '""',
651
+ height: 0,
652
+ position: "absolute",
653
+ right: "calc(var(--plyr-control-icon-size, 18px) / 2 + var(--plyr-control-spacing, 10px) * 0.7 - var(--plyr-menu-arrow-size, 4px) / 2)",
654
+ top: "100%",
655
+ width: 0
656
+ },
657
+ "& [role=menu]": {
658
+ padding: "calc(var(--plyr-control-spacing, 10px) * 0.7)"
659
+ },
660
+ "& [role=menuitem], & [role=menuitemradio]": {
661
+ marginTop: "2px"
662
+ },
663
+ "& [role=menuitem]:first-child, & [role=menuitemradio]:first-child": {
664
+ marginTop: 0
665
+ },
666
+ "& .plyr__control": {
667
+ alignItems: "center",
668
+ color: "var(--plyr-menu-color, #4a5464)",
669
+ display: "flex",
670
+ fontSize: "var(--plyr-font-size-menu, var(--plyr-font-size-small, 13px))",
671
+ padding: "calc(var(--plyr-control-spacing, 10px) * 0.7 / 1.5) calc(var(--plyr-control-spacing, 10px) * 0.7 * 1.5)",
672
+ userSelect: "none",
673
+ width: "100%",
674
+ "& > span": {
675
+ alignItems: "inherit",
676
+ display: "flex",
677
+ width: "100%"
678
+ },
679
+ "&:after": {
680
+ border: "var(--plyr-menu-item-arrow-size, 4px) solid transparent",
681
+ content: '""',
682
+ position: "absolute",
683
+ top: "50%",
684
+ transform: "translateY(-50%)"
685
+ }
686
+ },
687
+ "& .plyr__control--forward": {
688
+ paddingRight: "calc(var(--plyr-control-spacing, 10px) * 0.7 * 4)",
689
+ "&:after": {
690
+ borderLeftColor: "var(--plyr-menu-arrow-color, #728197)",
691
+ right: "calc(var(--plyr-control-spacing, 10px) * 0.7 * 1.5 - var(--plyr-menu-item-arrow-size, 4px))"
692
+ },
693
+ "&:focus-visible:after, &:hover:after": {
694
+ borderLeftColor: "initial"
695
+ }
696
+ },
697
+ "& .plyr__control--back": {
698
+ fontWeight: "var(--plyr-font-weight-regular, 400)",
699
+ margin: "calc(var(--plyr-control-spacing, 10px) * 0.7)",
700
+ marginBottom: "calc(var(--plyr-control-spacing, 10px) * 0.7 / 2)",
701
+ paddingLeft: "calc(var(--plyr-control-spacing, 10px) * 0.7 * 4)",
702
+ position: "relative",
703
+ width: "calc(100% - var(--plyr-control-spacing, 10px) * 0.7 * 2)",
704
+ "&:after": {
705
+ borderRightColor: "var(--plyr-menu-arrow-color, #728197)",
706
+ left: "calc(var(--plyr-control-spacing, 10px) * 0.7 * 1.5 - var(--plyr-menu-item-arrow-size, 4px))"
707
+ },
708
+ "&:before": {
709
+ background: "var(--plyr-menu-back-border-color, #dcdfe5)",
710
+ boxShadow: "0 1px 0 var(--plyr-menu-back-border-shadow-color, #fff)",
711
+ content: '""',
712
+ height: "1px",
713
+ left: 0,
714
+ marginTop: "calc(var(--plyr-control-spacing, 10px) * 0.7 / 2)",
715
+ overflow: "hidden",
716
+ position: "absolute",
717
+ right: 0,
718
+ top: "100%"
719
+ },
720
+ "&:focus-visible:after, &:hover:after": {
721
+ borderRightColor: "initial"
722
+ }
723
+ },
724
+ "& .plyr__control[role=menuitemradio]": {
725
+ paddingLeft: "calc(var(--plyr-control-spacing, 10px) * 0.7)",
726
+ "&:after, &:before": {
727
+ borderRadius: "100%"
728
+ },
729
+ "&:before": {
730
+ background: "rgba(0, 0, 0, 0.1)",
731
+ content: '""',
732
+ display: "block",
733
+ flexShrink: 0,
734
+ height: "16px",
735
+ marginRight: "var(--plyr-control-spacing, 10px)",
736
+ transition: "all 0.3s ease",
737
+ width: "16px"
738
+ },
739
+ "&:after": {
740
+ background: "#fff",
741
+ border: 0,
742
+ height: "6px",
743
+ left: "12px",
744
+ opacity: 0,
745
+ top: "50%",
746
+ transform: "translateY(-50%) scale(0)",
747
+ transition: "transform 0.3s ease, opacity 0.3s ease",
748
+ width: "6px"
749
+ },
750
+ "&[aria-checked=true]:before": {
751
+ background: "var(--plyr-control-toggle-checked-background, var(--plyr-color-main, #00b2ff))"
752
+ },
753
+ "&[aria-checked=true]:after": {
754
+ opacity: 1,
755
+ transform: "translateY(-50%) scale(1)"
756
+ },
757
+ "&:focus-visible:before, &:hover:before": {
758
+ background: "rgba(35, 40, 47, 0.1)"
759
+ }
760
+ },
761
+ "& .plyr__menu__value": {
762
+ alignItems: "center",
763
+ display: "flex",
764
+ marginLeft: "auto",
765
+ marginRight: "calc(var(--plyr-control-spacing, 10px) * 0.7 * -1 - -2px)",
766
+ overflow: "hidden",
767
+ paddingLeft: "calc(var(--plyr-control-spacing, 10px) * 0.7 * 3.5)",
768
+ pointerEvents: "none"
769
+ }
770
+ },
771
+ // .plyr__captions: subtitle/caption cue rendering
772
+ "& .plyr__captions": {
773
+ bottom: 0,
774
+ display: "none",
775
+ fontSize: "var(--plyr-font-size-small, 13px)",
776
+ left: 0,
777
+ padding: "var(--plyr-control-spacing, 10px)",
778
+ position: "absolute",
779
+ textAlign: "center",
780
+ transition: "transform 0.4s ease-in-out",
781
+ width: "100%",
782
+ "@media (min-width: 480px)": {
783
+ fontSize: "var(--plyr-font-size-base, 15px)",
784
+ padding: "calc(var(--plyr-control-spacing, 10px) * 2)"
785
+ },
786
+ "@media (min-width: 768px)": {
787
+ fontSize: "var(--plyr-font-size-large, 18px)"
788
+ },
789
+ "& span:empty": {
790
+ display: "none"
791
+ }
792
+ },
793
+ "&.plyr--captions-active .plyr__captions": {
794
+ display: "block"
795
+ },
796
+ "&:not(.plyr--hide-controls) .plyr__controls:not(:empty) ~ .plyr__captions": {
797
+ transform: "translateY(calc(var(--plyr-control-spacing, 10px) * -4))"
798
+ },
799
+ "& .plyr__caption": {
800
+ background: "var(--plyr-captions-background, rgba(0, 0, 0, 0.8))",
801
+ borderRadius: "4px",
802
+ boxDecorationBreak: "clone",
803
+ color: "var(--plyr-captions-text-color, #fff)",
804
+ lineHeight: "185%",
805
+ padding: "0.2em 0.5em",
806
+ whiteSpace: "pre-wrap",
807
+ "& div": {
808
+ display: "inline"
809
+ }
810
+ }
811
+ }
812
+ }),
813
+ ({
814
+ layout
815
+ }) => layout && translateLayoutPropsToCss(layout),
816
+ // Animation shorthands live outside the object styles: styled-components can
817
+ // only inject `keyframes` when they are interpolated into a css`` block.
818
+ css([".plyr .plyr__menu__container{animation:", " 0.2s ease;}.plyr.plyr--loading .plyr__progress__buffer{animation:", " 1s linear infinite;}.plyr .plyr__captions{animation:", " 0.3s ease;}"], plyrPopup, plyrProgress, plyrFadeIn)
819
+ );
820
+ let plyrModulePromise;
821
+ const loadPlyr = () => plyrModulePromise ?? (plyrModulePromise = import("plyr"));
822
+ const Video = ({
823
+ video,
824
+ preview,
825
+ caption,
826
+ roundedCorners,
827
+ aspectRatio = aspectRatio16_9,
828
+ ...props
829
+ }) => {
830
+ const videoRef = useRef(null);
831
+ const playerRef = useRef(null);
832
+ const isInitialMount = useRef(true);
833
+ useEffect(() => {
834
+ const element = videoRef.current;
835
+ if (!element) {
836
+ return;
837
+ }
838
+ let cancelled = false;
839
+ let player = null;
840
+ let isReady = false;
841
+ let destroyRequested = false;
842
+ void loadPlyr().then(({
843
+ default: PlyrConstructor
844
+ }) => {
845
+ if (cancelled) {
846
+ return;
847
+ }
848
+ player = new PlyrConstructor(element, {
849
+ i18n,
850
+ tooltips: {
851
+ controls: true,
852
+ seek: true
853
+ },
854
+ // Captions are enabled by default: passing a `caption` prop is an
855
+ // explicit opt-in by the author. Plyr persists a later opt-out in
856
+ // localStorage. `language` must be pinned to 'de' - Plyr's default
857
+ // ('auto') resolves to the browser language and would never match
858
+ // our German-only track on a non-German browser.
859
+ captions: {
860
+ active: true,
861
+ update: true,
862
+ language: "de"
863
+ }
864
+ });
865
+ playerRef.current = player;
866
+ player.once("ready", () => {
867
+ isReady = true;
868
+ if (destroyRequested) {
869
+ player == null ? void 0 : player.destroy();
870
+ player = null;
871
+ }
872
+ });
873
+ });
874
+ return () => {
875
+ cancelled = true;
876
+ destroyRequested = true;
877
+ if (isReady) {
878
+ player == null ? void 0 : player.destroy();
879
+ player = null;
880
+ }
881
+ playerRef.current = null;
882
+ };
883
+ }, []);
884
+ useEffect(() => {
885
+ var _a;
886
+ if (isInitialMount.current) {
887
+ isInitialMount.current = false;
888
+ return;
889
+ }
890
+ (_a = videoRef.current) == null ? void 0 : _a.load();
891
+ }, [video.src, video.type, caption]);
892
+ return /* @__PURE__ */ jsx(VideoStyled, { roundedCorners, aspectRatio, ...props, children: /* @__PURE__ */ jsxs("video", { ref: videoRef, playsInline: true, poster: preview, ...caption && {
893
+ crossOrigin: "anonymous"
894
+ }, children: [
895
+ /* @__PURE__ */ jsx("source", { src: video.src, type: video.type }),
896
+ caption && /* @__PURE__ */ jsx("track", { kind: "subtitles", src: caption, srcLang: "de", label: "Deutsch" })
897
+ ] }) });
898
+ };
899
+ export {
900
+ VideoStyled,
901
+ Video as default
902
+ };