@editframe/elements 0.30.1-beta.0 → 0.31.0-beta.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 (325) hide show
  1. package/dist/EF_FRAMEGEN.d.ts +5 -0
  2. package/dist/EF_FRAMEGEN.js +20 -4
  3. package/dist/EF_FRAMEGEN.js.map +1 -1
  4. package/dist/EF_INTERACTIVE.js.map +1 -1
  5. package/dist/_virtual/rolldown_runtime.js +27 -0
  6. package/dist/canvas/EFCanvas.d.ts +311 -0
  7. package/dist/canvas/EFCanvas.js +1089 -0
  8. package/dist/canvas/EFCanvas.js.map +1 -0
  9. package/dist/canvas/EFCanvasItem.d.ts +55 -0
  10. package/dist/canvas/EFCanvasItem.js +72 -0
  11. package/dist/canvas/EFCanvasItem.js.map +1 -0
  12. package/dist/canvas/api/CanvasAPI.d.ts +115 -0
  13. package/dist/canvas/api/CanvasAPI.js +182 -0
  14. package/dist/canvas/api/CanvasAPI.js.map +1 -0
  15. package/dist/canvas/api/types.d.ts +42 -0
  16. package/dist/canvas/coordinateTransform.js +90 -0
  17. package/dist/canvas/coordinateTransform.js.map +1 -0
  18. package/dist/canvas/getElementBounds.js +40 -0
  19. package/dist/canvas/getElementBounds.js.map +1 -0
  20. package/dist/canvas/overlays/SelectionOverlay.js +265 -0
  21. package/dist/canvas/overlays/SelectionOverlay.js.map +1 -0
  22. package/dist/canvas/overlays/overlayState.js +153 -0
  23. package/dist/canvas/overlays/overlayState.js.map +1 -0
  24. package/dist/canvas/selection/SelectionController.js +105 -0
  25. package/dist/canvas/selection/SelectionController.js.map +1 -0
  26. package/dist/canvas/selection/SelectionModel.d.ts +98 -0
  27. package/dist/canvas/selection/SelectionModel.js +229 -0
  28. package/dist/canvas/selection/SelectionModel.js.map +1 -0
  29. package/dist/canvas/selection/selectionContext.d.ts +31 -0
  30. package/dist/canvas/selection/selectionContext.js +12 -0
  31. package/dist/canvas/selection/selectionContext.js.map +1 -0
  32. package/dist/elements/ContainerInfo.d.ts +29 -0
  33. package/dist/elements/ContainerInfo.js +30 -0
  34. package/dist/elements/ContainerInfo.js.map +1 -0
  35. package/dist/elements/EFAudio.d.ts +13 -3
  36. package/dist/elements/EFAudio.js +64 -10
  37. package/dist/elements/EFAudio.js.map +1 -1
  38. package/dist/elements/EFCaptions.d.ts +18 -16
  39. package/dist/elements/EFCaptions.js +110 -19
  40. package/dist/elements/EFCaptions.js.map +1 -1
  41. package/dist/elements/EFImage.d.ts +16 -6
  42. package/dist/elements/EFImage.js +79 -9
  43. package/dist/elements/EFImage.js.map +1 -1
  44. package/dist/elements/EFMedia/AssetIdMediaEngine.js +51 -4
  45. package/dist/elements/EFMedia/AssetIdMediaEngine.js.map +1 -1
  46. package/dist/elements/EFMedia/AssetMediaEngine.js +125 -52
  47. package/dist/elements/EFMedia/AssetMediaEngine.js.map +1 -1
  48. package/dist/elements/EFMedia/BaseMediaEngine.js +24 -6
  49. package/dist/elements/EFMedia/BaseMediaEngine.js.map +1 -1
  50. package/dist/elements/EFMedia/JitMediaEngine.js +12 -8
  51. package/dist/elements/EFMedia/JitMediaEngine.js.map +1 -1
  52. package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.js +46 -7
  53. package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.js.map +1 -1
  54. package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js +98 -73
  55. package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js.map +1 -1
  56. package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.js +28 -5
  57. package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.js.map +1 -1
  58. package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js +18 -6
  59. package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js.map +1 -1
  60. package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js +8 -2
  61. package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js.map +1 -1
  62. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js +31 -6
  63. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js.map +1 -1
  64. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js +28 -5
  65. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js.map +1 -1
  66. package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js +97 -72
  67. package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js.map +1 -1
  68. package/dist/elements/EFMedia/shared/AudioSpanUtils.js +3 -1
  69. package/dist/elements/EFMedia/shared/AudioSpanUtils.js.map +1 -1
  70. package/dist/elements/EFMedia/shared/BufferUtils.js +1 -1
  71. package/dist/elements/EFMedia/shared/BufferUtils.js.map +1 -1
  72. package/dist/elements/EFMedia/shared/ThumbnailExtractor.js +25 -14
  73. package/dist/elements/EFMedia/shared/ThumbnailExtractor.js.map +1 -1
  74. package/dist/elements/EFMedia/tasks/makeMediaEngineTask.js +47 -16
  75. package/dist/elements/EFMedia/tasks/makeMediaEngineTask.js.map +1 -1
  76. package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.js +37 -19
  77. package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.js.map +1 -1
  78. package/dist/elements/EFMedia/videoTasks/ScrubInputCache.js +65 -21
  79. package/dist/elements/EFMedia/videoTasks/ScrubInputCache.js.map +1 -1
  80. package/dist/elements/EFMedia/videoTasks/makeScrubVideoBufferTask.js +8 -3
  81. package/dist/elements/EFMedia/videoTasks/makeScrubVideoBufferTask.js.map +1 -1
  82. package/dist/elements/EFMedia/videoTasks/makeScrubVideoInitSegmentFetchTask.js +32 -9
  83. package/dist/elements/EFMedia/videoTasks/makeScrubVideoInitSegmentFetchTask.js.map +1 -1
  84. package/dist/elements/EFMedia/videoTasks/makeScrubVideoInputTask.js +33 -10
  85. package/dist/elements/EFMedia/videoTasks/makeScrubVideoInputTask.js.map +1 -1
  86. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSeekTask.js +23 -8
  87. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSeekTask.js.map +1 -1
  88. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentFetchTask.js +34 -10
  89. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentFetchTask.js.map +1 -1
  90. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentIdTask.js +31 -8
  91. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentIdTask.js.map +1 -1
  92. package/dist/elements/EFMedia/videoTasks/makeUnifiedVideoSeekTask.js +31 -114
  93. package/dist/elements/EFMedia/videoTasks/makeUnifiedVideoSeekTask.js.map +1 -1
  94. package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.js +44 -8
  95. package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.js.map +1 -1
  96. package/dist/elements/EFMedia.d.ts +18 -7
  97. package/dist/elements/EFMedia.js +23 -3
  98. package/dist/elements/EFMedia.js.map +1 -1
  99. package/dist/elements/EFPanZoom.d.ts +96 -0
  100. package/dist/elements/EFPanZoom.js +290 -0
  101. package/dist/elements/EFPanZoom.js.map +1 -0
  102. package/dist/elements/EFSourceMixin.js +7 -6
  103. package/dist/elements/EFSourceMixin.js.map +1 -1
  104. package/dist/elements/EFSurface.d.ts +6 -6
  105. package/dist/elements/EFSurface.js +7 -2
  106. package/dist/elements/EFSurface.js.map +1 -1
  107. package/dist/elements/EFTemporal.d.ts +2 -1
  108. package/dist/elements/EFTemporal.js +192 -71
  109. package/dist/elements/EFTemporal.js.map +1 -1
  110. package/dist/elements/EFText.d.ts +5 -4
  111. package/dist/elements/EFText.js +102 -13
  112. package/dist/elements/EFText.js.map +1 -1
  113. package/dist/elements/EFTextSegment.d.ts +32 -6
  114. package/dist/elements/EFTextSegment.js +53 -15
  115. package/dist/elements/EFTextSegment.js.map +1 -1
  116. package/dist/elements/EFThumbnailStrip.d.ts +118 -56
  117. package/dist/elements/EFThumbnailStrip.js +522 -358
  118. package/dist/elements/EFThumbnailStrip.js.map +1 -1
  119. package/dist/elements/EFTimegroup.d.ts +223 -27
  120. package/dist/elements/EFTimegroup.js +851 -148
  121. package/dist/elements/EFTimegroup.js.map +1 -1
  122. package/dist/elements/EFVideo.d.ts +42 -5
  123. package/dist/elements/EFVideo.js +165 -11
  124. package/dist/elements/EFVideo.js.map +1 -1
  125. package/dist/elements/EFWaveform.d.ts +6 -6
  126. package/dist/elements/EFWaveform.js +2 -1
  127. package/dist/elements/EFWaveform.js.map +1 -1
  128. package/dist/elements/ElementPositionInfo.d.ts +35 -0
  129. package/dist/elements/ElementPositionInfo.js +49 -0
  130. package/dist/elements/ElementPositionInfo.js.map +1 -0
  131. package/dist/elements/FetchMixin.js +16 -1
  132. package/dist/elements/FetchMixin.js.map +1 -1
  133. package/dist/elements/SessionThumbnailCache.js +152 -0
  134. package/dist/elements/SessionThumbnailCache.js.map +1 -0
  135. package/dist/elements/TargetController.js +3 -1
  136. package/dist/elements/TargetController.js.map +1 -1
  137. package/dist/elements/TimegroupController.js +9 -3
  138. package/dist/elements/TimegroupController.js.map +1 -1
  139. package/dist/elements/findRootTemporal.js +30 -0
  140. package/dist/elements/findRootTemporal.js.map +1 -0
  141. package/dist/elements/renderTemporalAudio.js +18 -5
  142. package/dist/elements/renderTemporalAudio.js.map +1 -1
  143. package/dist/elements/updateAnimations.js +492 -109
  144. package/dist/elements/updateAnimations.js.map +1 -1
  145. package/dist/getRenderInfo.d.ts +2 -2
  146. package/dist/gui/ContextMixin.js +4 -2
  147. package/dist/gui/ContextMixin.js.map +1 -1
  148. package/dist/gui/Controllable.js +74 -1
  149. package/dist/gui/Controllable.js.map +1 -1
  150. package/dist/gui/EFActiveRootTemporal.d.ts +50 -0
  151. package/dist/gui/EFActiveRootTemporal.js +94 -0
  152. package/dist/gui/EFActiveRootTemporal.js.map +1 -0
  153. package/dist/gui/EFConfiguration.d.ts +11 -5
  154. package/dist/gui/EFConfiguration.js.map +1 -1
  155. package/dist/gui/EFControls.d.ts +2 -2
  156. package/dist/gui/EFControls.js +109 -13
  157. package/dist/gui/EFControls.js.map +1 -1
  158. package/dist/gui/EFDial.d.ts +4 -4
  159. package/dist/gui/EFFilmstrip.d.ts +11 -214
  160. package/dist/gui/EFFilmstrip.js +53 -1152
  161. package/dist/gui/EFFilmstrip.js.map +1 -1
  162. package/dist/gui/EFFitScale.d.ts +3 -3
  163. package/dist/gui/EFFitScale.js +39 -12
  164. package/dist/gui/EFFitScale.js.map +1 -1
  165. package/dist/gui/EFFocusOverlay.d.ts +4 -4
  166. package/dist/gui/EFOverlayItem.d.ts +48 -0
  167. package/dist/gui/EFOverlayItem.js +97 -0
  168. package/dist/gui/EFOverlayItem.js.map +1 -0
  169. package/dist/gui/EFOverlayLayer.d.ts +70 -0
  170. package/dist/gui/EFOverlayLayer.js +104 -0
  171. package/dist/gui/EFOverlayLayer.js.map +1 -0
  172. package/dist/gui/EFPause.d.ts +4 -4
  173. package/dist/gui/EFPlay.d.ts +4 -4
  174. package/dist/gui/EFPreview.d.ts +4 -4
  175. package/dist/gui/EFResizableBox.d.ts +12 -16
  176. package/dist/gui/EFResizableBox.js +109 -451
  177. package/dist/gui/EFResizableBox.js.map +1 -1
  178. package/dist/gui/EFScrubber.d.ts +30 -5
  179. package/dist/gui/EFScrubber.js +224 -31
  180. package/dist/gui/EFScrubber.js.map +1 -1
  181. package/dist/gui/EFTimeDisplay.d.ts +4 -4
  182. package/dist/gui/EFTimeDisplay.js +4 -1
  183. package/dist/gui/EFTimeDisplay.js.map +1 -1
  184. package/dist/gui/EFTimelineRuler.d.ts +71 -0
  185. package/dist/gui/EFTimelineRuler.js +320 -0
  186. package/dist/gui/EFTimelineRuler.js.map +1 -0
  187. package/dist/gui/EFToggleLoop.d.ts +4 -4
  188. package/dist/gui/EFTogglePlay.d.ts +4 -4
  189. package/dist/gui/EFTransformHandles.d.ts +91 -0
  190. package/dist/gui/EFTransformHandles.js +393 -0
  191. package/dist/gui/EFTransformHandles.js.map +1 -0
  192. package/dist/gui/EFWorkbench.d.ts +182 -4
  193. package/dist/gui/EFWorkbench.js +2067 -22
  194. package/dist/gui/EFWorkbench.js.map +1 -1
  195. package/dist/gui/FitScaleHelpers.d.ts +31 -0
  196. package/dist/gui/FitScaleHelpers.js +41 -0
  197. package/dist/gui/FitScaleHelpers.js.map +1 -0
  198. package/dist/gui/PlaybackController.d.ts +2 -1
  199. package/dist/gui/PlaybackController.js +46 -15
  200. package/dist/gui/PlaybackController.js.map +1 -1
  201. package/dist/gui/TWMixin.js +1 -1
  202. package/dist/gui/TWMixin.js.map +1 -1
  203. package/dist/gui/hierarchy/EFHierarchy.d.ts +65 -0
  204. package/dist/gui/hierarchy/EFHierarchy.js +338 -0
  205. package/dist/gui/hierarchy/EFHierarchy.js.map +1 -0
  206. package/dist/gui/hierarchy/EFHierarchyItem.d.ts +118 -0
  207. package/dist/gui/hierarchy/EFHierarchyItem.js +551 -0
  208. package/dist/gui/hierarchy/EFHierarchyItem.js.map +1 -0
  209. package/dist/gui/hierarchy/hierarchyContext.d.ts +38 -0
  210. package/dist/gui/hierarchy/hierarchyContext.js +8 -0
  211. package/dist/gui/hierarchy/hierarchyContext.js.map +1 -0
  212. package/dist/gui/icons.js +34 -0
  213. package/dist/gui/icons.js.map +1 -0
  214. package/dist/gui/panZoomTransformContext.js +12 -0
  215. package/dist/gui/panZoomTransformContext.js.map +1 -0
  216. package/dist/gui/previewSettingsContext.js +12 -0
  217. package/dist/gui/previewSettingsContext.js.map +1 -0
  218. package/dist/gui/timeline/EFTimeline.d.ts +270 -0
  219. package/dist/gui/timeline/EFTimeline.js +1369 -0
  220. package/dist/gui/timeline/EFTimeline.js.map +1 -0
  221. package/dist/gui/timeline/EFTimelineRow.js +374 -0
  222. package/dist/gui/timeline/EFTimelineRow.js.map +1 -0
  223. package/dist/gui/timeline/TrimHandles.d.ts +36 -0
  224. package/dist/gui/timeline/TrimHandles.js +204 -0
  225. package/dist/gui/timeline/TrimHandles.js.map +1 -0
  226. package/dist/gui/timeline/flattenHierarchy.js +31 -0
  227. package/dist/gui/timeline/flattenHierarchy.js.map +1 -0
  228. package/dist/gui/timeline/timelineStateContext.d.ts +26 -0
  229. package/dist/gui/timeline/timelineStateContext.js +42 -0
  230. package/dist/gui/timeline/timelineStateContext.js.map +1 -0
  231. package/dist/gui/timeline/tracks/AudioTrack.js +264 -0
  232. package/dist/gui/timeline/tracks/AudioTrack.js.map +1 -0
  233. package/dist/gui/timeline/tracks/CaptionsTrack.js +595 -0
  234. package/dist/gui/timeline/tracks/CaptionsTrack.js.map +1 -0
  235. package/dist/gui/timeline/tracks/HTMLTrack.js +19 -0
  236. package/dist/gui/timeline/tracks/HTMLTrack.js.map +1 -0
  237. package/dist/gui/timeline/tracks/ImageTrack.js +53 -0
  238. package/dist/gui/timeline/tracks/ImageTrack.js.map +1 -0
  239. package/dist/gui/timeline/tracks/TextTrack.js +250 -0
  240. package/dist/gui/timeline/tracks/TextTrack.js.map +1 -0
  241. package/dist/gui/timeline/tracks/TimegroupTrack.js +143 -0
  242. package/dist/gui/timeline/tracks/TimegroupTrack.js.map +1 -0
  243. package/dist/gui/timeline/tracks/TrackItem.js +269 -0
  244. package/dist/gui/timeline/tracks/TrackItem.js.map +1 -0
  245. package/dist/gui/timeline/tracks/VideoTrack.js +265 -0
  246. package/dist/gui/timeline/tracks/VideoTrack.js.map +1 -0
  247. package/dist/gui/timeline/tracks/WaveformTrack.js +19 -0
  248. package/dist/gui/timeline/tracks/WaveformTrack.js.map +1 -0
  249. package/dist/gui/timeline/tracks/ensureTrackItemInit.js +1 -0
  250. package/dist/gui/timeline/tracks/preloadTracks.js +9 -0
  251. package/dist/gui/timeline/tracks/renderTrackChildren.js +119 -0
  252. package/dist/gui/timeline/tracks/renderTrackChildren.js.map +1 -0
  253. package/dist/gui/timeline/tracks/waveformUtils.js +80 -0
  254. package/dist/gui/timeline/tracks/waveformUtils.js.map +1 -0
  255. package/dist/gui/transformCalculations.js +217 -0
  256. package/dist/gui/transformCalculations.js.map +1 -0
  257. package/dist/gui/transformUtils.d.ts +37 -0
  258. package/dist/gui/transformUtils.js +77 -0
  259. package/dist/gui/transformUtils.js.map +1 -0
  260. package/dist/gui/tree/EFTree.d.ts +59 -0
  261. package/dist/gui/tree/EFTree.js +174 -0
  262. package/dist/gui/tree/EFTree.js.map +1 -0
  263. package/dist/gui/tree/EFTreeItem.d.ts +38 -0
  264. package/dist/gui/tree/EFTreeItem.js +146 -0
  265. package/dist/gui/tree/EFTreeItem.js.map +1 -0
  266. package/dist/gui/tree/treeContext.d.ts +60 -0
  267. package/dist/gui/tree/treeContext.js +23 -0
  268. package/dist/gui/tree/treeContext.js.map +1 -0
  269. package/dist/index.d.ts +32 -8
  270. package/dist/index.js +30 -6
  271. package/dist/index.js.map +1 -1
  272. package/dist/node_modules/react/cjs/react-jsx-runtime.development.js +688 -0
  273. package/dist/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -0
  274. package/dist/node_modules/react/cjs/react.development.js +1521 -0
  275. package/dist/node_modules/react/cjs/react.development.js.map +1 -0
  276. package/dist/node_modules/react/index.js +13 -0
  277. package/dist/node_modules/react/index.js.map +1 -0
  278. package/dist/node_modules/react/jsx-runtime.js +13 -0
  279. package/dist/node_modules/react/jsx-runtime.js.map +1 -0
  280. package/dist/preview/AdaptiveResolutionTracker.js +228 -0
  281. package/dist/preview/AdaptiveResolutionTracker.js.map +1 -0
  282. package/dist/preview/RenderProfiler.js +135 -0
  283. package/dist/preview/RenderProfiler.js.map +1 -0
  284. package/dist/preview/previewSettings.js +131 -0
  285. package/dist/preview/previewSettings.js.map +1 -0
  286. package/dist/preview/previewTypes.js +64 -0
  287. package/dist/preview/previewTypes.js.map +1 -0
  288. package/dist/preview/renderTimegroupPreview.js +656 -0
  289. package/dist/preview/renderTimegroupPreview.js.map +1 -0
  290. package/dist/preview/renderTimegroupToCanvas.d.ts +37 -0
  291. package/dist/preview/renderTimegroupToCanvas.js +840 -0
  292. package/dist/preview/renderTimegroupToCanvas.js.map +1 -0
  293. package/dist/preview/renderTimegroupToVideo.d.ts +39 -0
  294. package/dist/preview/renderTimegroupToVideo.js +274 -0
  295. package/dist/preview/renderTimegroupToVideo.js.map +1 -0
  296. package/dist/preview/renderers.js +16 -0
  297. package/dist/preview/renderers.js.map +1 -0
  298. package/dist/preview/statsTrackingStrategy.js +201 -0
  299. package/dist/preview/statsTrackingStrategy.js.map +1 -0
  300. package/dist/preview/thumbnailCacheSettings.js +52 -0
  301. package/dist/preview/thumbnailCacheSettings.js.map +1 -0
  302. package/dist/preview/workers/WorkerPool.js +178 -0
  303. package/dist/preview/workers/WorkerPool.js.map +1 -0
  304. package/dist/sandbox/PlaybackControls.js +10 -0
  305. package/dist/sandbox/PlaybackControls.js.map +1 -0
  306. package/dist/sandbox/ScenarioRunner.js +1 -0
  307. package/dist/sandbox/index.js +2 -0
  308. package/dist/style.css +66 -69
  309. package/dist/transcoding/types/index.d.ts +2 -1
  310. package/dist/transcoding/utils/UrlGenerator.d.ts +6 -1
  311. package/dist/transcoding/utils/UrlGenerator.js +12 -3
  312. package/dist/transcoding/utils/UrlGenerator.js.map +1 -1
  313. package/dist/utils/LRUCache.js +1 -375
  314. package/dist/utils/LRUCache.js.map +1 -1
  315. package/dist/utils/frameTime.js +14 -0
  316. package/dist/utils/frameTime.js.map +1 -0
  317. package/package.json +3 -3
  318. package/test/profilingPlugin.ts +223 -0
  319. package/test/recordReplayProxyPlugin.js +22 -27
  320. package/test/thumbnail-performance-test.html +116 -0
  321. package/test/visualRegressionUtils.ts +286 -0
  322. package/types.json +1 -1
  323. package/dist/elements/TimegroupController.d.ts +0 -18
  324. package/dist/msToTimeCode.js +0 -17
  325. package/dist/msToTimeCode.js.map +0 -1
