easecut-react 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +224 -0
  3. package/dist/.dist-D4zXwUWp.js +81 -0
  4. package/dist/assets/audio-waveform.worker-DiTI_wJb.js +353 -0
  5. package/dist/assets/fonts/alibaba-puhuiti-2-regular.woff2 +0 -0
  6. package/dist/assets/fonts/licenses/source-han-sans-OFL-1.1.txt +96 -0
  7. package/dist/assets/fonts/licenses/zcool-gaoduanhei-usage-statement.txt +52 -0
  8. package/dist/assets/fonts/source-han-sans-cn-regular.otf +0 -0
  9. package/dist/assets/fonts/zcool-canger-yuyang-w03.ttf +0 -0
  10. package/dist/assets/fonts/zcool-gaoduanhei.ttf +0 -0
  11. package/dist/assets/fonts/zcool-kuaile.ttf +0 -0
  12. package/dist/assets/fonts/zcool-kuhei.ttf +0 -0
  13. package/dist/assets/fonts/zcool-wenyi.ttf +0 -0
  14. package/dist/assets/fonts/zcool-xiaowei-logo.otf +0 -0
  15. package/dist/assets/frame-preview.worker-ruBHl77w.js +345 -0
  16. package/dist/assets/soundtouch-processor-BKTidsbT.js +2062 -0
  17. package/dist/index.js +10802 -0
  18. package/dist/styles.css +1 -0
  19. package/dist/types/editor/EaseCut.d.ts +4 -0
  20. package/dist/types/editor/EaseCut.d.ts.map +1 -0
  21. package/dist/types/editor/api/create-easecut-api.d.ts +12 -0
  22. package/dist/types/editor/api/create-easecut-api.d.ts.map +1 -0
  23. package/dist/types/editor/api/easecut-api-context.d.ts +12 -0
  24. package/dist/types/editor/api/easecut-api-context.d.ts.map +1 -0
  25. package/dist/types/editor/api/errors.d.ts +6 -0
  26. package/dist/types/editor/api/errors.d.ts.map +1 -0
  27. package/dist/types/editor/api/index.d.ts +3 -0
  28. package/dist/types/editor/api/index.d.ts.map +1 -0
  29. package/dist/types/editor/api/source-input.d.ts +7 -0
  30. package/dist/types/editor/api/source-input.d.ts.map +1 -0
  31. package/dist/types/editor/api/source-store.d.ts +16 -0
  32. package/dist/types/editor/api/source-store.d.ts.map +1 -0
  33. package/dist/types/editor/api/types.d.ts +78 -0
  34. package/dist/types/editor/api/types.d.ts.map +1 -0
  35. package/dist/types/editor/components/AudioFloatingInspector.d.ts +10 -0
  36. package/dist/types/editor/components/AudioFloatingInspector.d.ts.map +1 -0
  37. package/dist/types/editor/components/CanvasRatioPanel.d.ts +2 -0
  38. package/dist/types/editor/components/CanvasRatioPanel.d.ts.map +1 -0
  39. package/dist/types/editor/components/ExportMenu.d.ts +8 -0
  40. package/dist/types/editor/components/ExportMenu.d.ts.map +1 -0
  41. package/dist/types/editor/components/FloatingInspector.d.ts +11 -0
  42. package/dist/types/editor/components/FloatingInspector.d.ts.map +1 -0
  43. package/dist/types/editor/components/FloatingInspectorBasicPanel.d.ts +10 -0
  44. package/dist/types/editor/components/FloatingInspectorBasicPanel.d.ts.map +1 -0
  45. package/dist/types/editor/components/FloatingInspectorShell.d.ts +15 -0
  46. package/dist/types/editor/components/FloatingInspectorShell.d.ts.map +1 -0
  47. package/dist/types/editor/components/FloatingInspectorSpeedPanel.d.ts +7 -0
  48. package/dist/types/editor/components/FloatingInspectorSpeedPanel.d.ts.map +1 -0
  49. package/dist/types/editor/components/FormDialog.d.ts +16 -0
  50. package/dist/types/editor/components/FormDialog.d.ts.map +1 -0
  51. package/dist/types/editor/components/PreviewPanel.d.ts +9 -0
  52. package/dist/types/editor/components/PreviewPanel.d.ts.map +1 -0
  53. package/dist/types/editor/components/TextFloatingInspector.d.ts +12 -0
  54. package/dist/types/editor/components/TextFloatingInspector.d.ts.map +1 -0
  55. package/dist/types/editor/components/TimelineToolbar.d.ts +8 -0
  56. package/dist/types/editor/components/TimelineToolbar.d.ts.map +1 -0
  57. package/dist/types/editor/components/TitleContentTextarea.d.ts +8 -0
  58. package/dist/types/editor/components/TitleContentTextarea.d.ts.map +1 -0
  59. package/dist/types/editor/components/VideoFloatingInspector.d.ts +12 -0
  60. package/dist/types/editor/components/VideoFloatingInspector.d.ts.map +1 -0
  61. package/dist/types/editor/components/ui/ColorInput.d.ts +15 -0
  62. package/dist/types/editor/components/ui/ColorInput.d.ts.map +1 -0
  63. package/dist/types/editor/components/ui/IconButton.d.ts +15 -0
  64. package/dist/types/editor/components/ui/IconButton.d.ts.map +1 -0
  65. package/dist/types/editor/components/ui/InputNumber.d.ts +13 -0
  66. package/dist/types/editor/components/ui/InputNumber.d.ts.map +1 -0
  67. package/dist/types/editor/components/ui/Select.d.ts +14 -0
  68. package/dist/types/editor/components/ui/Select.d.ts.map +1 -0
  69. package/dist/types/editor/components/ui/TextInput.d.ts +10 -0
  70. package/dist/types/editor/components/ui/TextInput.d.ts.map +1 -0
  71. package/dist/types/editor/core/audio-waveform-bars.d.ts +50 -0
  72. package/dist/types/editor/core/audio-waveform-bars.d.ts.map +1 -0
  73. package/dist/types/editor/core/canvas-size.d.ts +44 -0
  74. package/dist/types/editor/core/canvas-size.d.ts.map +1 -0
  75. package/dist/types/editor/core/clip-speed.d.ts +11 -0
  76. package/dist/types/editor/core/clip-speed.d.ts.map +1 -0
  77. package/dist/types/editor/core/collision.d.ts +96 -0
  78. package/dist/types/editor/core/collision.d.ts.map +1 -0
  79. package/dist/types/editor/core/composition.d.ts +47 -0
  80. package/dist/types/editor/core/composition.d.ts.map +1 -0
  81. package/dist/types/editor/core/export-schema.d.ts +5 -0
  82. package/dist/types/editor/core/export-schema.d.ts.map +1 -0
  83. package/dist/types/editor/core/index.d.ts +11 -0
  84. package/dist/types/editor/core/index.d.ts.map +1 -0
  85. package/dist/types/editor/core/model.d.ts +187 -0
  86. package/dist/types/editor/core/model.d.ts.map +1 -0
  87. package/dist/types/editor/core/preview-snapping.d.ts +27 -0
  88. package/dist/types/editor/core/preview-snapping.d.ts.map +1 -0
  89. package/dist/types/editor/core/text-fonts.d.ts +76 -0
  90. package/dist/types/editor/core/text-fonts.d.ts.map +1 -0
  91. package/dist/types/editor/core/time.d.ts +15 -0
  92. package/dist/types/editor/core/time.d.ts.map +1 -0
  93. package/dist/types/editor/core/timeline-commands.d.ts +143 -0
  94. package/dist/types/editor/core/timeline-commands.d.ts.map +1 -0
  95. package/dist/types/editor/core/timeline-layout.d.ts +25 -0
  96. package/dist/types/editor/core/timeline-layout.d.ts.map +1 -0
  97. package/dist/types/editor/core/timeline-math.d.ts +22 -0
  98. package/dist/types/editor/core/timeline-math.d.ts.map +1 -0
  99. package/dist/types/editor/core/timeline-tracks.d.ts +47 -0
  100. package/dist/types/editor/core/timeline-tracks.d.ts.map +1 -0
  101. package/dist/types/editor/media/audio-waveform-peaks.d.ts +17 -0
  102. package/dist/types/editor/media/audio-waveform-peaks.d.ts.map +1 -0
  103. package/dist/types/editor/media/audio-waveform.d.ts +8 -0
  104. package/dist/types/editor/media/audio-waveform.d.ts.map +1 -0
  105. package/dist/types/editor/media/frame-preview.d.ts +25 -0
  106. package/dist/types/editor/media/frame-preview.d.ts.map +1 -0
  107. package/dist/types/editor/media/index.d.ts +6 -0
  108. package/dist/types/editor/media/index.d.ts.map +1 -0
  109. package/dist/types/editor/media/media-runtime.d.ts +47 -0
  110. package/dist/types/editor/media/media-runtime.d.ts.map +1 -0
  111. package/dist/types/editor/media/mediabunny-audio-waveform.d.ts +8 -0
  112. package/dist/types/editor/media/mediabunny-audio-waveform.d.ts.map +1 -0
  113. package/dist/types/editor/media/mediabunny-frame-preview.d.ts +21 -0
  114. package/dist/types/editor/media/mediabunny-frame-preview.d.ts.map +1 -0
  115. package/dist/types/editor/media/preview-audio-engine.d.ts +23 -0
  116. package/dist/types/editor/media/preview-audio-engine.d.ts.map +1 -0
  117. package/dist/types/editor/media/preview-playback-controller.d.ts +26 -0
  118. package/dist/types/editor/media/preview-playback-controller.d.ts.map +1 -0
  119. package/dist/types/editor/media/single-frame-preview.d.ts +30 -0
  120. package/dist/types/editor/media/single-frame-preview.d.ts.map +1 -0
  121. package/dist/types/editor/media/text-layout-runtime.d.ts +27 -0
  122. package/dist/types/editor/media/text-layout-runtime.d.ts.map +1 -0
  123. package/dist/types/editor/store/index.d.ts +3 -0
  124. package/dist/types/editor/store/index.d.ts.map +1 -0
  125. package/dist/types/editor/store/timeline-store-context.d.ts +14 -0
  126. package/dist/types/editor/store/timeline-store-context.d.ts.map +1 -0
  127. package/dist/types/editor/store/timeline-store.d.ts +115 -0
  128. package/dist/types/editor/store/timeline-store.d.ts.map +1 -0
  129. package/dist/types/editor/timeline/AudioWaveformCanvas.d.ts +13 -0
  130. package/dist/types/editor/timeline/AudioWaveformCanvas.d.ts.map +1 -0
  131. package/dist/types/editor/timeline/TimelineClip.d.ts +41 -0
  132. package/dist/types/editor/timeline/TimelineClip.d.ts.map +1 -0
  133. package/dist/types/editor/timeline/TimelineDragGhost.d.ts +9 -0
  134. package/dist/types/editor/timeline/TimelineDragGhost.d.ts.map +1 -0
  135. package/dist/types/editor/timeline/TimelinePanel.d.ts +11 -0
  136. package/dist/types/editor/timeline/TimelinePanel.d.ts.map +1 -0
  137. package/dist/types/editor/timeline/TimelineRuler.d.ts +14 -0
  138. package/dist/types/editor/timeline/TimelineRuler.d.ts.map +1 -0
  139. package/dist/types/editor/timeline/TimelineTrimHandle.d.ts +12 -0
  140. package/dist/types/editor/timeline/TimelineTrimHandle.d.ts.map +1 -0
  141. package/dist/types/editor/timeline/TimelineViewport.d.ts +8 -0
  142. package/dist/types/editor/timeline/TimelineViewport.d.ts.map +1 -0
  143. package/dist/types/editor/timeline/clip-reveal.d.ts +29 -0
  144. package/dist/types/editor/timeline/clip-reveal.d.ts.map +1 -0
  145. package/dist/types/editor/timeline/timeline-interaction.d.ts +79 -0
  146. package/dist/types/editor/timeline/timeline-interaction.d.ts.map +1 -0
  147. package/dist/types/editor/timeline/useTimelineController.d.ts +22 -0
  148. package/dist/types/editor/timeline/useTimelineController.d.ts.map +1 -0
  149. package/dist/types/editor/types.d.ts +52 -0
  150. package/dist/types/editor/types.d.ts.map +1 -0
  151. package/dist/types/editor/util/abort-error.d.ts +3 -0
  152. package/dist/types/editor/util/abort-error.d.ts.map +1 -0
  153. package/dist/types/editor/util/browser.d.ts +5 -0
  154. package/dist/types/editor/util/browser.d.ts.map +1 -0
  155. package/dist/types/editor/util/format-canvas-font.d.ts +7 -0
  156. package/dist/types/editor/util/format-canvas-font.d.ts.map +1 -0
  157. package/dist/types/editor/util/format-media-label.d.ts +4 -0
  158. package/dist/types/editor/util/format-media-label.d.ts.map +1 -0
  159. package/dist/types/editor/util/format-text-color.d.ts +4 -0
  160. package/dist/types/editor/util/format-text-color.d.ts.map +1 -0
  161. package/dist/types/editor/util/format-timeline-time.d.ts +6 -0
  162. package/dist/types/editor/util/format-timeline-time.d.ts.map +1 -0
  163. package/dist/types/editor/util/id.d.ts +2 -0
  164. package/dist/types/editor/util/id.d.ts.map +1 -0
  165. package/dist/types/editor/util/media-file-format.d.ts +6 -0
  166. package/dist/types/editor/util/media-file-format.d.ts.map +1 -0
  167. package/dist/types/editor/util/number.d.ts +6 -0
  168. package/dist/types/editor/util/number.d.ts.map +1 -0
  169. package/dist/types/editor/util/text.d.ts +2 -0
  170. package/dist/types/editor/util/text.d.ts.map +1 -0
  171. package/dist/types/editor/util/url.d.ts +5 -0
  172. package/dist/types/editor/util/url.d.ts.map +1 -0
  173. package/dist/types/editor/util/value.d.ts +3 -0
  174. package/dist/types/editor/util/value.d.ts.map +1 -0
  175. package/dist/types/editor/workers/audio-waveform-protocol.d.ts +24 -0
  176. package/dist/types/editor/workers/audio-waveform-protocol.d.ts.map +1 -0
  177. package/dist/types/editor/workers/audio-waveform.worker.d.ts +2 -0
  178. package/dist/types/editor/workers/audio-waveform.worker.d.ts.map +1 -0
  179. package/dist/types/editor/workers/frame-preview-protocol.d.ts +35 -0
  180. package/dist/types/editor/workers/frame-preview-protocol.d.ts.map +1 -0
  181. package/dist/types/editor/workers/frame-preview.worker.d.ts +2 -0
  182. package/dist/types/editor/workers/frame-preview.worker.d.ts.map +1 -0
  183. package/dist/types/index.d.ts +7 -0
  184. package/dist/types/index.d.ts.map +1 -0
  185. package/package.json +74 -0
