@editframe/elements 0.20.4-beta.0 → 0.23.6-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 (183) hide show
  1. package/dist/DelayedLoadingState.js +0 -27
  2. package/dist/EF_FRAMEGEN.d.ts +5 -3
  3. package/dist/EF_FRAMEGEN.js +49 -11
  4. package/dist/_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.js +7 -0
  5. package/dist/attachContextRoot.d.ts +1 -0
  6. package/dist/attachContextRoot.js +9 -0
  7. package/dist/elements/ContextProxiesController.d.ts +1 -2
  8. package/dist/elements/EFAudio.js +5 -9
  9. package/dist/elements/EFCaptions.d.ts +1 -3
  10. package/dist/elements/EFCaptions.js +112 -129
  11. package/dist/elements/EFImage.js +6 -7
  12. package/dist/elements/EFMedia/AssetIdMediaEngine.js +2 -5
  13. package/dist/elements/EFMedia/AssetMediaEngine.js +36 -33
  14. package/dist/elements/EFMedia/BaseMediaEngine.js +57 -73
  15. package/dist/elements/EFMedia/BufferedSeekingInput.d.ts +1 -1
  16. package/dist/elements/EFMedia/BufferedSeekingInput.js +134 -78
  17. package/dist/elements/EFMedia/JitMediaEngine.js +9 -19
  18. package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.js +7 -13
  19. package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js +2 -3
  20. package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.js +1 -1
  21. package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js +6 -5
  22. package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js +1 -3
  23. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js +1 -1
  24. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js +1 -1
  25. package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js +1 -1
  26. package/dist/elements/EFMedia/shared/AudioSpanUtils.js +9 -25
  27. package/dist/elements/EFMedia/shared/BufferUtils.js +2 -17
  28. package/dist/elements/EFMedia/shared/GlobalInputCache.js +0 -24
  29. package/dist/elements/EFMedia/shared/PrecisionUtils.js +0 -21
  30. package/dist/elements/EFMedia/shared/ThumbnailExtractor.js +0 -17
  31. package/dist/elements/EFMedia/tasks/makeMediaEngineTask.js +1 -10
  32. package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.d.ts +29 -0
  33. package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.js +32 -0
  34. package/dist/elements/EFMedia/videoTasks/ScrubInputCache.js +1 -15
  35. package/dist/elements/EFMedia/videoTasks/makeScrubVideoBufferTask.js +1 -7
  36. package/dist/elements/EFMedia/videoTasks/makeScrubVideoInputTask.js +8 -5
  37. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSeekTask.js +12 -13
  38. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentIdTask.js +1 -1
  39. package/dist/elements/EFMedia/videoTasks/makeUnifiedVideoSeekTask.js +134 -70
  40. package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.js +11 -18
  41. package/dist/elements/EFMedia.d.ts +19 -0
  42. package/dist/elements/EFMedia.js +44 -25
  43. package/dist/elements/EFSourceMixin.js +5 -7
  44. package/dist/elements/EFSurface.js +6 -9
  45. package/dist/elements/EFTemporal.browsertest.d.ts +11 -0
  46. package/dist/elements/EFTemporal.d.ts +10 -0
  47. package/dist/elements/EFTemporal.js +100 -41
  48. package/dist/elements/EFThumbnailStrip.js +23 -73
  49. package/dist/elements/EFTimegroup.browsertest.d.ts +3 -3
  50. package/dist/elements/EFTimegroup.d.ts +35 -14
  51. package/dist/elements/EFTimegroup.js +138 -181
  52. package/dist/elements/EFVideo.d.ts +16 -2
  53. package/dist/elements/EFVideo.js +156 -108
  54. package/dist/elements/EFWaveform.js +23 -40
  55. package/dist/elements/SampleBuffer.js +3 -7
  56. package/dist/elements/TargetController.js +5 -5
  57. package/dist/elements/durationConverter.js +4 -4
  58. package/dist/elements/renderTemporalAudio.d.ts +10 -0
  59. package/dist/elements/renderTemporalAudio.js +35 -0
  60. package/dist/elements/updateAnimations.js +19 -43
  61. package/dist/gui/ContextMixin.d.ts +5 -5
  62. package/dist/gui/ContextMixin.js +167 -162
  63. package/dist/gui/Controllable.browsertest.d.ts +0 -0
  64. package/dist/gui/Controllable.d.ts +15 -0
  65. package/dist/gui/Controllable.js +9 -0
  66. package/dist/gui/EFConfiguration.js +7 -7
  67. package/dist/gui/EFControls.browsertest.d.ts +11 -0
  68. package/dist/gui/EFControls.d.ts +18 -4
  69. package/dist/gui/EFControls.js +70 -28
  70. package/dist/gui/EFDial.browsertest.d.ts +0 -0
  71. package/dist/gui/EFDial.d.ts +18 -0
  72. package/dist/gui/EFDial.js +141 -0
  73. package/dist/gui/EFFilmstrip.browsertest.d.ts +11 -0
  74. package/dist/gui/EFFilmstrip.d.ts +12 -2
  75. package/dist/gui/EFFilmstrip.js +214 -129
  76. package/dist/gui/EFFitScale.js +5 -8
  77. package/dist/gui/EFFocusOverlay.js +4 -4
  78. package/dist/gui/EFPause.browsertest.d.ts +0 -0
  79. package/dist/gui/EFPause.d.ts +23 -0
  80. package/dist/gui/EFPause.js +59 -0
  81. package/dist/gui/EFPlay.browsertest.d.ts +0 -0
  82. package/dist/gui/EFPlay.d.ts +23 -0
  83. package/dist/gui/EFPlay.js +59 -0
  84. package/dist/gui/EFPreview.d.ts +4 -0
  85. package/dist/gui/EFPreview.js +18 -9
  86. package/dist/gui/EFResizableBox.browsertest.d.ts +0 -0
  87. package/dist/gui/EFResizableBox.d.ts +34 -0
  88. package/dist/gui/EFResizableBox.js +547 -0
  89. package/dist/gui/EFScrubber.d.ts +9 -3
  90. package/dist/gui/EFScrubber.js +13 -13
  91. package/dist/gui/EFTimeDisplay.d.ts +7 -1
  92. package/dist/gui/EFTimeDisplay.js +8 -8
  93. package/dist/gui/EFToggleLoop.d.ts +9 -3
  94. package/dist/gui/EFToggleLoop.js +7 -5
  95. package/dist/gui/EFTogglePlay.d.ts +12 -4
  96. package/dist/gui/EFTogglePlay.js +26 -21
  97. package/dist/gui/EFWorkbench.js +5 -5
  98. package/dist/gui/PlaybackController.d.ts +67 -0
  99. package/dist/gui/PlaybackController.js +310 -0
  100. package/dist/gui/TWMixin.js +1 -1
  101. package/dist/gui/TWMixin2.js +1 -1
  102. package/dist/gui/TargetOrContextMixin.d.ts +10 -0
  103. package/dist/gui/TargetOrContextMixin.js +98 -0
  104. package/dist/gui/efContext.d.ts +2 -2
  105. package/dist/index.d.ts +5 -0
  106. package/dist/index.js +5 -1
  107. package/dist/otel/BridgeSpanExporter.d.ts +13 -0
  108. package/dist/otel/BridgeSpanExporter.js +87 -0
  109. package/dist/otel/setupBrowserTracing.d.ts +12 -0
  110. package/dist/otel/setupBrowserTracing.js +32 -0
  111. package/dist/otel/tracingHelpers.d.ts +34 -0
  112. package/dist/otel/tracingHelpers.js +112 -0
  113. package/dist/style.css +1 -1
  114. package/dist/transcoding/cache/RequestDeduplicator.js +0 -21
  115. package/dist/transcoding/cache/URLTokenDeduplicator.js +1 -21
  116. package/dist/transcoding/utils/UrlGenerator.js +2 -19
  117. package/dist/utils/LRUCache.js +6 -53
  118. package/package.json +13 -5
  119. package/src/elements/ContextProxiesController.ts +10 -10
  120. package/src/elements/EFAudio.ts +1 -0
  121. package/src/elements/EFCaptions.browsertest.ts +128 -56
  122. package/src/elements/EFCaptions.ts +60 -34
  123. package/src/elements/EFImage.browsertest.ts +1 -2
  124. package/src/elements/EFMedia/AssetMediaEngine.ts +65 -37
  125. package/src/elements/EFMedia/BaseMediaEngine.ts +110 -52
  126. package/src/elements/EFMedia/BufferedSeekingInput.ts +218 -101
  127. package/src/elements/EFMedia/JitMediaEngine.browsertest.ts +3 -0
  128. package/src/elements/EFMedia/audioTasks/makeAudioInputTask.ts +7 -3
  129. package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.chunkboundary.regression.browsertest.ts +1 -1
  130. package/src/elements/EFMedia/videoTasks/MainVideoInputCache.ts +76 -0
  131. package/src/elements/EFMedia/videoTasks/makeScrubVideoInputTask.ts +16 -10
  132. package/src/elements/EFMedia/videoTasks/makeScrubVideoSeekTask.ts +7 -1
  133. package/src/elements/EFMedia/videoTasks/makeUnifiedVideoSeekTask.ts +222 -116
  134. package/src/elements/EFMedia.browsertest.ts +8 -15
  135. package/src/elements/EFMedia.ts +54 -8
  136. package/src/elements/EFSurface.browsertest.ts +2 -6
  137. package/src/elements/EFSurface.ts +1 -0
  138. package/src/elements/EFTemporal.browsertest.ts +58 -1
  139. package/src/elements/EFTemporal.ts +140 -4
  140. package/src/elements/EFThumbnailStrip.browsertest.ts +2 -8
  141. package/src/elements/EFThumbnailStrip.ts +1 -0
  142. package/src/elements/EFTimegroup.browsertest.ts +16 -15
  143. package/src/elements/EFTimegroup.ts +281 -275
  144. package/src/elements/EFVideo.browsertest.ts +162 -74
  145. package/src/elements/EFVideo.ts +229 -101
  146. package/src/elements/FetchContext.browsertest.ts +7 -2
  147. package/src/elements/TargetController.browsertest.ts +1 -0
  148. package/src/elements/TargetController.ts +1 -0
  149. package/src/elements/renderTemporalAudio.ts +108 -0
  150. package/src/elements/updateAnimations.browsertest.ts +181 -6
  151. package/src/elements/updateAnimations.ts +6 -6
  152. package/src/gui/ContextMixin.browsertest.ts +274 -27
  153. package/src/gui/ContextMixin.ts +230 -175
  154. package/src/gui/Controllable.browsertest.ts +258 -0
  155. package/src/gui/Controllable.ts +41 -0
  156. package/src/gui/EFControls.browsertest.ts +294 -80
  157. package/src/gui/EFControls.ts +139 -28
  158. package/src/gui/EFDial.browsertest.ts +84 -0
  159. package/src/gui/EFDial.ts +172 -0
  160. package/src/gui/EFFilmstrip.browsertest.ts +712 -0
  161. package/src/gui/EFFilmstrip.ts +213 -23
  162. package/src/gui/EFPause.browsertest.ts +202 -0
  163. package/src/gui/EFPause.ts +73 -0
  164. package/src/gui/EFPlay.browsertest.ts +202 -0
  165. package/src/gui/EFPlay.ts +73 -0
  166. package/src/gui/EFPreview.ts +20 -5
  167. package/src/gui/EFResizableBox.browsertest.ts +79 -0
  168. package/src/gui/EFResizableBox.ts +898 -0
  169. package/src/gui/EFScrubber.ts +7 -5
  170. package/src/gui/EFTimeDisplay.browsertest.ts +19 -19
  171. package/src/gui/EFTimeDisplay.ts +3 -1
  172. package/src/gui/EFToggleLoop.ts +6 -5
  173. package/src/gui/EFTogglePlay.ts +30 -23
  174. package/src/gui/PlaybackController.ts +522 -0
  175. package/src/gui/TWMixin.css +3 -0
  176. package/src/gui/TargetOrContextMixin.ts +185 -0
  177. package/src/gui/efContext.ts +2 -2
  178. package/src/otel/BridgeSpanExporter.ts +150 -0
  179. package/src/otel/setupBrowserTracing.ts +73 -0
  180. package/src/otel/tracingHelpers.ts +251 -0
  181. package/test/cache-integration-verification.browsertest.ts +1 -1
  182. package/types.json +1 -1
  183. package/dist/elements/ContextProxiesController.js +0 -69