@@ -0,0 +1,59 @@
1
+ import { TreeItem } from "./treeContext.js";
2
+ import * as lit16 from "lit";
3
+ import { LitElement, PropertyValues } from "lit";
4
+ import * as lit_html16 from "lit-html";
5
+
6
+ //#region src/gui/tree/EFTree.d.ts
7
+
8
+ /**
9
+ * Generic tree component for displaying hierarchical data.
10
+ *
11
+ * Takes an array of TreeItem objects and renders them as an expandable tree.
12
+ * Provides context for selection and expand/collapse state.
13
+ *
14
+ * @fires tree-select - When an item is selected. Detail: { id: string, item: TreeItem }
15
+ *
16
+ * @example
17
+ * ```html
18
+ * <ef-tree
19
+ * .items=${[
20
+ * { id: "folder1", label: "Folder 1", children: [
21
+ * { id: "file1", label: "File 1" },
22
+ * { id: "file2", label: "File 2" },
23
+ * ]},
24
+ * { id: "file3", label: "File 3" },
25
+ * ]}
26
+ * @tree-select=${(e) => console.log('Selected:', e.detail.id)}
27
+ * ></ef-tree>
28
+ * ```
29
+ */
30
+ declare class EFTree extends LitElement {
31
+ static styles: lit16.CSSResult;
32
+ /** Tree items to display */
33
+ items: TreeItem[];
34
+ /** Optional header text */
35
+ header: string;
36
+ /** Whether to show the header */
37
+ showHeader: boolean;
38
+ /** Currently selected item ID (can be set externally) */
39
+ selectedId: string | null;
40
+ /** Whether to expand all items by default */
41
+ expandAll: boolean;
42
+ private treeState;
43
+ private treeActions;
44
+ private providedContext;
45
+ private findItem;
46
+ private initializeExpandedState;
47
+ protected willUpdate(changedProperties: PropertyValues): void;
48
+ protected updated(changedProperties: PropertyValues): void;
49
+ connectedCallback(): void;
50
+ render(): lit_html16.TemplateResult<1>;
51
+ }
52
+ declare global {
53
+ interface HTMLElementTagNameMap {
54
+ "ef-tree": EFTree;
55
+ }
56
+ }
57
+ //#endregion
58
+ export { EFTree };
59
+ //# sourceMappingURL=EFTree.d.ts.map
@@ -0,0 +1,174 @@
1
+ import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.js";
2
+ import { collectAllIds, treeContext } from "./treeContext.js";
3
+ import "./EFTreeItem.js";
4
+ import { provide } from "@lit/context";
5
+ import { LitElement, css, html, nothing } from "lit";
6
+ import { customElement, property, state } from "lit/decorators.js";
7
+
8
+ //#region src/gui/tree/EFTree.ts
9
+ let EFTree = class EFTree$1 extends LitElement {
10
+ constructor(..._args) {
11
+ super(..._args);
12
+ this.items = [];
13
+ this.header = "";
14
+ this.showHeader = false;
15
+ this.selectedId = null;
16
+ this.expandAll = true;
17
+ this.treeState = {
18
+ selectedId: null,
19
+ expandedIds: /* @__PURE__ */ new Set()
20
+ };
21
+ this.treeActions = {
22
+ select: (id) => {
23
+ this.treeState = {
24
+ ...this.treeState,
25
+ selectedId: id
26
+ };
27
+ const item = id ? this.findItem(id, this.items) : null;
28
+ this.dispatchEvent(new CustomEvent("tree-select", {
29
+ detail: {
30
+ id,
31
+ item
32
+ },
33
+ bubbles: true,
34
+ composed: true
35
+ }));
36
+ },
37
+ toggleExpanded: (id) => {
38
+ const newExpanded = new Set(this.treeState.expandedIds);
39
+ if (newExpanded.has(id)) newExpanded.delete(id);
40
+ else newExpanded.add(id);
41
+ this.treeState = {
42
+ ...this.treeState,
43
+ expandedIds: newExpanded
44
+ };
45
+ },
46
+ setExpanded: (id, expanded) => {
47
+ const newExpanded = new Set(this.treeState.expandedIds);
48
+ if (expanded) newExpanded.add(id);
49
+ else newExpanded.delete(id);
50
+ this.treeState = {
51
+ ...this.treeState,
52
+ expandedIds: newExpanded
53
+ };
54
+ }
55
+ };
56
+ this.providedContext = {
57
+ state: this.treeState,
58
+ actions: this.treeActions
59
+ };
60
+ }
61
+ static {
62
+ this.styles = css`
63
+ :host {
64
+ display: block;
65
+ overflow: auto;
66
+ font-size: 12px;
67
+
68
+ --tree-bg: rgb(30 41 59);
69
+ --tree-text: rgb(226 232 240);
70
+ --tree-hover-bg: rgba(148, 163, 184, 0.2);
71
+ --tree-selected-bg: rgba(59, 130, 246, 0.3);
72
+ }
73
+
74
+ :host(.light) {
75
+ --tree-bg: rgb(241 245 249);
76
+ --tree-text: rgb(30 41 59);
77
+ --tree-hover-bg: rgba(100, 116, 139, 0.15);
78
+ --tree-selected-bg: rgba(59, 130, 246, 0.2);
79
+ }
80
+
81
+ .tree-container {
82
+ background: var(--tree-bg);
83
+ color: var(--tree-text);
84
+ min-height: 100%;
85
+ padding: 4px 0;
86
+ }
87
+
88
+ .header {
89
+ padding: 8px 12px;
90
+ font-weight: 600;
91
+ font-size: 11px;
92
+ text-transform: uppercase;
93
+ letter-spacing: 0.05em;
94
+ color: rgba(148, 163, 184, 0.8);
95
+ border-bottom: 1px solid var(--tree-border, rgb(71 85 105));
96
+ margin-bottom: 4px;
97
+ }
98
+
99
+ .empty {
100
+ padding: 16px;
101
+ text-align: center;
102
+ color: rgba(148, 163, 184, 0.6);
103
+ font-style: italic;
104
+ }
105
+ `;
106
+ }
107
+ findItem(id, items) {
108
+ for (const item of items) {
109
+ if (item.id === id) return item;
110
+ if (item.children) {
111
+ const found = this.findItem(id, item.children);
112
+ if (found) return found;
113
+ }
114
+ }
115
+ return null;
116
+ }
117
+ initializeExpandedState() {
118
+ if (this.expandAll && this.items.length > 0) this.treeState = {
119
+ ...this.treeState,
120
+ expandedIds: collectAllIds(this.items)
121
+ };
122
+ }
123
+ willUpdate(changedProperties) {
124
+ if (changedProperties.has("selectedId") && this.selectedId !== this.treeState.selectedId) this.treeState = {
125
+ ...this.treeState,
126
+ selectedId: this.selectedId
127
+ };
128
+ this.providedContext = {
129
+ state: this.treeState,
130
+ actions: this.treeActions
131
+ };
132
+ super.willUpdate(changedProperties);
133
+ }
134
+ updated(changedProperties) {
135
+ super.updated(changedProperties);
136
+ if (changedProperties.has("items")) this.initializeExpandedState();
137
+ }
138
+ connectedCallback() {
139
+ super.connectedCallback();
140
+ this.initializeExpandedState();
141
+ }
142
+ render() {
143
+ return html`
144
+ <div class="tree-container">
145
+ ${this.showHeader ? html`<div class="header">${this.header}</div>` : nothing}
146
+ ${this.items.length > 0 ? this.items.map((item) => html`<ef-tree-item .item=${item}></ef-tree-item>`) : html`<div class="empty">No items</div>`}
147
+ </div>
148
+ `;
149
+ }
150
+ };
151
+ __decorate([property({
152
+ type: Array,
153
+ attribute: false
154
+ })], EFTree.prototype, "items", void 0);
155
+ __decorate([property({ type: String })], EFTree.prototype, "header", void 0);
156
+ __decorate([property({
157
+ type: Boolean,
158
+ attribute: "show-header"
159
+ })], EFTree.prototype, "showHeader", void 0);
160
+ __decorate([property({
161
+ type: String,
162
+ attribute: "selected-id"
163
+ })], EFTree.prototype, "selectedId", void 0);
164
+ __decorate([property({
165
+ type: Boolean,
166
+ attribute: "expand-all"
167
+ })], EFTree.prototype, "expandAll", void 0);
168
+ __decorate([state()], EFTree.prototype, "treeState", void 0);
169
+ __decorate([provide({ context: treeContext }), state()], EFTree.prototype, "providedContext", void 0);
170
+ EFTree = __decorate([customElement("ef-tree")], EFTree);
171
+
172
+ //#endregion
173
+ export { EFTree };
174
+ //# sourceMappingURL=EFTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EFTree.js","names":["EFTree"],"sources":["../../../src/gui/tree/EFTree.ts"],"sourcesContent":["import { provide } from \"@lit/context\";\nimport { css, html, LitElement, nothing, type PropertyValues } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\n\nimport type { TreeItem, TreeContext, TreeState, TreeActions } from \"./treeContext.js\";\nimport { treeContext, collectAllIds } from \"./treeContext.js\";\nimport \"./EFTreeItem.js\";\n\n/**\n * Generic tree component for displaying hierarchical data.\n * \n * Takes an array of TreeItem objects and renders them as an expandable tree.\n * Provides context for selection and expand/collapse state.\n * \n * @fires tree-select - When an item is selected. Detail: { id: string, item: TreeItem }\n * \n * @example\n * ```html\n * <ef-tree\n * .items=${[\n * { id: \"folder1\", label: \"Folder 1\", children: [\n * { id: \"file1\", label: \"File 1\" },\n * { id: \"file2\", label: \"File 2\" },\n * ]},\n * { id: \"file3\", label: \"File 3\" },\n * ]}\n * @tree-select=${(e) => console.log('Selected:', e.detail.id)}\n * ></ef-tree>\n * ```\n */\n@customElement(\"ef-tree\")\nexport class EFTree extends LitElement {\n static styles = css`\n :host {\n display: block;\n overflow: auto;\n font-size: 12px;\n\n --tree-bg: rgb(30 41 59);\n --tree-text: rgb(226 232 240);\n --tree-hover-bg: rgba(148, 163, 184, 0.2);\n --tree-selected-bg: rgba(59, 130, 246, 0.3);\n }\n\n :host(.light) {\n --tree-bg: rgb(241 245 249);\n --tree-text: rgb(30 41 59);\n --tree-hover-bg: rgba(100, 116, 139, 0.15);\n --tree-selected-bg: rgba(59, 130, 246, 0.2);\n }\n\n .tree-container {\n background: var(--tree-bg);\n color: var(--tree-text);\n min-height: 100%;\n padding: 4px 0;\n }\n\n .header {\n padding: 8px 12px;\n font-weight: 600;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: rgba(148, 163, 184, 0.8);\n border-bottom: 1px solid var(--tree-border, rgb(71 85 105));\n margin-bottom: 4px;\n }\n\n .empty {\n padding: 16px;\n text-align: center;\n color: rgba(148, 163, 184, 0.6);\n font-style: italic;\n }\n `;\n\n /** Tree items to display */\n @property({ type: Array, attribute: false })\n items: TreeItem[] = [];\n\n /** Optional header text */\n @property({ type: String })\n header = \"\";\n\n /** Whether to show the header */\n @property({ type: Boolean, attribute: \"show-header\" })\n showHeader = false;\n\n /** Currently selected item ID (can be set externally) */\n @property({ type: String, attribute: \"selected-id\" })\n selectedId: string | null = null;\n\n /** Whether to expand all items by default */\n @property({ type: Boolean, attribute: \"expand-all\" })\n expandAll = true;\n\n @state()\n private treeState: TreeState = {\n selectedId: null,\n expandedIds: new Set(),\n };\n\n private treeActions: TreeActions = {\n select: (id: string | null) => {\n this.treeState = {\n ...this.treeState,\n selectedId: id,\n };\n \n // Find the item for the event detail\n const item = id ? this.findItem(id, this.items) : null;\n \n this.dispatchEvent(\n new CustomEvent(\"tree-select\", {\n detail: { id, item },\n bubbles: true,\n composed: true,\n })\n );\n },\n\n toggleExpanded: (id: string) => {\n const newExpanded = new Set(this.treeState.expandedIds);\n if (newExpanded.has(id)) {\n newExpanded.delete(id);\n } else {\n newExpanded.add(id);\n }\n this.treeState = {\n ...this.treeState,\n expandedIds: newExpanded,\n };\n },\n\n setExpanded: (id: string, expanded: boolean) => {\n const newExpanded = new Set(this.treeState.expandedIds);\n if (expanded) {\n newExpanded.add(id);\n } else {\n newExpanded.delete(id);\n }\n this.treeState = {\n ...this.treeState,\n expandedIds: newExpanded,\n };\n },\n };\n\n @provide({ context: treeContext })\n @state()\n private providedContext: TreeContext = {\n state: this.treeState,\n actions: this.treeActions,\n };\n\n private findItem(id: string, items: TreeItem[]): TreeItem | null {\n for (const item of items) {\n if (item.id === id) return item;\n if (item.children) {\n const found = this.findItem(id, item.children);\n if (found) return found;\n }\n }\n return null;\n }\n\n private initializeExpandedState(): void {\n if (this.expandAll && this.items.length > 0) {\n this.treeState = {\n ...this.treeState,\n expandedIds: collectAllIds(this.items),\n };\n }\n }\n\n protected willUpdate(changedProperties: PropertyValues): void {\n // Sync external selectedId with internal state\n if (changedProperties.has(\"selectedId\") && this.selectedId !== this.treeState.selectedId) {\n this.treeState = {\n ...this.treeState,\n selectedId: this.selectedId,\n };\n }\n\n // Always update provided context\n this.providedContext = {\n state: this.treeState,\n actions: this.treeActions,\n };\n\n super.willUpdate(changedProperties);\n }\n\n protected updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n\n // Re-initialize expanded state when items change\n if (changedProperties.has(\"items\")) {\n this.initializeExpandedState();\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.initializeExpandedState();\n }\n\n render() {\n return html`\n <div class=\"tree-container\">\n ${this.showHeader ? html`<div class=\"header\">${this.header}</div>` : nothing}\n ${this.items.length > 0\n ? this.items.map(\n (item) => html`<ef-tree-item .item=${item}></ef-tree-item>`\n )\n : html`<div class=\"empty\">No items</div>`}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-tree\": EFTree;\n }\n}\n"],"mappings":";;;;;;;;AA+BO,mBAAMA,iBAAe,WAAW;;;eAgDjB,EAAE;gBAIb;oBAII;oBAIe;mBAIhB;mBAGmB;GAC7B,YAAY;GACZ,6BAAa,IAAI,KAAK;GACvB;qBAEkC;GACjC,SAAS,OAAsB;AAC7B,SAAK,YAAY;KACf,GAAG,KAAK;KACR,YAAY;KACb;IAGD,MAAM,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,MAAM,GAAG;AAElD,SAAK,cACH,IAAI,YAAY,eAAe;KAC7B,QAAQ;MAAE;MAAI;MAAM;KACpB,SAAS;KACT,UAAU;KACX,CAAC,CACH;;GAGH,iBAAiB,OAAe;IAC9B,MAAM,cAAc,IAAI,IAAI,KAAK,UAAU,YAAY;AACvD,QAAI,YAAY,IAAI,GAAG,CACrB,aAAY,OAAO,GAAG;QAEtB,aAAY,IAAI,GAAG;AAErB,SAAK,YAAY;KACf,GAAG,KAAK;KACR,aAAa;KACd;;GAGH,cAAc,IAAY,aAAsB;IAC9C,MAAM,cAAc,IAAI,IAAI,KAAK,UAAU,YAAY;AACvD,QAAI,SACF,aAAY,IAAI,GAAG;QAEnB,aAAY,OAAO,GAAG;AAExB,SAAK,YAAY;KACf,GAAG,KAAK;KACR,aAAa;KACd;;GAEJ;yBAIsC;GACrC,OAAO,KAAK;GACZ,SAAS,KAAK;GACf;;;gBA1He,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4HnB,AAAQ,SAAS,IAAY,OAAoC;AAC/D,OAAK,MAAM,QAAQ,OAAO;AACxB,OAAI,KAAK,OAAO,GAAI,QAAO;AAC3B,OAAI,KAAK,UAAU;IACjB,MAAM,QAAQ,KAAK,SAAS,IAAI,KAAK,SAAS;AAC9C,QAAI,MAAO,QAAO;;;AAGtB,SAAO;;CAGT,AAAQ,0BAAgC;AACtC,MAAI,KAAK,aAAa,KAAK,MAAM,SAAS,EACxC,MAAK,YAAY;GACf,GAAG,KAAK;GACR,aAAa,cAAc,KAAK,MAAM;GACvC;;CAIL,AAAU,WAAW,mBAAyC;AAE5D,MAAI,kBAAkB,IAAI,aAAa,IAAI,KAAK,eAAe,KAAK,UAAU,WAC5E,MAAK,YAAY;GACf,GAAG,KAAK;GACR,YAAY,KAAK;GAClB;AAIH,OAAK,kBAAkB;GACrB,OAAO,KAAK;GACZ,SAAS,KAAK;GACf;AAED,QAAM,WAAW,kBAAkB;;CAGrC,AAAU,QAAQ,mBAAyC;AACzD,QAAM,QAAQ,kBAAkB;AAGhC,MAAI,kBAAkB,IAAI,QAAQ,CAChC,MAAK,yBAAyB;;CAIlC,oBAA0B;AACxB,QAAM,mBAAmB;AACzB,OAAK,yBAAyB;;CAGhC,SAAS;AACP,SAAO,IAAI;;UAEL,KAAK,aAAa,IAAI,uBAAuB,KAAK,OAAO,UAAU,QAAQ;UAC3E,KAAK,MAAM,SAAS,IAClB,KAAK,MAAM,KACR,SAAS,IAAI,uBAAuB,KAAK,kBAC3C,GACD,IAAI,oCAAoC;;;;;YA1IjD,SAAS;CAAE,MAAM;CAAO,WAAW;CAAO,CAAC;YAI3C,SAAS,EAAE,MAAM,QAAQ,CAAC;YAI1B,SAAS;CAAE,MAAM;CAAS,WAAW;CAAe,CAAC;YAIrD,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAe,CAAC;YAIpD,SAAS;CAAE,MAAM;CAAS,WAAW;CAAc,CAAC;YAGpD,OAAO;YAoDP,QAAQ,EAAE,SAAS,aAAa,CAAC,EACjC,OAAO;qBAxHT,cAAc,UAAU"}
@@ -0,0 +1,38 @@
1
+ import { TreeContext, TreeItem } from "./treeContext.js";
2
+ import * as lit17 from "lit";
3
+ import { LitElement, nothing } from "lit";
4
+ import * as lit_html17 from "lit-html";
5
+
6
+ //#region src/gui/tree/EFTreeItem.d.ts
7
+
8
+ /**
9
+ * Generic tree item component.
10
+ *
11
+ * Renders a single item in a tree with:
12
+ * - Expand/collapse toggle for items with children
13
+ * - Optional icon
14
+ * - Label
15
+ * - Recursive children rendering
16
+ *
17
+ * @fires tree-item-click - When item is clicked (for selection)
18
+ */
19
+ declare class EFTreeItem extends LitElement {
20
+ static styles: lit17.CSSResult;
21
+ treeContext?: TreeContext;
22
+ item: TreeItem;
23
+ private localExpanded;
24
+ get isSelected(): boolean;
25
+ get isExpanded(): boolean;
26
+ get hasChildren(): boolean;
27
+ private handleClick;
28
+ private handleExpandClick;
29
+ render(): lit_html17.TemplateResult<1> | typeof nothing;
30
+ }
31
+ declare global {
32
+ interface HTMLElementTagNameMap {
33
+ "ef-tree-item": EFTreeItem;
34
+ }
35
+ }
36
+ //#endregion
37
+ export { EFTreeItem };
38
+ //# sourceMappingURL=EFTreeItem.d.ts.map
@@ -0,0 +1,146 @@
1
+ import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.js";
2
+ import { treeContext } from "./treeContext.js";
3
+ import { consume } from "@lit/context";
4
+ import { LitElement, css, html, nothing } from "lit";
5
+ import { customElement, property, state } from "lit/decorators.js";
6
+
7
+ //#region src/gui/tree/EFTreeItem.ts
8
+ let EFTreeItem = class EFTreeItem$1 extends LitElement {
9
+ constructor(..._args) {
10
+ super(..._args);
11
+ this.localExpanded = true;
12
+ }
13
+ static {
14
+ this.styles = css`
15
+ :host {
16
+ display: block;
17
+ }
18
+
19
+ .item-row {
20
+ display: flex;
21
+ align-items: center;
22
+ height: var(--tree-item-height, 1.5rem);
23
+ padding-left: var(--tree-item-padding-left, 0.5rem);
24
+ padding-right: var(--tree-item-padding-right, 0.5rem);
25
+ font-size: var(--tree-item-font-size, 0.75rem);
26
+ cursor: pointer;
27
+ user-select: none;
28
+ color: var(--tree-text, rgb(226 232 240));
29
+ }
30
+
31
+ .item-row:hover {
32
+ background: var(--tree-hover-bg, rgba(148, 163, 184, 0.2));
33
+ }
34
+
35
+ .item-row[data-selected] {
36
+ background: var(--tree-selected-bg, rgba(59, 130, 246, 0.3));
37
+ }
38
+
39
+ .expand-icon {
40
+ width: var(--tree-expand-icon-size, 1rem);
41
+ height: var(--tree-expand-icon-size, 1rem);
42
+ display: flex;
43
+ align-items: center;
44
+ justify-content: center;
45
+ cursor: pointer;
46
+ flex-shrink: 0;
47
+ }
48
+
49
+ .expand-icon svg {
50
+ width: 0.75rem;
51
+ height: 0.75rem;
52
+ transition: transform 0.15s ease;
53
+ }
54
+
55
+ .expand-icon[data-expanded] svg {
56
+ transform: rotate(90deg);
57
+ }
58
+
59
+ .icon {
60
+ margin-right: var(--tree-icon-gap, 0.25rem);
61
+ flex-shrink: 0;
62
+ display: flex;
63
+ align-items: center;
64
+ }
65
+
66
+ .label {
67
+ overflow: hidden;
68
+ text-overflow: ellipsis;
69
+ white-space: nowrap;
70
+ flex: 1;
71
+ }
72
+
73
+ .children {
74
+ padding-left: var(--tree-indent, 1rem);
75
+ }
76
+
77
+ .children[data-collapsed] {
78
+ display: none;
79
+ }
80
+ `;
81
+ }
82
+ get isSelected() {
83
+ if (!this.treeContext || !this.item) return false;
84
+ return this.treeContext.state.selectedId === this.item.id;
85
+ }
86
+ get isExpanded() {
87
+ if (!this.treeContext || !this.item) return this.localExpanded;
88
+ return this.treeContext.state.expandedIds.has(this.item.id);
89
+ }
90
+ get hasChildren() {
91
+ return Boolean(this.item?.children && this.item.children.length > 0);
92
+ }
93
+ handleClick(e) {
94
+ e.stopPropagation();
95
+ if (this.treeContext && this.item) this.treeContext.actions.select(this.item.id);
96
+ }
97
+ handleExpandClick(e) {
98
+ e.stopPropagation();
99
+ if (this.treeContext && this.item) this.treeContext.actions.toggleExpanded(this.item.id);
100
+ else this.localExpanded = !this.localExpanded;
101
+ }
102
+ render() {
103
+ if (!this.item) return nothing;
104
+ const expanded = this.isExpanded;
105
+ return html`
106
+ <div
107
+ class="item-row"
108
+ ?data-selected=${this.isSelected}
109
+ @click=${this.handleClick}
110
+ >
111
+ ${this.hasChildren ? html`
112
+ <span
113
+ class="expand-icon"
114
+ ?data-expanded=${expanded}
115
+ @click=${this.handleExpandClick}
116
+ >
117
+ <svg viewBox="0 0 24 24" fill="currentColor">
118
+ <path d="M8 5v14l11-7z" />
119
+ </svg>
120
+ </span>
121
+ ` : html`<span class="expand-icon"></span>`}
122
+ ${this.item.icon ? html`<span class="icon">${this.item.icon}</span>` : nothing}
123
+ <span class="label">${this.item.label}</span>
124
+ </div>
125
+ ${this.hasChildren ? html`
126
+ <div class="children" ?data-collapsed=${!expanded}>
127
+ ${this.item.children.map((child) => html`<ef-tree-item .item=${child}></ef-tree-item>`)}
128
+ </div>
129
+ ` : nothing}
130
+ `;
131
+ }
132
+ };
133
+ __decorate([consume({
134
+ context: treeContext,
135
+ subscribe: true
136
+ })], EFTreeItem.prototype, "treeContext", void 0);
137
+ __decorate([property({
138
+ type: Object,
139
+ attribute: false
140
+ })], EFTreeItem.prototype, "item", void 0);
141
+ __decorate([state()], EFTreeItem.prototype, "localExpanded", void 0);
142
+ EFTreeItem = __decorate([customElement("ef-tree-item")], EFTreeItem);
143
+
144
+ //#endregion
145
+ export { EFTreeItem };
146
+ //# sourceMappingURL=EFTreeItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EFTreeItem.js","names":["EFTreeItem"],"sources":["../../../src/gui/tree/EFTreeItem.ts"],"sourcesContent":["import { consume } from \"@lit/context\";\nimport { css, html, LitElement, nothing } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\n\nimport type { TreeItem, TreeContext } from \"./treeContext.js\";\nimport { treeContext } from \"./treeContext.js\";\n\n/**\n * Generic tree item component.\n * \n * Renders a single item in a tree with:\n * - Expand/collapse toggle for items with children\n * - Optional icon\n * - Label\n * - Recursive children rendering\n * \n * @fires tree-item-click - When item is clicked (for selection)\n */\n@customElement(\"ef-tree-item\")\nexport class EFTreeItem extends LitElement {\n static styles = css`\n :host {\n display: block;\n }\n\n .item-row {\n display: flex;\n align-items: center;\n height: var(--tree-item-height, 1.5rem);\n padding-left: var(--tree-item-padding-left, 0.5rem);\n padding-right: var(--tree-item-padding-right, 0.5rem);\n font-size: var(--tree-item-font-size, 0.75rem);\n cursor: pointer;\n user-select: none;\n color: var(--tree-text, rgb(226 232 240));\n }\n\n .item-row:hover {\n background: var(--tree-hover-bg, rgba(148, 163, 184, 0.2));\n }\n\n .item-row[data-selected] {\n background: var(--tree-selected-bg, rgba(59, 130, 246, 0.3));\n }\n\n .expand-icon {\n width: var(--tree-expand-icon-size, 1rem);\n height: var(--tree-expand-icon-size, 1rem);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n flex-shrink: 0;\n }\n\n .expand-icon svg {\n width: 0.75rem;\n height: 0.75rem;\n transition: transform 0.15s ease;\n }\n\n .expand-icon[data-expanded] svg {\n transform: rotate(90deg);\n }\n\n .icon {\n margin-right: var(--tree-icon-gap, 0.25rem);\n flex-shrink: 0;\n display: flex;\n align-items: center;\n }\n\n .label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n }\n\n .children {\n padding-left: var(--tree-indent, 1rem);\n }\n\n .children[data-collapsed] {\n display: none;\n }\n `;\n\n @consume({ context: treeContext, subscribe: true })\n treeContext?: TreeContext;\n\n @property({ type: Object, attribute: false })\n item!: TreeItem;\n\n @state()\n private localExpanded = true;\n\n get isSelected(): boolean {\n if (!this.treeContext || !this.item) return false;\n return this.treeContext.state.selectedId === this.item.id;\n }\n\n get isExpanded(): boolean {\n if (!this.treeContext || !this.item) return this.localExpanded;\n return this.treeContext.state.expandedIds.has(this.item.id);\n }\n\n get hasChildren(): boolean {\n return Boolean(this.item?.children && this.item.children.length > 0);\n }\n\n private handleClick(e: Event): void {\n e.stopPropagation();\n if (this.treeContext && this.item) {\n this.treeContext.actions.select(this.item.id);\n }\n }\n\n private handleExpandClick(e: Event): void {\n e.stopPropagation();\n if (this.treeContext && this.item) {\n this.treeContext.actions.toggleExpanded(this.item.id);\n } else {\n this.localExpanded = !this.localExpanded;\n }\n }\n\n render() {\n if (!this.item) return nothing;\n\n const expanded = this.isExpanded;\n\n return html`\n <div\n class=\"item-row\"\n ?data-selected=${this.isSelected}\n @click=${this.handleClick}\n >\n ${this.hasChildren\n ? html`\n <span\n class=\"expand-icon\"\n ?data-expanded=${expanded}\n @click=${this.handleExpandClick}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n </span>\n `\n : html`<span class=\"expand-icon\"></span>`}\n ${this.item.icon\n ? html`<span class=\"icon\">${this.item.icon}</span>`\n : nothing}\n <span class=\"label\">${this.item.label}</span>\n </div>\n ${this.hasChildren\n ? html`\n <div class=\"children\" ?data-collapsed=${!expanded}>\n ${this.item.children!.map(\n (child) => html`<ef-tree-item .item=${child}></ef-tree-item>`\n )}\n </div>\n `\n : nothing}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-tree-item\": EFTreeItem;\n }\n}\n"],"mappings":";;;;;;;AAmBO,uBAAMA,qBAAmB,WAAW;;;uBA4EjB;;;gBA3ER,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6EnB,IAAI,aAAsB;AACxB,MAAI,CAAC,KAAK,eAAe,CAAC,KAAK,KAAM,QAAO;AAC5C,SAAO,KAAK,YAAY,MAAM,eAAe,KAAK,KAAK;;CAGzD,IAAI,aAAsB;AACxB,MAAI,CAAC,KAAK,eAAe,CAAC,KAAK,KAAM,QAAO,KAAK;AACjD,SAAO,KAAK,YAAY,MAAM,YAAY,IAAI,KAAK,KAAK,GAAG;;CAG7D,IAAI,cAAuB;AACzB,SAAO,QAAQ,KAAK,MAAM,YAAY,KAAK,KAAK,SAAS,SAAS,EAAE;;CAGtE,AAAQ,YAAY,GAAgB;AAClC,IAAE,iBAAiB;AACnB,MAAI,KAAK,eAAe,KAAK,KAC3B,MAAK,YAAY,QAAQ,OAAO,KAAK,KAAK,GAAG;;CAIjD,AAAQ,kBAAkB,GAAgB;AACxC,IAAE,iBAAiB;AACnB,MAAI,KAAK,eAAe,KAAK,KAC3B,MAAK,YAAY,QAAQ,eAAe,KAAK,KAAK,GAAG;MAErD,MAAK,gBAAgB,CAAC,KAAK;;CAI/B,SAAS;AACP,MAAI,CAAC,KAAK,KAAM,QAAO;EAEvB,MAAM,WAAW,KAAK;AAEtB,SAAO,IAAI;;;yBAGU,KAAK,WAAW;iBACxB,KAAK,YAAY;;UAExB,KAAK,cACH,IAAI;;;iCAGiB,SAAS;yBACjB,KAAK,kBAAkB;;;;;;gBAOpC,IAAI,oCAAoC;UAC1C,KAAK,KAAK,OACR,IAAI,sBAAsB,KAAK,KAAK,KAAK,WACzC,QAAQ;8BACU,KAAK,KAAK,MAAM;;QAEtC,KAAK,cACH,IAAI;oDACsC,CAAC,SAAS;gBAC9C,KAAK,KAAK,SAAU,KACnB,UAAU,IAAI,uBAAuB,MAAM,kBAC7C,CAAC;;cAGN,QAAQ;;;;YA5Ef,QAAQ;CAAE,SAAS;CAAa,WAAW;CAAM,CAAC;YAGlD,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAO,CAAC;YAG5C,OAAO;yBA5ET,cAAc,eAAe"}
@@ -0,0 +1,60 @@
1
+ import { TemplateResult } from "lit";
2
+
3
+ //#region src/gui/tree/treeContext.d.ts
4
+
5
+ /**
6
+ * Generic tree item data structure.
7
+ * Used by ef-tree for data-driven tree rendering.
8
+ */
9
+ interface TreeItem {
10
+ /** Unique identifier for this item */
11
+ id: string;
12
+ /** Display label */
13
+ label: string;
14
+ /** Optional icon (Lit TemplateResult or string) */
15
+ icon?: TemplateResult | string;
16
+ /** Child items (folders have children, leaves don't) */
17
+ children?: TreeItem[];
18
+ /** Arbitrary payload data */
19
+ data?: unknown;
20
+ }
21
+ /**
22
+ * Tree component state
23
+ */
24
+ interface TreeState {
25
+ /** Currently selected item ID */
26
+ selectedId: string | null;
27
+ /** Set of expanded item IDs */
28
+ expandedIds: Set<string>;
29
+ }
30
+ /**
31
+ * Tree component actions
32
+ */
33
+ interface TreeActions {
34
+ /** Select an item by ID */
35
+ select: (id: string | null) => void;
36
+ /** Toggle an item's expanded state */
37
+ toggleExpanded: (id: string) => void;
38
+ /** Set an item's expanded state explicitly */
39
+ setExpanded: (id: string, expanded: boolean) => void;
40
+ }
41
+ /**
42
+ * Tree context provided to tree items
43
+ */
44
+ interface TreeContext {
45
+ state: TreeState;
46
+ actions: TreeActions;
47
+ }
48
+ /**
49
+ * Lit context for tree components
50
+ */
51
+ declare const treeContext: {
52
+ __context__: TreeContext;
53
+ };
54
+ /**
55
+ * Helper to collect all item IDs from a tree (for default expanded state)
56
+ */
57
+ declare function collectAllIds(items: TreeItem[]): Set<string>;
58
+ //#endregion
59
+ export { TreeActions, TreeContext, TreeItem, TreeState, collectAllIds, treeContext };
60
+ //# sourceMappingURL=treeContext.d.ts.map
@@ -0,0 +1,23 @@
1
+ import { createContext } from "@lit/context";
2
+
3
+ //#region src/gui/tree/treeContext.ts
4
+ /**
5
+ * Lit context for tree components
6
+ */
7
+ const treeContext = createContext("ef-tree-context");
8
+ /**
9
+ * Helper to collect all item IDs from a tree (for default expanded state)
10
+ */
11
+ function collectAllIds(items) {
12
+ const ids = /* @__PURE__ */ new Set();
13
+ function traverse(item) {
14
+ ids.add(item.id);
15
+ if (item.children) for (const child of item.children) traverse(child);
16
+ }
17
+ for (const item of items) traverse(item);
18
+ return ids;
19
+ }
20
+
21
+ //#endregion
22
+ export { collectAllIds, treeContext };
23
+ //# sourceMappingURL=treeContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treeContext.js","names":[],"sources":["../../../src/gui/tree/treeContext.ts"],"sourcesContent":["import { createContext } from \"@lit/context\";\nimport type { TemplateResult } from \"lit\";\n\n/**\n * Generic tree item data structure.\n * Used by ef-tree for data-driven tree rendering.\n */\nexport interface TreeItem {\n /** Unique identifier for this item */\n id: string;\n /** Display label */\n label: string;\n /** Optional icon (Lit TemplateResult or string) */\n icon?: TemplateResult | string;\n /** Child items (folders have children, leaves don't) */\n children?: TreeItem[];\n /** Arbitrary payload data */\n data?: unknown;\n}\n\n/**\n * Tree component state\n */\nexport interface TreeState {\n /** Currently selected item ID */\n selectedId: string | null;\n /** Set of expanded item IDs */\n expandedIds: Set<string>;\n}\n\n/**\n * Tree component actions\n */\nexport interface TreeActions {\n /** Select an item by ID */\n select: (id: string | null) => void;\n /** Toggle an item's expanded state */\n toggleExpanded: (id: string) => void;\n /** Set an item's expanded state explicitly */\n setExpanded: (id: string, expanded: boolean) => void;\n}\n\n/**\n * Tree context provided to tree items\n */\nexport interface TreeContext {\n state: TreeState;\n actions: TreeActions;\n}\n\n/**\n * Lit context for tree components\n */\nexport const treeContext = createContext<TreeContext>(\"ef-tree-context\");\n\n/**\n * Helper to collect all item IDs from a tree (for default expanded state)\n */\nexport function collectAllIds(items: TreeItem[]): Set<string> {\n const ids = new Set<string>();\n \n function traverse(item: TreeItem) {\n ids.add(item.id);\n if (item.children) {\n for (const child of item.children) {\n traverse(child);\n }\n }\n }\n \n for (const item of items) {\n traverse(item);\n }\n \n return ids;\n}\n"],"mappings":";;;;;;AAqDA,MAAa,cAAc,cAA2B,kBAAkB;;;;AAKxE,SAAgB,cAAc,OAAgC;CAC5D,MAAM,sBAAM,IAAI,KAAa;CAE7B,SAAS,SAAS,MAAgB;AAChC,MAAI,IAAI,KAAK,GAAG;AAChB,MAAI,KAAK,SACP,MAAK,MAAM,SAAS,KAAK,SACvB,UAAS,MAAM;;AAKrB,MAAK,MAAM,QAAQ,MACjB,UAAS,KAAK;AAGhB,QAAO"}
package/dist/index.d.ts CHANGED
@@ -1,29 +1,53 @@
1
1
  import { TraceContext } from "./otel/tracingHelpers.js";
