@editframe/elements 0.5.0-beta.6 → 0.5.0-beta.8

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 (53) hide show
  1. package/dist/elements/src/EF_FRAMEGEN.mjs +130 -0
  2. package/dist/elements/src/EF_INTERACTIVE.mjs +4 -0
  3. package/dist/elements/{elements → src/elements}/EFAudio.mjs +20 -0
  4. package/dist/elements/{elements → src/elements}/EFCaptions.mjs +3 -0
  5. package/dist/elements/{elements → src/elements}/EFImage.mjs +15 -3
  6. package/dist/elements/{elements → src/elements}/EFMedia.mjs +81 -4
  7. package/dist/elements/{elements → src/elements}/EFTemporal.mjs +29 -1
  8. package/dist/elements/{elements → src/elements}/EFTimegroup.mjs +124 -0
  9. package/dist/elements/{elements → src/elements}/EFVideo.mjs +10 -0
  10. package/dist/elements/{elements → src/elements}/EFWaveform.mjs +41 -24
  11. package/dist/elements/{elements.mjs → src/elements.mjs} +2 -1
  12. package/dist/elements/{gui → src/gui}/EFFilmstrip.mjs +3 -2
  13. package/dist/elements/{gui → src/gui}/EFWorkbench.mjs +51 -63
  14. package/dist/elements/{gui → src/gui}/TWMixin.css.mjs +1 -1
  15. package/dist/style.css +3 -0
  16. package/dist/util/awaitAnimationFrame.mjs +11 -0
  17. package/docker-compose.yaml +17 -0
  18. package/package.json +2 -2
  19. package/src/EF_FRAMEGEN.ts +208 -0
  20. package/src/EF_INTERACTIVE.ts +2 -0
  21. package/src/elements/CrossUpdateController.ts +18 -0
  22. package/src/elements/EFAudio.ts +42 -0
  23. package/src/elements/EFCaptions.ts +202 -0
  24. package/src/elements/EFImage.ts +70 -0
  25. package/src/elements/EFMedia.ts +395 -0
  26. package/src/elements/EFSourceMixin.ts +57 -0
  27. package/src/elements/EFTemporal.ts +246 -0
  28. package/src/elements/EFTimegroup.browsertest.ts +360 -0
  29. package/src/elements/EFTimegroup.ts +394 -0
  30. package/src/elements/EFTimeline.ts +13 -0
  31. package/src/elements/EFVideo.ts +114 -0
  32. package/src/elements/EFWaveform.ts +407 -0
  33. package/src/elements/FetchMixin.ts +18 -0
  34. package/src/elements/TimegroupController.ts +25 -0
  35. package/src/elements/buildLitFixture.ts +13 -0
  36. package/src/elements/durationConverter.ts +6 -0
  37. package/src/elements/parseTimeToMs.ts +10 -0
  38. package/src/elements/util.ts +24 -0
  39. package/src/gui/EFFilmstrip.ts +702 -0
  40. package/src/gui/EFWorkbench.ts +242 -0
  41. package/src/gui/TWMixin.css +3 -0
  42. package/src/gui/TWMixin.ts +27 -0
  43. package/src/util.d.ts +1 -0
  44. package/dist/elements/elements.css.mjs +0 -1
  45. /package/dist/elements/{elements → src/elements}/CrossUpdateController.mjs +0 -0
  46. /package/dist/elements/{elements → src/elements}/EFSourceMixin.mjs +0 -0
  47. /package/dist/elements/{elements → src/elements}/EFTimeline.mjs +0 -0
  48. /package/dist/elements/{elements → src/elements}/FetchMixin.mjs +0 -0
  49. /package/dist/elements/{elements → src/elements}/TimegroupController.mjs +0 -0
  50. /package/dist/elements/{elements → src/elements}/durationConverter.mjs +0 -0
  51. /package/dist/elements/{elements → src/elements}/parseTimeToMs.mjs +0 -0
  52. /package/dist/elements/{elements → src/elements}/util.mjs +0 -0
  53. /package/dist/elements/{gui → src/gui}/TWMixin.mjs +0 -0
@@ -8,6 +8,7 @@ import { TWMixin } from "../gui/TWMixin.mjs";
8
8
  import { Task } from "@lit/task";
9
9
  import * as d3 from "d3";
10
10
  import { createRef, ref } from "lit/directives/ref.js";
11
+ import { EF_INTERACTIVE } from "../EF_INTERACTIVE.mjs";
11
12
  var __defProp = Object.defineProperty;