@@ -0,0 +1 @@
1
+ @font-face{font-family:ZCOOL CangEr YuYang;src:url(./assets/fonts/zcool-canger-yuyang-w03.ttf)format("truetype");font-display:swap;font-style:normal;font-weight:400}@font-face{font-family:ZCOOL GaoDuanHei;src:url(./assets/fonts/zcool-gaoduanhei.ttf)format("truetype");font-display:swap;font-style:normal;font-weight:400}@font-face{font-family:ZCOOL KuHei;src:url(./assets/fonts/zcool-kuhei.ttf)format("truetype");font-display:swap;font-style:normal;font-weight:400}@font-face{font-family:ZCOOL KuaiLe;src:url(./assets/fonts/zcool-kuaile.ttf)format("truetype");font-display:swap;font-style:normal;font-weight:400}@font-face{font-family:ZCOOL WenYi;src:url(./assets/fonts/zcool-wenyi.ttf)format("truetype");font-display:swap;font-style:normal;font-weight:400}@font-face{font-family:ZCOOL XiaoWei;src:url(./assets/fonts/zcool-xiaowei-logo.otf)format("opentype");font-display:swap;font-style:normal;font-weight:400}@font-face{font-family:Source Han Sans SC;src:url(./assets/fonts/source-han-sans-cn-regular.otf)format("opentype");font-display:swap;font-style:normal;font-weight:400}@font-face{font-family:Alibaba PuHuiTi;src:url(./assets/fonts/alibaba-puhuiti-2-regular.woff2)format("woff2");font-display:swap;font-style:normal;font-weight:400}.ec-editor{--ec-background:#141414;--ec-panel:#1d1d1d;--ec-panel-raised:#242424;--ec-panel-hover:#333;--ec-border:#363636;--ec-border-strong:#ffffff38;--ec-text:#f5f5f5;--ec-text-muted:#a3a3a3;--ec-primary:#f5f5f5;--ec-primary-text:#171717;--ec-accent:#00cae0;--ec-drag-accent:#67e8f9;--ec-radius:6px;--ec-scrollbar:#ffffff2e;--ec-scrollbar-hover:#ffffff4d;width:100%;min-width:0;height:100%;min-height:0;color:var(--ec-text);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background:var(--ec-background);-webkit-font-smoothing:antialiased;outline:none;flex-direction:column;line-height:1.4;display:flex;overflow:hidden auto;container:easecut-editor/inline-size}.ec-editor,.ec-editor *,.ec-editor :before,.ec-editor :after{box-sizing:border-box}.ec-editor button,.ec-editor input{font-family:inherit}.ec-editor button{-webkit-tap-highlight-color:transparent}.ec-editor__header{background:#141414;flex:0 0 48px;align-items:center;gap:10px;height:48px;padding:0 12px;display:flex}.ec-editor__header h1{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:0;font-size:14px;font-weight:650;overflow:hidden}.ec-editor__header-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.ec-button{border-radius:var(--ec-radius);color:var(--ec-text);cursor:pointer;background:0 0;border:1px solid #0000;flex:none;justify-content:center;align-items:center;gap:7px;height:34px;padding:0 11px;font-size:13px;line-height:1.4;transition:background-color .12s,border-color .12s,color .12s;display:inline-flex}.ec-button--secondary{border-color:var(--ec-border);background:var(--ec-panel-raised)}.ec-button--primary{color:var(--ec-primary-text);background:var(--ec-primary)}.ec-button:hover:not(:disabled){background:var(--ec-panel-hover)}.ec-button--primary:hover:not(:disabled){background:#d4d4d4}.ec-button:disabled{cursor:not-allowed;opacity:.38}.ec-editor__main{flex-direction:column;flex:1 0 552px;gap:0;min-height:552px;padding:0 8px 8px;display:flex;position:relative}.ec-editor__toast-viewport{z-index:1000;outline:none;flex-direction:column;gap:8px;width:min(480px,100vw - 32px);max-height:calc(100vh - 24px);margin:0;padding:0;list-style:none;display:flex;position:fixed;top:12px;left:50%;transform:translate(-50%)}.ec-editor__toast{border-radius:calc(var(--ec-radius) + 2px);color:var(--ec-text);background:var(--ec-panel-raised);align-items:center;gap:8px;padding:10px 10px 10px 12px;font-size:12px;font-weight:600;line-height:1.45;display:flex;box-shadow:0 16px 40px #0006}.ec-editor__toast--error{background:#cf222e}.ec-editor__toast-icon{flex:none;width:16px;height:16px}.ec-editor__toast-description{flex:1;min-width:0}.ec-editor__toast-close{border-radius:var(--ec-radius);cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;width:28px;height:28px;margin:-4px -4px -4px 0;padding:0;transition:color .12s,background-color .12s;display:inline-flex}.ec-editor__toast-close:hover{color:var(--ec-text);background:#ffffff24}.ec-editor__toast-close:focus-visible{outline-offset:2px;outline:2px solid}.ec-preview-panel{background:#000;border-radius:10px;flex:1;min-height:300px;position:relative;overflow:hidden}.ec-preview-panel__viewport,.ec-preview-panel__canvas-wrap{background:#111;justify-content:center;align-items:center;width:100%;height:100%;min-height:0;display:flex}.ec-preview-panel__canvas-wrap{position:relative}.ec-preview-panel__canvas{touch-action:none;background:#111;width:100%;height:100%;display:block}.ec-preview-panel__media{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute;overflow:hidden}.ec-preview-panel__error{color:#ffafaf;max-width:min(420px,100% - 20px);margin:0;font-size:12px;position:absolute;bottom:10px;left:50%;transform:translate(-50%)}.ec-floating-inspector{--ec-floating-inspector-rail-width:62px;--ec-floating-inspector-gap:6px;z-index:10;width:min(340px,100% - 16px);color:var(--ec-text);pointer-events:none;position:absolute;top:8px;bottom:8px;right:8px}.ec-floating-inspector[data-side=left]{left:8px;right:auto}.ec-floating-inspector[data-panel-open=false]{width:var(--ec-floating-inspector-rail-width)}.ec-floating-inspector__panel,.ec-floating-inspector__rail{border:1px solid var(--ec-border);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);pointer-events:auto;background:#222222f5;box-shadow:0 14px 36px #00000052}.ec-floating-inspector__panel{top:0;right:calc(var(--ec-floating-inspector-rail-width) + var(--ec-floating-inspector-gap));width:calc(100% - var(--ec-floating-inspector-rail-width) - var(--ec-floating-inspector-gap));border-radius:10px;flex-direction:column;min-width:0;height:fit-content;max-height:100%;display:flex;position:absolute;overflow:hidden}.ec-floating-inspector[data-side=left] .ec-floating-inspector__panel{right:auto;left:calc(var(--ec-floating-inspector-rail-width) + var(--ec-floating-inspector-gap))}.ec-floating-inspector__panel[hidden]{display:none}.ec-floating-inspector__header{flex:0 0 57px;justify-content:space-between;align-items:center;height:57px;margin:0 18px;display:flex}.ec-floating-inspector__main{flex-direction:column;flex:1;min-height:0;display:flex}.ec-floating-inspector__separator{border-bottom:1px solid var(--ec-border);flex:0 0 1px;height:1px}.ec-floating-inspector__separator--header{margin:0 18px}.ec-floating-inspector__header h2,.ec-floating-inspector__section h3{color:var(--ec-text);margin:0;font-size:15px;font-weight:650}.ec-floating-inspector__header h2{font-size:18px}.ec-floating-inspector__close{color:#9ca3af;flex:none}.ec-floating-inspector__close:hover{color:var(--ec-text);background:var(--ec-panel-hover)}.ec-floating-inspector__body{flex:1;min-height:0;padding:0 18px;overflow-y:auto}.ec-floating-inspector__section{padding:18px 0}.ec-floating-inspector__details{flex-direction:column;gap:10px;margin:14px 0 0;display:flex}.ec-floating-inspector__details>div{grid-template-columns:72px minmax(0,1fr);gap:10px;display:grid}.ec-floating-inspector__details dt,.ec-floating-inspector__number-field>span:first-child{color:var(--ec-text-muted);font-size:13px}.ec-floating-inspector__details dd{color:#d4d4d4;font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:13px;overflow:hidden}.ec-floating-inspector__details .ec-floating-inspector__detail-value--wrap{text-overflow:clip;white-space:normal;word-break:break-all;overflow:visible}.ec-floating-inspector__number-grid{grid-template-columns:1fr 1fr;gap:12px 10px;margin-top:14px;display:grid}.ec-floating-inspector__layout-status{color:var(--ec-text-muted);margin:12px 0 0;font-size:12px;line-height:1.4}.ec-floating-inspector__layout-status--error{color:#fca5a5}.ec-floating-inspector__number-field{flex-direction:column;gap:7px;min-width:0;margin-top:14px;display:flex}.ec-floating-inspector__field{color:var(--ec-text-muted);gap:7px;font-size:12px;display:grid}.ec-text-inspector__typography-row{grid-template-columns:minmax(0,1fr) 70px;gap:8px;margin-top:8px;display:grid}.ec-text-inspector__toolbar{align-items:center;gap:6px;height:32px;margin-top:8px;display:flex}.ec-text-inspector__toolbar-separator{background:var(--ec-border);width:1px;height:12px;margin:0 3px}.ec-floating-inspector__number-grid .ec-floating-inspector__number-field{margin-top:0}.ec-floating-inspector__speed-control{grid-template-columns:minmax(0,1fr) 80px;align-items:center;gap:12px;margin-top:12px;display:grid}.ec-range-input{accent-color:#fff;cursor:pointer;height:18px}.ec-floating-inspector__speed-control .ec-range-input{width:100%}.ec-floating-inspector__rail{width:var(--ec-floating-inspector-rail-width);border-radius:10px;flex-direction:column;gap:5px;padding:5px;display:flex;position:absolute;top:0;right:0}.ec-floating-inspector[data-side=left] .ec-floating-inspector__rail{left:0;right:auto}.ec-floating-inspector__rail-item{color:#a3a3a3;cursor:pointer;white-space:nowrap;background:0 0;border:0;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:5px;height:60px;padding:0;font-size:11px;line-height:1.4;transition:color .12s,background-color .12s;display:flex}.ec-floating-inspector__rail-item:hover:not(.ec-is-active){color:var(--ec-text);background:var(--ec-panel-hover)}.ec-floating-inspector__rail-item.ec-is-active{color:var(--ec-text);background:#3a3a3a}.ec-canvas-ratio-inspector__body{padding-bottom:7px}.ec-canvas-ratio-inspector__body>[role=group]{flex-direction:column;padding:7px 0;display:flex}.ec-canvas-ratio-inspector__option{color:#d4d4d4;cursor:pointer;min-height:50px;font:inherit;text-align:left;background:0 0;border:0;border-radius:7px;grid-template-columns:25px minmax(0,1fr) 20px;align-items:center;gap:10px;padding:0 8px;font-size:14px;transition:color .12s,background-color .12s;display:grid}.ec-canvas-ratio-inspector__option:hover,.ec-canvas-ratio-inspector__option:focus-visible{color:var(--ec-text);background:var(--ec-panel-hover)}.ec-canvas-ratio-inspector__option:focus-visible{outline:2px solid var(--ec-accent);outline-offset:-2px}.ec-canvas-ratio-inspector__option-icon{color:#a3a3a3;justify-content:center;align-items:center;display:inline-flex}.ec-canvas-ratio-inspector__option.ec-is-active,.ec-canvas-ratio-inspector__option.ec-is-active .ec-canvas-ratio-inspector__option-icon{color:var(--ec-text)}.ec-canvas-ratio-inspector__check{color:var(--ec-accent)}.ec-timeline-panel{border:1px solid var(--ec-border);background:#1c1c1c;border-radius:10px;flex-direction:column;flex:none;height:360px;min-height:210px;display:flex;overflow:hidden}.ec-timeline-panel__resize-handle{color:#0000;cursor:row-resize;touch-action:none;background:0 0;border:0;flex:0 0 8px;width:100%;height:8px;padding:0;position:relative}.ec-timeline-panel__resize-handle:after{content:"";background:currentColor;width:100%;height:2px;transition:color .12s,opacity .12s;position:absolute;top:3px;transform:translate(-50%)}.ec-timeline-panel__resize-handle:hover,.ec-timeline-panel__resize-handle:focus-visible,.ec-timeline-panel__resize-handle[data-resizing=true]{color:var(--ec-accent)}.ec-timeline-panel__resize-handle:hover:after,.ec-timeline-panel__resize-handle:focus-visible:after,.ec-timeline-panel__resize-handle[data-resizing=true]:after{opacity:1}.ec-timeline-panel__resize-handle:focus-visible{outline:2px solid var(--ec-accent);outline-offset:-2px}.ec-timeline-toolbar{z-index:20;border-bottom:1px solid var(--ec-border);background:#1c1c1c;flex:0 0 48px;grid-template-columns:minmax(160px,1fr) auto minmax(250px,1fr);align-items:center;gap:8px;min-width:0;height:48px;padding:0 16px;display:grid;position:relative}.ec-timeline-toolbar__group,.ec-timeline-toolbar__transport{align-items:center;gap:16px;min-width:0;display:flex}.ec-timeline-toolbar__group--end{justify-content:flex-end}.ec-timeline-toolbar__transport{justify-content:center;gap:8px}.ec-timeline-toolbar__separator{background:var(--ec-border-strong);width:1px;height:17px;margin:0 4px}.ec-timeline-toolbar__time{min-width:44px;color:var(--ec-text);font-variant-numeric:tabular-nums;text-align:right;font-size:14px}.ec-timeline-toolbar__time--muted{color:var(--ec-text-muted);text-align:left}.ec-timeline-toolbar__zoom{width:80px;margin:0 3px}.ec-import-dialog__backdrop{z-index:50;background:#00000094;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.ec-import-dialog{z-index:51;border-radius:calc(var(--ec-radius) + 2px);background:#222222f5;width:min(100%,420px);padding:16px;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 24px 64px #00000080}.ec-import-dialog form{gap:14px;display:grid}.ec-import-dialog__header,.ec-import-dialog__actions{align-items:center;gap:8px;display:flex}.ec-import-dialog__header h2{margin:0;font-size:16px}.ec-import-dialog__header .ec-icon-button{margin-left:auto}.ec-import-dialog__field{color:var(--ec-text-muted);gap:6px;font-size:12px;font-weight:600;display:grid}.ec-import-dialog__error{color:#fb7185;margin:-2px 0 0;font-size:12px}.ec-import-dialog__actions{justify-content:flex-end;padding-top:2px}.ec-shortcuts-dialog__overlay{z-index:50;background:#0009;position:fixed;inset:0}.ec-shortcuts-dialog{z-index:51;color:#f5f5f5;overscroll-behavior:contain;background:#1d1d1d;border-radius:12px;width:min(1000px,100vw - 32px);max-height:calc(100vh - 32px);padding:32px;font-size:14px;line-height:1.4;position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%)}.ec-shortcuts-dialog,.ec-shortcuts-dialog *,.ec-shortcuts-dialog :before,.ec-shortcuts-dialog :after{box-sizing:border-box}.ec-shortcuts-dialog__header{justify-content:space-between;align-items:center;display:flex}.ec-shortcuts-dialog__title{margin:0;font-size:24px;font-weight:650}.ec-shortcuts-dialog__groups{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:20px;display:grid}.ec-shortcuts-dialog__group{min-width:0;padding:0 20px}.ec-shortcuts-dialog__group:first-child{padding-left:0}.ec-shortcuts-dialog__group:last-child{padding-right:0}.ec-shortcuts-dialog__group+.ec-shortcuts-dialog__group{border-left:1px solid #363636}.ec-shortcuts-dialog__group h3{margin:0;font-size:16px;font-weight:650}.ec-shortcuts__list{gap:8px;margin:16px 0 0;display:grid}.ec-shortcuts__item{color:#b7b7b7;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;min-height:36px;font-size:14px;line-height:1.4;display:grid}.ec-shortcuts__item dd{color:#a3a3a3;white-space:nowrap;align-items:center;margin:0;font-size:14px;display:flex}.ec-shortcuts-dialog kbd{color:inherit;font-family:inherit;font-size:inherit;text-align:center}@media (width<=680px){.ec-shortcuts-dialog{padding:20px}.ec-shortcuts-dialog__groups{grid-template-columns:1fr}.ec-shortcuts-dialog__group,.ec-shortcuts-dialog__group:first-child,.ec-shortcuts-dialog__group:last-child{padding:18px 0 0}.ec-shortcuts-dialog__group+.ec-shortcuts-dialog__group{border-top:1px solid #363636;border-left:0;padding-top:18px}.ec-shortcuts-dialog__group:first-child{border-top:0;padding-top:0}}.ec-timeline-shell{grid-template-columns:var(--ec-timeline-header-width) minmax(0, 1fr);grid-template-rows:var(--ec-timeline-ruler-height) minmax(0, 1fr);background:#1c1c1c;flex:1;min-width:0;min-height:0;display:grid;position:relative}.ec-timeline-viewport{overscroll-behavior:contain;background:#1c1c1c;grid-area:2/2;min-width:0;min-height:0;position:relative;overflow:auto}.ec-timeline-shell[data-scrubbing=true],.ec-timeline-shell[data-scrubbing=true] *{cursor:col-resize!important}.ec-timeline-grid{width:max(100%, var(--ec-timeline-lane-width));min-height:100%;color:var(--ec-text-muted);-webkit-user-select:none;user-select:none;flex-direction:column;display:flex;position:relative}.ec-timeline-corner{z-index:16;background-color:#1c1c1c;grid-area:1/1;justify-content:center;align-items:center;display:flex}.ec-timeline-gap-status{color:#f3d149;pointer-events:none;font-size:12px;font-weight:600}.ec-timeline-ruler-viewport{z-index:12;background-color:#1c1c1c;grid-area:1/2;min-width:0;overflow:hidden}.ec-timeline-ruler-canvas{will-change:transform;height:100%;position:relative;transform:translate(0,0)}.ec-timeline-ruler{cursor:col-resize;touch-action:none;background-color:#1c1c1c;width:100%;height:100%;position:relative;overflow:hidden}.ec-timeline-ruler__tick{pointer-events:none;background-color:#3a3a3a;width:1px;height:6px;position:absolute;top:3px}.ec-timeline-ruler__tick--major{height:20px}.ec-timeline-ruler__tick--gap{background-color:#f3d149}.ec-timeline-ruler__label{color:#ffffff75;font-variant-numeric:tabular-nums;pointer-events:none;white-space:nowrap;width:48px;margin-left:4px;font-size:12px;line-height:12px;position:absolute;top:11px;overflow:hidden}.ec-timeline-ruler__gap{pointer-events:none;border-bottom:2px solid #f3d149;position:absolute;top:0;bottom:0}.ec-timeline-ruler__label--gap{color:#fde047}.ec-timeline-playhead-layer{top:0;bottom:0;right:0;left:var(--ec-timeline-header-width);z-index:13;pointer-events:none;position:absolute;overflow:hidden}.ec-timeline-playhead{cursor:col-resize;touch-action:none;pointer-events:auto;width:20px;position:absolute;top:0;bottom:0;transform:translate(-50%)}.ec-timeline-playhead__handle{color:#f8fafc;filter:drop-shadow(0 1px 2px #000000a6);width:10px;height:15px;position:absolute;top:3px;left:50%;overflow:visible;transform:translate(-50%)}.ec-timeline-playhead:active .ec-timeline-playhead__handle path{fill:currentColor}.ec-timeline-playhead__line{background:#fff;width:2px;position:absolute;top:18px;bottom:0;left:50%;transform:translate(-50%)}.ec-timeline-controls-viewport{grid-area:2/1;min-height:0;overflow:hidden}.ec-timeline-controls-stack,.ec-timeline-track-stack{gap:var(--ec-timeline-track-gap);flex-direction:column;min-width:0;min-height:100%;display:flex}.ec-timeline-controls-stack{will-change:transform;transform:translate(0,0)}.ec-timeline-track{flex:none;min-width:0}.ec-timeline-track-stack{flex:1 0 auto}.ec-timeline-tail-row{flex:1 0 72px;min-width:0;min-height:72px}.ec-timeline-track__control{background:#1c1c1c;flex:none;justify-content:center;align-items:center;gap:12px;min-width:0;padding:0 7px 0 8px;display:flex}.ec-timeline-track__icon,.ec-timeline-track__mute{color:#d8d8d8;justify-content:center;align-items:center;display:inline-flex}.ec-timeline-track__icon svg,.ec-timeline-track__mute svg{stroke-width:1.75px;width:16px;height:16px}.ec-timeline-track__mute{cursor:pointer;background:0 0;border:0;border-radius:4px;width:24px;height:24px;padding:0}.ec-timeline-track__mute:hover{background:#ffffff14}.ec-timeline-track__lane,.ec-timeline-tail{touch-action:none;background-color:#262626;width:100%;height:100%;position:relative;overflow:hidden}.ec-timeline-track__lane[data-type=audio]{background-color:#262626}.ec-timeline-track__lane[data-type=text]{background-color:#25232d}.ec-timeline-track__empty-hint{pointer-events:none;color:var(--ec-text-muted);letter-spacing:.01em;justify-content:flex-start;align-items:center;padding-inline:12px;font-size:12px;display:flex;position:absolute;inset:0}.ec-timeline-track__control--tail{flex:1 0 72px;min-height:72px}.ec-timeline-track__control--tail,.ec-timeline-tail{background-color:#1c1c1c}.ec-timeline-track-insert-line{z-index:8;background:var(--ec-accent);pointer-events:none;height:2px;position:absolute;left:0;right:0;transform:translateY(-50%)}.ec-timeline-track-insert-line[data-leading=true]{transform:none}.ec-timeline-snap-line{pointer-events:none;z-index:11;border-left:1px solid #00cae0;width:1px;position:absolute;top:0;bottom:0;box-shadow:0 0 4px #00cae0b8}.ec-timeline-clip,.ec-timeline-clip-placeholder,.ec-timeline-drag-ghost{border-radius:6px;min-width:4px;position:absolute;top:0;bottom:0}.ec-timeline-clip{z-index:2;color:#ffffffde;cursor:grab;touch-action:none;border:2px solid #262626;overflow:hidden}.ec-timeline-clip[data-type=audio]{--ec-timeline-waveform-bar:#faf5ffd1;background:#00ab84}.ec-timeline-clip[data-type=text]{background:linear-gradient(135deg,#5b3fa3,#7c4dca)}.ec-timeline-clip[data-type=image]{background:#323232}.ec-timeline-clip__text-preview{color:#ffffff3d;white-space:nowrap;align-items:center;height:100%;padding:0 8px;font-size:22px;font-weight:800;display:flex;overflow:hidden}.ec-timeline-clip[data-selected=true]{z-index:5;border-color:var(--ec-accent)}.ec-timeline-clip[data-hidden=true]{opacity:.45}.ec-clip-context-menu{z-index:100;color:#f5f5f5;background:#242424;border:1px solid #363636;border-radius:8px;min-width:180px;padding:4px;font-family:inherit;font-size:12px;line-height:1.4;box-shadow:0 10px 28px #0000007a}.ec-clip-context-menu,.ec-clip-context-menu *,.ec-clip-context-menu :before,.ec-clip-context-menu :after{box-sizing:border-box}.ec-clip-context-menu__item{cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:5px;outline:none;grid-template-columns:16px minmax(0,1fr) auto;align-items:center;gap:8px;min-height:32px;padding:0 8px;display:grid}.ec-clip-context-menu__item svg{width:15px;height:15px}.ec-clip-context-menu__item[data-highlighted]{background:#333}.ec-clip-context-menu__item[data-disabled]{opacity:.38;pointer-events:none}.ec-clip-context-menu__item--danger{color:#fb7185}.ec-clip-context-menu__item--danger[data-highlighted]{background:#fb718524}.ec-clip-context-menu__separator{background:#363636;height:1px;margin:4px}.ec-timeline-clip--drag-overlay{z-index:9;opacity:.88;border-color:var(--ec-accent);cursor:grabbing;pointer-events:none;will-change:left, top;bottom:auto;box-shadow:0 8px 22px #0000006b}.ec-timeline-clip__media{width:100%;height:100%;position:absolute;inset:0;overflow:hidden}.ec-timeline-clip__preview-strip{pointer-events:none;will-change:transform;height:100%;position:absolute;top:50%;left:0}.ec-timeline-clip__thumbnail{object-fit:cover;pointer-events:none;max-width:none;height:100%;display:block;position:absolute;top:0}.ec-timeline-clip__image-preview{pointer-events:none;background-position:0;background-repeat:repeat-x;background-size:auto 100%;position:absolute;inset:0}.ec-timeline-clip__waveform-canvas{pointer-events:none;height:100%;position:absolute;top:0;bottom:0}.ec-timeline-clip__meta{z-index:2;pointer-events:none;padding:3px 5px;position:absolute;inset:0}.ec-timeline-clip__name{text-overflow:ellipsis;white-space:nowrap;background:#00000054;border-radius:4px;max-width:100%;padding:0 4px;font-size:11px;font-weight:600;line-height:15px;display:flex;position:absolute;top:2px;left:5px;overflow:hidden}.ec-timeline-clip__duration{white-space:nowrap;background:#00000054;border-radius:4px;justify-content:flex-end;max-width:100%;padding:0 4px;font-size:11px;font-weight:600;line-height:15px;display:flex;position:absolute;bottom:2px;right:5px;overflow:hidden}.ec-timeline-clip__volume{left:0;right:0;top:calc(var(--ec-timeline-clip-volume-y) - 6px);cursor:ns-resize;background:0 0;border:0;width:100%;height:12px;padding:0;position:absolute}.ec-timeline-clip__volume-line{background:#ffffff8c;height:1px;position:absolute;top:6px;left:0;right:0;box-shadow:0 0 4px #5abcf273}.ec-timeline-clip__trim-handle{z-index:6;cursor:ew-resize;background:0 0;border:0;width:min(10px,50%);padding:0;position:absolute;top:0;bottom:0}.ec-timeline-clip__trim-handle[data-edge=start]{left:0}.ec-timeline-clip__trim-handle[data-edge=end]{right:0}.ec-timeline-clip__trim-handle:after{border:2px solid var(--ec-accent);content:"";background:#000;border-radius:4px;width:7px;position:absolute;top:10px;bottom:10px}.ec-timeline-clip__trim-handle[data-trimmed=true]:after{background:red}.ec-timeline-clip__trim-handle[data-edge=start]:after{left:-2px}.ec-timeline-clip__trim-handle[data-edge=end]:after{right:-2px}.ec-trim-frame-preview{z-index:1000;color:#f4f4f5;pointer-events:none;background:#111;border-radius:6px;outline:1px solid #00cae0;position:fixed;box-shadow:0 8px 24px #00000085}.ec-trim-frame-preview__image{object-fit:contain;border-radius:5px;width:100%;height:100%;display:block}.ec-trim-frame-preview__arrow{border-top:8px solid #00cae0;border-left:7px solid #0000;border-right:7px solid #0000;width:0;height:0;position:absolute;bottom:-8px;transform:translate(-50%)}.ec-timeline-clip-placeholder{z-index:1;pointer-events:none;background:#ffffff0a}.ec-timeline-drag-ghost{z-index:8;pointer-events:none;background:#67e8f92b;border:2px solid #67e8f9b8;animation:.9s ease-in-out infinite alternate ec-timeline-drag-ghost-pulse;overflow:hidden;box-shadow:0 0 0 1px #67e8f91a,0 0 14px #67e8f938,inset 0 0 14px #67e8f914}.ec-timeline-drag-ghost[data-snapped=true]{background:#67e8f938;border-color:#cffafe;box-shadow:0 0 0 1px #cffafe3d,0 0 18px #67e8f961}@keyframes ec-timeline-drag-ghost-pulse{0%{opacity:.72}to{opacity:1}}.ec-editor,.ec-scrollbar{scrollbar-color:var(--ec-scrollbar) transparent;scrollbar-width:thin}@supports selector(::-webkit-scrollbar){.ec-editor,.ec-scrollbar{scrollbar-color:auto;scrollbar-width:auto}}.ec-editor::-webkit-scrollbar{width:8px;height:8px}.ec-scrollbar::-webkit-scrollbar{width:8px;height:8px}.ec-editor::-webkit-scrollbar-button{width:0;height:0;display:none}.ec-scrollbar::-webkit-scrollbar-button{width:0;height:0;display:none}.ec-editor::-webkit-scrollbar-thumb{background:var(--ec-scrollbar);background-clip:padding-box;border:2px solid #0000;border-radius:999px}.ec-scrollbar::-webkit-scrollbar-thumb{background:var(--ec-scrollbar);background-clip:padding-box;border:2px solid #0000;border-radius:999px}.ec-editor:hover::-webkit-scrollbar-thumb{background:var(--ec-scrollbar-hover);background-clip:padding-box}.ec-scrollbar:hover::-webkit-scrollbar-thumb{background:var(--ec-scrollbar-hover);background-clip:padding-box}.ec-editor::-webkit-scrollbar-track{background:0 0}.ec-editor::-webkit-scrollbar-corner{background:0 0}.ec-scrollbar::-webkit-scrollbar-track{background:0 0}.ec-scrollbar::-webkit-scrollbar-corner{background:0 0}@container easecut-editor (width<=1080px){.ec-timeline-toolbar{grid-template-columns:auto auto 1fr}.ec-timeline-toolbar__transport{gap:4px}}@container easecut-editor (width<=820px){.ec-editor__header{flex-wrap:wrap;height:auto;min-height:48px;padding-block:7px}.ec-editor__header-actions{flex-wrap:wrap}.ec-timeline-toolbar{grid-template-rows:36px 36px;grid-template-columns:1fr auto;height:auto;min-height:78px}.ec-timeline-toolbar__transport{grid-area:1/2}.ec-timeline-toolbar__group--end{grid-area:2/1/auto/-1}}@media (prefers-reduced-motion:reduce){.ec-editor *,.ec-editor :before,.ec-editor :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.ec-export-menu{flex:none;position:relative}.ec-export-menu__trigger{padding-right:8px}.ec-export-menu__chevron{width:15px;height:15px;transition:transform .12s}.ec-export-menu[data-state=open] .ec-export-menu__chevron{transform:rotate(180deg)}.ec-export-menu__content{z-index:100;border:1px solid var(--ec-border);background:var(--ec-panel-raised);border-radius:8px;min-width:180px;padding:4px;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 10px 28px #0000007a}.ec-export-menu__item{width:100%;min-height:34px;color:var(--ec-text);cursor:pointer;text-align:left;-webkit-user-select:none;user-select:none;background:0 0;border:0;border-radius:5px;outline:none;grid-template-columns:16px minmax(0,1fr);align-items:center;gap:8px;padding:0 9px;font-size:13px;display:grid}.ec-export-menu__item svg{width:15px;height:15px}.ec-export-menu__item:hover:not(:disabled),.ec-export-menu__item:focus-visible{background:var(--ec-panel-hover)}.ec-export-menu__item:disabled{cursor:not-allowed;opacity:.38}.ec-input-number{border-radius:var(--ec-radius);color:#d4d4d4;background:#303030;border:1px solid #0000;align-items:stretch;width:100%;height:32px;font-size:14px;display:flex;overflow:hidden}.ec-input-number:hover,.ec-input-number:focus-within{border-color:var(--ec-border-strong);background:#333}.ec-input-number input{width:100%;min-width:0;height:100%;color:inherit;appearance:textfield;font:inherit;font-variant-numeric:tabular-nums;background:0 0;border:0;outline:0;padding:0 0 0 12px}.ec-input-number input::-webkit-inner-spin-button{appearance:none;margin:0}.ec-input-number input::-webkit-outer-spin-button{appearance:none;margin:0}.ec-input-number__suffix-group{flex:0 0 32px;width:32px;height:100%;position:relative}.ec-input-number__suffix,.ec-input-number__step-layer{position:absolute;inset:0}.ec-input-number__suffix{color:var(--ec-text-muted);font-size:inherit;justify-content:center;align-items:center;display:flex}.ec-input-number__step-layer{opacity:0;pointer-events:none;flex-direction:column;align-items:flex-end;gap:1px;padding:4px;display:flex}.ec-input-number:hover .ec-input-number__suffix{opacity:0}.ec-input-number:hover .ec-input-number__step-layer{opacity:1;pointer-events:auto}.ec-input-number__step-button{width:18px;min-width:0;min-height:0;color:var(--ec-text-muted);cursor:pointer;background:0 0;border:0;border-radius:4px;flex:1;justify-content:center;align-items:center;padding:0;display:flex}.ec-input-number__step-button:hover{color:var(--ec-text);background:#ffffff17}.ec-icon-button{border-radius:var(--ec-radius,6px);width:32px;height:32px;color:var(--ec-text,#f5f5f5);cursor:pointer;background:0 0;border:none;flex:0 0 32px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:relative}.ec-icon-button svg{pointer-events:none;flex:0 0 16px;width:16px;height:16px}.ec-icon-button:hover:not(:disabled){background:#333}.ec-icon-button:focus-visible{outline:2px solid var(--ec-accent,#00cae0);outline-offset:2px}.ec-icon-button[aria-pressed=true],.ec-icon-button[data-state=open]{color:#00cae0;background:#333}.ec-icon-button:active:not(:disabled){background:#444}.ec-icon-button:disabled{cursor:not-allowed;opacity:.38}.ec-color-input{cursor:pointer;border:none;border-radius:4px;outline:1px solid #333;padding:0;display:block}.ec-color-input::-webkit-color-swatch-wrapper{padding:0}.ec-color-input::-webkit-color-swatch{border:0;border-radius:6px}.ec-color-input::-moz-color-swatch{border:0;border-radius:6px}.ec-color-input:focus-visible{outline:2px solid var(--ec-accent,#00cae0);outline-offset:2px}.ec-color-input:disabled{cursor:not-allowed;opacity:.38}.ec-select{width:100%;position:relative}.ec-select__trigger{color:#d4d4d4;cursor:pointer;text-align:left;background:#303030;border:1px solid #0000;border-radius:6px;outline:0;align-items:center;gap:8px;width:100%;height:32px;padding:0 9px 0 12px;font-size:13px;display:flex}.ec-select__trigger:hover,.ec-select__trigger:focus-within{background:#333;border-color:#ffffff38}.ec-select__value{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.ec-select__chevron{color:#d4d4d4;flex:none;width:16px;height:16px;transition:transform .12s}.ec-select[data-state=open] .ec-select__chevron{transform:rotate(180deg)}.ec-select__listbox{box-sizing:border-box;z-index:100;scrollbar-color:#ffffff2e transparent;scrollbar-width:thin;background:#303030;border:1px solid #ffffff38;border-radius:6px;outline:none;width:100%;max-height:224px;padding:5px;position:absolute;top:calc(100% + 4px);left:0;overflow-y:auto;box-shadow:0 12px 28px #00000061}.ec-select__listbox[data-top-layer=true]{inset:auto;top:var(--ec-select-top);left:var(--ec-select-left);width:var(--ec-select-width);margin:0;position:fixed}@supports (position-anchor:--ec-select-anchor) and (top:anchor(bottom)) and (width:anchor-size(width)){.ec-select__listbox[data-top-layer=true]{top:anchor(bottom);left:anchor(left);width:anchor-size(width);margin-top:4px}}@supports selector(::-webkit-scrollbar){.ec-select__listbox{scrollbar-color:auto;scrollbar-width:auto}}.ec-select__listbox::-webkit-scrollbar{width:8px;height:8px}.ec-select__listbox::-webkit-scrollbar-button{width:0;height:0;display:none}.ec-select__listbox::-webkit-scrollbar-thumb{background:#ffffff2e padding-box padding-box;border:2px solid #0000;border-radius:999px}.ec-select__listbox:hover::-webkit-scrollbar-thumb{background:#ffffff4d padding-box padding-box}.ec-select__listbox::-webkit-scrollbar-track{background:0 0}.ec-select__listbox::-webkit-scrollbar-corner{background:0 0}.ec-select__option{color:#d4d4d4;cursor:pointer;text-align:left;background:0 0;border:0;border-radius:5px;align-items:center;width:100%;min-height:34px;padding:0 32px 0 10px;font-size:13px;display:flex;position:relative}.ec-select__option[data-active=true]{background:#262626}.ec-select__check{color:currentColor;width:16px;height:16px;position:absolute;right:9px}.ec-title-content-textarea{resize:none;width:100%;height:76px;color:var(--ec-text);font:inherit;scrollbar-width:none;-ms-overflow-style:none;background:#303030;border:1px solid #0000;border-radius:8px;outline:0;padding:10px 12px;font-size:14px;line-height:1.5;display:block;overflow:auto}.ec-title-content-textarea::-webkit-scrollbar{display:none}.ec-title-content-textarea:hover,.ec-title-content-textarea:focus{border-color:var(--ec-border-strong);background:#333}.ec-text-input{box-sizing:border-box;border-radius:var(--ec-radius);color:#d4d4d4;background:#303030;border:1px solid #0000;width:100%}.ec-text-input:focus{outline:none}.ec-text-input:hover,.ec-text-input:focus-within{border-color:var(--ec-border-strong);background:#333}.ec-text-input[data-size=small]{height:28px;padding:0 8px}.ec-text-input[data-size=medium]{height:32px;padding:0 9px}.ec-text-input[data-size=large]{height:36px;padding:0 10px}
@@ -0,0 +1,4 @@
1
+ import type { EaseCutHandle } from './api';
2
+ import type { EaseCutProps } from './types';
3
+ export declare const EaseCut: import("react").ForwardRefExoticComponent<EaseCutProps & import("react").RefAttributes<EaseCutHandle>>;
4
+ //# sourceMappingURL=EaseCut.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EaseCut.d.ts","sourceRoot":"","sources":["../../../src/editor/EaseCut.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AA2B3C,OAAO,KAAK,EAKV,YAAY,EACb,MAAM,SAAS,CAAC;AAyBjB,eAAO,MAAM,OAAO,wGA4ClB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { MediaRuntime } from '../media';
2
+ import type { TimelineStoreApi } from '../store/timeline-store';
3
+ import { type VideoTimelineSourceStoreApi } from './source-store';
4
+ import type { EaseCutHandle } from './types';
5
+ type CreateEaseCutApiParams = {
6
+ mediaRuntime: MediaRuntime;
7
+ sourceStore: VideoTimelineSourceStoreApi;
8
+ timelineStore: TimelineStoreApi;
9
+ };
10
+ export declare const createEaseCutApi: ({ mediaRuntime, sourceStore, timelineStore, }: CreateEaseCutApiParams) => EaseCutHandle;
11
+ export {};
12
+ //# sourceMappingURL=create-easecut-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-easecut-api.d.ts","sourceRoot":"","sources":["../../../../src/editor/api/create-easecut-api.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQhE,OAAO,EAOL,KAAK,2BAA2B,EACjC,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAGV,aAAa,EAEd,MAAM,SAAS,CAAC;AAEjB,KAAK,sBAAsB,GAAG;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,2BAA2B,CAAC;IACzC,aAAa,EAAE,gBAAgB,CAAC;CACjC,CAAC;AAsZF,eAAO,MAAM,gBAAgB,GAAI,+CAI9B,sBAAsB,KAAG,aAG1B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type ReactNode, type Ref } from 'react';
2
+ import type { VideoTimelineSourceStoreApi } from './source-store';
3
+ import type { EaseCutHandle } from './types';
4
+ type EaseCutApiProviderProps = {
5
+ apiRef: Ref<EaseCutHandle>;
6
+ children: ReactNode;
7
+ sourceStore: VideoTimelineSourceStoreApi;
8
+ };
9
+ export declare function EaseCutApiProvider({ apiRef, children, sourceStore, }: EaseCutApiProviderProps): import("react").JSX.Element;
10
+ export declare const useEaseCutApi: () => EaseCutHandle;
11
+ export {};
12
+ //# sourceMappingURL=easecut-api-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easecut-api-context.d.ts","sourceRoot":"","sources":["../../../../src/editor/api/easecut-api-context.tsx"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,GAAG,EACT,MAAM,OAAO,CAAC;AAKf,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK7C,KAAK,uBAAuB,GAAG;IAC7B,MAAM,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,EAAE,2BAA2B,CAAC;CAC1C,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,QAAQ,EACR,WAAW,GACZ,EAAE,uBAAuB,+BAmBzB;AAED,eAAO,MAAM,aAAa,qBAQzB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type EaseCutApiErrorCode = 'CLIP_INVALID' | 'CLIP_NOT_FOUND' | 'SOURCE_ALREADY_EXISTS' | 'SOURCE_CONFLICT' | 'SOURCE_IN_USE' | 'SOURCE_INVALID' | 'SOURCE_NOT_FOUND';
2
+ export declare class EaseCutApiError extends Error {
3
+ readonly code: EaseCutApiErrorCode;
4
+ constructor(code: EaseCutApiErrorCode, message: string);
5
+ }
6
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/editor/api/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAC3B,cAAc,GACd,gBAAgB,GAChB,uBAAuB,GACvB,iBAAiB,GACjB,eAAe,GACf,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;gBAEvB,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM;CAKvD"}
@@ -0,0 +1,3 @@
1
+ export { EaseCutApiError, type EaseCutApiErrorCode, } from './errors';
2
+ export type { EaseCutClipApi, EaseCutClipInput, EaseCutClipPatch, EaseCutHandle, EaseCutMediaClipInput, EaseCutSourceApi, EaseCutSourceInput, EaseCutSourcePatch, EaseCutTextClipInput, } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/editor/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { EaseCutMediaMetadata, VideoTimelineSource } from '../types';
2
+ import type { EaseCutSourceInput } from './types';
3
+ export declare const detectSourceType: (src: string) => import("../types").TimelineMediaType;
4
+ export declare const createSourceCandidate: (input: EaseCutSourceInput, sources: readonly VideoTimelineSource[]) => VideoTimelineSource;
5
+ export declare const hasCompleteSourceMetadata: (source: VideoTimelineSource) => boolean;
6
+ export declare const mergeSourceMetadata: (source: VideoTimelineSource, metadata: EaseCutMediaMetadata | null) => VideoTimelineSource;
7
+ //# sourceMappingURL=source-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-input.d.ts","sourceRoot":"","sources":["../../../../src/editor/api/source-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAO1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAgBlD,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,yCAiB3C,CAAC;AAYF,eAAO,MAAM,qBAAqB,GAChC,OAAO,kBAAkB,EACzB,SAAS,SAAS,mBAAmB,EAAE,KACtC,mBA+BF,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,QAAQ,mBAAmB,YAUzB,CAAC;AAE7C,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,mBAAmB,EAC3B,UAAU,oBAAoB,GAAG,IAAI,KACpC,mBAiBF,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type StoreApi } from 'zustand/vanilla';
2
+ import type { VideoTimelineSource } from '../types';
3
+ export type VideoTimelineSourceState = {
4
+ revision: number;
5
+ sourceRevisions: Record<string, number>;
6
+ sources: VideoTimelineSource[];
7
+ };
8
+ export type VideoTimelineSourceStoreApi = StoreApi<VideoTimelineSourceState>;
9
+ export declare const createVideoTimelineSourceStore: (sources?: readonly VideoTimelineSource[]) => VideoTimelineSourceStoreApi;
10
+ export declare const getSourceSnapshot: (store: VideoTimelineSourceStoreApi, id: string) => import("../core").TimelineSource | undefined;
11
+ export declare const getSourceSnapshots: (store: VideoTimelineSourceStoreApi) => import("../core").TimelineSource[];
12
+ export declare const getSourceRevision: (store: VideoTimelineSourceStoreApi, id: string) => number;
13
+ export declare const addSourceSnapshot: (store: VideoTimelineSourceStoreApi, source: VideoTimelineSource) => void;
14
+ export declare const updateSourceSnapshot: (store: VideoTimelineSourceStoreApi, source: VideoTimelineSource) => void;
15
+ export declare const removeSourceSnapshot: (store: VideoTimelineSourceStoreApi, id: string) => void;
16
+ //# sourceMappingURL=source-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-store.d.ts","sourceRoot":"","sources":["../../../../src/editor/api/source-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAMpD,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC,wBAAwB,CAAC,CAAC;AAE7E,eAAO,MAAM,8BAA8B,GACzC,UAAS,SAAS,mBAAmB,EAAO,KAC3C,2BAgBF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,OAAO,2BAA2B,EAClC,IAAI,MAAM,iDAMX,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,OAAO,2BAA2B,uCAC1B,CAAC;AAE5C,eAAO,MAAM,iBAAiB,GAC5B,OAAO,2BAA2B,EAClC,IAAI,MAAM,WAC6B,CAAC;AAE1C,eAAO,MAAM,iBAAiB,GAC5B,OAAO,2BAA2B,EAClC,QAAQ,mBAAmB,SAU5B,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,2BAA2B,EAClC,QAAQ,mBAAmB,SAY5B,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,2BAA2B,EAClC,IAAI,MAAM,SAUX,CAAC"}
@@ -0,0 +1,78 @@
1
+ import type { TimelineClip, TimelineClipPosition, TimelineClipSpeed, TimelineClipTransform, TimelineClipVolume } from '../core/model';
2
+ import type { TimelineTextFontType } from '../core/text-fonts';
3
+ import type { VideoTimelineMediaType, VideoTimelineSource } from '../types';
4
+ type EaseCutSourceInputBase = {
5
+ fileName?: string;
6
+ id?: string;
7
+ src: string;
8
+ };
9
+ type EaseCutTimedMediaSourceInput = EaseCutSourceInputBase & {
10
+ durationUs?: number;
11
+ height?: number;
12
+ type: Exclude<VideoTimelineMediaType, 'image'>;
13
+ waveformSrc?: string;
14
+ width?: number;
15
+ };
16
+ type EaseCutImageSourceInput = EaseCutSourceInputBase & {
17
+ durationUs?: number;
18
+ height?: number;
19
+ type: 'image';
20
+ width?: number;
21
+ };
22
+ export type EaseCutSourceInput = string | EaseCutTimedMediaSourceInput | EaseCutImageSourceInput;
23
+ export type EaseCutSourcePatch = {
24
+ durationUs?: number;
25
+ fileName?: string;
26
+ height?: number;
27
+ src?: string;
28
+ waveformSrc?: string | null;
29
+ width?: number;
30
+ };
31
+ export type EaseCutMediaClipInput = {
32
+ sourceId: string;
33
+ startUs?: number;
34
+ trackId?: string;
35
+ };
36
+ export type EaseCutTextClipInput = {
37
+ startUs?: number;
38
+ text: string;
39
+ type: 'text';
40
+ };
41
+ export type EaseCutClipInput = EaseCutMediaClipInput | EaseCutTextClipInput;
42
+ export type EaseCutClipPatch = {
43
+ bold?: boolean;
44
+ endUs?: number;
45
+ fontColor?: string;
46
+ fontSize?: number;
47
+ fontType?: TimelineTextFontType;
48
+ hidden?: boolean;
49
+ italic?: boolean;
50
+ position?: TimelineClipPosition;
51
+ speed?: TimelineClipSpeed;
52
+ startUs?: number;
53
+ text?: string;
54
+ trackId?: string;
55
+ transform?: TimelineClipTransform;
56
+ trimEndUs?: number;
57
+ trimStartUs?: number;
58
+ underline?: boolean;
59
+ volume?: TimelineClipVolume;
60
+ };
61
+ export type EaseCutSourceApi = {
62
+ add(input: EaseCutSourceInput): Promise<VideoTimelineSource>;
63
+ get(id: string): VideoTimelineSource | undefined;
64
+ remove(id: string): void;
65
+ update(id: string, patch: EaseCutSourcePatch): Promise<VideoTimelineSource>;
66
+ };
67
+ export type EaseCutClipApi = {
68
+ add(input: EaseCutClipInput): Promise<TimelineClip>;
69
+ get(id: string): TimelineClip | undefined;
70
+ remove(id: string): void;
71
+ update(id: string, patch: EaseCutClipPatch): Promise<TimelineClip>;
72
+ };
73
+ export type EaseCutHandle = {
74
+ clip: EaseCutClipApi;
75
+ source: EaseCutSourceApi;
76
+ };
77
+ export {};
78
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/editor/api/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAElB,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,KAAK,4BAA4B,GAAG,sBAAsB,GAAG;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,uBAAuB,GAAG,sBAAsB,GAAG;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,4BAA4B,GAC5B,uBAAuB,CAAC;AAE5B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,qBAAqB,GACrB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC7D,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAC;IACjD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CACJ,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { TimelineMediaClip, TimelineClipTimingPreview } from '../types';
2
+ type AudioFloatingInspectorProps = {
3
+ clip: TimelineMediaClip & {
4
+ type: 'audio';
5
+ };
6
+ previewTiming: TimelineClipTimingPreview | null;
7
+ };
8
+ export declare function AudioFloatingInspector({ clip, previewTiming, }: AudioFloatingInspectorProps): import("react").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=AudioFloatingInspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioFloatingInspector.d.ts","sourceRoot":"","sources":["../../../../src/editor/components/AudioFloatingInspector.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAO7E,KAAK,2BAA2B,GAAG;IACjC,IAAI,EAAE,iBAAiB,GAAG;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5C,aAAa,EAAE,yBAAyB,GAAG,IAAI,CAAC;CACjD,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,aAAa,GACd,EAAE,2BAA2B,+BAgD7B"}
@@ -0,0 +1,2 @@
1
+ export declare function CanvasRatioPanel(): import("react").JSX.Element;
2
+ //# sourceMappingURL=CanvasRatioPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanvasRatioPanel.d.ts","sourceRoot":"","sources":["../../../../src/editor/components/CanvasRatioPanel.tsx"],"names":[],"mappings":"AAgDA,wBAAgB,gBAAgB,gCA4F/B"}
@@ -0,0 +1,8 @@
1
+ import './ExportMenu.css';
2
+ export type ExportMenuProps = {
3
+ isExporting: boolean;
4
+ onExportJson: () => void;
5
+ onExportLocal?: () => void;
6
+ };
7
+ export declare function ExportMenu({ isExporting, onExportJson, onExportLocal, }: ExportMenuProps): import("react").JSX.Element;
8
+ //# sourceMappingURL=ExportMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportMenu.d.ts","sourceRoot":"","sources":["../../../../src/editor/components/ExportMenu.tsx"],"names":[],"mappings":"AASA,OAAO,kBAAkB,CAAC;AAE1B,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B,CAAC;AAKF,wBAAgB,UAAU,CAAC,EACzB,WAAW,EACX,YAAY,EACZ,aAAa,GACd,EAAE,eAAe,+BA+KjB"}
@@ -0,0 +1,11 @@
1
+ import type { TimelineClipTimingPreview, TimelineClipTransform } from '../types';
2
+ type FloatingInspectorProps = {
3
+ previewTiming?: TimelineClipTimingPreview | null;
4
+ previewTransform?: {
5
+ clipId: string;
6
+ transform: TimelineClipTransform;
7
+ } | null;
8
+ };
9
+ export declare function FloatingInspector({ previewTiming, previewTransform, }: FloatingInspectorProps): import("react").JSX.Element | null;
10
+ export {};
11
+ //# sourceMappingURL=FloatingInspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloatingInspector.d.ts","sourceRoot":"","sources":["../../../../src/editor/components/FloatingInspector.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,UAAU,CAAC;AAKlB,KAAK,sBAAsB,GAAG;IAC5B,aAAa,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IACjD,gBAAgB,CAAC,EAAE;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,qBAAqB,CAAC;KAClC,GAAG,IAAI,CAAC;CACV,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,aAAoB,EACpB,gBAAuB,GACxB,EAAE,sBAAsB,sCAoCxB"}
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { TimelineMediaClip, TimelineClipTimingPreview } from '../types';
3
+ type FloatingInspectorBasicPanelProps = {
4
+ children?: ReactNode;
5
+ clip: TimelineMediaClip;
6
+ timing: TimelineClipTimingPreview | TimelineMediaClip;
7
+ };
8
+ export declare function FloatingInspectorBasicPanel({ children, clip, timing, }: FloatingInspectorBasicPanelProps): import("react").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=FloatingInspectorBasicPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloatingInspectorBasicPanel.d.ts","sourceRoot":"","sources":["../../../../src/editor/components/FloatingInspectorBasicPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAK7E,KAAK,gCAAgC,GAAG;IACtC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,yBAAyB,GAAG,iBAAiB,CAAC;CACvD,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,EAC1C,QAAQ,EACR,IAAI,EACJ,MAAM,GACP,EAAE,gCAAgC,+BAyElC"}
@@ -0,0 +1,15 @@
1
+ import type { ReactNode } from 'react';
2
+ type FloatingInspectorShellProps = {
3
+ ariaLabel?: string;
4
+ children: ReactNode;
5
+ closeLabel?: string;
6
+ isPanelOpen: boolean;
7
+ navigationLabel?: string;
8
+ onClose: () => void;
9
+ railItems: ReactNode;
10
+ sectionTitle: string;
11
+ side?: 'left' | 'right';
12
+ };
13
+ export declare function FloatingInspectorShell({ ariaLabel, children, closeLabel, isPanelOpen, navigationLabel, onClose, railItems, sectionTitle, side, }: FloatingInspectorShellProps): import("react").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=FloatingInspectorShell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloatingInspectorShell.d.ts","sourceRoot":"","sources":["../../../../src/editor/components/FloatingInspectorShell.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,KAAK,2BAA2B,GAAG;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACrC,SAAoB,EACpB,QAAQ,EACR,UAAqB,EACrB,WAAW,EACX,eAAwB,EACxB,OAAO,EACP,SAAS,EACT,YAAY,EACZ,IAAc,GACf,EAAE,2BAA2B,+BA8B7B"}
@@ -0,0 +1,7 @@
1
+ import type { TimelineTimedMediaClip } from '../types';
2
+ type FloatingInspectorSpeedPanelProps = {
3
+ clip: TimelineTimedMediaClip;
4
+ };
5
+ export declare function FloatingInspectorSpeedPanel({ clip, }: FloatingInspectorSpeedPanelProps): import("react").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=FloatingInspectorSpeedPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloatingInspectorSpeedPanel.d.ts","sourceRoot":"","sources":["../../../../src/editor/components/FloatingInspectorSpeedPanel.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGvD,KAAK,gCAAgC,GAAG;IACtC,IAAI,EAAE,sBAAsB,CAAC;CAC9B,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,EAC1C,IAAI,GACL,EAAE,gCAAgC,+BAqFlC"}
@@ -0,0 +1,16 @@
1
+ import type { FormEvent, ReactNode, RefObject } from 'react';
2
+ type FormDialogProps = {
3
+ actions: ReactNode;
4
+ children: ReactNode;
5
+ closeLabel: string;
6
+ describedBy?: string;
7
+ disabled?: boolean;
8
+ onClose: () => void;
9
+ onSubmit: (event: FormEvent<HTMLFormElement>) => void;
10
+ open: boolean;
11
+ returnFocusRef: RefObject<HTMLElement | null>;
12
+ title: string;
13
+ };
14
+ export declare function FormDialog({ actions, children, closeLabel, describedBy, disabled, onClose, onSubmit, open, returnFocusRef, title, }: FormDialogProps): import("react").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=FormDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormDialog.d.ts","sourceRoot":"","sources":["../../../../src/editor/components/FormDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI7D,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IACtD,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,QAAgB,EAChB,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,cAAc,EACd,KAAK,GACN,EAAE,eAAe,+BA0CjB"}
@@ -0,0 +1,9 @@
1
+ import { type RefObject } from 'react';
2
+ import type { TimelineClipTimingPreview } from '../types';
3
+ type PreviewPanelProps = {
4
+ clipTimingPreview?: TimelineClipTimingPreview | null;
5
+ previewRef: RefObject<HTMLDivElement | null>;
6
+ };
7
+ export declare function PreviewPanel({ clipTimingPreview, previewRef, }: PreviewPanelProps): import("react").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=PreviewPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewPanel.d.ts","sourceRoot":"","sources":["../../../../src/editor/components/PreviewPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAoBf,OAAO,KAAK,EAGV,yBAAyB,EAM1B,MAAM,UAAU,CAAC;AAuDlB,KAAK,iBAAiB,GAAG;IACvB,iBAAiB,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IACrD,UAAU,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CAC9C,CAAC;AAigBF,wBAAgB,YAAY,CAAC,EAC3B,iBAAwB,EACxB,UAAU,GACX,EAAE,iBAAiB,+BAqnCnB"}
@@ -0,0 +1,12 @@
1
+ import type { TimelineClipTimingPreview, TimelineClipTransform, TimelineTextClip } from '../types';
2
+ type TextFloatingInspectorProps = {
3
+ clip: TimelineTextClip;
4
+ previewTiming: TimelineClipTimingPreview | null;
5
+ previewTransform: {
6
+ clipId: string;
7
+ transform: TimelineClipTransform;
8
+ } | null;
9
+ };
10
+ export declare function TextFloatingInspector({ clip, previewTiming, previewTransform, }: TextFloatingInspectorProps): import("react").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=TextFloatingInspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextFloatingInspector.d.ts","sourceRoot":"","sources":["../../../../src/editor/components/TextFloatingInspector.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAEV,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAYlB,KAAK,0BAA0B,GAAG;IAChC,IAAI,EAAE,gBAAgB,CAAC;IACvB,aAAa,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAChD,gBAAgB,EAAE;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,qBAAqB,CAAC;KAClC,GAAG,IAAI,CAAC;CACV,CAAC;AASF,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,aAAa,EACb,gBAAgB,GACjB,EAAE,0BAA0B,+BA6a5B"}
@@ -0,0 +1,8 @@
1
+ type TimelineToolbarProps = {
2
+ onRequestAddTitle?: () => void;
3
+ onRequestImport?: () => void;
4
+ onRequestPreviewFullscreen: () => void;
5
+ };
6
+ export declare function TimelineToolbar({ onRequestAddTitle, onRequestImport, onRequestPreviewFullscreen, }: TimelineToolbarProps): import("react").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=TimelineToolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimelineToolbar.d.ts","sourceRoot":"","sources":["../../../../src/editor/components/TimelineToolbar.tsx"],"names":[],"mappings":"AAqCA,KAAK,oBAAoB,GAAG;IAC1B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,0BAA0B,EAAE,MAAM,IAAI,CAAC;CACxC,CAAC;AAoCF,wBAAgB,eAAe,CAAC,EAC9B,iBAAiB,EACjB,eAAe,EACf,0BAA0B,GAC3B,EAAE,oBAAoB,+BA+QtB"}
@@ -0,0 +1,8 @@
1
+ import './TitleContentTextarea.css';
2
+ export type TitleContentTextareaProps = {
3
+ onChange: (value: string) => void;
4
+ onCommit: () => void;
5
+ value: string;
6
+ };
7
+ export declare function TitleContentTextarea({ onChange, onCommit, value, }: TitleContentTextareaProps): import("react").JSX.Element;
8
+ //# sourceMappingURL=TitleContentTextarea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TitleContentTextarea.d.ts","sourceRoot":"","sources":["../../../../src/editor/components/TitleContentTextarea.tsx"],"names":[],"mappings":"AAGA,OAAO,4BAA4B,CAAC;AAEpC,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,QAAQ,EACR,KAAK,GACN,EAAE,yBAAyB,+BAsB3B"}
@@ -0,0 +1,12 @@
1
+ import type { TimelineVisualMediaClip, TimelineClipTimingPreview, TimelineClipTransform } from '../types';
2
+ type VideoFloatingInspectorProps = {
3
+ clip: TimelineVisualMediaClip;
4
+ previewTiming: TimelineClipTimingPreview | null;
5
+ previewTransform: {
6
+ clipId: string;
7
+ transform: TimelineClipTransform;
8
+ } | null;
9
+ };
10
+ export declare function VideoFloatingInspector({ clip, previewTiming, previewTransform, }: VideoFloatingInspectorProps): import("react").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=VideoFloatingInspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoFloatingInspector.d.ts","sourceRoot":"","sources":["../../../../src/editor/components/VideoFloatingInspector.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,UAAU,CAAC;AASlB,KAAK,2BAA2B,GAAG;IACjC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,aAAa,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAChD,gBAAgB,EAAE;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,qBAAqB,CAAC;KAClC,GAAG,IAAI,CAAC;CACV,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,aAAa,EACb,gBAAgB,GACjB,EAAE,2BAA2B,+BAwH7B"}
@@ -0,0 +1,15 @@
1
+ import { type ComponentPropsWithoutRef, type Ref } from 'react';
2
+ import './ColorInput.css';
3
+ type NativeColorInputProps = Omit<ComponentPropsWithoutRef<'input'>, 'aria-label' | 'children' | 'className' | 'defaultValue' | 'onChange' | 'onInput' | 'size' | 'style' | 'type' | 'value'>;
4
+ export type ColorInputProps = NativeColorInputProps & {
5
+ 'aria-label': string;
6
+ isPreviewing: boolean;
7
+ onCommit?: (value: string) => void;
8
+ onPreview?: (value: string) => void;
9
+ ref?: Ref<HTMLInputElement>;
10
+ size: number;
11
+ value: string;
12
+ };
13
+ export declare function ColorInput({ isPreviewing, onBlur, onCommit, onFocus, onKeyDown, onPointerDown, onPreview, ref, size, value, ...props }: ColorInputProps): import("react").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=ColorInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorInput.d.ts","sourceRoot":"","sources":["../../../../../src/editor/components/ui/ColorInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,wBAAwB,EAC7B,KAAK,GAAG,EACT,MAAM,OAAO,CAAC;AAEf,OAAO,kBAAkB,CAAC;AAE1B,KAAK,qBAAqB,GAAG,IAAI,CAC/B,wBAAwB,CAAC,OAAO,CAAC,EAC/B,YAAY,GACZ,UAAU,GACV,WAAW,GACX,cAAc,GACd,UAAU,GACV,SAAS,GACT,MAAM,GACN,OAAO,GACP,MAAM,GACN,OAAO,CACV,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,qBAAqB,GAAG;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,UAAU,CAAC,EACzB,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,OAAO,EACP,SAAS,EACT,aAAa,EACb,SAAS,EACT,GAAG,EACH,IAAI,EACJ,KAAK,EACL,GAAG,KAAK,EACT,EAAE,eAAe,+BAgEjB"}
@@ -0,0 +1,15 @@
1
+ import { type ComponentPropsWithoutRef } from 'react';
2
+ import './IconButton.css';
3
+ type NativeButtonProps = ComponentPropsWithoutRef<'button'>;
4
+ export type IconButtonProps = Pick<NativeButtonProps, 'aria-pressed' | 'children' | 'disabled' | 'onClick' | 'title'> & {
5
+ 'aria-label': string;
6
+ /** Layout hooks only; visual styling belongs to `.ec-icon-button`. */
7
+ className?: string;
8
+ };
9
+ export declare const IconButton: import("react").ForwardRefExoticComponent<Pick<Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, "title" | "children" | "onClick" | "aria-pressed" | "disabled"> & {
10
+ 'aria-label': string;
11
+ /** Layout hooks only; visual styling belongs to `.ec-icon-button`. */
12
+ className?: string;
13
+ } & import("react").RefAttributes<HTMLButtonElement>>;
14
+ export {};
15
+ //# sourceMappingURL=IconButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../../../src/editor/components/ui/IconButton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,OAAO,CAAC;AAEf,OAAO,kBAAkB,CAAC;AAE1B,KAAK,iBAAiB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AAE5D,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,iBAAiB,EACf,cAAc,GACd,UAAU,GACV,UAAU,GACV,SAAS,GACT,OAAO,CACV,GAAG;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,UAAU;kBALP,MAAM;IACpB,sEAAsE;gBAC1D,MAAM;qDAkBnB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type ReactNode } from 'react';
2
+ import './InputNumber.css';
3
+ export type InputNumberProps = {
4
+ label: string;
5
+ max?: number;
6
+ min?: number;
7
+ onCommit: (value: number) => void;
8
+ step?: number;
9
+ suffix?: ReactNode;
10
+ value: number;
11
+ };
12
+ export declare function InputNumber({ label, max, min, onCommit, step, suffix, value, }: InputNumberProps): import("react").JSX.Element;
13
+ //# sourceMappingURL=InputNumber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputNumber.d.ts","sourceRoot":"","sources":["../../../../../src/editor/components/ui/InputNumber.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIjD,OAAO,mBAAmB,CAAC;AAE3B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,GAAG,EACH,GAAG,EACH,QAAQ,EACR,IAAQ,EACR,MAAM,EACN,KAAK,GACN,EAAE,gBAAgB,+BAmFlB"}
@@ -0,0 +1,14 @@
1
+ import './Select.css';
2
+ export type SelectOption<Value extends string> = Readonly<{
3
+ label: string;
4
+ value: Value;
5
+ }>;
6
+ export type SelectProps<Value extends string> = {
7
+ disabled?: boolean;
8
+ label: string;
9
+ onValueChange: (value: Value) => void;
10
+ options: readonly SelectOption<Value>[];
11
+ value: Value;
12
+ };
13
+ export declare function Select<Value extends string>({ disabled, label, onValueChange, options, value, }: SelectProps<Value>): import("react").JSX.Element;
14
+ //# sourceMappingURL=Select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../../../src/editor/components/ui/Select.tsx"],"names":[],"mappings":"AAcA,OAAO,cAAc,CAAC;AAEtB,MAAM,MAAM,YAAY,CAAC,KAAK,SAAS,MAAM,IAAI,QAAQ,CAAC;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;CACd,CAAC,CAAC;AAEH,MAAM,MAAM,WAAW,CAAC,KAAK,SAAS,MAAM,IAAI;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACtC,OAAO,EAAE,SAAS,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IACxC,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,wBAAgB,MAAM,CAAC,KAAK,SAAS,MAAM,EAAE,EAC3C,QAAgB,EAChB,KAAK,EACL,aAAa,EACb,OAAO,EACP,KAAK,GACN,EAAE,WAAW,CAAC,KAAK,CAAC,+BA0PpB"}
@@ -0,0 +1,10 @@
1
+ import type { ComponentPropsWithRef } from 'react';
2
+ import './TextInput.css';
3
+ export type TextInputSize = 'small' | 'medium' | 'large';
4
+ export type TextInputType = 'text' | 'url' | 'email' | 'password' | 'search' | 'tel';
5
+ export type TextInputProps = Omit<ComponentPropsWithRef<'input'>, 'className' | 'size' | 'type'> & {
6
+ size: TextInputSize;
7
+ type?: TextInputType;
8
+ };
9
+ export declare function TextInput({ size, type, ...props }: TextInputProps): import("react").JSX.Element;
10
+ //# sourceMappingURL=TextInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextInput.d.ts","sourceRoot":"","sources":["../../../../../src/editor/components/ui/TextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,iBAAiB,CAAC;AAEzB,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEzD,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,KAAK,GACL,OAAO,GACP,UAAU,GACV,QAAQ,GACR,KAAK,CAAC;AAEV,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,qBAAqB,CAAC,OAAO,CAAC,EAC9B,WAAW,GAAG,MAAM,GAAG,MAAM,CAC9B,GAAG;IACF,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,IAAa,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,+BAS1E"}