2
+ import { TemporalMixinInterface, isEFTemporal } from "./elements/EFTemporal.js";
2
3
  import { EFMedia } from "./elements/EFMedia.js";
3
- import { EFTimegroup } from "./elements/EFTimegroup.js";
4
- import { EFImage } from "./elements/EFImage.js";
5
- import { EFAudio } from "./elements/EFAudio.js";
4
+ import { ContainerInfo, getContainerInfoFromElement } from "./elements/ContainerInfo.js";
5
+ import { ElementPositionInfo, PositionInfoMixin, getPositionInfoFromElement } from "./elements/ElementPositionInfo.js";
6
+ import { CanvasElementBounds, CanvasElementData, SelectionState } from "./canvas/api/types.js";
7
+ import { EFPanZoom, PanZoomTransform } from "./elements/EFPanZoom.js";
8
+ import { EFOverlayItem, OverlayItemPosition } from "./gui/EFOverlayItem.js";
9
+ import { EFOverlayLayer } from "./gui/EFOverlayLayer.js";
10
+ import { EFTransformHandles, TransformBounds } from "./gui/EFTransformHandles.js";
11
+ import { EFCanvas } from "./canvas/EFCanvas.js";
12
+ import { EFHierarchy } from "./gui/hierarchy/EFHierarchy.js";
13
+ import { EFTrimHandles, TrimChangeDetail } from "./gui/timeline/TrimHandles.js";
6
14
  import { EFVideo } from "./elements/EFVideo.js";
