@meowdown/embed 0.1.0 → 0.3.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.
|
@@ -53,23 +53,6 @@ function isPromiseLike(value) {
|
|
|
53
53
|
return typeof value === "object" && value !== null && typeof value.then === "function";
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
//#endregion
|
|
57
|
-
//#region src/root.ts
|
|
58
|
-
/**
|
|
59
|
-
* The direct `<div data-root>` child that holds the rendered snapshot. Reused
|
|
60
|
-
* across updates so other children the host appended survive; created on
|
|
61
|
-
* first use.
|
|
62
|
-
*/
|
|
63
|
-
function getRootContainer(host) {
|
|
64
|
-
let container = host.querySelector(":scope > div[data-root]");
|
|
65
|
-
if (!container) {
|
|
66
|
-
container = host.ownerDocument.createElement("div");
|
|
67
|
-
container.dataset.root = "";
|
|
68
|
-
host.append(container);
|
|
69
|
-
}
|
|
70
|
-
return container;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
56
|
//#endregion
|
|
74
57
|
//#region src/safe-url.ts
|
|
75
58
|
function getSafeUrl(value, protocols) {
|
|
@@ -97,4 +80,27 @@ function renderLink(content, destination) {
|
|
|
97
80
|
}
|
|
98
81
|
|
|
99
82
|
//#endregion
|
|
100
|
-
|
|
83
|
+
//#region src/root.ts
|
|
84
|
+
/**
|
|
85
|
+
* The direct `<div data-root>` child that holds the rendered snapshot. Reused
|
|
86
|
+
* across updates so other children the host appended survive; created on
|
|
87
|
+
* first use.
|
|
88
|
+
*/
|
|
89
|
+
function getRootContainer(host) {
|
|
90
|
+
let container = host.querySelector(":scope > div[data-root]");
|
|
91
|
+
if (!container) {
|
|
92
|
+
container = host.ownerDocument.createElement("div");
|
|
93
|
+
container.dataset.root = "";
|
|
94
|
+
host.append(container);
|
|
95
|
+
}
|
|
96
|
+
return container;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
//#endregion
|
|
100
|
+
//#region src/is-plain-click.ts
|
|
101
|
+
function isPlainClick(event) {
|
|
102
|
+
return event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
//#endregion
|
|
106
|
+
export { useFetch as a, getSafeUrl as i, getRootContainer as n, renderLink as r, isPlainClick as t };
|
package/dist/x/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as useFetch, i as getSafeUrl, n as getRootContainer, r as renderLink, t as isPlainClick } from "../is-plain-click-QDpLdFP7.js";
|
|
2
2
|
import { defineCustomElement, defineProps, registerCustomElement, useEffect } from "@aria-ui/core";
|
|
3
3
|
import { parseXPost, parseXPostId } from "@post-embed/schema";
|
|
4
4
|
import el from "crelt";
|
|
@@ -121,9 +121,6 @@ function renderError(permalink) {
|
|
|
121
121
|
hidden: true
|
|
122
122
|
}, "Media could not be loaded. ", renderLink("View on X", permalink));
|
|
123
123
|
}
|
|
124
|
-
function isPlainClick(event) {
|
|
125
|
-
return event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;
|
|
126
|
-
}
|
|
127
124
|
function renderPhoto(media, error, onClick) {
|
|
128
125
|
const image = el("img", {
|
|
129
126
|
src: media.url,
|
|
@@ -262,14 +259,14 @@ function renderDate(post) {
|
|
|
262
259
|
|
|
263
260
|
//#endregion
|
|
264
261
|
//#region src/x/render-post.ts
|
|
265
|
-
function renderBody(post
|
|
262
|
+
function renderBody(post) {
|
|
266
263
|
const permalink = getPermalink(post);
|
|
267
264
|
return el("p", {
|
|
268
265
|
"data-body": "",
|
|
269
266
|
dir: "auto",
|
|
270
267
|
lang: post.lang || void 0
|
|
271
268
|
}, el("span", { "data-text": "" }, post.body.map((segment) => {
|
|
272
|
-
return segment.type === "link" ? renderLink(segment.text, segment.url) : segment.text.split(
|
|
269
|
+
return segment.type === "link" ? renderLink(segment.text, segment.url) : segment.text.split("\n").map((line, index) => {
|
|
273
270
|
return [index ? el("br", {}) : void 0, line];
|
|
274
271
|
});
|
|
275
272
|
})), post.truncated && permalink ? [" ", renderLink("Show more", permalink)] : void 0);
|
|
@@ -282,12 +279,12 @@ function renderQuoted(post, protocols) {
|
|
|
282
279
|
return el("article", {
|
|
283
280
|
"data-quoted": "",
|
|
284
281
|
"aria-label": "Quoted post"
|
|
285
|
-
}, renderAuthor(post.author, protocols, renderDate(post)), renderBody(post
|
|
282
|
+
}, renderAuthor(post.author, protocols, renderDate(post)), renderBody(post), renderMedia(post.media, protocols, getPermalink(post)), renderEdit(post));
|
|
286
283
|
}
|
|
287
284
|
function renderPost(post, protocols = null) {
|
|
288
285
|
const reply = post.replyTo;
|
|
289
286
|
const replyUrl = reply && /^\w{1,15}$/.test(reply.handle) && /^\d+$/.test(reply.id) ? `https://x.com/${reply.handle}/status/${reply.id}` : void 0;
|
|
290
|
-
return el("article", {}, renderAuthor(post.author, protocols, renderDate(post)), reply ? el("div", { "data-reply-to": "" }, renderLink(`Replying to @${reply.handle}`, replyUrl)) : void 0, renderBody(post), renderMedia(post.media, protocols, getPermalink(post)), post.quote ? renderQuoted(post.quote, protocols) : void 0, renderEdit(post));
|
|
287
|
+
return el("article", {}, el("div", { "data-content": "" }, renderAuthor(post.author, protocols, renderDate(post)), reply ? el("div", { "data-reply-to": "" }, renderLink(`Replying to @${reply.handle}`, replyUrl)) : void 0, renderBody(post), renderMedia(post.media, protocols, getPermalink(post)), post.quote ? renderQuoted(post.quote, protocols) : void 0, renderEdit(post)), el("details", { "data-show-more": "" }, el("summary", {})));
|
|
291
288
|
}
|
|
292
289
|
|
|
293
290
|
//#endregion
|
|
@@ -305,17 +302,18 @@ function useXPost(host, props) {
|
|
|
305
302
|
const url = props.url.get();
|
|
306
303
|
const value = result && !result.issues ? result.value : void 0;
|
|
307
304
|
const valid = value && (props.data.get() != null || !url || parseXPostId(url) === value.id);
|
|
308
|
-
container.replaceChildren(valid ? renderPost(value, protocols) : renderFallback(pending.get()));
|
|
305
|
+
container.replaceChildren(valid ? renderPost(value, protocols) : renderFallback(pending.get(), url));
|
|
309
306
|
return () => {
|
|
310
307
|
for (const video of container.querySelectorAll("video")) video.pause();
|
|
311
308
|
};
|
|
312
309
|
});
|
|
313
310
|
}
|
|
314
|
-
function renderFallback(pending) {
|
|
311
|
+
function renderFallback(pending, url) {
|
|
312
|
+
const permalink = url != null && parseXPostId(url) ? url : void 0;
|
|
315
313
|
return el("article", pending ? {
|
|
316
314
|
"data-fallback": "",
|
|
317
315
|
"data-pending": ""
|
|
318
|
-
} : { "data-fallback": "" }, el("header", { "data-author": "" }, el("bdi", {}, "X post")), el("p", { "data-body": "" }, pending ? "Loading this post…" : "This post is unavailable."), pending ? null : el("footer", { "data-footer": "" }, "No saved post could be displayed."));
|
|
316
|
+
} : { "data-fallback": "" }, el("header", { "data-author": "" }, el("bdi", {}, "X post")), el("p", { "data-body": "" }, pending ? "Loading this post…" : "This post is unavailable."), pending ? null : el("footer", { "data-footer": "" }, permalink ? renderLink("View on X", permalink) : "No saved post could be displayed."));
|
|
319
317
|
}
|
|
320
318
|
const XPost = defineCustomElement(useXPost, defineProps({
|
|
321
319
|
data: {
|
package/dist/x/theme.css
CHANGED
|
@@ -33,6 +33,24 @@
|
|
|
33
33
|
inherits: true;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
@property --meowdown-embed-max-height {
|
|
37
|
+
syntax: '*';
|
|
38
|
+
inherits: true;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@property --_overflowing {
|
|
42
|
+
syntax: '<integer>';
|
|
43
|
+
inherits: true;
|
|
44
|
+
initial-value: 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@keyframes meowdown-embed-overflowing {
|
|
48
|
+
from,
|
|
49
|
+
to {
|
|
50
|
+
--_overflowing: 1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
36
54
|
/*
|
|
37
55
|
* Hard reset. `all: revert` rolls every property on every box inside the card
|
|
38
56
|
* back to the user-agent default, so a host rule on `p`, `a`, `img`,
|
|
@@ -58,6 +76,7 @@
|
|
|
58
76
|
--_link: var(--meowdown-embed-link-color, #1d9bf0);
|
|
59
77
|
--_tint: color-mix(in srgb, currentColor 5%, transparent);
|
|
60
78
|
--_media-height: 7.5rem;
|
|
79
|
+
--_show-more-height: 2rem;
|
|
61
80
|
|
|
62
81
|
display: block;
|
|
63
82
|
/* As wide as the content, between 18rem and 28rem: a short text post stays
|
|
@@ -184,6 +203,111 @@
|
|
|
184
203
|
color: inherit;
|
|
185
204
|
}
|
|
186
205
|
|
|
206
|
+
/* Max height. The article is clipped to `--_body-limit`, the tallest
|
|
207
|
+
* article that keeps the card within `--meowdown-embed-max-height`. As a
|
|
208
|
+
* scroll container it has a scroll timeline only while the clip hides
|
|
209
|
+
* content, so the animation on that timeline sets `--_overflowing` exactly
|
|
210
|
+
* when the card is too tall. Then the article gives up one row, which the
|
|
211
|
+
* "Show more" toggle takes, so the whole card is exactly the limit. The
|
|
212
|
+
* toggle is anchored to the card's padding box, out of the article's clip.
|
|
213
|
+
* Browsers without scroll-driven animations show the whole card. */
|
|
214
|
+
& > article {
|
|
215
|
+
/* Room inside the clip for focus rings at the article's edges. */
|
|
216
|
+
--_clip-gutter: 4px;
|
|
217
|
+
--_body-limit: calc(
|
|
218
|
+
var(--meowdown-embed-max-height, 256px) - 2 * var(--meowdown-embed-padding, 1rem) - 2px + 2 *
|
|
219
|
+
var(--_clip-gutter)
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
& > article > [data-show-more] {
|
|
223
|
+
display: none;
|
|
224
|
+
}
|
|
225
|
+
& > article > [data-show-more] > summary {
|
|
226
|
+
display: block;
|
|
227
|
+
width: fit-content;
|
|
228
|
+
font-size: 0.9375em;
|
|
229
|
+
line-height: var(--_show-more-height);
|
|
230
|
+
color: var(--_link);
|
|
231
|
+
list-style: none;
|
|
232
|
+
cursor: pointer;
|
|
233
|
+
}
|
|
234
|
+
& > article > [data-show-more] > summary::-webkit-details-marker {
|
|
235
|
+
display: none;
|
|
236
|
+
}
|
|
237
|
+
& > article > [data-show-more] > summary::before {
|
|
238
|
+
content: 'Show more';
|
|
239
|
+
}
|
|
240
|
+
& > article > [data-show-more][open] > summary::before {
|
|
241
|
+
content: 'Show less';
|
|
242
|
+
}
|
|
243
|
+
& > article > [data-show-more] > summary:hover {
|
|
244
|
+
text-decoration: underline;
|
|
245
|
+
text-underline-offset: 0.15em;
|
|
246
|
+
}
|
|
247
|
+
& > article > [data-show-more] > summary:focus-visible {
|
|
248
|
+
outline: 2px solid var(--_link);
|
|
249
|
+
outline-offset: 2px;
|
|
250
|
+
border-radius: 4px;
|
|
251
|
+
}
|
|
252
|
+
@supports (animation-timeline: scroll()) {
|
|
253
|
+
& > article {
|
|
254
|
+
max-height: calc(var(--_body-limit) - var(--_overflowing) * var(--_show-more-height));
|
|
255
|
+
overflow: hidden;
|
|
256
|
+
padding: var(--_clip-gutter);
|
|
257
|
+
margin: calc(-1 * var(--_clip-gutter));
|
|
258
|
+
margin-block-end: calc(var(--_overflowing) * var(--_show-more-height) - var(--_clip-gutter));
|
|
259
|
+
animation: meowdown-embed-overflowing linear both;
|
|
260
|
+
animation-timeline: scroll(self);
|
|
261
|
+
}
|
|
262
|
+
/* Opened, or holding keyboard focus that the clip could hide. */
|
|
263
|
+
& > article:has(> [data-show-more][open]),
|
|
264
|
+
& > article:has(:focus-visible:not(summary)) {
|
|
265
|
+
max-height: none;
|
|
266
|
+
overflow: visible;
|
|
267
|
+
margin-block-end: calc(-1 * var(--_clip-gutter));
|
|
268
|
+
}
|
|
269
|
+
@container style(--_overflowing: 1) {
|
|
270
|
+
/* On the content, not the article: a mask on the article would also
|
|
271
|
+
* hide the toggle below it. */
|
|
272
|
+
& > article > [data-content] {
|
|
273
|
+
mask-image: linear-gradient(to bottom, #000 calc(100% - 3rem), transparent);
|
|
274
|
+
mask-size: 100%
|
|
275
|
+
calc(var(--_body-limit) - var(--_show-more-height) - 2 * var(--_clip-gutter));
|
|
276
|
+
mask-repeat: no-repeat;
|
|
277
|
+
}
|
|
278
|
+
& > article > [data-show-more] {
|
|
279
|
+
display: block;
|
|
280
|
+
position: absolute;
|
|
281
|
+
inset-inline-start: var(--meowdown-embed-padding, 1rem);
|
|
282
|
+
bottom: var(--meowdown-embed-padding, 1rem);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/* Opened, "Show less" sticks to the bottom of the scrollport until the
|
|
286
|
+
* card's end scrolls into view. */
|
|
287
|
+
& > article > [data-show-more][open] {
|
|
288
|
+
display: block;
|
|
289
|
+
position: sticky;
|
|
290
|
+
bottom: 0.75rem;
|
|
291
|
+
z-index: 1;
|
|
292
|
+
width: fit-content;
|
|
293
|
+
margin: 0.5rem auto 0;
|
|
294
|
+
}
|
|
295
|
+
& > article > [data-show-more][open] > summary {
|
|
296
|
+
padding: 0.375rem 0.875rem;
|
|
297
|
+
border: 1px solid var(--_hairline);
|
|
298
|
+
border-radius: 999px;
|
|
299
|
+
background: var(--meowdown-embed-background, Canvas);
|
|
300
|
+
box-shadow: 0 2px 8px rgb(0 0 0 / 12%);
|
|
301
|
+
font-size: 0.875em;
|
|
302
|
+
font-weight: 500;
|
|
303
|
+
line-height: normal;
|
|
304
|
+
}
|
|
305
|
+
& > article > [data-show-more][open] > summary:hover {
|
|
306
|
+
text-decoration: none;
|
|
307
|
+
background: color-mix(in srgb, var(--_link) 8%, var(--meowdown-embed-background, Canvas));
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
187
311
|
/* Body */
|
|
188
312
|
& [data-reply-to] {
|
|
189
313
|
display: block;
|
|
@@ -353,11 +477,6 @@
|
|
|
353
477
|
align-self: center;
|
|
354
478
|
}
|
|
355
479
|
& [data-quoted] [data-body] {
|
|
356
|
-
display: -webkit-box;
|
|
357
|
-
-webkit-box-orient: vertical;
|
|
358
|
-
-webkit-line-clamp: 3;
|
|
359
|
-
line-clamp: 3;
|
|
360
|
-
overflow: hidden;
|
|
361
480
|
margin-block-start: 0.25rem;
|
|
362
481
|
font-size: 0.9375em;
|
|
363
482
|
}
|
package/dist/youtube/index.d.ts
CHANGED
|
@@ -1,6 +1,34 @@
|
|
|
1
1
|
import { n as Resolver, t as FetchProps } from "../fetch-Djnul03u.js";
|
|
2
2
|
import { HostElement, State } from "@aria-ui/core";
|
|
3
3
|
import { YouTubeVideo } from "@post-embed/types";
|
|
4
|
+
//#region src/youtube/video-click.d.ts
|
|
5
|
+
export declare const YOUTUBE_VIDEO_CLICK = "meowdown-embed-youtube-click";
|
|
6
|
+
interface YouTubeVideoClickDetail {
|
|
7
|
+
/**
|
|
8
|
+
* The snapshot the card rendered.
|
|
9
|
+
*/
|
|
10
|
+
video: YouTubeVideo;
|
|
11
|
+
videoId: string;
|
|
12
|
+
/**
|
|
13
|
+
* Where playback starts, from the `t` or `start` parameter of the URL.
|
|
14
|
+
*/
|
|
15
|
+
startSeconds: number;
|
|
16
|
+
/**
|
|
17
|
+
* A Short, which plays in portrait.
|
|
18
|
+
*/
|
|
19
|
+
short: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* The player page for an `<iframe>`. It starts playing as soon as it loads.
|
|
22
|
+
*/
|
|
23
|
+
embedUrl: string;
|
|
24
|
+
/**
|
|
25
|
+
* The rendered thumbnail: the poster `<img>`, or the poster itself when the
|
|
26
|
+
* snapshot has no thumbnail.
|
|
27
|
+
*/
|
|
28
|
+
element: HTMLElement;
|
|
29
|
+
}
|
|
30
|
+
type YouTubeVideoClickEvent = CustomEvent<YouTubeVideoClickDetail>;
|
|
31
|
+
//#endregion
|
|
4
32
|
//#region src/youtube/youtube-video.d.ts
|
|
5
33
|
interface YouTubeVideoProps extends FetchProps<YouTubeVideo> {
|
|
6
34
|
/**
|
|
@@ -21,6 +49,9 @@ declare global {
|
|
|
21
49
|
interface HTMLElementTagNameMap {
|
|
22
50
|
'meowdown-embed-youtube': YouTubeVideoElement;
|
|
23
51
|
}
|
|
52
|
+
interface HTMLElementEventMap {
|
|
53
|
+
'meowdown-embed-youtube-click': YouTubeVideoClickEvent;
|
|
54
|
+
}
|
|
24
55
|
}
|
|
25
56
|
//#endregion
|
|
26
|
-
export type { Resolver, YouTubeVideoElement, YouTubeVideoProps };
|
|
57
|
+
export type { Resolver, YouTubeVideoClickDetail, YouTubeVideoClickEvent, YouTubeVideoElement, YouTubeVideoProps };
|
package/dist/youtube/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as useFetch, i as getSafeUrl, n as getRootContainer, r as renderLink, t as isPlainClick } from "../is-plain-click-QDpLdFP7.js";
|
|
2
2
|
import { defineCustomElement, defineProps, registerCustomElement, useEffect } from "@aria-ui/core";
|
|
3
3
|
import { parseYouTubeVideo } from "@post-embed/schema";
|
|
4
4
|
import el from "crelt";
|
|
@@ -56,6 +56,22 @@ function getEmbedUrl(ref) {
|
|
|
56
56
|
return `https://www.youtube-nocookie.com/embed/${ref.videoId}?${params}`;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
//#endregion
|
|
60
|
+
//#region src/youtube/video-click.ts
|
|
61
|
+
const YOUTUBE_VIDEO_CLICK = "meowdown-embed-youtube-click";
|
|
62
|
+
/**
|
|
63
|
+
* Returns false when a listener called `preventDefault()`: the host plays the
|
|
64
|
+
* video itself, so the card must not run its own default.
|
|
65
|
+
*/
|
|
66
|
+
function dispatchVideoClick(target, detail) {
|
|
67
|
+
return target.dispatchEvent(new CustomEvent(YOUTUBE_VIDEO_CLICK, {
|
|
68
|
+
detail,
|
|
69
|
+
bubbles: true,
|
|
70
|
+
cancelable: true,
|
|
71
|
+
composed: true
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
|
|
59
75
|
//#endregion
|
|
60
76
|
//#region src/youtube/render-video.ts
|
|
61
77
|
function renderFrame(ref, title) {
|
|
@@ -75,7 +91,7 @@ function renderVideo(video, ref, playback) {
|
|
|
75
91
|
target: "_blank",
|
|
76
92
|
rel: "noopener noreferrer"
|
|
77
93
|
};
|
|
78
|
-
const
|
|
94
|
+
const image = poster ? el("img", {
|
|
79
95
|
src: poster,
|
|
80
96
|
alt: "",
|
|
81
97
|
width: video.thumbnail_width || void 0,
|
|
@@ -83,10 +99,19 @@ function renderVideo(video, ref, playback) {
|
|
|
83
99
|
loading: "lazy",
|
|
84
100
|
decoding: "async",
|
|
85
101
|
referrerpolicy: "no-referrer"
|
|
86
|
-
}) : void 0
|
|
102
|
+
}) : void 0;
|
|
103
|
+
const posterContent = [image, el("span", {
|
|
87
104
|
"data-play": "",
|
|
88
105
|
"aria-hidden": "true"
|
|
89
106
|
})];
|
|
107
|
+
const onClick = (element) => {
|
|
108
|
+
return dispatchVideoClick(element, {
|
|
109
|
+
video,
|
|
110
|
+
...ref,
|
|
111
|
+
embedUrl: getEmbedUrl(ref),
|
|
112
|
+
element
|
|
113
|
+
});
|
|
114
|
+
};
|
|
90
115
|
let posterElement;
|
|
91
116
|
if (playback === "inline") {
|
|
92
117
|
const button = el("button", {
|
|
@@ -95,16 +120,23 @@ function renderVideo(video, ref, playback) {
|
|
|
95
120
|
"aria-label": `Play: ${title}`
|
|
96
121
|
}, posterContent);
|
|
97
122
|
button.addEventListener("click", () => {
|
|
123
|
+
if (!onClick(image ?? button)) return;
|
|
98
124
|
const frame = renderFrame(ref, title);
|
|
99
125
|
button.replaceWith(frame);
|
|
100
126
|
frame.focus();
|
|
101
127
|
});
|
|
102
128
|
posterElement = button;
|
|
103
|
-
} else
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
129
|
+
} else {
|
|
130
|
+
const link = el("a", {
|
|
131
|
+
"data-poster": "",
|
|
132
|
+
href: watchUrl,
|
|
133
|
+
...external
|
|
134
|
+
}, posterContent);
|
|
135
|
+
link.addEventListener("click", (event) => {
|
|
136
|
+
if (isPlainClick(event) && !onClick(image ?? link)) event.preventDefault();
|
|
137
|
+
});
|
|
138
|
+
posterElement = link;
|
|
139
|
+
}
|
|
108
140
|
return el("article", { "data-orientation": ref.short ? "portrait" : void 0 }, posterElement, el("div", { "data-details": "" }, el("a", {
|
|
109
141
|
"data-title": "",
|
|
110
142
|
href: watchUrl,
|
|
@@ -161,4 +193,4 @@ function registerYouTubeVideo(name = "meowdown-embed-youtube") {
|
|
|
161
193
|
}
|
|
162
194
|
|
|
163
195
|
//#endregion
|
|
164
|
-
export { registerYouTubeVideo, useYouTubeVideo };
|
|
196
|
+
export { YOUTUBE_VIDEO_CLICK, registerYouTubeVideo, useYouTubeVideo };
|