@design.estate/dees-wcctools 1.2.1 → 2.0.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.
- package/dist_bundle/bundle.js +1764 -218
- package/dist_bundle/bundle.js.map +4 -4
- package/dist_ts_demotools/demotools.d.ts +1 -1
- package/dist_ts_demotools/demotools.js +86 -38
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/wcc-dashboard.d.ts +11 -10
- package/dist_ts_web/elements/wcc-dashboard.js +370 -246
- package/dist_ts_web/elements/wcc-frame.d.ts +3 -3
- package/dist_ts_web/elements/wcc-frame.js +108 -57
- package/dist_ts_web/elements/wcc-properties.d.ts +14 -8
- package/dist_ts_web/elements/wcc-properties.js +442 -323
- package/dist_ts_web/elements/wcc-record-button.d.ts +12 -0
- package/dist_ts_web/elements/wcc-record-button.js +165 -0
- package/dist_ts_web/elements/wcc-recording-panel.d.ts +42 -0
- package/dist_ts_web/elements/wcc-recording-panel.js +1067 -0
- package/dist_ts_web/elements/wcc-sidebar.d.ts +7 -5
- package/dist_ts_web/elements/wcc-sidebar.js +250 -81
- package/dist_ts_web/elements/wcctools.helpers.d.ts +13 -0
- package/dist_ts_web/elements/wcctools.helpers.js +26 -1
- package/dist_ts_web/index.d.ts +3 -0
- package/dist_ts_web/index.js +5 -1
- package/dist_ts_web/services/ffmpeg.service.d.ts +42 -0
- package/dist_ts_web/services/ffmpeg.service.js +276 -0
- package/dist_ts_web/services/mp4.service.d.ts +32 -0
- package/dist_ts_web/services/mp4.service.js +139 -0
- package/dist_ts_web/services/recorder.service.d.ts +44 -0
- package/dist_ts_web/services/recorder.service.js +307 -0
- package/dist_watch/bundle.js +2126 -541
- package/dist_watch/bundle.js.map +4 -4
- package/package.json +8 -8
- package/readme.md +133 -141
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/wcc-dashboard.ts +86 -26
- package/ts_web/elements/wcc-frame.ts +3 -3
- package/ts_web/elements/wcc-properties.ts +53 -9
- package/ts_web/elements/wcc-record-button.ts +108 -0
- package/ts_web/elements/wcc-recording-panel.ts +978 -0
- package/ts_web/elements/wcc-sidebar.ts +133 -22
- package/ts_web/elements/wcctools.helpers.ts +31 -0
- package/ts_web/index.ts +5 -0
- package/ts_web/readme.md +123 -0
- package/ts_web/services/recorder.service.ts +393 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
|
|
2
|
+
export declare class WccRecordButton extends DeesElement {
|
|
3
|
+
accessor state: 'idle' | 'recording';
|
|
4
|
+
accessor duration: number;
|
|
5
|
+
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
6
|
+
private formatDuration;
|
|
7
|
+
render(): TemplateResult;
|
|
8
|
+
connectedCallback(): Promise<void>;
|
|
9
|
+
disconnectedCallback(): Promise<void>;
|
|
10
|
+
private handleClick;
|
|
11
|
+
updated(changedProperties: Map<string, unknown>): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
35
|
+
import { DeesElement, customElement, html, css, property } from '@design.estate/dees-element';
|
|
36
|
+
let WccRecordButton = (() => {
|
|
37
|
+
let _classDecorators = [customElement('wcc-record-button')];
|
|
38
|
+
let _classDescriptor;
|
|
39
|
+
let _classExtraInitializers = [];
|
|
40
|
+
let _classThis;
|
|
41
|
+
let _classSuper = DeesElement;
|
|
42
|
+
let _state_decorators;
|
|
43
|
+
let _state_initializers = [];
|
|
44
|
+
let _state_extraInitializers = [];
|
|
45
|
+
let _duration_decorators;
|
|
46
|
+
let _duration_initializers = [];
|
|
47
|
+
let _duration_extraInitializers = [];
|
|
48
|
+
var WccRecordButton = class extends _classSuper {
|
|
49
|
+
static { _classThis = this; }
|
|
50
|
+
static {
|
|
51
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
52
|
+
_state_decorators = [property({ type: String })];
|
|
53
|
+
_duration_decorators = [property({ type: Number })];
|
|
54
|
+
__esDecorate(this, null, _state_decorators, { kind: "accessor", name: "state", static: false, private: false, access: { has: obj => "state" in obj, get: obj => obj.state, set: (obj, value) => { obj.state = value; } }, metadata: _metadata }, _state_initializers, _state_extraInitializers);
|
|
55
|
+
__esDecorate(this, null, _duration_decorators, { kind: "accessor", name: "duration", static: false, private: false, access: { has: obj => "duration" in obj, get: obj => obj.duration, set: (obj, value) => { obj.duration = value; } }, metadata: _metadata }, _duration_initializers, _duration_extraInitializers);
|
|
56
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
57
|
+
WccRecordButton = _classThis = _classDescriptor.value;
|
|
58
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
59
|
+
}
|
|
60
|
+
#state_accessor_storage = __runInitializers(this, _state_initializers, 'idle');
|
|
61
|
+
get state() { return this.#state_accessor_storage; }
|
|
62
|
+
set state(value) { this.#state_accessor_storage = value; }
|
|
63
|
+
#duration_accessor_storage = (__runInitializers(this, _state_extraInitializers), __runInitializers(this, _duration_initializers, 0));
|
|
64
|
+
get duration() { return this.#duration_accessor_storage; }
|
|
65
|
+
set duration(value) { this.#duration_accessor_storage = value; }
|
|
66
|
+
static styles = [
|
|
67
|
+
css `
|
|
68
|
+
:host {
|
|
69
|
+
display: flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
justify-content: center;
|
|
72
|
+
background: transparent;
|
|
73
|
+
cursor: pointer;
|
|
74
|
+
transition: all 0.15s ease;
|
|
75
|
+
color: #666;
|
|
76
|
+
user-select: none;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
:host(:hover) {
|
|
80
|
+
background: rgba(239, 68, 68, 0.05);
|
|
81
|
+
color: #f87171;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
:host(.recording) {
|
|
85
|
+
background: rgba(239, 68, 68, 0.15);
|
|
86
|
+
color: #f87171;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.content {
|
|
90
|
+
display: flex;
|
|
91
|
+
align-items: center;
|
|
92
|
+
justify-content: center;
|
|
93
|
+
gap: 0.25rem;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.rec-icon {
|
|
97
|
+
width: 12px;
|
|
98
|
+
height: 12px;
|
|
99
|
+
border-radius: 50%;
|
|
100
|
+
background: currentColor;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
:host(.recording) .rec-icon {
|
|
104
|
+
animation: pulse-recording 1s ease-in-out infinite;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@keyframes pulse-recording {
|
|
108
|
+
0%, 100% { opacity: 1; transform: scale(1); }
|
|
109
|
+
50% { opacity: 0.5; transform: scale(0.9); }
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.recording-timer {
|
|
113
|
+
font-family: 'Consolas', 'Monaco', monospace;
|
|
114
|
+
font-size: 0.7rem;
|
|
115
|
+
}
|
|
116
|
+
`
|
|
117
|
+
];
|
|
118
|
+
formatDuration(seconds) {
|
|
119
|
+
const mins = Math.floor(seconds / 60);
|
|
120
|
+
const secs = seconds % 60;
|
|
121
|
+
return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
|
|
122
|
+
}
|
|
123
|
+
render() {
|
|
124
|
+
return html `
|
|
125
|
+
<div class="content">
|
|
126
|
+
<div class="rec-icon"></div>
|
|
127
|
+
${this.state === 'recording' ? html `
|
|
128
|
+
<span class="recording-timer">${this.formatDuration(this.duration)}</span>
|
|
129
|
+
` : null}
|
|
130
|
+
</div>
|
|
131
|
+
`;
|
|
132
|
+
}
|
|
133
|
+
async connectedCallback() {
|
|
134
|
+
await super.connectedCallback();
|
|
135
|
+
this.addEventListener('click', this.handleClick);
|
|
136
|
+
}
|
|
137
|
+
async disconnectedCallback() {
|
|
138
|
+
await super.disconnectedCallback();
|
|
139
|
+
this.removeEventListener('click', this.handleClick);
|
|
140
|
+
}
|
|
141
|
+
handleClick = (__runInitializers(this, _duration_extraInitializers), () => {
|
|
142
|
+
this.dispatchEvent(new CustomEvent('record-click', {
|
|
143
|
+
bubbles: true,
|
|
144
|
+
composed: true
|
|
145
|
+
}));
|
|
146
|
+
});
|
|
147
|
+
updated(changedProperties) {
|
|
148
|
+
super.updated(changedProperties);
|
|
149
|
+
if (changedProperties.has('state')) {
|
|
150
|
+
if (this.state === 'recording') {
|
|
151
|
+
this.classList.add('recording');
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
this.classList.remove('recording');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
static {
|
|
159
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
return WccRecordButton = _classThis;
|
|
163
|
+
})();
|
|
164
|
+
export { WccRecordButton };
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2NjLXJlY29yZC1idXR0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvd2NjLXJlY29yZC1idXR0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUF1QixNQUFNLDZCQUE2QixDQUFDO0lBR3RHLGVBQWU7NEJBRDNCLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7OytCQUFuQixTQUFRLFdBQVc7Ozs7aUNBQzdDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztvQ0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBRjNCLG9LQUFTLEtBQUssNkJBQUwsS0FBSyxxRkFBZ0M7WUFHOUMsNktBQVMsUUFBUSw2QkFBUixRQUFRLDJGQUFhO1lBTGhDLDZLQXdHQzs7OztRQXRHQyx1RUFBdUMsTUFBTSxFQUFDO1FBQTlDLElBQVMsS0FBSywyQ0FBZ0M7UUFBOUMsSUFBUyxLQUFLLGlEQUFnQztRQUc5QyxpSUFBNEIsQ0FBQyxHQUFDO1FBQTlCLElBQVMsUUFBUSw4Q0FBYTtRQUE5QixJQUFTLFFBQVEsb0RBQWE7UUFFdkIsTUFBTSxDQUFDLE1BQU0sR0FBRztZQUNyQixHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpREY7U0FDRixDQUFDO1FBRU0sY0FBYyxDQUFDLE9BQWU7WUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUMxQixPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuRixDQUFDO1FBRU0sTUFBTTtZQUNYLE9BQU8sSUFBSSxDQUFBOzs7VUFHTCxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBOzBDQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUNuRSxDQUFDLENBQUMsQ0FBQyxJQUFJOztLQUVYLENBQUM7UUFDSixDQUFDO1FBRUQsS0FBSyxDQUFDLGlCQUFpQjtZQUNyQixNQUFNLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRCxLQUFLLENBQUMsb0JBQW9CO1lBQ3hCLE1BQU0sS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVPLFdBQVcsMERBQUcsR0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsY0FBYyxFQUFFO2dCQUNqRCxPQUFPLEVBQUUsSUFBSTtnQkFDYixRQUFRLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxFQUFDO1FBRUYsT0FBTyxDQUFDLGlCQUF1QztZQUM3QyxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDakMsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRSxDQUFDO29CQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7O1lBdkdVLHVEQUFlOzs7OztTQUFmLGVBQWUifQ==
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
|
|
2
|
+
import type { WccDashboard } from './wcc-dashboard.js';
|
|
3
|
+
export declare class WccRecordingPanel extends DeesElement {
|
|
4
|
+
accessor dashboardRef: WccDashboard;
|
|
5
|
+
accessor panelState: 'options' | 'recording' | 'preview';
|
|
6
|
+
accessor recordingMode: 'viewport' | 'screen';
|
|
7
|
+
accessor audioEnabled: boolean;
|
|
8
|
+
accessor selectedMicrophoneId: string;
|
|
9
|
+
accessor availableMicrophones: MediaDeviceInfo[];
|
|
10
|
+
accessor audioLevel: number;
|
|
11
|
+
accessor recordingDuration: number;
|
|
12
|
+
accessor previewVideoUrl: string;
|
|
13
|
+
accessor trimStart: number;
|
|
14
|
+
accessor trimEnd: number;
|
|
15
|
+
accessor videoDuration: number;
|
|
16
|
+
accessor isDraggingTrim: 'start' | 'end' | null;
|
|
17
|
+
accessor isExporting: boolean;
|
|
18
|
+
private recorderService;
|
|
19
|
+
constructor();
|
|
20
|
+
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
21
|
+
render(): TemplateResult;
|
|
22
|
+
private renderOptionsPanel;
|
|
23
|
+
private renderPreviewModal;
|
|
24
|
+
private handleAudioToggle;
|
|
25
|
+
private handleMicrophoneChange;
|
|
26
|
+
private startRecording;
|
|
27
|
+
stopRecording(): void;
|
|
28
|
+
private handleRecordingComplete;
|
|
29
|
+
private discardRecording;
|
|
30
|
+
private downloadRecording;
|
|
31
|
+
private handleVideoLoaded;
|
|
32
|
+
private formatDuration;
|
|
33
|
+
private getHandlePositionStyle;
|
|
34
|
+
private getHandlePositionFromEndStyle;
|
|
35
|
+
private handleTimelineClick;
|
|
36
|
+
private handleTimelineDrag;
|
|
37
|
+
private handleTimelineDragEnd;
|
|
38
|
+
private resetTrim;
|
|
39
|
+
private previewTrimmedSection;
|
|
40
|
+
private close;
|
|
41
|
+
disconnectedCallback(): Promise<void>;
|
|
42
|
+
}
|