@livepeer-frameworks/player-wc 0.1.9 → 0.2.2

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 (141) hide show
  1. package/dist/esm/components/controls/fw-fullscreen-button.js +76 -0
  2. package/dist/esm/components/controls/fw-fullscreen-button.js.map +1 -0
  3. package/dist/esm/components/controls/fw-live-badge.js +109 -0
  4. package/dist/esm/components/controls/fw-live-badge.js.map +1 -0
  5. package/dist/esm/components/controls/fw-play-button.js +76 -0
  6. package/dist/esm/components/controls/fw-play-button.js.map +1 -0
  7. package/dist/esm/components/controls/fw-skip-button.js +62 -0
  8. package/dist/esm/components/controls/fw-skip-button.js.map +1 -0
  9. package/dist/esm/components/controls/fw-time-display.js +77 -0
  10. package/dist/esm/components/controls/fw-time-display.js.map +1 -0
  11. package/dist/esm/components/controls/fw-volume-control.js +76 -0
  12. package/dist/esm/components/controls/fw-volume-control.js.map +1 -0
  13. package/dist/esm/components/fw-dev-mode-panel.js +11 -15
  14. package/dist/esm/components/fw-dev-mode-panel.js.map +1 -1
  15. package/dist/esm/components/fw-error-overlay.js +13 -5
  16. package/dist/esm/components/fw-error-overlay.js.map +1 -1
  17. package/dist/esm/components/fw-idle-screen.js +10 -2
  18. package/dist/esm/components/fw-idle-screen.js.map +1 -1
  19. package/dist/esm/components/fw-loading-screen.js +89 -42
  20. package/dist/esm/components/fw-loading-screen.js.map +1 -1
  21. package/dist/esm/components/fw-loading-spinner.js +20 -9
  22. package/dist/esm/components/fw-loading-spinner.js.map +1 -1
  23. package/dist/esm/components/fw-player-controls.js +18 -13
  24. package/dist/esm/components/fw-player-controls.js.map +1 -1
  25. package/dist/esm/components/fw-player.js +165 -59
  26. package/dist/esm/components/fw-player.js.map +1 -1
  27. package/dist/esm/components/fw-settings-menu.js +44 -9
  28. package/dist/esm/components/fw-settings-menu.js.map +1 -1
  29. package/dist/esm/components/fw-stream-state-overlay.js +13 -5
  30. package/dist/esm/components/fw-stream-state-overlay.js.map +1 -1
  31. package/dist/esm/components/fw-toast.js +11 -1
  32. package/dist/esm/components/fw-toast.js.map +1 -1
  33. package/dist/esm/components/fw-volume-control.js +13 -3
  34. package/dist/esm/components/fw-volume-control.js.map +1 -1
  35. package/dist/esm/controllers/player-controller-host.js +14 -1
  36. package/dist/esm/controllers/player-controller-host.js.map +1 -1
  37. package/dist/esm/index.js +6 -0
  38. package/dist/esm/index.js.map +1 -1
  39. package/dist/esm/styles/shared-styles.js +401 -304
  40. package/dist/esm/styles/shared-styles.js.map +1 -1
  41. package/dist/fw-player.iife.js +707 -488
  42. package/dist/types/components/controls/fw-fullscreen-button.d.ts +18 -0
  43. package/dist/types/components/controls/fw-live-badge.d.ts +19 -0
  44. package/dist/types/components/controls/fw-play-button.d.ts +18 -0
  45. package/dist/types/components/controls/fw-skip-button.d.ts +17 -0
  46. package/dist/types/components/controls/fw-time-display.d.ts +17 -0
  47. package/dist/types/components/controls/fw-volume-control.d.ts +18 -0
  48. package/dist/types/components/controls/index.d.ts +6 -0
  49. package/dist/types/components/fw-dev-mode-panel.d.ts +1 -1
  50. package/dist/types/components/fw-error-overlay.d.ts +4 -0
  51. package/dist/types/components/fw-idle-screen.d.ts +4 -0
  52. package/dist/types/components/fw-loading-screen.d.ts +5 -1
  53. package/dist/types/components/fw-loading-spinner.d.ts +4 -0
  54. package/dist/types/components/fw-player-controls.d.ts +2 -1
  55. package/dist/types/components/fw-player.d.ts +10 -1
  56. package/dist/types/components/fw-settings-menu.d.ts +3 -1
  57. package/dist/types/components/fw-stream-state-overlay.d.ts +4 -0
  58. package/dist/types/components/fw-toast.d.ts +4 -0
  59. package/dist/types/controllers/player-controller-host.d.ts +7 -1
  60. package/dist/types/index.d.ts +1 -0
  61. package/package.json +22 -25
  62. package/src/components/controls/fw-fullscreen-button.ts +75 -0
  63. package/src/components/controls/fw-live-badge.ts +109 -0
  64. package/src/components/controls/fw-play-button.ts +75 -0
  65. package/src/components/controls/fw-skip-button.ts +59 -0
  66. package/src/components/controls/fw-time-display.ts +74 -0
  67. package/src/components/controls/fw-volume-control.ts +75 -0
  68. package/src/components/controls/index.ts +6 -0
  69. package/src/components/fw-dev-mode-panel.ts +10 -17
  70. package/src/components/fw-error-overlay.ts +13 -5
  71. package/src/components/fw-idle-screen.ts +10 -2
  72. package/src/components/fw-loading-screen.ts +90 -46
  73. package/src/components/fw-loading-spinner.ts +18 -9
  74. package/src/components/fw-player-controls.ts +17 -13
  75. package/src/components/fw-player.ts +166 -64
  76. package/src/components/fw-settings-menu.ts +49 -9
  77. package/src/components/fw-stream-state-overlay.ts +13 -5
  78. package/src/components/fw-toast.ts +11 -1
  79. package/src/components/fw-volume-control.ts +14 -3
  80. package/src/controllers/player-controller-host.ts +18 -0
  81. package/src/index.ts +10 -0
  82. package/src/styles/shared-styles.ts +401 -304
  83. package/LICENSE.md +0 -24
  84. package/dist/cjs/components/fw-context-menu.js +0 -17
  85. package/dist/cjs/components/fw-context-menu.js.map +0 -1
  86. package/dist/cjs/components/fw-dev-mode-panel.js +0 -907
  87. package/dist/cjs/components/fw-dev-mode-panel.js.map +0 -1
  88. package/dist/cjs/components/fw-dvd-logo.js +0 -211
  89. package/dist/cjs/components/fw-dvd-logo.js.map +0 -1
  90. package/dist/cjs/components/fw-error-overlay.js +0 -101
  91. package/dist/cjs/components/fw-error-overlay.js.map +0 -1
  92. package/dist/cjs/components/fw-idle-screen.js +0 -726
  93. package/dist/cjs/components/fw-idle-screen.js.map +0 -1
  94. package/dist/cjs/components/fw-loading-screen.js +0 -513
  95. package/dist/cjs/components/fw-loading-screen.js.map +0 -1
  96. package/dist/cjs/components/fw-loading-spinner.js +0 -62
  97. package/dist/cjs/components/fw-loading-spinner.js.map +0 -1
  98. package/dist/cjs/components/fw-player-controls.js +0 -451
  99. package/dist/cjs/components/fw-player-controls.js.map +0 -1
  100. package/dist/cjs/components/fw-player.js +0 -832
  101. package/dist/cjs/components/fw-player.js.map +0 -1
  102. package/dist/cjs/components/fw-seek-bar.js +0 -383
  103. package/dist/cjs/components/fw-seek-bar.js.map +0 -1
  104. package/dist/cjs/components/fw-settings-menu.js +0 -253
  105. package/dist/cjs/components/fw-settings-menu.js.map +0 -1
  106. package/dist/cjs/components/fw-skip-indicator.js +0 -143
  107. package/dist/cjs/components/fw-skip-indicator.js.map +0 -1
  108. package/dist/cjs/components/fw-speed-indicator.js +0 -61
  109. package/dist/cjs/components/fw-speed-indicator.js.map +0 -1
  110. package/dist/cjs/components/fw-stats-panel.js +0 -205
  111. package/dist/cjs/components/fw-stats-panel.js.map +0 -1
  112. package/dist/cjs/components/fw-stream-state-overlay.js +0 -338
  113. package/dist/cjs/components/fw-stream-state-overlay.js.map +0 -1
  114. package/dist/cjs/components/fw-subtitle-renderer.js +0 -217
  115. package/dist/cjs/components/fw-subtitle-renderer.js.map +0 -1
  116. package/dist/cjs/components/fw-thumbnail-overlay.js +0 -161
  117. package/dist/cjs/components/fw-thumbnail-overlay.js.map +0 -1
  118. package/dist/cjs/components/fw-title-overlay.js +0 -72
  119. package/dist/cjs/components/fw-title-overlay.js.map +0 -1
  120. package/dist/cjs/components/fw-toast.js +0 -74
  121. package/dist/cjs/components/fw-toast.js.map +0 -1
  122. package/dist/cjs/components/fw-volume-control.js +0 -276
  123. package/dist/cjs/components/fw-volume-control.js.map +0 -1
  124. package/dist/cjs/components/shared/hitmarker-audio.js +0 -76
  125. package/dist/cjs/components/shared/hitmarker-audio.js.map +0 -1
  126. package/dist/cjs/constants/media-assets.js +0 -11
  127. package/dist/cjs/constants/media-assets.js.map +0 -1
  128. package/dist/cjs/controllers/player-controller-host.js +0 -364
  129. package/dist/cjs/controllers/player-controller-host.js.map +0 -1
  130. package/dist/cjs/define.js +0 -53
  131. package/dist/cjs/define.js.map +0 -1
  132. package/dist/cjs/icons/index.js +0 -180
  133. package/dist/cjs/icons/index.js.map +0 -1
  134. package/dist/cjs/index.js +0 -108
  135. package/dist/cjs/index.js.map +0 -1
  136. package/dist/cjs/node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js +0 -33
  137. package/dist/cjs/node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js.map +0 -1
  138. package/dist/cjs/styles/shared-styles.js +0 -1985
  139. package/dist/cjs/styles/shared-styles.js.map +0 -1
  140. package/dist/cjs/styles/utility-styles.js +0 -725
  141. package/dist/cjs/styles/utility-styles.js.map +0 -1