15
+ import { EFThumbnailStrip } from "./elements/EFThumbnailStrip.js";
16
+ import { EFAudio } from "./elements/EFAudio.js";
7
17
  import { EFCaptions, EFCaptionsActiveWord, EFCaptionsAfterActiveWord, EFCaptionsBeforeActiveWord, EFCaptionsSegment } from "./elements/EFCaptions.js";
18
+ import { EFTimelineRuler, calculateFrameIntervalMs, calculatePixelsPerFrame, quantizeToFrameTimeMs, shouldShowFrameMarkers } from "./gui/EFTimelineRuler.js";
19
+ import { EFTimeline } from "./gui/timeline/EFTimeline.js";
20
+ import { EFFilmstrip } from "./gui/EFFilmstrip.js";
21
+ import { EFFitScale } from "./gui/EFFitScale.js";
22
+ import { EFWorkbench } from "./gui/EFWorkbench.js";
23
+ import { EFTimegroup } from "./elements/EFTimegroup.js";
24
+ import { elementNeedsFitScale, needsFitScale } from "./gui/FitScaleHelpers.js";
25
+ import { EFImage } from "./elements/EFImage.js";
8
26
  import { EFTextSegment } from "./elements/EFTextSegment.js";
9
27
  import { EFText } from "./elements/EFText.js";