12
13
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
14
  var __decorateClass = (decorators, target, key, kind) => {
@@ -26,6 +27,7 @@ let EFWaveform = class extends EFTemporal(TWMixin(LitElement)) {
26
27
  this.mode = "bars";
27
28
  this.color = "currentColor";
28
29
  this.frameTask = new Task(this, {
30
+ autoRun: EF_INTERACTIVE,
29
31
  args: () => [this.target.audioBufferTask.status],
30
32
  task: async () => {
31
33
  await this.target.audioBufferTask.taskComplete;
@@ -47,37 +49,46 @@ let EFWaveform = class extends EFTemporal(TWMixin(LitElement)) {
47
49
  drawBars(svg, frequencyData) {
48
50
  const waveWidth = svg.clientWidth * devicePixelRatio;
49
51
  const waveHeight = svg.clientHeight;
52
+ const waveLeft = 0;
53
+ const waveRight = waveWidth;
54
+ const barX = d3.scaleBand().paddingInner(0.5).paddingOuter(0.01).domain(d3.range(frequencyData.length).map((n) => String(n))).rangeRound([waveLeft, waveRight]);
55
+ const height = d3.scaleLinear().domain([0, 255]).range([0, waveHeight / 2]);
50
56
  const baseline = waveHeight / 2;
51
- const barX = d3.scaleBand().domain(d3.range(frequencyData.length).map(String)).rangeRound([0, waveWidth]).paddingInner(0.5).paddingOuter(0.01);
52
- const height = d3.scaleLinear().domain([0, 255]).range([0, baseline]);
53
57
  const bars = d3.select(svg).selectAll("rect").data(frequencyData);
54
- bars.enter().append("rect").merge(bars).attr("x", (_, i) => barX(String(i))).attr("y", (value) => baseline - height(value)).attr("width", barX.bandwidth()).attr("height", (value) => height(value) * 2);
58
+ const minBarHeight = 2;
59
+ bars.enter().append("rect").merge(bars).attr("x", (_, i) => barX(String(i))).attr("y", (value) => baseline - height(value)).attr("width", barX.bandwidth() / 1.2).attr("height", (value) => Math.max(height(value) * 2, minBarHeight));
55
60
  bars.exit().remove();
56
61
  }
57
62
  drawBricks(svg, frequencyData) {
58
63
  const waveWidth = svg.clientWidth * devicePixelRatio;
59
64
  const waveHeight = svg.clientHeight * devicePixelRatio;
60
65
  const brickWidth = waveWidth / frequencyData.length;
61
- const brickHeightFactor = waveHeight / 255;
66
+ const brickHeightFactor = waveHeight / 255 / 2;
62
67
  const brickPadding = 2;
63
- d3.select(svg).selectAll("rect.brick").data(frequencyData).join("rect").attr("class", "brick").attr("x", (_d, i) => i * brickWidth).attr("y", (d) => waveHeight - d * brickHeightFactor).attr("width", brickWidth - brickPadding).attr("height", (d) => d * brickHeightFactor);
68
+ const midHeight = waveHeight / 2;
69
+ d3.select(svg).selectAll("line.brickBaseLine").data([0]).join("line").attr("class", "brickBaseLine").attr("x1", 0).attr("x2", waveWidth).attr("y1", midHeight).attr("y2", midHeight).attr("stroke", "currentColor").attr("stroke-width", 4).attr("stroke-dasharray", "2");
70
+ d3.select(svg).selectAll("rect.brick").data(frequencyData).join("rect").attr("class", "brick").attr("x", (_d, i) => i * brickWidth).attr("y", (d) => midHeight - d * brickHeightFactor).attr("width", brickWidth - brickPadding).attr("height", (d) => d * brickHeightFactor * 2);
64
71
  }
65
72
  drawLine(svg, frequencyData) {
66
73
  const waveWidth = svg.clientWidth * devicePixelRatio;
67
74
  const waveHeight = svg.clientHeight * devicePixelRatio;
68
75
  const xScale = d3.scaleLinear().domain([0, frequencyData.length - 1]).range([0, waveWidth]);
69
76
  const yScale = d3.scaleLinear().domain([0, 255]).range([waveHeight, 0]);
70
- const lineGenerator = d3.line().x((_d, i) => xScale(i)).y((d) => yScale(d)).curve(d3.curveCardinal);
71
- d3.select(svg).selectAll("path").data([frequencyData]).join("path").attr("d", lineGenerator).attr("fill", "none");
77
+ const lineGenerator = d3.line().x((_, i) => xScale(i)).y((d) => yScale(d));
78
+ const pathData = lineGenerator(frequencyData);
79
+ d3.select(svg).selectAll("path.line").data([frequencyData]).join("path").attr("class", "line").attr("d", pathData).attr("fill", "none").attr("stroke", "currentColor").attr("stroke-width", 4);
72
80
  }
73
81
  drawRoundBars(svg, frequencyData) {
74
82
  const waveWidth = svg.clientWidth * devicePixelRatio;
75
83
  const waveHeight = svg.clientHeight;
84
+ const waveLeft = 0;
85
+ const waveRight = waveWidth;
86
+ const barX = d3.scaleBand().paddingInner(0.5).paddingOuter(0.01).domain(d3.range(frequencyData.length).map((n) => String(n))).rangeRound([waveLeft, waveRight]);
87
+ const height = d3.scaleLinear().domain([0, 255]).range([0, waveHeight / 2]);
76
88
  const baseline = waveHeight / 2;
77
- const barX = d3.scaleBand().domain(d3.range(frequencyData.length).map(String)).rangeRound([0, waveWidth]).paddingInner(0.5).paddingOuter(0.01);
78
- const height = d3.scaleLinear().domain([0, 255]).range([0, baseline]);
79
89
  const bars = d3.select(svg).selectAll("rect").data(frequencyData);
80
- bars.enter().append("rect").merge(bars).attr("x", (_, i) => barX(String(i))).attr("y", (value) => baseline - height(value)).attr("width", barX.bandwidth()).attr("height", (value) => height(value) * 2).attr("fill", "white").attr("rx", barX.bandwidth() * 0.1).attr("ry", barX.bandwidth() * 0.1);
90
+ const minBarHeight = 2;
91
+ bars.enter().append("rect").merge(bars).attr("x", (_, i) => barX(String(i))).attr("y", (value) => baseline - height(value)).attr("width", barX.bandwidth() / 1.2).attr("height", (value) => Math.max(height(value) * 2, minBarHeight)).attr("rx", barX.bandwidth()).attr("ry", barX.bandwidth());
81
92
  bars.exit().remove();
82
93
  }
83
94
  drawEqualizer(svg, frequencyData) {
@@ -85,23 +96,32 @@ let EFWaveform = class extends EFTemporal(TWMixin(LitElement)) {
85
96
  const waveHeight = svg.clientHeight * devicePixelRatio;
86
97
  const barWidth = waveWidth / frequencyData.length;
87
98
  const barPadding = 1;
88
- const heightScale = d3.scaleLinear().domain([0, 255]).range([0, waveHeight]);
89
- d3.select(svg).selectAll("rect.equalizerBar").data(frequencyData).join("rect").attr("class", "equalizerBar").attr("x", (d, i) => i * barWidth + barPadding / 2).attr("y", (d) => waveHeight - heightScale(d)).attr("width", barWidth - barPadding).attr("height", (d) => heightScale(d));
90
- svg.selectAll("rect.equalizerBar").transition().duration(100).attr("y", (d) => waveHeight - heightScale(d)).attr("height", (d) => heightScale(d));
99
+ const minHeight = 1;
100
+ const heightScale = d3.scaleLinear().domain([0, 255]).range([0, waveHeight / 2]);
101
+ d3.select(svg).selectAll("line.equalizerBaseLine").data([0]).join("line").attr("class", "equalizerBaseLine").attr("x1", 0).attr("x2", waveWidth).attr("y1", waveHeight / 2).attr("y2", waveHeight / 2).attr("stroke-width", 2);
102
+ d3.select(svg).selectAll("rect.equalizerBar").data(frequencyData).join("rect").attr("class", "equalizerBar").attr("x", (d, i) => i * barWidth + barPadding / 2).attr(
103
+ "y",
104
+ (d) => waveHeight / 2 - Math.max(heightScale(d) / 2, minHeight)
105
+ ).attr("width", barWidth - barPadding).attr("height", (d) => Math.max(heightScale(d), minHeight));
106
+ d3.select(svg).selectAll("rect.equalizerBar").transition().duration(100).attr(
107
+ "y",
108
+ (d) => waveHeight / 2 - Math.max(heightScale(d) / 2, minHeight)
109
+ ).attr("height", (d) => Math.max(heightScale(d), minHeight));
91
110
  }
92
111
  drawCurve(svg, frequencyData) {
93
112
  const waveWidth = svg.clientWidth * devicePixelRatio;
94
113
  const waveHeight = svg.clientHeight * devicePixelRatio;
95
- const xScale = d3.scaleLinear().domain([0, frequencyData.length - 1]).range([0, waveWidth]);
114
+ const xScale = d3.scaleLinear().domain([0, frequencyData.length]).range([0, waveWidth]);
96
115
  const yScale = d3.scaleLinear().domain([0, 255]).range([waveHeight, 0]);
97
116
  const curveGenerator = d3.line().x((_, i) => xScale(i)).y((d) => yScale(d)).curve(d3.curveNatural);
98
- d3.select(svg).selectAll("path.curve").data([frequencyData]).join("path").attr("class", "curve").attr("d", curveGenerator).attr("fill", "none");
117
+ const pathData = curveGenerator(frequencyData);
118
+ d3.select(svg).selectAll("path.curve").data([frequencyData]).join("path").attr("class", "curve").attr("d", pathData).attr("fill", "none").attr("stroke", "currentColor").attr("stroke-width", 4);
99
119
  }
100
120
  drawPixel(svg, frequencyData) {
101
121
  const waveWidth = svg.clientWidth * devicePixelRatio;
102
122
  const waveHeight = svg.clientHeight;
103
123
  const baseline = waveHeight / 2;
104
- const barX = d3.scaleBand().domain(d3.range(frequencyData.length).map(String)).rangeRound([0, waveWidth]).paddingInner(0.01).paddingOuter(0.01);
124
+ const barX = d3.scaleBand().domain(d3.range(frequencyData.length).map(String)).rangeRound([0, waveWidth]).paddingInner(0.03).paddingOuter(0.02);
105
125
  const height = d3.scaleLinear().domain([0, 255]).range([0, baseline]);
106
126
  const bars = d3.select(svg).selectAll("rect").data(frequencyData);
107
127
  bars.enter().append("rect").merge(bars).attr("x", (_, i) => barX(String(i))).attr("y", (value) => baseline - height(value)).attr("width", barX.bandwidth()).attr("height", (value) => height(value) * 2);
@@ -110,16 +130,13 @@ let EFWaveform = class extends EFTemporal(TWMixin(LitElement)) {
110
130
  drawWave(svg, frequencyData) {
111
131
  const waveWidth = svg.clientWidth * devicePixelRatio;
112
132
  const waveHeight = svg.clientHeight;
113
- const baseline = waveHeight / 2;
114
- const barX = d3.scaleBand().domain(d3.range(frequencyData.length).map(String)).rangeRound([0, waveWidth]);
115
- const height = d3.scaleLinear().domain([0, 255]).range([0, baseline]);
133
+ const barX = d3.scaleBand().domain(d3.range(frequencyData.length).map(String)).rangeRound([0, waveWidth]).paddingInner(0.03).paddingOuter(0.02);
134
+ const height = d3.scaleLinear().domain([0, 255]).range([0, waveHeight / 2]);
135
+ d3.select(svg).selectAll("line.baseline").data([0]).join("line").attr("class", "baseline").attr("x1", (_, i) => barX(String(i))).attr("x2", waveWidth).attr("y1", waveHeight / 2).attr("y2", waveHeight / 2).attr("stroke", "currentColor").attr("stroke-width", 2);
116
136
  const bars = d3.select(svg).selectAll("rect").data(frequencyData);
117
- bars.enter().append("rect").merge(bars).attr("x", (_, i) => barX(String(i))).attr("y", (value) => baseline - height(value)).attr("width", barX.bandwidth()).attr("height", (value) => height(value) * 2);
137
+ bars.enter().append("rect").merge(bars).attr("x", (_, i) => barX(String(i))).attr("y", (value) => waveHeight / 2 - height(value)).attr("width", barX.bandwidth()).attr("height", (value) => height(value) * 2);
118
138
  bars.exit().remove();
119
139
  }
120
- update(arg) {
121
- super.update(arg);
122
- }
123
140
  async updated() {
124
141
  const svg = this.svgRef.value;
125
142
  if (!svg) {
@@ -129,7 +146,7 @@ let EFWaveform = class extends EFTemporal(TWMixin(LitElement)) {
129
146
  return;
130
147
  }
131
148
  if (this.target.ownCurrentTimeMs > 0) {
132
- const audioContext = new OfflineAudioContext(1, 48e3 / 25, 48e3);
149
+ const audioContext = new OfflineAudioContext(2, 48e3 / 25, 48e3);
133
150
  const audioBufferSource = audioContext.createBufferSource();
134
151
  audioBufferSource.buffer = this.target.audioBufferTask.value.buffer;
135
152
  const analyser = audioContext.createAnalyser();
@@ -1,4 +1,4 @@
1
- import "./elements.css.mjs";
1
+ /* empty css */
2
2
  import "./elements/EFTimegroup.mjs";
3
3
  import "./elements/EFTimeline.mjs";
4
4
  import "./elements/EFImage.mjs";
@@ -8,4 +8,5 @@ import "./elements/EFCaptions.mjs";
8
8
  import "./elements/EFWaveform.mjs";
9
9
  import "./gui/EFWorkbench.mjs";
10
10
  import "./gui/EFFilmstrip.mjs";
11
+ import "./EF_FRAMEGEN.mjs";
11
12
  window.EF_REGISTERED = true;
@@ -12,7 +12,7 @@ import { TimegroupController } from "../elements/TimegroupController.mjs";
12
12
  import { consume } from "@lit/context";
13
13
  import { focusContext, focusedElement } from "./EFWorkbench.mjs";
14
14
  import { TWMixin } from "./TWMixin.mjs";
15
- import { msToTimeCode } from "../../editor/msToTimeCode.mjs";
15
+ import { msToTimeCode } from "../../../editor/msToTimeCode.mjs";
16
16
  var __defProp = Object.defineProperty;
17
17
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
18
18
  var __decorateClass = (decorators, target, key, kind) => {
@@ -85,7 +85,8 @@ class FilmstripItem extends TWMixin(LitElement) {
85
85
  }
86
86
  get styles() {
87
87
  return {
88
- left: `${this.pixelsPerMs * this.element.startTimeMs}px`,
88
+ position: "relative",
89
+ left: `${this.pixelsPerMs * this.element.startTimeWithinParentMs}px`,
89
90
  width: `${this.pixelsPerMs * this.element.durationMs}px`
90
91
  };
91
92
  }
@@ -1,11 +1,11 @@
1
1
  import { createContext, provide } from "@lit/context";
2
2
  import { css, LitElement, html } from "lit";
3
+ import { TaskStatus } from "@lit/task";
3
4
  import { eventOptions, state, property, customElement } from "lit/decorators.js";
4
5
  import { createRef, ref } from "lit/directives/ref.js";
5
- import { TWMixin } from "./TWMixin.mjs";
6
- import { Task, TaskStatus } from "@lit/task";
6
+ import { awaitMicrotask } from "../../../util/awaitMicrotask.mjs";
7
7
  import { shallowGetTimegroups, deepGetTemporalElements } from "../elements/EFTemporal.mjs";
8
- import { awaitMicrotask } from "../../util/awaitMicrotask.mjs";
8
+ import { TWMixin } from "./TWMixin.mjs";
9
9
  var __defProp = Object.defineProperty;
10
10
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
11
11
  var __decorateClass = (decorators, target, key, kind) => {
@@ -27,7 +27,7 @@ let EFWorkbench = class extends TWMixin(LitElement) {
27
27
  this.stageRef = createRef();
28
28
  this.canvasRef = createRef();
29
29
  this.resizeObserver = new ResizeObserver(() => {
30
- if (this.isConnected) {
30
+ if (this.isConnected && !this.rendering) {
31
31
  const canvasElement = this.canvasRef.value;
32
32
  const stageElement = this.stageRef.value;
33
33
  if (stageElement && canvasElement) {
@@ -49,8 +49,21 @@ let EFWorkbench = class extends TWMixin(LitElement) {
49
49
  });
50
50
  this.focusContext = this;
51
51
  this.focusedElement = null;
52
- this.fetch = fetch;
52
+ this.fetch = (path, init = {}) => {
53
+ init.headers ||= {};
54
+ Object.assign(init.headers, {
55
+ "Content-Type": "application/json"
56
+ });
57
+ const bearerToken = this.apiToken;
58
+ if (bearerToken) {
59
+ Object.assign(init.headers, {
60
+ Authorization: `Bearer ${bearerToken}`
61
+ });
62
+ }
63
+ return fetch(path, init);
64
+ };
53
65
  this.apiHost = "";
66
+ this.rendering = false;
54
67
  this.focusOverlay = createRef();
55
68
  this.drawOverlays = () => {
56
69
  const focusOverlay = this.focusOverlay.value;
@@ -88,70 +101,42 @@ let EFWorkbench = class extends TWMixin(LitElement) {
88
101
  if (changedProperties.has("focusedElement")) {
89
102
  this.drawOverlays();
90
103
  }
91
- if (changedProperties.has("apiToken")) {
92
- if (this.apiToken) {
93
- this.fetch = (path, init = {}) => {
94
- init.headers ||= {};
95
- Object.assign(init.headers, {
96
- Authorization: `Bearer ${this.apiToken}`,
97
- "Content-Type": "application/json"
98
- });
99
- return fetch(`${path}`, init);
100
- };
101
- } else {
102
- this.fetch = fetch.bind(window);
103
- }
104
- }
105
104
  }
106
105
  render() {
107
- return html`
108
- <div
109
- class="grid h-full w-full"
110
- style="grid-template-rows: 1fr 200px; grid-template-columns: 100%"
111
- >
106
+ if (this.rendering) {
107
+ return html`
108
+ <slot
109
+ ${ref(this.canvasRef)}
110
+ class="fixed inset-0 h-full w-full"
111
+ name="canvas"
112
+ ></slot>
113
+ `;
114
+ } else {
115
+ return html`
112
116
  <div
113
- ${ref(this.stageRef)}
114
- class="relative grid h-full w-full place-content-center place-items-center overflow-hidden"
115
- @wheel=${this.handleStageWheel}
117
+ class="grid h-full w-full"
118
+ style="gridTemplateRows: 1fr 200px; gridTemplateColumns: 100%;"
116
119
  >
117
- <slot
118
- ${ref(this.canvasRef)}
119
- class="inline-block"
120
- name="canvas"
121
- ></slot>
122
120
  <div
123
- class="border border-blue-500 bg-blue-200 bg-opacity-20"
124
- ${ref(this.focusOverlay)}
125
- ></div>
126
- </div>
121
+ ${ref(this.stageRef)}
122
+ class="relative grid h-full w-full place-content-center place-items-center overflow-hidden"
123
+ @wheel=${this.handleStageWheel}
124
+ >
125
+ <slot
126
+ ${ref(this.canvasRef)}
127
+ class="inline-block"
128
+ name="canvas"
129
+ ></slot>
130
+ <div
131
+ class="border border-blue-500 bg-blue-200 bg-opacity-20"
132
+ ${ref(this.focusOverlay)}
133
+ ></div>
134
+ </div>
127
135
 
128
- <slot class="overflow" name="timeline"></slot>
129
- </div>
130
- `;
131
- }
132
- get efElements() {
133
- return Array.from(
134
- this.querySelectorAll(
135
- "ef-audio, ef-video, ef-image, ef-captions, ef-waveform"
136
- )
137
- );
138
- }
139
- async loadMd5Sums() {
140
- const efElements = this.efElements;
141
- const loaderTasks = [];
142
- efElements.forEach((el) => {
143
- const md5SumLoader = el.md5SumLoader;
144
- if (md5SumLoader instanceof Task) {
145
- md5SumLoader.run();
146
- loaderTasks.push(md5SumLoader.taskComplete);
147
- }
148
- });
149
- await Promise.all(loaderTasks);
150
- efElements.map((el) => {
151
- if ("productionSrc" in el && el.productionSrc instanceof Function) {
152
- el.setAttribute("src", el.productionSrc());
153
- }
154
- });
136
+ <slot class="overflow" name="timeline"></slot>
137
+ </div>
138
+ `;
139
+ }
155
140
  }
156
141
  get requiredAssets() {
157
142
  const assets = {};
@@ -222,6 +207,9 @@ __decorateClass([
222
207
  provide({ context: apiHostContext }),
223
208
  property({ type: String })
224
209
  ], EFWorkbench.prototype, "apiHost", 2);
210
+ __decorateClass([
211
+ property({ type: Boolean })
212
+ ], EFWorkbench.prototype, "rendering", 2);
225
213
  EFWorkbench = __decorateClass([
226
214
  customElement("ef-workbench")
227
215
  ], EFWorkbench);
@@ -1,4 +1,4 @@
1
- const twStyle = "/*\n! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-feature-settings: normal; /* 2 */\n font-variation-settings: normal; /* 3 */\n font-size: 1em; /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden] {\n display: none;\n}\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 640px) {\n\n .container {\n max-width: 640px;\n }\n}\n@media (min-width: 768px) {\n\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n\n .container {\n max-width: 1536px;\n }\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.static {\n position: static;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.top-0 {\n top: 0px;\n}\n.z-10 {\n z-index: 10;\n}\n.z-20 {\n z-index: 20;\n}\n.col-span-2 {\n grid-column: span 2 / span 2;\n}\n.mb-\\[1px\\] {\n margin-bottom: 1px;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.grid {\n display: grid;\n}\n.contents {\n display: contents;\n}\n.hidden {\n display: none;\n}\n.h-\\[1\\.25rem\\] {\n height: 1.25rem;\n}\n.h-\\[5px\\] {\n height: 5px;\n}\n.h-full {\n height: 100%;\n}\n.w-1 {\n width: 0.25rem;\n}\n.w-\\[2px\\] {\n width: 2px;\n}\n.w-full {\n width: 100%;\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.cursor-crosshair {\n cursor: crosshair;\n}\n.place-content-center {\n place-content: center;\n}\n.place-items-center {\n place-items: center;\n}\n.items-center {\n align-items: center;\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.text-nowrap {\n text-wrap: nowrap;\n}\n.border {\n border-width: 1px;\n}\n.border-r-2 {\n border-right-width: 2px;\n}\n.border-blue-500 {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity));\n}\n.border-red-700 {\n --tw-border-opacity: 1;\n border-color: rgb(185 28 28 / var(--tw-border-opacity));\n}\n.border-slate-500 {\n --tw-border-opacity: 1;\n border-color: rgb(100 116 139 / var(--tw-border-opacity));\n}\n.border-b-slate-600 {\n --tw-border-opacity: 1;\n border-bottom-color: rgb(71 85 105 / var(--tw-border-opacity));\n}\n.bg-blue-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(191 219 254 / var(--tw-bg-opacity));\n}\n.bg-blue-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity));\n}\n.bg-slate-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity));\n}\n.bg-slate-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(226 232 240 / var(--tw-bg-opacity));\n}\n.bg-opacity-20 {\n --tw-bg-opacity: 0.2;\n}\n.object-fill {\n -o-object-fit: fill;\n object-fit: fill;\n}\n.p-\\[1px\\] {\n padding: 1px;\n}\n.pb-0 {\n padding-bottom: 0px;\n}\n.pl-1 {\n padding-left: 0.25rem;\n}\n.pl-2 {\n padding-left: 0.5rem;\n}\n.pr-0 {\n padding-right: 0px;\n}\n.pr-1 {\n padding-right: 0.25rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.opacity-50 {\n opacity: 0.5;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-slate-300 {\n --tw-shadow-color: #cbd5e1;\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-slate-600 {\n --tw-shadow-color: #475569;\n --tw-shadow: var(--tw-shadow-colored);\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.hover\\:bg-slate-400:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(148 163 184 / var(--tw-bg-opacity));\n}\n.peer:hover ~ .peer-hover\\:border-slate-400 {\n --tw-border-opacity: 1;\n border-color: rgb(148 163 184 / var(--tw-border-opacity));\n}\n.peer:hover ~ .peer-hover\\:bg-slate-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(203 213 225 / var(--tw-bg-opacity));\n}\n.data-\\[focused\\]\\:bg-slate-400[data-focused] {\n --tw-bg-opacity: 1;\n background-color: rgb(148 163 184 / var(--tw-bg-opacity));\n}\n.peer[data-focused] ~ .peer-data-\\[focused\\]\\:border-slate-400 {\n --tw-border-opacity: 1;\n border-color: rgb(148 163 184 / var(--tw-border-opacity));\n}\n.peer[data-focused] ~ .peer-data-\\[focused\\]\\:bg-slate-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(203 213 225 / var(--tw-bg-opacity));\n}\n";
1
+ const twStyle = "/*\n! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-feature-settings: normal; /* 2 */\n font-variation-settings: normal; /* 3 */\n font-size: 1em; /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden] {\n display: none;\n}\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 640px) {\n\n .container {\n max-width: 640px;\n }\n}\n@media (min-width: 768px) {\n\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n\n .container {\n max-width: 1536px;\n }\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.static {\n position: static;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.inset-0 {\n inset: 0px;\n}\n.top-0 {\n top: 0px;\n}\n.z-10 {\n z-index: 10;\n}\n.z-20 {\n z-index: 20;\n}\n.col-span-2 {\n grid-column: span 2 / span 2;\n}\n.mb-\\[1px\\] {\n margin-bottom: 1px;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.grid {\n display: grid;\n}\n.contents {\n display: contents;\n}\n.hidden {\n display: none;\n}\n.h-\\[1\\.25rem\\] {\n height: 1.25rem;\n}\n.h-\\[5px\\] {\n height: 5px;\n}\n.h-full {\n height: 100%;\n}\n.w-1 {\n width: 0.25rem;\n}\n.w-\\[2px\\] {\n width: 2px;\n}\n.w-full {\n width: 100%;\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.cursor-crosshair {\n cursor: crosshair;\n}\n.place-content-center {\n place-content: center;\n}\n.place-items-center {\n place-items: center;\n}\n.items-center {\n align-items: center;\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.text-nowrap {\n text-wrap: nowrap;\n}\n.border {\n border-width: 1px;\n}\n.border-r-2 {\n border-right-width: 2px;\n}\n.border-blue-500 {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity));\n}\n.border-red-700 {\n --tw-border-opacity: 1;\n border-color: rgb(185 28 28 / var(--tw-border-opacity));\n}\n.border-slate-500 {\n --tw-border-opacity: 1;\n border-color: rgb(100 116 139 / var(--tw-border-opacity));\n}\n.border-b-slate-600 {\n --tw-border-opacity: 1;\n border-bottom-color: rgb(71 85 105 / var(--tw-border-opacity));\n}\n.bg-blue-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(191 219 254 / var(--tw-bg-opacity));\n}\n.bg-blue-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity));\n}\n.bg-slate-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity));\n}\n.bg-slate-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(226 232 240 / var(--tw-bg-opacity));\n}\n.bg-opacity-20 {\n --tw-bg-opacity: 0.2;\n}\n.object-fill {\n -o-object-fit: fill;\n object-fit: fill;\n}\n.p-\\[1px\\] {\n padding: 1px;\n}\n.pb-0 {\n padding-bottom: 0px;\n}\n.pl-1 {\n padding-left: 0.25rem;\n}\n.pl-2 {\n padding-left: 0.5rem;\n}\n.pr-0 {\n padding-right: 0px;\n}\n.pr-1 {\n padding-right: 0.25rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.opacity-50 {\n opacity: 0.5;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-slate-300 {\n --tw-shadow-color: #cbd5e1;\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-slate-600 {\n --tw-shadow-color: #475569;\n --tw-shadow: var(--tw-shadow-colored);\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.hover\\:bg-slate-400:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(148 163 184 / var(--tw-bg-opacity));\n}\n.peer:hover ~ .peer-hover\\:border-slate-400 {\n --tw-border-opacity: 1;\n border-color: rgb(148 163 184 / var(--tw-border-opacity));\n}\n.peer:hover ~ .peer-hover\\:bg-slate-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(203 213 225 / var(--tw-bg-opacity));\n}\n.data-\\[focused\\]\\:bg-slate-400[data-focused] {\n --tw-bg-opacity: 1;\n background-color: rgb(148 163 184 / var(--tw-bg-opacity));\n}\n.peer[data-focused] ~ .peer-data-\\[focused\\]\\:border-slate-400 {\n --tw-border-opacity: 1;\n border-color: rgb(148 163 184 / var(--tw-border-opacity));\n}\n.peer[data-focused] ~ .peer-data-\\[focused\\]\\:bg-slate-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(203 213 225 / var(--tw-bg-opacity));\n}\n";
2
2
  export {
3
3
  twStyle as default
4
4
  };
package/dist/style.css CHANGED
@@ -540,6 +540,9 @@ video {
540
540
  .relative {
541
541
  position: relative;
542
542
  }
543
+ .inset-0 {
544
+ inset: 0px;
545
+ }
543
546
  .top-0 {
544
547
  top: 0px;
545
548
  }
@@ -0,0 +1,11 @@
1
+ const awaitAnimationFrame = () => {
2
+ return new Promise((resolve) => {
3
+ requestAnimationFrame((timestamp) => {
4
+ console.log("AnimationFrame", timestamp);
5
+ resolve(timestamp);
6
+ });
7
+ });
8
+ };
9
+ export {
10
+ awaitAnimationFrame
11
+ };
@@ -0,0 +1,17 @@
1
+
2
+ services:
3
+ build-elements:
4
+ image: telecine-runner
5
+ depends_on:
6
+ - runner
7
+ working_dir: /app
8
+ env_file:
9
+ - ${PWD}/.env
10
+ volumes_from:
11
+ - runner
12
+ stop_grace_period: 1s
13
+ init: true
14
+ scale: 1
15
+ environment:
16
+ - SHELL=/bin/sh
17
+ command: npx vite build --config lib/elements/vite.config.ts lib/elements/src/elements.ts --watch
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@editframe/elements",
3
- "version": "0.5.0-beta.6",
3
+ "version": "0.5.0-beta.8",
4
4
  "description": "",
5
5
  "exports": {
6
- ".": "./dist/elements/elements.mjs",
6
+ ".": "./dist/elements/src/elements.mjs",
7
7
  "./styles.css": "./dist/style.css"
8
8
  },
9
9
  "scripts": {},