@@ -1,217 +0,0 @@
1
- 'use strict';
2
-
3
- var tslib_es6 = require('../node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js');
4
- var lit = require('lit');
5
- var decorators_js = require('lit/decorators.js');
6
- var styleMap_js = require('lit/directives/style-map.js');
7
-
8
- const DEFAULT_STYLE = {
9
- fontSize: "1.5rem",
10
- fontFamily: "system-ui, -apple-system, sans-serif",
11
- color: "white",
12
- backgroundColor: "rgba(0, 0, 0, 0.75)",
13
- textShadow: "2px 2px 4px rgba(0, 0, 0, 0.5)",
14
- bottom: "5%",
15
- maxWidth: "90%",
16
- padding: "0.5em 1em",
17
- borderRadius: "4px",
18
- };
19
- exports.FwSubtitleRenderer = class FwSubtitleRenderer extends lit.LitElement {
20
- constructor() {
21
- super(...arguments);
22
- this.currentTime = 0;
23
- this.enabled = true;
24
- this.cues = [];
25
- this.className = "";
26
- this._liveCues = [];
27
- this._displayedText = "";
28
- this._unsubscribe = null;
29
- this._handleMetaEvent = (event) => {
30
- if (event.type !== "subtitle") {
31
- return;
32
- }
33
- const cue = this._parseSubtitleCue(event.data);
34
- if (!cue) {
35
- return;
36
- }
37
- this._liveCues = (() => {
38
- const existing = this._liveCues.find((value) => value.id === cue.id);
39
- if (existing) {
40
- return this._liveCues;
41
- }
42
- return [...this._liveCues, cue].slice(-50);
43
- })();
44
- };
45
- }
46
- disconnectedCallback() {
47
- super.disconnectedCallback();
48
- this._teardownSubscription();
49
- }
50
- updated(changed) {
51
- if (changed.has("enabled") ||
52
- changed.has("subscribeToMetaTrack") ||
53
- changed.has("metaTrackId")) {
54
- this._syncSubscription();
55
- }
56
- if (changed.has("currentTime") || changed.has("_liveCues")) {
57
- this._pruneExpiredLiveCues();
58
- }
59
- if (changed.has("enabled") ||
60
- changed.has("currentTime") ||
61
- changed.has("cues") ||
62
- changed.has("_liveCues")) {
63
- this._syncDisplayedCue();
64
- }
65
- }
66
- _syncSubscription() {
67
- this._teardownSubscription();
68
- if (!this.enabled || !this.subscribeToMetaTrack || !this.metaTrackId) {
69
- return;
70
- }
71
- this._unsubscribe = this.subscribeToMetaTrack(this.metaTrackId, this._handleMetaEvent);
72
- }
73
- _teardownSubscription() {
74
- if (this._unsubscribe) {
75
- this._unsubscribe();
76
- this._unsubscribe = null;
77
- }
78
- }
79
- _parseSubtitleCue(data) {
80
- if (typeof data !== "object" || data === null) {
81
- return null;
82
- }
83
- const obj = data;
84
- const text = typeof obj.text === "string" ? obj.text : String(obj.text ?? "");
85
- if (!text) {
86
- return null;
87
- }
88
- const rawStart = "startTime" in obj ? Number(obj.startTime) : "start" in obj ? Number(obj.start) : 0;
89
- const rawEnd = "endTime" in obj ? Number(obj.endTime) : "end" in obj ? Number(obj.end) : Infinity;
90
- const startTime = Number.isFinite(rawStart) ? rawStart : 0;
91
- const endTime = Number.isFinite(rawEnd) ? rawEnd : Infinity;
92
- const id = typeof obj.id === "string" ? obj.id : String(Date.now() + Math.random());
93
- return {
94
- id,
95
- text,
96
- startTime,
97
- endTime,
98
- lang: typeof obj.lang === "string" ? obj.lang : undefined,
99
- };
100
- }
101
- _getAllCues() {
102
- return [...(this.cues ?? []), ...this._liveCues];
103
- }
104
- _syncDisplayedCue() {
105
- if (!this.enabled) {
106
- if (this._displayedText) {
107
- this._displayedText = "";
108
- }
109
- return;
110
- }
111
- const currentTimeMs = this.currentTime * 1000;
112
- const activeCue = this._getAllCues().find((cue) => currentTimeMs >= cue.startTime && currentTimeMs < cue.endTime);
113
- const nextText = activeCue?.text ?? "";
114
- if (nextText !== this._displayedText) {
115
- this._displayedText = nextText;
116
- }
117
- }
118
- _pruneExpiredLiveCues() {
119
- if (this._liveCues.length === 0) {
120
- return;
121
- }
122
- const currentTimeMs = this.currentTime * 1000;
123
- const filtered = this._liveCues.filter((cue) => {
124
- const endTime = cue.endTime === Infinity ? cue.startTime + 10000 : cue.endTime;
125
- return endTime >= currentTimeMs - 30000;
126
- });
127
- if (filtered.length !== this._liveCues.length) {
128
- this._liveCues = filtered;
129
- }
130
- }
131
- render() {
132
- if (!this.enabled || !this._displayedText) {
133
- return lit.nothing;
134
- }
135
- const mergedStyle = {
136
- ...DEFAULT_STYLE,
137
- ...(this.subtitleStyle ?? {}),
138
- };
139
- return lit.html `
140
- <div
141
- class="subtitle-container ${this.className}"
142
- style=${styleMap_js.styleMap({
143
- bottom: mergedStyle.bottom,
144
- maxWidth: mergedStyle.maxWidth,
145
- })}
146
- role="region"
147
- aria-live="polite"
148
- aria-label="Subtitles"
149
- >
150
- <span
151
- class="subtitle-text"
152
- style=${styleMap_js.styleMap({
153
- fontSize: mergedStyle.fontSize,
154
- fontFamily: mergedStyle.fontFamily,
155
- color: mergedStyle.color,
156
- backgroundColor: mergedStyle.backgroundColor,
157
- textShadow: mergedStyle.textShadow,
158
- padding: mergedStyle.padding,
159
- borderRadius: mergedStyle.borderRadius,
160
- })}
161
- >
162
- ${this._displayedText}
163
- </span>
164
- </div>
165
- `;
166
- }
167
- };
168
- exports.FwSubtitleRenderer.styles = lit.css `
169
- :host {
170
- display: contents;
171
- }
172
-
173
- .subtitle-container {
174
- position: absolute;
175
- left: 50%;
176
- transform: translateX(-50%);
177
- z-index: 30;
178
- text-align: center;
179
- pointer-events: none;
180
- }
181
-
182
- .subtitle-text {
183
- display: inline-block;
184
- white-space: pre-wrap;
185
- }
186
- `;
187
- tslib_es6.__decorate([
188
- decorators_js.property({ type: Number })
189
- ], exports.FwSubtitleRenderer.prototype, "currentTime", void 0);
190
- tslib_es6.__decorate([
191
- decorators_js.property({ type: Boolean })
192
- ], exports.FwSubtitleRenderer.prototype, "enabled", void 0);
193
- tslib_es6.__decorate([
194
- decorators_js.property({ attribute: false })
195
- ], exports.FwSubtitleRenderer.prototype, "cues", void 0);
196
- tslib_es6.__decorate([
197
- decorators_js.property({ attribute: false })
198
- ], exports.FwSubtitleRenderer.prototype, "subscribeToMetaTrack", void 0);
199
- tslib_es6.__decorate([
200
- decorators_js.property({ type: String, attribute: "meta-track-id" })
201
- ], exports.FwSubtitleRenderer.prototype, "metaTrackId", void 0);
202
- tslib_es6.__decorate([
203
- decorators_js.property({ attribute: false })
204
- ], exports.FwSubtitleRenderer.prototype, "subtitleStyle", void 0);
205
- tslib_es6.__decorate([
206
- decorators_js.property({ type: String, attribute: "class-name" })
207
- ], exports.FwSubtitleRenderer.prototype, "className", void 0);
208
- tslib_es6.__decorate([
209
- decorators_js.state()
210
- ], exports.FwSubtitleRenderer.prototype, "_liveCues", void 0);
211
- tslib_es6.__decorate([
212
- decorators_js.state()
213
- ], exports.FwSubtitleRenderer.prototype, "_displayedText", void 0);
214
- exports.FwSubtitleRenderer = tslib_es6.__decorate([
215
- decorators_js.customElement("fw-subtitle-renderer")
216
- ], exports.FwSubtitleRenderer);
217
- //# sourceMappingURL=fw-subtitle-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fw-subtitle-renderer.js","sources":["../../../../src/components/fw-subtitle-renderer.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\n\ninterface SubtitleCue {\n id?: string;\n text: string;\n startTime: number;\n endTime: number;\n lang?: string;\n}\n\ninterface MetaTrackEvent {\n type: string;\n data: unknown;\n}\n\ninterface SubtitleStyle {\n fontSize?: string;\n fontFamily?: string;\n color?: string;\n backgroundColor?: string;\n textShadow?: string;\n bottom?: string;\n maxWidth?: string;\n padding?: string;\n borderRadius?: string;\n}\n\nconst DEFAULT_STYLE: Required<SubtitleStyle> = {\n fontSize: \"1.5rem\",\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n color: \"white\",\n backgroundColor: \"rgba(0, 0, 0, 0.75)\",\n textShadow: \"2px 2px 4px rgba(0, 0, 0, 0.5)\",\n bottom: \"5%\",\n maxWidth: \"90%\",\n padding: \"0.5em 1em\",\n borderRadius: \"4px\",\n};\n\n@customElement(\"fw-subtitle-renderer\")\nexport class FwSubtitleRenderer extends LitElement {\n @property({ type: Number }) currentTime = 0;\n @property({ type: Boolean }) enabled = true;\n @property({ attribute: false }) cues: SubtitleCue[] = [];\n @property({ attribute: false })\n subscribeToMetaTrack?: (trackId: string, callback: (event: MetaTrackEvent) => void) => () => void;\n @property({ type: String, attribute: \"meta-track-id\" }) metaTrackId?: string;\n @property({ attribute: false }) subtitleStyle?: SubtitleStyle;\n @property({ type: String, attribute: \"class-name\" }) className = \"\";\n\n @state() private _liveCues: SubtitleCue[] = [];\n @state() private _displayedText = \"\";\n\n private _unsubscribe: (() => void) | null = null;\n\n static styles = css`\n :host {\n display: contents;\n }\n\n .subtitle-container {\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n z-index: 30;\n text-align: center;\n pointer-events: none;\n }\n\n .subtitle-text {\n display: inline-block;\n white-space: pre-wrap;\n }\n `;\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this._teardownSubscription();\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (\n changed.has(\"enabled\") ||\n changed.has(\"subscribeToMetaTrack\") ||\n changed.has(\"metaTrackId\")\n ) {\n this._syncSubscription();\n }\n\n if (changed.has(\"currentTime\") || changed.has(\"_liveCues\")) {\n this._pruneExpiredLiveCues();\n }\n\n if (\n changed.has(\"enabled\") ||\n changed.has(\"currentTime\") ||\n changed.has(\"cues\") ||\n changed.has(\"_liveCues\")\n ) {\n this._syncDisplayedCue();\n }\n }\n\n private _syncSubscription(): void {\n this._teardownSubscription();\n\n if (!this.enabled || !this.subscribeToMetaTrack || !this.metaTrackId) {\n return;\n }\n\n this._unsubscribe = this.subscribeToMetaTrack(this.metaTrackId, this._handleMetaEvent);\n }\n\n private _teardownSubscription(): void {\n if (this._unsubscribe) {\n this._unsubscribe();\n this._unsubscribe = null;\n }\n }\n\n private _handleMetaEvent = (event: MetaTrackEvent): void => {\n if (event.type !== \"subtitle\") {\n return;\n }\n\n const cue = this._parseSubtitleCue(event.data);\n if (!cue) {\n return;\n }\n\n this._liveCues = (() => {\n const existing = this._liveCues.find((value) => value.id === cue.id);\n if (existing) {\n return this._liveCues;\n }\n return [...this._liveCues, cue].slice(-50);\n })();\n };\n\n private _parseSubtitleCue(data: unknown): SubtitleCue | null {\n if (typeof data !== \"object\" || data === null) {\n return null;\n }\n\n const obj = data as Record<string, unknown>;\n const text = typeof obj.text === \"string\" ? obj.text : String(obj.text ?? \"\");\n if (!text) {\n return null;\n }\n\n const rawStart =\n \"startTime\" in obj ? Number(obj.startTime) : \"start\" in obj ? Number(obj.start) : 0;\n const rawEnd =\n \"endTime\" in obj ? Number(obj.endTime) : \"end\" in obj ? Number(obj.end) : Infinity;\n const startTime = Number.isFinite(rawStart) ? rawStart : 0;\n const endTime = Number.isFinite(rawEnd) ? rawEnd : Infinity;\n const id = typeof obj.id === \"string\" ? obj.id : String(Date.now() + Math.random());\n\n return {\n id,\n text,\n startTime,\n endTime,\n lang: typeof obj.lang === \"string\" ? obj.lang : undefined,\n };\n }\n\n private _getAllCues(): SubtitleCue[] {\n return [...(this.cues ?? []), ...this._liveCues];\n }\n\n private _syncDisplayedCue(): void {\n if (!this.enabled) {\n if (this._displayedText) {\n this._displayedText = \"\";\n }\n return;\n }\n\n const currentTimeMs = this.currentTime * 1000;\n const activeCue = this._getAllCues().find(\n (cue) => currentTimeMs >= cue.startTime && currentTimeMs < cue.endTime\n );\n const nextText = activeCue?.text ?? \"\";\n\n if (nextText !== this._displayedText) {\n this._displayedText = nextText;\n }\n }\n\n private _pruneExpiredLiveCues(): void {\n if (this._liveCues.length === 0) {\n return;\n }\n\n const currentTimeMs = this.currentTime * 1000;\n const filtered = this._liveCues.filter((cue) => {\n const endTime = cue.endTime === Infinity ? cue.startTime + 10000 : cue.endTime;\n return endTime >= currentTimeMs - 30000;\n });\n\n if (filtered.length !== this._liveCues.length) {\n this._liveCues = filtered;\n }\n }\n\n protected render() {\n if (!this.enabled || !this._displayedText) {\n return nothing;\n }\n\n const mergedStyle: Required<SubtitleStyle> = {\n ...DEFAULT_STYLE,\n ...(this.subtitleStyle ?? {}),\n };\n\n return html`\n <div\n class=\"subtitle-container ${this.className}\"\n style=${styleMap({\n bottom: mergedStyle.bottom,\n maxWidth: mergedStyle.maxWidth,\n })}\n role=\"region\"\n aria-live=\"polite\"\n aria-label=\"Subtitles\"\n >\n <span\n class=\"subtitle-text\"\n style=${styleMap({\n fontSize: mergedStyle.fontSize,\n fontFamily: mergedStyle.fontFamily,\n color: mergedStyle.color,\n backgroundColor: mergedStyle.backgroundColor,\n textShadow: mergedStyle.textShadow,\n padding: mergedStyle.padding,\n borderRadius: mergedStyle.borderRadius,\n })}\n >\n ${this._displayedText}\n </span>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"fw-subtitle-renderer\": FwSubtitleRenderer;\n }\n}\n"],"names":["FwSubtitleRenderer","LitElement","nothing","html","styleMap","css","__decorate","property","state","customElement"],"mappings":"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"}
@@ -1,161 +0,0 @@
1
- 'use strict';
2
-
3
- var tslib_es6 = require('../node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js');
4
- var lit = require('lit');
5
- var decorators_js = require('lit/decorators.js');
6
- var classMap_js = require('lit/directives/class-map.js');
7
- var styleMap_js = require('lit/directives/style-map.js');
8
- var sharedStyles = require('../styles/shared-styles.js');
9
- var utilityStyles = require('../styles/utility-styles.js');
10
-
11
- exports.FwThumbnailOverlay = class FwThumbnailOverlay extends lit.LitElement {
12
- constructor() {
13
- super(...arguments);
14
- this.thumbnailUrl = null;
15
- this.message = null;
16
- this.showUnmuteMessage = false;
17
- this.className = "";
18
- this._handlePlay = (event) => {
19
- event.stopPropagation();
20
- if (this.onPlay) {
21
- this.onPlay();
22
- return;
23
- }
24
- this.dispatchEvent(new CustomEvent("fw-play", { bubbles: true, composed: true }));
25
- };
26
- this._handleKeyDown = (event) => {
27
- if (event.key !== "Enter" && event.key !== " ") {
28
- return;
29
- }
30
- event.preventDefault();
31
- this._handlePlay(event);
32
- };
33
- }
34
- render() {
35
- return lit.html `
36
- <div
37
- role="button"
38
- tabindex="0"
39
- @click=${this._handlePlay}
40
- @keydown=${this._handleKeyDown}
41
- class=${classMap_js.classMap({
42
- "fw-player-thumbnail": true,
43
- relative: true,
44
- flex: true,
45
- "h-full": true,
46
- "w-full": true,
47
- "min-h-\\[280px\\]": true,
48
- "items-center": true,
49
- "justify-center": true,
50
- "overflow-hidden": true,
51
- "rounded-xl": true,
52
- "bg-slate-950": true,
53
- "text-foreground": true,
54
- "outline-none": true,
55
- transition: true,
56
- "focus-visible\\:ring-2": true,
57
- "focus-visible\\:ring-primary": true,
58
- "focus-visible\\:ring-offset-2": true,
59
- "focus-visible\\:ring-offset-background": true,
60
- [this.className]: this.className.length > 0,
61
- })}
62
- >
63
- ${this.thumbnailUrl
64
- ? lit.html `<div
65
- class="absolute inset-0 bg-cover bg-center"
66
- style=${styleMap_js.styleMap({ backgroundImage: `url(${this.thumbnailUrl})` })}
67
- ></div>`
68
- : lit.nothing}
69
-
70
- <div
71
- class=${classMap_js.classMap({
72
- absolute: true,
73
- "inset-0": true,
74
- "bg-slate-950\\/70": !!this.thumbnailUrl,
75
- "bg-gradient-to-br": !this.thumbnailUrl,
76
- "from-slate-900": !this.thumbnailUrl,
77
- "via-slate-950": !this.thumbnailUrl,
78
- "to-slate-900": !this.thumbnailUrl,
79
- })}
80
- ></div>
81
-
82
- <div
83
- class="relative z-10 flex max-w-[320px] flex-col items-center gap-4 px-6 text-center text-sm sm:gap-6"
84
- >
85
- ${this.showUnmuteMessage
86
- ? lit.html `
87
- <div
88
- class="w-full rounded-lg border border-white/15 bg-black/80 p-4 text-sm text-white shadow-lg backdrop-blur"
89
- >
90
- <div
91
- class="mb-1 flex items-center justify-center gap-2 text-base font-semibold text-primary"
92
- >
93
- <span aria-hidden="true">MUTED</span>
94
- <span>Click to unmute</span>
95
- </div>
96
- <p class="text-xs text-white/80">
97
- Stream is playing muted - tap to enable sound.
98
- </p>
99
- </div>
100
- `
101
- : lit.html `
102
- <button
103
- type="button"
104
- class="h-20 w-20 rounded-full bg-primary/90 text-primary-foreground shadow-lg shadow-primary/40 transition hover:bg-primary focus-visible:bg-primary flex items-center justify-center"
105
- aria-label="Play stream"
106
- >
107
- <svg
108
- viewBox="0 0 24 24"
109
- fill="currentColor"
110
- class="ml-0.5 h-8 w-8"
111
- aria-hidden="true"
112
- >
113
- <path d="M8 5v14l11-7z"></path>
114
- </svg>
115
- </button>
116
- <div
117
- class="w-full rounded-lg border border-white/10 bg-black/70 p-5 text-white shadow-inner backdrop-blur"
118
- >
119
- <p class="text-base font-semibold text-primary">
120
- ${this.message ?? "Click to play"}
121
- </p>
122
- <p class="mt-1 text-xs text-white/70">
123
- ${this.message ? "Start streaming instantly" : "Jump into the live feed"}
124
- </p>
125
- </div>
126
- `}
127
- </div>
128
- </div>
129
- `;
130
- }
131
- };
132
- exports.FwThumbnailOverlay.styles = [
133
- sharedStyles.sharedStyles,
134
- utilityStyles.utilityStyles,
135
- lit.css `
136
- :host {
137
- display: block;
138
- width: 100%;
139
- height: 100%;
140
- }
141
- `,
142
- ];
143
- tslib_es6.__decorate([
144
- decorators_js.property({ type: String, attribute: "thumbnail-url" })
145
- ], exports.FwThumbnailOverlay.prototype, "thumbnailUrl", void 0);
146
- tslib_es6.__decorate([
147
- decorators_js.property({ type: String })
148
- ], exports.FwThumbnailOverlay.prototype, "message", void 0);
149
- tslib_es6.__decorate([
150
- decorators_js.property({ type: Boolean, attribute: "show-unmute-message" })
151
- ], exports.FwThumbnailOverlay.prototype, "showUnmuteMessage", void 0);
152
- tslib_es6.__decorate([
153
- decorators_js.property({ attribute: false })
154
- ], exports.FwThumbnailOverlay.prototype, "onPlay", void 0);
155
- tslib_es6.__decorate([
156
- decorators_js.property({ type: String, attribute: "class-name" })
157
- ], exports.FwThumbnailOverlay.prototype, "className", void 0);
158
- exports.FwThumbnailOverlay = tslib_es6.__decorate([
159
- decorators_js.customElement("fw-thumbnail-overlay")
160
- ], exports.FwThumbnailOverlay);
161
- //# sourceMappingURL=fw-thumbnail-overlay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fw-thumbnail-overlay.js","sources":["../../../../src/components/fw-thumbnail-overlay.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { sharedStyles } from \"../styles/shared-styles.js\";\nimport { utilityStyles } from \"../styles/utility-styles.js\";\n\n@customElement(\"fw-thumbnail-overlay\")\nexport class FwThumbnailOverlay extends LitElement {\n @property({ type: String, attribute: \"thumbnail-url\" }) thumbnailUrl: string | null = null;\n @property({ type: String }) message: string | null = null;\n @property({ type: Boolean, attribute: \"show-unmute-message\" }) showUnmuteMessage = false;\n @property({ attribute: false }) onPlay?: () => void;\n @property({ type: String, attribute: \"class-name\" }) className = \"\";\n\n static styles = [\n sharedStyles,\n utilityStyles,\n css`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n ];\n\n private _handlePlay = (event: Event) => {\n event.stopPropagation();\n if (this.onPlay) {\n this.onPlay();\n return;\n }\n this.dispatchEvent(new CustomEvent(\"fw-play\", { bubbles: true, composed: true }));\n };\n\n private _handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Enter\" && event.key !== \" \") {\n return;\n }\n event.preventDefault();\n this._handlePlay(event);\n };\n\n protected render() {\n return html`\n <div\n role=\"button\"\n tabindex=\"0\"\n @click=${this._handlePlay}\n @keydown=${this._handleKeyDown}\n class=${classMap({\n \"fw-player-thumbnail\": true,\n relative: true,\n flex: true,\n \"h-full\": true,\n \"w-full\": true,\n \"min-h-\\\\[280px\\\\]\": true,\n \"items-center\": true,\n \"justify-center\": true,\n \"overflow-hidden\": true,\n \"rounded-xl\": true,\n \"bg-slate-950\": true,\n \"text-foreground\": true,\n \"outline-none\": true,\n transition: true,\n \"focus-visible\\\\:ring-2\": true,\n \"focus-visible\\\\:ring-primary\": true,\n \"focus-visible\\\\:ring-offset-2\": true,\n \"focus-visible\\\\:ring-offset-background\": true,\n [this.className]: this.className.length > 0,\n })}\n >\n ${this.thumbnailUrl\n ? html`<div\n class=\"absolute inset-0 bg-cover bg-center\"\n style=${styleMap({ backgroundImage: `url(${this.thumbnailUrl})` })}\n ></div>`\n : nothing}\n\n <div\n class=${classMap({\n absolute: true,\n \"inset-0\": true,\n \"bg-slate-950\\\\/70\": !!this.thumbnailUrl,\n \"bg-gradient-to-br\": !this.thumbnailUrl,\n \"from-slate-900\": !this.thumbnailUrl,\n \"via-slate-950\": !this.thumbnailUrl,\n \"to-slate-900\": !this.thumbnailUrl,\n })}\n ></div>\n\n <div\n class=\"relative z-10 flex max-w-[320px] flex-col items-center gap-4 px-6 text-center text-sm sm:gap-6\"\n >\n ${this.showUnmuteMessage\n ? html`\n <div\n class=\"w-full rounded-lg border border-white/15 bg-black/80 p-4 text-sm text-white shadow-lg backdrop-blur\"\n >\n <div\n class=\"mb-1 flex items-center justify-center gap-2 text-base font-semibold text-primary\"\n >\n <span aria-hidden=\"true\">MUTED</span>\n <span>Click to unmute</span>\n </div>\n <p class=\"text-xs text-white/80\">\n Stream is playing muted - tap to enable sound.\n </p>\n </div>\n `\n : html`\n <button\n type=\"button\"\n class=\"h-20 w-20 rounded-full bg-primary/90 text-primary-foreground shadow-lg shadow-primary/40 transition hover:bg-primary focus-visible:bg-primary flex items-center justify-center\"\n aria-label=\"Play stream\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n class=\"ml-0.5 h-8 w-8\"\n aria-hidden=\"true\"\n >\n <path d=\"M8 5v14l11-7z\"></path>\n </svg>\n </button>\n <div\n class=\"w-full rounded-lg border border-white/10 bg-black/70 p-5 text-white shadow-inner backdrop-blur\"\n >\n <p class=\"text-base font-semibold text-primary\">\n ${this.message ?? \"Click to play\"}\n </p>\n <p class=\"mt-1 text-xs text-white/70\">\n ${this.message ? \"Start streaming instantly\" : \"Jump into the live feed\"}\n </p>\n </div>\n `}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"fw-thumbnail-overlay\": FwThumbnailOverlay;\n }\n}\n"],"names":["FwThumbnailOverlay","LitElement","html","classMap","styleMap","nothing","sharedStyles","utilityStyles","css","__decorate","property","customElement"],"mappings":"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"}
@@ -1,72 +0,0 @@
1
- 'use strict';
2
-
3
- var tslib_es6 = require('../node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js');
4
- var lit = require('lit');
5
- var decorators_js = require('lit/decorators.js');
6
- var sharedStyles = require('../styles/shared-styles.js');
7
- var utilityStyles = require('../styles/utility-styles.js');
8
-
9
- exports.FwTitleOverlay = class FwTitleOverlay extends lit.LitElement {
10
- constructor() {
11
- super(...arguments);
12
- this.title = "";
13
- this.description = null;
14
- }
15
- render() {
16
- if (this.title === "" && !this.description)
17
- return lit.nothing;
18
- return lit.html `
19
- <div class="overlay fw-title-overlay">
20
- ${this.title ? lit.html `<div class="title">${this.title}</div>` : lit.nothing}
21
- ${this.description ? lit.html `<div class="desc">${this.description}</div>` : lit.nothing}
22
- </div>
23
- `;
24
- }
25
- };
26
- exports.FwTitleOverlay.styles = [
27
- sharedStyles.sharedStyles,
28
- utilityStyles.utilityStyles,
29
- lit.css `
30
- :host {
31
- display: contents;
32
- }
33
- .overlay {
34
- position: absolute;
35
- inset: 0 0 auto 0;
36
- padding: 1rem 1.25rem;
37
- background: linear-gradient(to bottom, rgb(0 0 0 / 0.7), rgb(0 0 0 / 0.4), transparent);
38
- pointer-events: none;
39
- transition: opacity 300ms ease;
40
- z-index: 10;
41
- }
42
- .title {
43
- font-size: 0.875rem;
44
- font-weight: 500;
45
- color: white;
46
- max-width: 80%;
47
- overflow: hidden;
48
- text-overflow: ellipsis;
49
- white-space: nowrap;
50
- }
51
- .desc {
52
- margin-top: 0.25rem;
53
- font-size: 0.75rem;
54
- color: rgb(255 255 255 / 0.7);
55
- max-width: 70%;
56
- display: -webkit-box;
57
- -webkit-line-clamp: 2;
58
- -webkit-box-orient: vertical;
59
- overflow: hidden;
60
- }
61
- `,
62
- ];
63
- tslib_es6.__decorate([
64
- decorators_js.property({ type: String })
65
- ], exports.FwTitleOverlay.prototype, "title", void 0);
66
- tslib_es6.__decorate([
67
- decorators_js.property({ type: String })
68
- ], exports.FwTitleOverlay.prototype, "description", void 0);
69
- exports.FwTitleOverlay = tslib_es6.__decorate([
70
- decorators_js.customElement("fw-title-overlay")
71
- ], exports.FwTitleOverlay);
72
- //# sourceMappingURL=fw-title-overlay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fw-title-overlay.js","sources":["../../../../src/components/fw-title-overlay.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { sharedStyles } from \"../styles/shared-styles.js\";\nimport { utilityStyles } from \"../styles/utility-styles.js\";\n\n@customElement(\"fw-title-overlay\")\nexport class FwTitleOverlay extends LitElement {\n @property({ type: String }) override title: string = \"\";\n @property({ type: String }) description: string | null = null;\n\n static styles = [\n sharedStyles,\n utilityStyles,\n css`\n :host {\n display: contents;\n }\n .overlay {\n position: absolute;\n inset: 0 0 auto 0;\n padding: 1rem 1.25rem;\n background: linear-gradient(to bottom, rgb(0 0 0 / 0.7), rgb(0 0 0 / 0.4), transparent);\n pointer-events: none;\n transition: opacity 300ms ease;\n z-index: 10;\n }\n .title {\n font-size: 0.875rem;\n font-weight: 500;\n color: white;\n max-width: 80%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .desc {\n margin-top: 0.25rem;\n font-size: 0.75rem;\n color: rgb(255 255 255 / 0.7);\n max-width: 70%;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n `,\n ];\n\n protected render() {\n if (this.title === \"\" && !this.description) return nothing;\n return html`\n <div class=\"overlay fw-title-overlay\">\n ${this.title ? html`<div class=\"title\">${this.title}</div>` : nothing}\n ${this.description ? html`<div class=\"desc\">${this.description}</div>` : nothing}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"fw-title-overlay\": FwTitleOverlay;\n }\n}\n"],"names":["FwTitleOverlay","LitElement","nothing","html","sharedStyles","utilityStyles","css","__decorate","property","customElement"],"mappings":";;;;;;;;AAMaA,sBAAc,GAApB,MAAM,cAAe,SAAQC,cAAU,CAAA;AAAvC,IAAA,WAAA,GAAA;;QACgC,IAAA,CAAA,KAAK,GAAW,EAAE;QAC3B,IAAA,CAAA,WAAW,GAAkB,IAAI;IAiD/D;IATY,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,YAAA,OAAOC,WAAO;AAC1D,QAAA,OAAOC,QAAI,CAAA;;AAEL,QAAA,EAAA,IAAI,CAAC,KAAK,GAAGA,QAAI,CAAA,CAAA,mBAAA,EAAsB,IAAI,CAAC,KAAK,CAAA,MAAA,CAAQ,GAAGD,WAAO;AACnE,QAAA,EAAA,IAAI,CAAC,WAAW,GAAGC,QAAI,CAAA,CAAA,kBAAA,EAAqB,IAAI,CAAC,WAAW,CAAA,MAAA,CAAQ,GAAGD,WAAO;;KAEnF;IACH;;AA9COF,sBAAA,CAAA,MAAM,GAAG;IACdI,yBAAY;IACZC,2BAAa;AACb,IAAAC,OAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCF,IAAA,CAAA;AACF,CApCY;AAHwBC,oBAAA,CAAA;AAApC,IAAAC,sBAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;AAA8B,CAAA,EAAAR,sBAAA,CAAA,SAAA,EAAA,OAAA,EAAA,MAAA,CAAA;AAC5BO,oBAAA,CAAA;AAA3B,IAAAC,sBAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;AAAoC,CAAA,EAAAR,sBAAA,CAAA,SAAA,EAAA,aAAA,EAAA,MAAA,CAAA;AAFnDA,sBAAc,GAAAO,oBAAA,CAAA;IAD1BE,2BAAa,CAAC,kBAAkB;AACpB,CAAA,EAAAT,sBAAc,CAmD1B;;"}
@@ -1,74 +0,0 @@
1
- 'use strict';
2
-
3
- var tslib_es6 = require('../node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js');
4
- var lit = require('lit');
5
- var decorators_js = require('lit/decorators.js');
6
- var index = require('../icons/index.js');
7
-
8
- exports.FwToast = class FwToast extends lit.LitElement {
9
- constructor() {
10
- super(...arguments);
11
- this.message = "";
12
- }
13
- render() {
14
- if (!this.message)
15
- return lit.nothing;
16
- return lit.html `
17
- <div class="toast">
18
- <span>${this.message}</span>
19
- <button type="button" @click=${this._dismiss} aria-label="Dismiss">${index.closeIcon()}</button>
20
- </div>
21
- `;
22
- }
23
- _dismiss() {
24
- this.dispatchEvent(new CustomEvent("fw-dismiss", { bubbles: true, composed: true }));
25
- }
26
- };
27
- exports.FwToast.styles = lit.css `
28
- :host {
29
- display: contents;
30
- }
31
- .toast {
32
- display: flex;
33
- align-items: center;
34
- gap: 0.5rem;
35
- border-radius: 0.5rem;
36
- border: 1px solid rgb(255 255 255 / 0.1);
37
- background: rgb(0 0 0 / 0.8);
38
- padding: 0.5rem 1rem;
39
- font-size: 0.875rem;
40
- color: white;
41
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1);
42
- backdrop-filter: blur(4px);
43
- animation: _fw-slide-up 200ms ease-out;
44
- }
45
- @keyframes _fw-slide-up {
46
- from {
47
- opacity: 0;
48
- transform: translateY(8px);
49
- }
50
- to {
51
- opacity: 1;
52
- transform: translateY(0);
53
- }
54
- }
55
- button {
56
- margin-left: 0.125rem;
57
- color: rgb(255 255 255 / 0.6);
58
- background: none;
59
- border: none;
60
- cursor: pointer;
61
- padding: 0;
62
- display: flex;
63
- }
64
- button:hover {
65
- color: white;
66
- }
67
- `;
68
- tslib_es6.__decorate([
69
- decorators_js.property({ type: String })
70
- ], exports.FwToast.prototype, "message", void 0);
71
- exports.FwToast = tslib_es6.__decorate([
72
- decorators_js.customElement("fw-toast")
73
- ], exports.FwToast);
74
- //# sourceMappingURL=fw-toast.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fw-toast.js","sources":["../../../../src/components/fw-toast.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { closeIcon } from \"../icons/index.js\";\n\n@customElement(\"fw-toast\")\nexport class FwToast extends LitElement {\n @property({ type: String }) message = \"\";\n\n static styles = css`\n :host {\n display: contents;\n }\n .toast {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n border-radius: 0.5rem;\n border: 1px solid rgb(255 255 255 / 0.1);\n background: rgb(0 0 0 / 0.8);\n padding: 0.5rem 1rem;\n font-size: 0.875rem;\n color: white;\n box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1);\n backdrop-filter: blur(4px);\n animation: _fw-slide-up 200ms ease-out;\n }\n @keyframes _fw-slide-up {\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n button {\n margin-left: 0.125rem;\n color: rgb(255 255 255 / 0.6);\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n display: flex;\n }\n button:hover {\n color: white;\n }\n `;\n\n protected render() {\n if (!this.message) return nothing;\n return html`\n <div class=\"toast\">\n <span>${this.message}</span>\n <button type=\"button\" @click=${this._dismiss} aria-label=\"Dismiss\">${closeIcon()}</button>\n </div>\n `;\n }\n\n private _dismiss() {\n this.dispatchEvent(new CustomEvent(\"fw-dismiss\", { bubbles: true, composed: true }));\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"fw-toast\": FwToast;\n }\n}\n"],"names":["FwToast","LitElement","nothing","html","closeIcon","css","__decorate","property","customElement"],"mappings":";;;;;;;AAKaA,eAAO,GAAb,MAAM,OAAQ,SAAQC,cAAU,CAAA;AAAhC,IAAA,WAAA,GAAA;;QACuB,IAAA,CAAA,OAAO,GAAG,EAAE;IAyD1C;IAbY,MAAM,GAAA;QACd,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAOC,WAAO;AACjC,QAAA,OAAOC,QAAI,CAAA;;AAEC,cAAA,EAAA,IAAI,CAAC,OAAO,CAAA;AACW,qCAAA,EAAA,IAAI,CAAC,QAAQ,CAAA,sBAAA,EAAyBC,eAAS,EAAE,CAAA;;KAEnF;IACH;IAEQ,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF;;AAtDOJ,eAAA,CAAA,MAAM,GAAGK,OAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwClB,EAAA,CAxCY;AAFeC,oBAAA,CAAA;AAA3B,IAAAC,sBAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;AAAe,CAAA,EAAAP,eAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAD9BA,eAAO,GAAAM,oBAAA,CAAA;IADnBE,2BAAa,CAAC,UAAU;AACZ,CAAA,EAAAR,eAAO,CA0DnB;;"}