10
28
  import { EFWaveform } from "./elements/EFWaveform.js";
11
29
  import { EFConfiguration } from "./gui/EFConfiguration.js";
12
- import { EFWorkbench } from "./gui/EFWorkbench.js";
13
30
  import { EFPreview } from "./gui/EFPreview.js";
14
- import { EFFilmstrip } from "./gui/EFFilmstrip.js";
31
+ import { HierarchyActions, HierarchyContext, HierarchyState, hierarchyContext } from "./gui/hierarchy/hierarchyContext.js";
32
+ import { EFAudioHierarchyItem, EFCaptionsActiveWordHierarchyItem, EFCaptionsHierarchyItem, EFHTMLHierarchyItem, EFHierarchyItem, EFImageHierarchyItem, EFTextHierarchyItem, EFTextSegmentHierarchyItem, EFTimegroupHierarchyItem, EFVideoHierarchyItem, EFWaveformHierarchyItem } from "./gui/hierarchy/EFHierarchyItem.js";
33
+ import { TreeActions, TreeContext, TreeItem, TreeState, collectAllIds, treeContext } from "./gui/tree/treeContext.js";
34
+ import { EFTreeItem } from "./gui/tree/EFTreeItem.js";
35
+ import { EFTree } from "./gui/tree/EFTree.js";
15
36
  import { EFTogglePlay } from "./gui/EFTogglePlay.js";
