@hyperframes/core 0.8.108 → 0.8.109
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.
- package/dist/mediaLink.d.ts +43 -0
- package/dist/mediaLink.d.ts.map +1 -0
- package/dist/mediaLink.js +159 -0
- package/dist/mediaLink.js.map +1 -0
- package/package.json +8 -4
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linked clips: members sharing a `data-link` id are edited as one (a detached
|
|
3
|
+
* video + its audio). An editing contract only; playback and render ignore it.
|
|
4
|
+
*/
|
|
5
|
+
export declare const MEDIA_LINK_ATTR = "data-link";
|
|
6
|
+
interface AttributeReader {
|
|
7
|
+
getAttribute(name: string): string | null;
|
|
8
|
+
}
|
|
9
|
+
export interface LinkTiming {
|
|
10
|
+
start: number;
|
|
11
|
+
duration: number;
|
|
12
|
+
mediaStart: number;
|
|
13
|
+
playbackRate: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function readLinkTiming(el: AttributeReader): LinkTiming;
|
|
16
|
+
/** The timing fields (`start`, `duration`, `media-start`, `playback-rate`) on which members disagree. */
|
|
17
|
+
export declare function linkTimingMismatches(members: readonly AttributeReader[]): string[];
|
|
18
|
+
/** The composition a link group stays inside: the nearest inline composition or file host. */
|
|
19
|
+
export declare function linkScopeOf(el: Element): Element | null;
|
|
20
|
+
export declare function mintLinkId(taken: Iterable<string>): string;
|
|
21
|
+
/** Split right halves get a fresh link id; a sync origin is reminted only when video and audio were both cut. */
|
|
22
|
+
export declare function relinkSplitHalves(doc: Document, rightHalfIds: readonly string[]): void;
|
|
23
|
+
/** Shared by a detached or linked video + audio of one file; it survives Unlink so a drifted pair can resync. */
|
|
24
|
+
export declare const SYNC_ORIGIN_ATTR = "data-sync-origin";
|
|
25
|
+
export type SyncTiming = Pick<LinkTiming, "start" | "mediaStart" | "playbackRate">;
|
|
26
|
+
/** Where source time zero lands on the timeline: `start − mediaStart / rate`. */
|
|
27
|
+
export declare function sourceZeroTime(timing: SyncTiming): number;
|
|
28
|
+
/** Frames `clip` sits from `partner`, positive when it plays late; null when their rates differ. */
|
|
29
|
+
export declare function syncOffsetFrames(clip: SyncTiming, partner: SyncTiming, fps: number): number | null;
|
|
30
|
+
/** `+10`, `-1:21` (seconds:frames once past one second). */
|
|
31
|
+
export declare function formatSyncOffset(frames: number, fps: number): string;
|
|
32
|
+
/** Move into Sync: the start that puts `clip` back on `partner`, or null before zero. */
|
|
33
|
+
export declare function moveIntoSyncStart(clip: SyncTiming, partner: SyncTiming): number | null;
|
|
34
|
+
/** Slip into Sync: the media start that syncs `clip` in place, or null before the file's start. */
|
|
35
|
+
export declare function slipIntoSyncMediaStart(clip: SyncTiming, partner: SyncTiming): number | null;
|
|
36
|
+
interface PairableElement extends AttributeReader {
|
|
37
|
+
tagName: string;
|
|
38
|
+
closest(selectors: string): Element | null;
|
|
39
|
+
ownerDocument: Document;
|
|
40
|
+
}
|
|
41
|
+
export declare function findSyncPartner(el: PairableElement): Element | null;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=mediaLink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaLink.d.ts","sourceRoot":"","sources":["../src/mediaLink.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,eAAe,cAAc,CAAC;AAE3C,UAAU,eAAe;IACvB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAqBD,wBAAgB,cAAc,CAAC,EAAE,EAAE,eAAe,GAAG,UAAU,CAO9D;AAED,yGAAyG;AACzG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,EAAE,CAOlF;AAID,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAEvD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAK1D;AAiCD,iHAAiH;AACjH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAItF;AAiBD,iHAAiH;AACjH,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,YAAY,GAAG,cAAc,CAAC,CAAC;AAInF,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAEzD;AAED,oGAAoG;AACpG,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,UAAU,EACnB,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAIf;AAED,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAQpE;AAED,yFAAyF;AACzF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAGtF;AAED,mGAAmG;AACnG,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAG3F;AAED,UAAU,eAAgB,SAAQ,eAAe;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IAC3C,aAAa,EAAE,QAAQ,CAAC;CACzB;AAgBD,wBAAgB,eAAe,CAAC,EAAE,EAAE,eAAe,GAAG,OAAO,GAAG,IAAI,CAgBnE"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { readMediaOffsetSeconds } from "@hyperframes/parsers/media-duration";
|
|
2
|
+
/**
|
|
3
|
+
* Linked clips: members sharing a `data-link` id are edited as one (a detached
|
|
4
|
+
* video + its audio). An editing contract only; playback and render ignore it.
|
|
5
|
+
*/
|
|
6
|
+
export const MEDIA_LINK_ATTR = "data-link";
|
|
7
|
+
const LINK_TIMING_FIELDS = [
|
|
8
|
+
["start", "start"],
|
|
9
|
+
["duration", "duration"],
|
|
10
|
+
["mediaStart", "media-start"],
|
|
11
|
+
["playbackRate", "playback-rate"],
|
|
12
|
+
];
|
|
13
|
+
const SYNC_TOLERANCE_S = 1e-3;
|
|
14
|
+
function readNumber(el, names, fallback) {
|
|
15
|
+
for (const name of names) {
|
|
16
|
+
const raw = el.getAttribute(name);
|
|
17
|
+
if (raw === null || raw.trim() === "")
|
|
18
|
+
continue;
|
|
19
|
+
const value = Number(raw);
|
|
20
|
+
if (Number.isFinite(value))
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
return fallback;
|
|
24
|
+
}
|
|
25
|
+
export function readLinkTiming(el) {
|
|
26
|
+
return {
|
|
27
|
+
start: readNumber(el, ["data-start"], 0),
|
|
28
|
+
duration: readNumber(el, ["data-duration"], 0),
|
|
29
|
+
mediaStart: readMediaOffsetSeconds((name) => el.getAttribute(name)),
|
|
30
|
+
playbackRate: readNumber(el, ["data-playback-rate"], 1),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** The timing fields (`start`, `duration`, `media-start`, `playback-rate`) on which members disagree. */
|
|
34
|
+
export function linkTimingMismatches(members) {
|
|
35
|
+
const timings = members.map(readLinkTiming);
|
|
36
|
+
const first = timings[0];
|
|
37
|
+
if (!first)
|
|
38
|
+
return [];
|
|
39
|
+
return LINK_TIMING_FIELDS.filter(([key]) => timings.some((timing) => Math.abs(timing[key] - first[key]) > SYNC_TOLERANCE_S)).map(([, field]) => field);
|
|
40
|
+
}
|
|
41
|
+
const LINK_SCOPE_SELECTOR = "[data-composition-id], [data-composition-file]";
|
|
42
|
+
/** The composition a link group stays inside: the nearest inline composition or file host. */
|
|
43
|
+
export function linkScopeOf(el) {
|
|
44
|
+
return el.parentElement?.closest(LINK_SCOPE_SELECTOR) ?? null;
|
|
45
|
+
}
|
|
46
|
+
export function mintLinkId(taken) {
|
|
47
|
+
const used = new Set(taken);
|
|
48
|
+
let n = 1;
|
|
49
|
+
while (used.has(`lk-${n}`))
|
|
50
|
+
n += 1;
|
|
51
|
+
return `lk-${n}`;
|
|
52
|
+
}
|
|
53
|
+
function takenLinkIds(doc) {
|
|
54
|
+
return Array.from(doc.querySelectorAll(`[id], [${MEDIA_LINK_ATTR}], [${SYNC_ORIGIN_ATTR}]`)).flatMap((el) => [
|
|
55
|
+
el.id,
|
|
56
|
+
el.getAttribute(MEDIA_LINK_ATTR) ?? "",
|
|
57
|
+
el.getAttribute(SYNC_ORIGIN_ATTR) ?? "",
|
|
58
|
+
]);
|
|
59
|
+
}
|
|
60
|
+
function renameShared(doc, ids, attr, taken) {
|
|
61
|
+
const renamed = new Map();
|
|
62
|
+
for (const id of ids) {
|
|
63
|
+
const el = doc.getElementById(id);
|
|
64
|
+
const old = el?.getAttribute(attr);
|
|
65
|
+
if (!el || !old)
|
|
66
|
+
continue;
|
|
67
|
+
let fresh = renamed.get(old);
|
|
68
|
+
if (!fresh) {
|
|
69
|
+
fresh = mintLinkId(taken);
|
|
70
|
+
taken.add(fresh);
|
|
71
|
+
renamed.set(old, fresh);
|
|
72
|
+
}
|
|
73
|
+
el.setAttribute(attr, fresh);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** Split right halves get a fresh link id; a sync origin is reminted only when video and audio were both cut. */
|
|
77
|
+
export function relinkSplitHalves(doc, rightHalfIds) {
|
|
78
|
+
const taken = new Set(takenLinkIds(doc));
|
|
79
|
+
renameShared(doc, rightHalfIds, MEDIA_LINK_ATTR, taken);
|
|
80
|
+
renameShared(doc, idsWithBothSidesCut(doc, rightHalfIds), SYNC_ORIGIN_ATTR, taken);
|
|
81
|
+
}
|
|
82
|
+
function idsWithBothSidesCut(doc, rightHalfIds) {
|
|
83
|
+
const tagsByOrigin = new Map();
|
|
84
|
+
const originOf = (id) => doc.getElementById(id)?.getAttribute(SYNC_ORIGIN_ATTR) ?? null;
|
|
85
|
+
for (const id of rightHalfIds) {
|
|
86
|
+
const origin = originOf(id);
|
|
87
|
+
const tag = doc.getElementById(id)?.tagName.toLowerCase();
|
|
88
|
+
if (!origin || !tag)
|
|
89
|
+
continue;
|
|
90
|
+
tagsByOrigin.set(origin, (tagsByOrigin.get(origin) ?? new Set()).add(tag));
|
|
91
|
+
}
|
|
92
|
+
return rightHalfIds.filter((id) => {
|
|
93
|
+
const tags = tagsByOrigin.get(originOf(id) ?? "");
|
|
94
|
+
return tags?.has("video") === true && tags.has("audio");
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/** Shared by a detached or linked video + audio of one file; it survives Unlink so a drifted pair can resync. */
|
|
98
|
+
export const SYNC_ORIGIN_ATTR = "data-sync-origin";
|
|
99
|
+
const rateOf = (timing) => (timing.playbackRate > 0 ? timing.playbackRate : 1);
|
|
100
|
+
/** Where source time zero lands on the timeline: `start − mediaStart / rate`. */
|
|
101
|
+
export function sourceZeroTime(timing) {
|
|
102
|
+
return timing.start - timing.mediaStart / rateOf(timing);
|
|
103
|
+
}
|
|
104
|
+
/** Frames `clip` sits from `partner`, positive when it plays late; null when their rates differ. */
|
|
105
|
+
export function syncOffsetFrames(clip, partner, fps) {
|
|
106
|
+
if (Math.abs(rateOf(clip) - rateOf(partner)) > 1e-6)
|
|
107
|
+
return null;
|
|
108
|
+
const frames = Math.round((sourceZeroTime(clip) - sourceZeroTime(partner)) * fps);
|
|
109
|
+
return Object.is(frames, -0) ? 0 : frames;
|
|
110
|
+
}
|
|
111
|
+
/** `+10`, `-1:21` (seconds:frames once past one second). */
|
|
112
|
+
export function formatSyncOffset(frames, fps) {
|
|
113
|
+
const sign = frames < 0 ? "-" : "+";
|
|
114
|
+
const whole = Math.abs(frames);
|
|
115
|
+
const perSecond = Math.max(1, Math.round(fps));
|
|
116
|
+
if (whole < perSecond)
|
|
117
|
+
return `${sign}${whole}`;
|
|
118
|
+
const seconds = Math.floor(whole / perSecond);
|
|
119
|
+
const rest = String(whole % perSecond).padStart(2, "0");
|
|
120
|
+
return `${sign}${seconds}:${rest}`;
|
|
121
|
+
}
|
|
122
|
+
/** Move into Sync: the start that puts `clip` back on `partner`, or null before zero. */
|
|
123
|
+
export function moveIntoSyncStart(clip, partner) {
|
|
124
|
+
const start = clip.start - (sourceZeroTime(clip) - sourceZeroTime(partner));
|
|
125
|
+
return start >= -SYNC_TOLERANCE_S ? Math.max(0, start) : null;
|
|
126
|
+
}
|
|
127
|
+
/** Slip into Sync: the media start that syncs `clip` in place, or null before the file's start. */
|
|
128
|
+
export function slipIntoSyncMediaStart(clip, partner) {
|
|
129
|
+
const mediaStart = (clip.start - sourceZeroTime(partner)) * rateOf(clip);
|
|
130
|
+
return mediaStart >= -SYNC_TOLERANCE_S ? Math.max(0, mediaStart) : null;
|
|
131
|
+
}
|
|
132
|
+
function sharedSeconds(a, b) {
|
|
133
|
+
return Math.min(a.start + a.duration, b.start + b.duration) - Math.max(a.start, b.start);
|
|
134
|
+
}
|
|
135
|
+
/** `el`'s source partner (same sync origin, other tag): most shared timeline, then nearest start. */
|
|
136
|
+
function sameOriginInScope(el, tag, origin) {
|
|
137
|
+
const scopeOf = (node) => node.closest(LINK_SCOPE_SELECTOR) ?? el.ownerDocument;
|
|
138
|
+
const scope = scopeOf(el);
|
|
139
|
+
return Array.from(scope.querySelectorAll(tag)).filter((candidate) => candidate.getAttribute(SYNC_ORIGIN_ATTR) === origin && scopeOf(candidate) === scope);
|
|
140
|
+
}
|
|
141
|
+
export function findSyncPartner(el) {
|
|
142
|
+
const origin = el.getAttribute(SYNC_ORIGIN_ATTR);
|
|
143
|
+
const tag = el.tagName.toLowerCase();
|
|
144
|
+
if (!origin || (tag !== "video" && tag !== "audio"))
|
|
145
|
+
return null;
|
|
146
|
+
const partnerTag = tag === "video" ? "audio" : "video";
|
|
147
|
+
const own = readLinkTiming(el);
|
|
148
|
+
let best = null;
|
|
149
|
+
for (const candidate of sameOriginInScope(el, partnerTag, origin)) {
|
|
150
|
+
const timing = readLinkTiming(candidate);
|
|
151
|
+
const shared = sharedSeconds(own, timing);
|
|
152
|
+
const distance = Math.abs(timing.start - own.start);
|
|
153
|
+
if (!best || shared > best.shared || (shared === best.shared && distance < best.distance)) {
|
|
154
|
+
best = { el: candidate, shared, distance };
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return best?.el ?? null;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=mediaLink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaLink.js","sourceRoot":"","sources":["../src/mediaLink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAa3C,MAAM,kBAAkB,GAA8C;IACpE,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,YAAY,EAAE,aAAa,CAAC;IAC7B,CAAC,cAAc,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B,SAAS,UAAU,CAAC,EAAmB,EAAE,KAAe,EAAE,QAAgB;IACxE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,SAAS;QAChD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;IAC3C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAmB;IAChD,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC9C,UAAU,EAAE,sBAAsB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACnE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,oBAAoB,CAAC,OAAmC;IACtE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CACzC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAChF,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,mBAAmB,GAAG,gDAAgD,CAAC;AAE7E,8FAA8F;AAC9F,MAAM,UAAU,WAAW,CAAC,EAAW;IACrC,OAAO,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAuB;IAChD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAAE,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,EAAE,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,GAAa;IACjC,OAAO,KAAK,CAAC,IAAI,CACf,GAAG,CAAC,gBAAgB,CAAC,UAAU,eAAe,OAAO,gBAAgB,GAAG,CAAC,CAC1E,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;QAChB,EAAE,CAAC,EAAE;QACL,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE;QACtC,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,EAAE;KACxC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CACnB,GAAa,EACb,GAAsB,EACtB,IAAY,EACZ,KAAkB;IAElB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,EAAE,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG;YAAE,SAAS;QAC1B,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,iBAAiB,CAAC,GAAa,EAAE,YAA+B;IAC9E,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,YAAY,CAAC,GAAG,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;IACxD,YAAY,CAAC,GAAG,EAAE,mBAAmB,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAa,EAAE,YAA+B;IACzE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IACpD,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;IAChG,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG;YAAE,SAAS;QAC9B,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,iHAAiH;AACjH,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAInD,MAAM,MAAM,GAAG,CAAC,MAAkB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3F,iFAAiF;AACjF,MAAM,UAAU,cAAc,CAAC,MAAkB;IAC/C,OAAO,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,gBAAgB,CAC9B,IAAgB,EAChB,OAAmB,EACnB,GAAW;IAEX,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI;QAAE,OAAO,IAAI,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAClF,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5C,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,GAAW;IAC1D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,IAAI,KAAK,GAAG,SAAS;QAAE,OAAO,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,OAAO,GAAG,IAAI,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,iBAAiB,CAAC,IAAgB,EAAE,OAAmB;IACrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5E,OAAO,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,sBAAsB,CAAC,IAAgB,EAAE,OAAmB;IAC1E,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACzE,OAAO,UAAU,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AAQD,SAAS,aAAa,CAAC,CAAa,EAAE,CAAa;IACjD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AAC3F,CAAC;AAED,qGAAqG;AACrG,SAAS,iBAAiB,CAAC,EAAmB,EAAE,GAAW,EAAE,MAAc;IACzE,MAAM,OAAO,GAAG,CAAC,IAAqB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC;IACjG,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CACnD,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,KAAK,CACtF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAmB;IACjD,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,MAAM,UAAU,GAAG,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACvD,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IAC/B,IAAI,IAAI,GAA6D,IAAI,CAAC;IAC1E,KAAK,MAAM,SAAS,IAAI,iBAAiB,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1F,IAAI,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC;AAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hyperframes/core",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.109",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -150,6 +150,10 @@
|
|
|
150
150
|
"import": "./dist/audioCarve.js",
|
|
151
151
|
"types": "./dist/audioCarve.d.ts"
|
|
152
152
|
},
|
|
153
|
+
"./media-link": {
|
|
154
|
+
"import": "./dist/mediaLink.js",
|
|
155
|
+
"types": "./dist/mediaLink.d.ts"
|
|
156
|
+
},
|
|
153
157
|
"./audio-groups": {
|
|
154
158
|
"import": "./dist/audioGroups.js",
|
|
155
159
|
"types": "./dist/audioGroups.d.ts"
|
|
@@ -334,9 +338,9 @@
|
|
|
334
338
|
"bpm-detective": "^2.0.5",
|
|
335
339
|
"linkedom": "^0.18.12",
|
|
336
340
|
"postcss": "^8.5.8",
|
|
337
|
-
"@hyperframes/lint": "0.8.
|
|
338
|
-
"@hyperframes/
|
|
339
|
-
"@hyperframes/
|
|
341
|
+
"@hyperframes/lint": "0.8.109",
|
|
342
|
+
"@hyperframes/parsers": "0.8.109",
|
|
343
|
+
"@hyperframes/studio-server": "0.8.109"
|
|
340
344
|
},
|
|
341
345
|
"devDependencies": {
|
|
342
346
|
"@types/jsdom": "^28.0.0",
|