@@ -0,0 +1,11 @@
1
+ import { LitElement } from 'lit';
2
+ declare const EFControlsTestContext_base: (new (...args: any[]) => import('./ContextMixin.js').ContextMixinInterface) & typeof LitElement;
3
+ declare class EFControlsTestContext extends EFControlsTestContext_base {
4
+ render(): import('lit-html').TemplateResult<1>;
5
+ }
6
+ declare global {
7
+ interface HTMLElementTagNameMap {
8
+ "ef-controls-test-context": EFControlsTestContext;
9
+ }
10
+ }
11
+ export {};
@@ -1,5 +1,10 @@
1
- import { LitElement } from 'lit';
2
- import { ContextMixinInterface } from './ContextMixin.js';
1
+ import { LitElement, PropertyValueMap } from 'lit';
2
+ import { TemporalMixinInterface } from '../elements/EFTemporal.js';
3
+ import { ControllableInterface } from './Controllable.js';
4
+ import { FocusContext } from './focusContext.js';
5
+ export declare const testContext: {
6
+ __context__: string | null;
7
+ };
3
8
  /**
4
9
  * EFControls provides a way to control an ef-preview element that is not a direct ancestor.
5
10
  * It bridges the contexts from a target preview element to its children controls.
@@ -21,6 +26,7 @@ import { ContextMixinInterface } from './ContextMixin.js';
21
26
  export declare class EFControls extends LitElement {
22
27
  #private;
23
28
  static styles: import('lit').CSSResult;
29
+ createRenderRoot(): this;
24
30
  /**
25
31
  * The ID of the ef-preview element to control
26
32
  */