16
37
  import { EFPlay } from "./gui/EFPlay.js";
17
38
  import { EFPause } from "./gui/EFPause.js";
18
39
  import { EFToggleLoop } from "./gui/EFToggleLoop.js";
19
40
  import { EFScrubber } from "./gui/EFScrubber.js";
20
41
  import { EFTimeDisplay } from "./gui/EFTimeDisplay.js";
42
+ import { EFActiveRootTemporal } from "./gui/EFActiveRootTemporal.js";
21
43
  import { DialChangeDetail, EFDial } from "./gui/EFDial.js";
22
44
  import { EFControls } from "./gui/EFControls.js";
23
45
  import { EFFocusOverlay } from "./gui/EFFocusOverlay.js";
46
+ import { getCornerPoint, getOppositeCorner, rotatePoint } from "./gui/transformUtils.js";
24
47
  import { BoxBounds, EFResizableBox } from "./gui/EFResizableBox.js";
25
- import { EFFitScale } from "./gui/EFFitScale.js";
26
48
  import { EFSurface } from "./elements/EFSurface.js";
27
- import { EFThumbnailStrip } from "./elements/EFThumbnailStrip.js";
49
+ import { EFCanvasItem } from "./canvas/EFCanvasItem.js";
50
+ import { CanvasAPI } from "./canvas/api/CanvasAPI.js";
51
+ import { SelectionModel } from "./canvas/selection/SelectionModel.js";
28
52
  import { RenderInfo, getRenderInfo } from "./getRenderInfo.js";
