hyperframes 0.8.101 → 0.8.103

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 (98) hide show
  1. package/dist/{add-M5KBSDPJ.js → add-7YNDDJZM.js} +5 -5
  2. package/dist/{asset-2NJUOCPI.js → asset-QQGUOKN7.js} +2 -2
  3. package/dist/{auth-423RKRS6.js → auth-ITO2U4DF.js} +1 -1
  4. package/dist/{autoUpdate-HCAC6VDI.js → autoUpdate-YA7T35TP.js} +2 -2
  5. package/dist/{backgroundChecks-JIDPHRJ2.js → backgroundChecks-C6JEBKPE.js} +3 -3
  6. package/dist/backgroundChecksWorker.js +3 -3
  7. package/dist/{beats-R6V7WZG4.js → beats-P6S6UEOR.js} +4 -4
  8. package/dist/{benchmark-3VGFAD46.js → benchmark-JIZAHWG4.js} +5 -5
  9. package/dist/{browser-5SLUGL46.js → browser-GFQ45FKN.js} +3 -3
  10. package/dist/{catalog-PNNGLZDM.js → catalog-RPJ3NWVH.js} +5 -5
  11. package/dist/{check-YPOAHNJC.js → check-BJU7NGBL.js} +12 -12
  12. package/dist/{checkBrowser-TNHECLLW.js → checkBrowser-OXJCECZI.js} +10 -10
  13. package/dist/{chunk-VAX7B75N.js → chunk-2DHH45NV.js} +1 -1
  14. package/dist/{chunk-YBDVWFXZ.js → chunk-2QRIIMGS.js} +3 -3
  15. package/dist/{chunk-WBAU2ZER.js → chunk-3XNY2WK4.js} +1 -1
  16. package/dist/{chunk-XL2CUGEG.js → chunk-7QGIB2E6.js} +5 -6
  17. package/dist/{chunk-HT4EXFB7.js → chunk-A4UUULN3.js} +3 -3
  18. package/dist/{chunk-QH3XIWBC.js → chunk-A5QSC7DM.js} +2 -2
  19. package/dist/{chunk-KT72ISZW.js → chunk-ASSVFGUL.js} +1 -1
  20. package/dist/{chunk-VOHOVOIF.js → chunk-CDLT2S5Y.js} +2 -2
  21. package/dist/{chunk-QKRI7R7S.js → chunk-E3JCMLAF.js} +1 -1
  22. package/dist/{chunk-MCABWC2G.js → chunk-E5HKS3CE.js} +1 -1
  23. package/dist/{chunk-VBTX4DPW.js → chunk-ELDDZYIJ.js} +1 -1
  24. package/dist/{chunk-Z5E4I37A.js → chunk-G4WCIV45.js} +2 -2
  25. package/dist/{chunk-YIVWMI2I.js → chunk-IHMR2L3L.js} +1 -1
  26. package/dist/{chunk-RCXGMESW.js → chunk-J5MQ3GPK.js} +2 -2
  27. package/dist/{chunk-CU67AYDW.js → chunk-P77GUHVY.js} +1 -1
  28. package/dist/{chunk-WV5HXMVM.js → chunk-PQL3VANN.js} +2 -2
  29. package/dist/{chunk-DQPLITE6.js → chunk-SFXDX5F6.js} +2 -2
  30. package/dist/{chunk-DXA3NT4O.js → chunk-VQOZ3JO6.js} +1 -1
  31. package/dist/{clean-G7NQCBM3.js → clean-FPXQNQQ2.js} +4 -4
  32. package/dist/cli.js +44 -44
  33. package/dist/{cloud-52R7HCW5.js → cloud-BFMMRGJL.js} +4 -4
  34. package/dist/{compare-CBQXDLWD.js → compare-IKBMRXHF.js} +7 -7
  35. package/dist/{component-7ALRLLD5.js → component-RN32W42O.js} +3 -3
  36. package/dist/{compositions-JDEN5OQG.js → compositions-O2WKG7BC.js} +5 -5
  37. package/dist/{delete-J4SAQYES.js → delete-EF2RARRV.js} +2 -2
  38. package/dist/{doctor-FMO7BK6A.js → doctor-L6CV6YXV.js} +3 -3
  39. package/dist/{events-7K4NY4PI.js → events-M76TNXYH.js} +2 -2
  40. package/dist/{events-TUTMBJQH.js → events-ZCO6M2G6.js} +3 -3
  41. package/dist/{feedback-5DZLRPOS.js → feedback-2ACKQBUF.js} +4 -4
  42. package/dist/{figma-SGQGEZ2E.js → figma-KZC2I2K7.js} +3 -3
  43. package/dist/fontLocalizeCli.js +1 -1
  44. package/dist/{get-XM6A2IAO.js → get-HSREOXQC.js} +2 -2
  45. package/dist/{grade-compare-EX2DWA6T.js → grade-compare-HN5IRGL5.js} +7 -7
  46. package/dist/{help-BYZET5LF.js → help-ACSFM5ZX.js} +1 -1
  47. package/dist/{history-KDMR56PG.js → history-THD5S55X.js} +6 -6
  48. package/dist/hyperframes-player.global.js +1 -1
  49. package/dist/{info-DWER3M4R.js → info-JGRSYW7U.js} +5 -5
  50. package/dist/{init-52NPEJD4.js → init-WULQFAB7.js} +6 -6
  51. package/dist/{inspect-D2SO6CR5.js → inspect-QPT6PESN.js} +9 -9
  52. package/dist/{keyframes-TYQUMARP.js → keyframes-MD5JHEQG.js} +6 -6
  53. package/dist/{layout-WPTFL7PL.js → layout-SAA5WUEQ.js} +9 -9
  54. package/dist/{lint-Y7XKAY6I.js → lint-3TPZORDF.js} +6 -6
  55. package/dist/{list-5IUCPJ5F.js → list-AURXVOVG.js} +2 -2
  56. package/dist/{login-TYGLKBKQ.js → login-GTLUEY2W.js} +4 -4
  57. package/dist/{media-treatment-R22MNQKD.js → media-treatment-5S22MP33.js} +5 -5
  58. package/dist/{motionShot-XRSPP3G6.js → motionShot-TGJGSYGV.js} +1 -1
  59. package/dist/{normalize-audio-VPDMEDFY.js → normalize-audio-JSYJFSDX.js} +4 -4
  60. package/dist/{play-PYPQ5BX5.js → play-HVM27UXW.js} +7 -7
  61. package/dist/{present-EGIEW2QS.js → present-UKH4JT6K.js} +7 -7
  62. package/dist/{preview-MOKQFMZS.js → preview-IJ27BKQK.js} +5 -5
  63. package/dist/{render-3DDDZIRS.js → render-7QYVDEZ3.js} +5 -5
  64. package/dist/{render-3UAZC5BG.js → render-Q4IVNLDA.js} +5 -5
  65. package/dist/{skills-KJATAPZG.js → skills-2UKBANDP.js} +5 -5
  66. package/dist/{skillsUpdateCheck-XSVUFHU4.js → skillsUpdateCheck-Z7D7NR3G.js} +3 -3
  67. package/dist/{snapshot-WFYVYTAY.js → snapshot-CJCGJCK2.js} +7 -7
  68. package/dist/{staticProjectServer-TEVGFDXU.js → staticProjectServer-QDLEH37G.js} +3 -3
  69. package/dist/studio/assets/{hyperframes-player-CFJLrHRF.js → hyperframes-player-DG795Hwu.js} +1 -1
  70. package/dist/studio/assets/{index-BBNVnnyH.js → index-BPJRf2X9.js} +119 -119
  71. package/dist/studio/assets/{index-CJOzbslX.js → index-BiEtDkae.js} +1 -1
  72. package/dist/studio/assets/{index-xB5O0hPw.css → index-CQN3M56N.css} +1 -1
  73. package/dist/studio/assets/{index-C33EDBL2.js → index-DuCZ3pQw.js} +1 -1
  74. package/dist/studio/{chunk-MTAVNAGW.js → chunk-46XP7J3B.js} +2 -2
  75. package/dist/studio/{chunk-S65AQH6M.js → chunk-DI4LCJHL.js} +3 -2
  76. package/dist/studio/chunk-DI4LCJHL.js.map +1 -0
  77. package/dist/studio/{chunk-7X4XRP3L.js → chunk-HIGHVWYD.js} +2 -2
  78. package/dist/studio/{domEditingLayers-NU6Z5QWA.js → domEditingLayers-AQBDFNUC.js} +3 -3
  79. package/dist/studio/index.d.ts +13 -3
  80. package/dist/studio/index.html +2 -2
  81. package/dist/studio/index.js +932 -850
  82. package/dist/studio/index.js.map +1 -1
  83. package/dist/studio/player.js +2 -2
  84. package/dist/studio/styles.css +1 -1
  85. package/dist/{studio-api-VNIEVFVL.js → studio-api-RMDM77U2.js} +1 -1
  86. package/dist/{studioServer-TX22I3X6.js → studioServer-DBBVNNRM.js} +5 -5
  87. package/dist/{telemetry-ICRURYFF.js → telemetry-36QQ3MV6.js} +3 -3
  88. package/dist/{timeline-4BYN4LEL.js → timeline-JFW5OBO4.js} +6 -6
  89. package/dist/{tokens-YKDAFFM6.js → tokens-A3UY3JEB.js} +2 -2
  90. package/dist/{transcribe-QRDNNU7W.js → transcribe-C3KOJRCZ.js} +3 -3
  91. package/dist/{updateCheck-BQ3MSJWJ.js → updateCheck-CM5G6C4C.js} +2 -2
  92. package/dist/{upgrade-3AGGX5TW.js → upgrade-BHLYQC6T.js} +2 -2
  93. package/dist/{validate-LHZX5HXO.js → validate-SKGTQ6MA.js} +6 -6
  94. package/package.json +1 -1
  95. package/dist/studio/chunk-S65AQH6M.js.map +0 -1
  96. /package/dist/studio/{chunk-MTAVNAGW.js.map → chunk-46XP7J3B.js.map} +0 -0
  97. /package/dist/studio/{chunk-7X4XRP3L.js.map → chunk-HIGHVWYD.js.map} +0 -0
  98. /package/dist/studio/{domEditingLayers-NU6Z5QWA.js.map → domEditingLayers-AQBDFNUC.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- import{n as Qi}from"./index-BBNVnnyH.js";/*!
1
+ import{n as Qi}from"./index-BPJRf2X9.js";/*!
2
2
  * Copyright (c) 2026-present, Vanilagy and contributors
3
3
  *
4
4
  * This Source Code Form is subject to the terms of the Mozilla Public
@@ -2,7 +2,7 @@ import {
2
2
  buildProjectApiPath,
3
3
  getSourceScopedSelectorIndex,
4
4
  withSelectorIndexPass
5
- } from "./chunk-S65AQH6M.js";
5
+ } from "./chunk-DI4LCJHL.js";
6
6
 
7
7
  // src/components/editor/probeSourceElement.ts
8
8
  async function probeSourceElement(projectId, sourceFile, target) {
@@ -1061,4 +1061,4 @@ export {
1061
1061
  readHfId,
1062
1062
  buildDomEditPatchTarget
1063
1063
  };
1064
- //# sourceMappingURL=chunk-MTAVNAGW.js.map
1064
+ //# sourceMappingURL=chunk-46XP7J3B.js.map
@@ -40,8 +40,9 @@ function getSourceScopedSelectorIndex(doc, el, selector, sourceFile, resolveSour
40
40
 
41
41
  // src/utils/projectRouting.ts
42
42
  var PROJECT_HASH_PREFIX = "#project/";
43
+ var WINDOWS_DRIVE_PREFIX = /^[a-z]:/i;
43
44
  function isValidProjectId(value) {
44
- return value.length > 0 && value !== "." && value !== ".." && !value.includes(":") && !value.includes("/") && !value.includes("\\") && !Array.from(value).some((char) => char.charCodeAt(0) < 32);
45
+ return value.length > 0 && value !== "." && value !== ".." && !WINDOWS_DRIVE_PREFIX.test(value) && !value.includes("/") && !value.includes("\\") && !Array.from(value).some((char) => char.charCodeAt(0) < 32);
45
46
  }
46
47
  function decodeHashProjectId(value) {
47
48
  try {
@@ -98,4 +99,4 @@ export {
98
99
  withSelectorIndexPass,
99
100
  getSourceScopedSelectorIndex
100
101
  };
101
- //# sourceMappingURL=chunk-S65AQH6M.js.map
102
+ //# sourceMappingURL=chunk-DI4LCJHL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/sourceScopedSelectorIndex.ts","../src/utils/projectRouting.ts"],"sourcesContent":["/**\n * Occurrence index for a selector within its source document.\n *\n * The preview flattens multiple composition files into one DOM, so a raw\n * `querySelectorAll` index is not a stable source-file identity. Callers supply\n * their existing source resolver; this helper alone owns occurrence scoping.\n */\n\n/** Every element matching one selector, mapped to the source file it belongs to\n * and its occurrence index within that file. One document query fills it. */\ntype SelectorOccurrences = Map<Element, { scope: string; index: number }>;\n\ninterface SelectorIndexPass {\n doc: Document;\n bySelector: Map<string, SelectorOccurrences>;\n}\n\nlet activePass: SelectorIndexPass | null = null;\n\n/**\n * Share one occurrence index per selector across every\n * `getSourceScopedSelectorIndex` call made synchronously inside `run`.\n *\n * Unshared, each call runs its own whole-document `querySelectorAll(selector)`\n * and resolves the source file of every match. A rebuild that walks n elements\n * sharing a selector therefore does n whole-document queries and n² resolver\n * calls — a composition of repeated cards or tiles is exactly that shape. One\n * index per selector makes the same pass linear.\n *\n * Correctness rests on the pass being ONE synchronous walk of a document that\n * does not change under it: nothing invalidates the index, so `run` must not\n * mutate `doc`, and every call inside it must resolve source files the same way\n * (the resolver may be a fresh closure per call, as long as it answers the\n * same). Outside a pass the index is per-call, exactly as before.\n */\nexport function withSelectorIndexPass<T>(doc: Document, run: () => T): T {\n const previous = activePass;\n activePass = { doc, bySelector: new Map() };\n try {\n return run();\n } finally {\n activePass = previous;\n }\n}\n\nfunction buildOccurrences(\n doc: Document,\n selector: string,\n resolveSourceFile: (candidate: Element) => string | undefined,\n): SelectorOccurrences {\n const occurrences: SelectorOccurrences = new Map();\n const counts = new Map<string, number>();\n for (const candidate of doc.querySelectorAll(selector)) {\n const scope = resolveSourceFile(candidate) ?? \"index.html\";\n const index = counts.get(scope) ?? 0;\n counts.set(scope, index + 1);\n occurrences.set(candidate, { scope, index });\n }\n return occurrences;\n}\n\nexport function getSourceScopedSelectorIndex(\n doc: Document,\n el: Element,\n selector: string | undefined,\n sourceFile: string | undefined,\n resolveSourceFile: (candidate: Element) => string | undefined,\n): number | undefined {\n if (!selector || selector.startsWith(\"#\") || selector.startsWith(\"[data-composition-id=\")) {\n return undefined;\n }\n\n try {\n const pass = activePass?.doc === doc ? activePass : null;\n let occurrences = pass?.bySelector.get(selector);\n if (!occurrences) {\n occurrences = buildOccurrences(doc, selector, resolveSourceFile);\n pass?.bySelector.set(selector, occurrences);\n }\n // An element outside the requested scope is not in that scope's occurrence\n // run at all, which is the `indexOf` miss the filtered form returned before.\n const hit = occurrences.get(el);\n return hit && hit.scope === (sourceFile ?? \"index.html\") ? hit.index : undefined;\n } catch {\n return undefined;\n }\n}\n","const PROJECT_HASH_PREFIX = \"#project/\";\n\nexport interface ProjectHashRoute {\n projectId: string;\n params: URLSearchParams;\n}\n\nconst WINDOWS_DRIVE_PREFIX = /^[a-z]:/i;\n\n/** Project names are single path segments, including when received from a hash or server. */\nexport function isValidProjectId(value: string): boolean {\n return (\n value.length > 0 &&\n value !== \".\" &&\n value !== \"..\" &&\n !WINDOWS_DRIVE_PREFIX.test(value) &&\n !value.includes(\"/\") &&\n !value.includes(\"\\\\\") &&\n !Array.from(value).some((char) => char.charCodeAt(0) < 32)\n );\n}\n\nfunction decodeHashProjectId(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n\nfunction normalizeHashParams(\n params?: URLSearchParams | Record<string, string | null | undefined>,\n): URLSearchParams {\n if (!params) return new URLSearchParams();\n if (params instanceof URLSearchParams) return params;\n\n const next = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (!key || value == null || value === \"\") continue;\n next.set(key, value);\n }\n return next;\n}\n\nexport function encodeProjectId(projectId: string): string {\n if (!isValidProjectId(projectId)) throw new Error(\"Invalid project ID\");\n return encodeURIComponent(projectId);\n}\n\nexport function buildProjectHash(\n projectId: string,\n params?: URLSearchParams | Record<string, string | null | undefined>,\n): string {\n const search = normalizeHashParams(params).toString();\n return `${PROJECT_HASH_PREFIX}${encodeProjectId(projectId)}${search ? `?${search}` : \"\"}`;\n}\n\nexport function parseProjectHashRoute(hash: string): ProjectHashRoute | null {\n if (!hash.startsWith(PROJECT_HASH_PREFIX)) return null;\n\n const route = hash.slice(PROJECT_HASH_PREFIX.length);\n const queryIndex = route.indexOf(\"?\");\n const encodedProjectId = queryIndex >= 0 ? route.slice(0, queryIndex) : route;\n if (!encodedProjectId || encodedProjectId.includes(\"/\")) return null;\n\n const projectId = decodeHashProjectId(encodedProjectId);\n if (!isValidProjectId(projectId)) return null;\n\n const rawParams = queryIndex >= 0 ? route.slice(queryIndex + 1) : \"\";\n return {\n projectId,\n params: new URLSearchParams(rawParams),\n };\n}\n\nexport function parseProjectIdFromHash(hash: string): string | null {\n return parseProjectHashRoute(hash)?.projectId ?? null;\n}\n\nexport function buildProjectApiPath(projectId: string, suffix = \"\"): string {\n const normalizedSuffix = suffix && !suffix.startsWith(\"/\") ? `/${suffix}` : suffix;\n return `/api/projects/${encodeProjectId(projectId)}${normalizedSuffix}`;\n}\n"],"mappings":"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","names":[]}
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  buildProjectApiPath,
6
6
  getSourceScopedSelectorIndex
7
- } from "./chunk-S65AQH6M.js";
7
+ } from "./chunk-DI4LCJHL.js";
8
8
 