@@ -28,8 +34,16 @@ export declare class EFControls extends LitElement {
28
34
  /**
29
35
  * The target element (set by TargetController)
30
36
  */
31
- targetElement: ContextMixinInterface | null;
32
- render(): import('lit-html').TemplateResult<1>;
37
+ targetElement: ControllableInterface | null;
38
+ playing: boolean;
39
+ loop: boolean;
40
+ currentTimeMs: number;
41
+ durationMs: number;
42
+ targetTemporal: TemporalMixinInterface | null;
43
+ focusedElement?: HTMLElement;
44
+ focusContext: FocusContext;
45
+ updated(changedProperties: PropertyValueMap<this>): void;
46
+ disconnectedCallback(): void;
33
47
  }
34
48
  declare global {
35
49
  interface HTMLElementTagNameMap {
@@ -1,22 +1,50 @@
1
1
  import { currentTimeContext } from "./currentTimeContext.js";
2
2
  import { durationContext } from "./durationContext.js";
3
- import { efConfigurationContext } from "./EFConfiguration.js";
3
+ import { loopContext, playingContext } from "./playingContext.js";
4
+ import { __decorate } from "../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.js";
4
5
  import { efContext } from "./efContext.js";
5
- import { fetchContext } from "./fetchContext.js";
6
6
  import { focusContext } from "./focusContext.js";
7
7
  import { focusedElementContext } from "./focusedElementContext.js";
8
- import { loopContext, playingContext } from "./playingContext.js";
9
- import { targetTimegroupContext } from "./ContextMixin.js";
8
+ import { targetTemporalContext } from "./ContextMixin.js";
10
9
  import { TargetController } from "../elements/TargetController.js";
11
- import { ContextProxyController } from "../elements/ContextProxiesController.js";
12
- import { LitElement, css, html } from "lit";
10
+ import { attachContextRoot } from "../attachContextRoot.js";
11
+ import { createContext, provide } from "@lit/context";
12
+ import { LitElement, css } from "lit";
13
13
  import { customElement, property, state } from "lit/decorators.js";
14
- import _decorate from "@oxc-project/runtime/helpers/decorate";
15
- let EFControls = class EFControls$1 extends LitElement {
14
+ attachContextRoot();
15
+ var ContextRequestEvent = class extends Event {
16
+ constructor(context, contextTarget, callback, subscribe) {
17
+ super("context-request", {
18
+ bubbles: true,
19
+ composed: true
20
+ });
21
+ this.context = context;
22
+ this.contextTarget = contextTarget;
23
+ this.callback = callback;
24
+ this.subscribe = subscribe ?? false;
25
+ }
26
+ };
27
+ var proxiedContexts = [
28
+ [(proxy, value) => proxy.playing = value, playingContext],
29
+ [(proxy, value) => proxy.loop = value, loopContext],
30
+ [(proxy, value) => proxy.currentTimeMs = value, currentTimeContext],
31
+ [(proxy, value) => proxy.durationMs = value, durationContext],
32
+ [(proxy, value) => proxy.targetTemporal = value, targetTemporalContext],
33
+ [(proxy, value) => proxy.focusedElement = value, focusedElementContext],
34
+ [(proxy, value) => proxy.focusContext.focusedElement = value, focusContext]
35
+ ];
36
+ createContext("test");
37
+ var EFControls = class EFControls$1 extends LitElement {
16
38
  constructor(..._args) {
17
39
  super(..._args);
18
40
  this.target = "";
19
41
  this.targetElement = null;
42
+ this.playing = false;
43
+ this.loop = false;
44
+ this.currentTimeMs = 0;
45
+ this.durationMs = 0;
46
+ this.targetTemporal = null;
47
+ this.focusContext = this;
20
48
  }
21
49
  static {
22
50
  this.styles = css`
@@ -25,27 +53,41 @@ let EFControls = class EFControls$1 extends LitElement {
25
53
  }
26
54
  `;
27
55
  }
56
+ createRenderRoot() {
57
+ return this;
58
+ }
28
59
  #targetController = new TargetController(this);
29
- #contextProxyController = new ContextProxyController(this, {
30
- target: () => this.targetElement,
31
- contexts: [
32
- playingContext,
33
- loopContext,
34
- currentTimeContext,
35
- durationContext,
36
- targetTimegroupContext,
37
- focusedElementContext,
38
- efContext,
39
- fetchContext,
40
- focusContext,
41
- efConfigurationContext
42
- ]
43
- });
44
- render() {
45
- return html`<slot></slot>`;
60
+ #proxyUnsubscribeMap = /* @__PURE__ */ new Map();
61
+ #unsubscribe() {
62
+ for (const unsubscribe of this.#proxyUnsubscribeMap.values()) unsubscribe();
63
+ this.#proxyUnsubscribeMap.clear();
64
+ }
65
+ updated(changedProperties) {
66
+ super.updated(changedProperties);
67
+ if (changedProperties.has("targetElement")) {
68
+ this.#unsubscribe();
69
+ if (this.targetElement) for (const [callback, context] of proxiedContexts) {
70
+ const event = new ContextRequestEvent(context, this, (value, unsubscribe) => {
71
+ callback(this, value);
72
+ this.#proxyUnsubscribeMap.set(context, unsubscribe);
73
+ }, true);
74
+ this.targetElement.dispatchEvent(event);
75
+ }
76
+ }
77
+ }
78
+ disconnectedCallback() {
79
+ super.disconnectedCallback();
80
+ this.#unsubscribe();
46
81
  }
47
82
  };
48
- _decorate([property({ type: String })], EFControls.prototype, "target", void 0);
49
- _decorate([state()], EFControls.prototype, "targetElement", void 0);
50
- EFControls = _decorate([customElement("ef-controls")], EFControls);
83
+ __decorate([property({ type: String })], EFControls.prototype, "target", void 0);
84
+ __decorate([provide({ context: efContext }), state()], EFControls.prototype, "targetElement", void 0);
85
+ __decorate([provide({ context: playingContext }), state()], EFControls.prototype, "playing", void 0);
86
+ __decorate([provide({ context: loopContext }), state()], EFControls.prototype, "loop", void 0);
87
+ __decorate([provide({ context: currentTimeContext }), state()], EFControls.prototype, "currentTimeMs", void 0);
88
+ __decorate([provide({ context: durationContext }), state()], EFControls.prototype, "durationMs", void 0);
89
+ __decorate([provide({ context: targetTemporalContext }), state()], EFControls.prototype, "targetTemporal", void 0);
90
+ __decorate([provide({ context: focusedElementContext }), state()], EFControls.prototype, "focusedElement", void 0);
91
+ __decorate([provide({ context: focusContext })], EFControls.prototype, "focusContext", void 0);
92
+ EFControls = __decorate([customElement("ef-controls")], EFControls);
51
93
  export { EFControls };
File without changes
@@ -0,0 +1,18 @@
1
+ import { LitElement } from 'lit';
2
+ export interface DialChangeDetail {
3
+ value: number;
4
+ }
5
+ export declare class EFDial extends LitElement {
6
+ set value(newValue: number);
7
+ get value(): number;
8
+ private _value;
9
+ private isDragging;
10
+ private dragStartAngle;
11
+ private dragStartValue;
12
+ static styles: import('lit').CSSResult;
13
+ private getAngleFromPoint;
14
+ private handlePointerDown;
15
+ private handlePointerMove;
16
+ private handlePointerUp;
17
+ render(): import('lit-html').TemplateResult<1>;
18
+ }
@@ -0,0 +1,141 @@
1
+ import { __decorate } from "../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.js";
2
+ import { LitElement, css, html } from "lit";
3
+ import { customElement, property, state } from "lit/decorators.js";
4
+ import { styleMap } from "lit/directives/style-map.js";
5
+ var EFDial = class EFDial$1 extends LitElement {
6
+ constructor(..._args) {
7
+ super(..._args);
8
+ this._value = 0;
9
+ this.isDragging = false;
10
+ this.dragStartAngle = 0;
11
+ this.dragStartValue = 0;
12
+ }
13
+ set value(newValue) {
14
+ newValue = newValue % 360;
15
+ if (newValue < 0) newValue += 360;
16
+ newValue = Number.parseFloat(newValue.toPrecision(6));
17
+ const oldValue = this._value;
18
+ this._value = newValue;
19
+ this.requestUpdate("value", oldValue);
20
+ }
21
+ get value() {
22
+ return this._value;
23
+ }
24
+ static {
25
+ this.styles = css`
26
+ :host {
27
+ display: inline-block;
28
+ width: 200px; /* Default size, can be overridden by CSS */
29
+ height: 200px; /* Default size, can be overridden by CSS */
30
+ }
31
+ .dial-container {
32
+ position: relative;
33
+ width: 100%;
34
+ height: 100%;
35
+ border-radius: 50%;
36
+ background-color: #f3f4f6;
37
+ border: 2px solid #d1d5db;
38
+ }
39
+ .handle {
40
+ position: absolute;
41
+ width: 16px;
42
+ height: 16px;
43
+ border-radius: 50%;
44
+ border: 2px solid #3b82f6;
45
+ background-color: white;
46
+ cursor: grab;
47
+ }
48
+ .handle.dragging {
49
+ background-color: #3b82f6;
50
+ cursor: grabbing;
51
+ }
52
+ .center-text {
53
+ position: absolute;
54
+ top: 50%;
55
+ left: 50%;
56
+ transform: translate(-50%, -50%);
57
+ background-color: white;
58
+ border: 1px solid #d1d5db;
59
+ padding: 2px 4px;
60
+ border-radius: 4px;
61
+ font-family: monospace;
62
+ font-size: 12px;
63
+ }
64
+ `;
65
+ }
66
+ getAngleFromPoint(clientX, clientY, rect) {
67
+ const center = this.clientWidth / 2;
68
+ const x = clientX - rect.left - center;
69
+ const y = clientY - rect.top - center;
70
+ return Math.atan2(y, x);
71
+ }
72
+ handlePointerDown(e) {
73
+ e.preventDefault();
74
+ this.isDragging = true;
75
+ const rect = this.getBoundingClientRect();
76
+ this.dragStartAngle = this.getAngleFromPoint(e.clientX, e.clientY, rect);
77
+ this.dragStartValue = this.value;
78
+ this.setPointerCapture(e.pointerId);
79
+ this.addEventListener("pointermove", this.handlePointerMove);
80
+ this.addEventListener("pointerup", this.handlePointerUp);
81
+ }
82
+ handlePointerMove(e) {
83
+ if (!this.isDragging) return;
84
+ const rect = this.getBoundingClientRect();
85
+ const angleDelta = this.getAngleFromPoint(e.clientX, e.clientY, rect) - this.dragStartAngle;
86
+ let newValue = this.dragStartValue + angleDelta * 180 / Math.PI;
87
+ if (e.shiftKey) newValue = Math.round(newValue / 15) * 15;
88
+ newValue = newValue % 360;
89
+ if (newValue < 0) newValue += 360;
90
+ newValue = Number.parseFloat(newValue.toPrecision(6));
91
+ this.value = newValue;
92
+ this.dispatchEvent(new CustomEvent("change", { detail: { value: this.value } }));
93
+ }
94
+ handlePointerUp(e) {
95
+ this.isDragging = false;
96
+ this.releasePointerCapture(e.pointerId);
97
+ this.removeEventListener("pointermove", this.handlePointerMove);
98
+ this.removeEventListener("pointerup", this.handlePointerUp);
99
+ }
100
+ render() {
101
+ const center = this.clientWidth / 2;
102
+ const radius = center - 20;
103
+ const handleAngle = this.value * Math.PI / 180;
104
+ const handleX = center + Math.cos(handleAngle) * radius;
105
+ const handleY = center + Math.sin(handleAngle) * radius;
106
+ const handleStyles = {
107
+ left: `${handleX - 8}px`,
108
+ top: `${handleY - 8}px`
109
+ };
110
+ return html`
111
+ <div class="dial-container" @pointerdown=${this.handlePointerDown}>
112
+ <svg class="absolute inset-0 w-full h-full">
113
+ <circle
114
+ cx=${center}
115
+ cy=${center}
116
+ r=${radius}
117
+ fill="none"
118
+ stroke="#94a3b8"
119
+ stroke-width="2"
120
+ stroke-dasharray="4 4"
121
+ />
122
+ ${[
123
+ 0,
124
+ 90,
125
+ 180,
126
+ 270
127
+ ].map((deg) => {
128
+ const angle = deg * Math.PI / 180;
129
+ return html`<line x1=${center + Math.cos(angle) * (radius - 8)} y1=${center + Math.sin(angle) * (radius - 8)} x2=${center + Math.cos(angle) * (radius + 8)} y2=${center + Math.sin(angle) * (radius + 8)} stroke="#64748b" stroke-width="2" />`;
130
+ })}
131
+ </svg>
132
+ <div class="handle ${this.isDragging ? "dragging" : ""}" style=${styleMap(handleStyles)}></div>
133
+ <div class="center-text">${this.value.toFixed(0)}°</div>
134
+ </div>
135
+ `;
136
+ }
137
+ };
138
+ __decorate([property({ type: Number })], EFDial.prototype, "value", null);
139
+ __decorate([state()], EFDial.prototype, "isDragging", void 0);
140
+ EFDial = __decorate([customElement("ef-dial")], EFDial);
141
+ export { EFDial };
@@ -0,0 +1,11 @@
1
+ import { LitElement } from 'lit';
2
+ declare const TestContextWrapper_base: (new (...args: any[]) => import('./ContextMixin.js').ContextMixinInterface) & typeof LitElement;
3
+ declare class TestContextWrapper extends TestContextWrapper_base {
4
+ render(): import('lit-html').TemplateResult<1>;
5
+ }
6
+ declare global {
7
+ interface HTMLElementTagNameMap {
8
+ "test-context-wrapper": TestContextWrapper;
9
+ }
10
+ }
11
+ export {};
@@ -34,6 +34,8 @@ declare class FilmstripItem extends FilmstripItem_base {
34
34
  };
35
35
  render(): TemplateResult<1>;
36
36
  renderChildren(): Array<TemplateResult<1> | typeof nothing> | typeof nothing;
37
+ hideSelectors?: string[];
38
+ showSelectors?: string[];
37
39
  contents(): TemplateResult<1>;
38
40
  animations(): (TemplateResult<1> | typeof nothing)[];
39
41
  protected filmstripController?: ElementFilmstripController;
@@ -100,6 +102,8 @@ declare class EFHierarchyItem<ElementType extends HTMLElement = HTMLElement> ext
100
102
  element: ElementType;
101
103
  focusContext?: FocusContext;
102
104
  focusedElement?: HTMLElement | null;
105
+ hideSelectors?: string[];
106
+ showSelectors?: string[];
103
107
  get icon(): TemplateResult<1> | string;
104
108
  get isFocused(): boolean;
105
109
  displayLabel(): TemplateResult<1> | string | typeof nothing;
@@ -140,6 +144,10 @@ export declare class EFFilmstrip extends EFFilmstrip_base {
140
144
  #private;
141
145
  static styles: import('lit').CSSResult[];
142
146
  pixelsPerMs: number;
147
+ hide: string;
148
+ show: string;
149
+ get hideSelectors(): string[] | undefined;
150
+ get showSelectors(): string[] | undefined;
143
151
  scrubbing: boolean;
144
152
  timelineScrolltop: number;
145
153
  playing?: boolean;
@@ -163,8 +171,10 @@ export declare class EFFilmstrip extends EFFilmstrip_base {
163
171
  get gutter(): HTMLDivElement | undefined;
164
172
  render(): TemplateResult<1>;
165
173
  updated(changes: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
166
- target?: string;
167
- targetTimegroup?: EFTimegroup | null;
174
+ target: string;
175
+ targetElement: Element | null;
176
+ private _contextProvidedTemporal?;
177
+ get targetTemporal(): TemporalMixinInterface | null;
168
178
  protected willUpdate(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
169
179
  }
170
180
  declare global {