29
- export { type BoxBounds, type DialChangeDetail, EFAudio, EFCaptions, EFCaptionsActiveWord, EFCaptionsAfterActiveWord, EFCaptionsBeforeActiveWord, EFCaptionsSegment, EFConfiguration, EFControls, EFDial, EFFilmstrip, EFFitScale, EFFocusOverlay, EFImage, type EFMedia, EFPause, EFPlay, EFPreview, EFResizableBox, EFScrubber, EFSurface, EFText, EFTextSegment, EFThumbnailStrip, EFTimeDisplay, EFTimegroup, EFToggleLoop, EFTogglePlay, EFVideo, EFWaveform, EFWorkbench, RenderInfo, type TraceContext, getRenderInfo };
53
+ export { type BoxBounds, CanvasAPI, type CanvasElementBounds, type CanvasElementData, type ContainerInfo, type DialChangeDetail, EFActiveRootTemporal, EFAudio, EFAudioHierarchyItem, EFCanvas, EFCanvasItem, EFCaptions, EFCaptionsActiveWord, EFCaptionsActiveWordHierarchyItem, EFCaptionsAfterActiveWord, EFCaptionsBeforeActiveWord, EFCaptionsHierarchyItem, EFCaptionsSegment, EFConfiguration, EFControls, EFDial, EFFilmstrip, EFFitScale, EFFocusOverlay, EFHTMLHierarchyItem, EFHierarchy, EFHierarchyItem, EFImage, EFImageHierarchyItem, type EFMedia, EFOverlayItem, EFOverlayLayer, EFPanZoom, EFPause, EFPlay, EFPreview, EFResizableBox, EFScrubber, EFSurface, EFText, EFTextHierarchyItem, EFTextSegment, EFTextSegmentHierarchyItem, EFThumbnailStrip, EFTimeDisplay, EFTimegroup, EFTimegroupHierarchyItem, EFTimeline, EFTimelineRuler, EFToggleLoop, EFTogglePlay, EFTransformHandles, EFTree, EFTreeItem, EFTrimHandles, EFVideo, EFVideoHierarchyItem, EFWaveform, EFWaveformHierarchyItem, EFWorkbench, type ElementPositionInfo, type HierarchyActions, type HierarchyContext, type HierarchyState, type OverlayItemPosition, type PanZoomTransform, PositionInfoMixin, RenderInfo, SelectionModel, type SelectionState, type TemporalMixinInterface, type TraceContext, type TransformBounds, type TreeActions, type TreeContext, type TreeItem, type TreeState, type TrimChangeDetail, calculateFrameIntervalMs, calculatePixelsPerFrame, collectAllIds, elementNeedsFitScale, getContainerInfoFromElement, getCornerPoint, getOppositeCorner, getPositionInfoFromElement, getRenderInfo, hierarchyContext, isEFTemporal, needsFitScale, quantizeToFrameTimeMs, rotatePoint, shouldShowFrameMarkers, treeContext };