9
9
  // src/player/lib/time.ts
10
10
  var STUDIO_PREVIEW_FPS = 30;
@@ -1890,4 +1890,4 @@ export {
1890
1890
  whenPreviewBooted,
1891
1891
  Player
1892
1892
  };
1893
- //# sourceMappingURL=chunk-7X4XRP3L.js.map
1893
+ //# sourceMappingURL=chunk-HIGHVWYD.js.map
@@ -20,8 +20,8 @@ import {
20
20
  resolveDomEditCapabilities,
21
21
  resolveDomEditSelection,
22
22
  serializeDomEditTextFields
23
- } from "./chunk-MTAVNAGW.js";
24
- import "./chunk-S65AQH6M.js";
23
+ } from "./chunk-46XP7J3B.js";
24
+ import "./chunk-DI4LCJHL.js";
25
25
  import "./chunk-PZ5AY32C.js";
26
26
  export {
27
27
  buildDefaultDomEditTextField,
@@ -46,4 +46,4 @@ export {
46
46
  resolveDomEditSelection,
47
47
  serializeDomEditTextFields
48
48
  };
49
- //# sourceMappingURL=domEditingLayers-NU6Z5QWA.js.map
49
+ //# sourceMappingURL=domEditingLayers-AQBDFNUC.js.map
@@ -3089,7 +3089,7 @@ declare function useDomEditSession({ projectId, activeCompPath, compIdToSrc, cap
3089
3089
  getGsapAnimationsForSelection: (selection: DomEditSelection) => _hyperframes_parsers.GsapAnimation[] | Promise<_hyperframes_parsers.GsapAnimation[]>;
3090
3090
  handleAskAgent: () => void;
3091
3091
  handleAgentModalSubmit: (userInstruction: string) => Promise<void>;
3092
- handleBlockedDomMove: (selection: DomEditSelection) => void;
3092
+ handleBlockedDomMove: (selection: DomEditSelection, reason?: string) => void;
3093
3093
  handleDomManualDragStart: () => void;
3094
3094
  handleDomEditElementDelete: (selection: DomEditSelection, options?: {
3095
3095
  expandGroup?: boolean;
@@ -3450,7 +3450,7 @@ interface DomEditOverlayProps {
3450
3450
  revealPanel?: boolean;
3451
3451
  additive?: boolean;
3452
3452
  }) => void;
3453
- onBlockedMove: (selection: DomEditSelection) => void;
3453
+ onBlockedMove: (selection: DomEditSelection, reason?: string) => void;
3454
3454
  onManualDragStart?: () => void;
3455
3455
  onPathOffsetCommit: (selection: DomEditSelection, next: {
3456
3456
  x: number;
@@ -3504,6 +3504,16 @@ interface ConnectedDomEditOverlayProps extends HostInputProps {
3504
3504
  }
3505
3505
  declare function ConnectedDomEditOverlay({ activeCompositionPath, showHoverSelection, shouldShowSelectedDomBounds, isGestureRecording, canvasInput, allowBodyDrag, onTextEditingChange, onSelectionBoxClick, }: ConnectedDomEditOverlayProps): react_jsx_runtime.JSX.Element;
3506
3506
 
3507
+ interface DomEditZOrder {
3508
+ /** False in a read-only preview, for an element no longer in the live preview, or at that end of its stacking set. */
3509
+ enabled: (sel: DomEditSelection, action: ZOrderAction) => boolean;
3510
+ /** Resolve and commit one step; false when nothing is sent to be saved. */
3511
+ apply: (sel: DomEditSelection, action: ZOrderAction) => boolean;
3512
+ /** Commit patches already resolved (the canvas menu resolves its own); false when none could be sent to be saved. */
3513
+ commit: (sel: DomEditSelection, patches: ReadonlyArray<ZOrderPatch>, action: ZOrderAction, crossed: HTMLElement | null) => boolean;
3514
+ }
3515
+ declare function useDomEditZOrder(): DomEditZOrder;
3516
+
3507
3517
  interface RecordEditInput {
3508
3518
  label: string;
3509
3519
  coalesceKey?: string;
@@ -3606,4 +3616,4 @@ interface MarqueeOverlayProps {
3606
3616
  */
3607
3617
  declare function MarqueeOverlay({ candidateRects, marqueeRect }: MarqueeOverlayProps): react_jsx_runtime.JSX.Element;
3608
3618
 
3609
- export { type AgentModalAnchorPoint, type AgentPromptElementInfo, AskAgentModal, type AskAgentModalProps, AudioMeterStrip, type AudioMeterStripProps, AudioWaveform, type AudioWaveformProps, type BlockedTimelineEditIntent, type CanEditTimelineElement, CompositionBreadcrumb, type CompositionDimensions, type CompositionLevel, CompositionThumbnail, ConnectedDomEditOverlay, type ConnectedDomEditOverlayProps, DEFAULT_SHORTCUT_SECTIONS, Dock, type DockController, type DomEditCapabilities, type DomEditCommitDeclineReason, type DomEditCommitOutcome, type DomEditGroupPathOffsetCommit, DomEditOverlay, type DomEditOverlayProps, DomEditProvider, type DomEditSelection, type DomGeometryCommits, type EditHistoryHandle, EditorShell, type EditorShellProps, type ExternalFileChangeBlockedState, type ExternalFileChangeCoordinatorHandle, ExternalFileConflictBanner, type FfmpegStatus, FileTree, GridOverlay, ImageThumbnail, type ImageThumbnailProps, type MarqueeGestures, type MarqueeGesturesDeps, MarqueeOverlay, type MarqueeOverlayProps, type Rect$1 as MarqueeRect, NLEPreview, type PanelId, type PatchOperation, type PersistedRenderSettings, type PickedElement, PlayerControls, type PlayerHandle, type PlayerHandleElement, type PlayerHandleListener, type PlayerHandleTimeListener, type DomEditCompositionRect as PreviewCompositionRect, PreviewGuides, PreviewOverlayProvider, type PreviewOverlayProviderProps, PreviewReadOnlyProvider, type PreviewSnapPreferences, PropertyPanel, type RenderJob, RenderQueue, type RenderQueueProps, type ResolutionPreset, SNAP_THRESHOLD_PX, type ShortcutHint, type ShortcutSection, ShortcutsButton, type ShortcutsButtonProps, type SnapContext, type SnapEdge, type SnapGuide, SnapGuideOverlay, type SnapGuideOverlayProps, type SnapGuidesState, type Rect as SnapRect, type SnapResult, type SnapTarget, SnapToolbar, SourceEditor, type SpacingGuide, type StartRenderOptions, StudioApp, StudioFileConflictError, type StudioPendingEditsDrainResult, TRACK_H, type ThumbnailPriority, Timeline, TimelineClipMenu, type TimelineClipMenuItem, type TimelineClipRenderContext, type TimelineEditCallbacks, type TimelineEditOutcome, type TimelineEditPermission, TimelineEditPopover, TimelineEditProvider, type TimelineElement, TimelineEmptyStatePart, TimelineFrame, TimelineGapMenu, TimelineHistoryButtons, type TimelineHistoryButtonsProps, TimelineKeyframeMenu, TimelineLanes, TimelineOverlays, TimelinePane, type TimelinePaneProps, TimelinePlayhead, TimelineProvider, TimelineRazorGuide, TimelineRuler, TimelineShortcutHint, type TimelineTheme, type TimelineTimeRange$1 as TimelineTimeRange, TimelineToolbar, type TimelineToolbarProps, type TimelineTrackPadding, type TimelineZIndexReorderCommit, type UseClipboardOptions, type UseDomEditSessionParams, type UseDomGeometryCommitOptions, type UseDomStyleCommitOptions, type UseEditHistoryActionsOptions, type UsePersistentEditHistoryOptions, type UsePreviewPersistenceParams, type UseProjectFileWriterOptions, type UseRenderClipContentOptions, type UseTimelineEditingOptions, VideoThumbnail, applyPatch, buildCompositionSnapTarget, buildGridSnapEdges, buildPickerAgentContextPreview, buildPickerAgentPrompt, collectSnapContext, extractSnapTargets, findElementBlock, flushStudioPendingEdits, formatTime, getPersistedRenderSettings, liveTime, mergeStyleIntoTag, parseStyleString, persistRenderSettings, resolveDomEditSelection, resolveEquidistanceGuides, resolveGuideLineRect, resolveIframe, resolveSnapAdjustment, resolveSourceFile, snapEngagedForTravel, useClipboard, useCompositionStack, useDockLayoutStore, useDomEditSelectionContext, useDomEditSession, useDomGeometryCommit, useDomStyleCommit, useEditHistoryActions, useElementPicker, useMarqueeGestures, usePersistentEditHistory, usePlayerHandle, usePlayerStore, usePreviewCompositionRect, usePreviewGuidesStore, usePreviewOverlayContext, usePreviewPersistence, useProjectFileWriter, useRenderClipContent, useRenderQueue, useTimelineContext, useTimelineEditing, useTimelinePlayer };
3619
+ export { type AgentModalAnchorPoint, type AgentPromptElementInfo, AskAgentModal, type AskAgentModalProps, AudioMeterStrip, type AudioMeterStripProps, AudioWaveform, type AudioWaveformProps, type BlockedTimelineEditIntent, type CanEditTimelineElement, CompositionBreadcrumb, type CompositionDimensions, type CompositionLevel, CompositionThumbnail, ConnectedDomEditOverlay, type ConnectedDomEditOverlayProps, DEFAULT_SHORTCUT_SECTIONS, Dock, type DockController, type DomEditCapabilities, type DomEditCommitDeclineReason, type DomEditCommitOutcome, type DomEditGroupPathOffsetCommit, DomEditOverlay, type DomEditOverlayProps, DomEditProvider, type DomEditSelection, type DomEditZOrder, type DomGeometryCommits, type EditHistoryHandle, EditorShell, type EditorShellProps, type ExternalFileChangeBlockedState, type ExternalFileChangeCoordinatorHandle, ExternalFileConflictBanner, type FfmpegStatus, FileTree, GridOverlay, ImageThumbnail, type ImageThumbnailProps, type MarqueeGestures, type MarqueeGesturesDeps, MarqueeOverlay, type MarqueeOverlayProps, type Rect$1 as MarqueeRect, NLEPreview, type PanelId, type PatchOperation, type PersistedRenderSettings, type PickedElement, PlayerControls, type PlayerHandle, type PlayerHandleElement, type PlayerHandleListener, type PlayerHandleTimeListener, type DomEditCompositionRect as PreviewCompositionRect, PreviewGuides, PreviewOverlayProvider, type PreviewOverlayProviderProps, PreviewReadOnlyProvider, type PreviewSnapPreferences, PropertyPanel, type RenderJob, RenderQueue, type RenderQueueProps, type ResolutionPreset, SNAP_THRESHOLD_PX, type ShortcutHint, type ShortcutSection, ShortcutsButton, type ShortcutsButtonProps, type SnapContext, type SnapEdge, type SnapGuide, SnapGuideOverlay, type SnapGuideOverlayProps, type SnapGuidesState, type Rect as SnapRect, type SnapResult, type SnapTarget, SnapToolbar, SourceEditor, type SpacingGuide, type StartRenderOptions, StudioApp, StudioFileConflictError, type StudioPendingEditsDrainResult, TRACK_H, type ThumbnailPriority, Timeline, TimelineClipMenu, type TimelineClipMenuItem, type TimelineClipRenderContext, type TimelineEditCallbacks, type TimelineEditOutcome, type TimelineEditPermission, TimelineEditPopover, TimelineEditProvider, type TimelineElement, TimelineEmptyStatePart, TimelineFrame, TimelineGapMenu, TimelineHistoryButtons, type TimelineHistoryButtonsProps, TimelineKeyframeMenu, TimelineLanes, TimelineOverlays, TimelinePane, type TimelinePaneProps, TimelinePlayhead, TimelineProvider, TimelineRazorGuide, TimelineRuler, TimelineShortcutHint, type TimelineTheme, type TimelineTimeRange$1 as TimelineTimeRange, TimelineToolbar, type TimelineToolbarProps, type TimelineTrackPadding, type TimelineZIndexReorderCommit, type UseClipboardOptions, type UseDomEditSessionParams, type UseDomGeometryCommitOptions, type UseDomStyleCommitOptions, type UseEditHistoryActionsOptions, type UsePersistentEditHistoryOptions, type UsePreviewPersistenceParams, type UseProjectFileWriterOptions, type UseRenderClipContentOptions, type UseTimelineEditingOptions, VideoThumbnail, type ZOrderAction, applyPatch, buildCompositionSnapTarget, buildGridSnapEdges, buildPickerAgentContextPreview, buildPickerAgentPrompt, collectSnapContext, extractSnapTargets, findElementBlock, flushStudioPendingEdits, formatTime, getPersistedRenderSettings, liveTime, mergeStyleIntoTag, parseStyleString, persistRenderSettings, resolveDomEditSelection, resolveEquidistanceGuides, resolveGuideLineRect, resolveIframe, resolveSnapAdjustment, resolveSourceFile, snapEngagedForTravel, useClipboard, useCompositionStack, useDockLayoutStore, useDomEditSelectionContext, useDomEditSession, useDomEditZOrder, useDomGeometryCommit, useDomStyleCommit, useEditHistoryActions, useElementPicker, useMarqueeGestures, usePersistentEditHistory, usePlayerHandle, usePlayerStore, usePreviewCompositionRect, usePreviewGuidesStore, usePreviewOverlayContext, usePreviewPersistence, useProjectFileWriter, useRenderClipContent, useRenderQueue, useTimelineContext, useTimelineEditing, useTimelinePlayer };
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
6
6
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
7
7
  <title>HyperFrames Studio</title>
8
- <script type="module" crossorigin src="/assets/index-BBNVnnyH.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-xB5O0hPw.css">
8
+ <script type="module" crossorigin src="/assets/index-BPJRf2X9.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-CQN3M56N.css">
10
10
  </head>
11
11
  <body>
12
12
  <div data-hf-id="hf-aph5" id="root"></div>