@opendaw/studio-adapters 0.0.112 → 0.0.114
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/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/selection/FilteredRemoteSelection.d.ts +24 -0
- package/dist/selection/FilteredRemoteSelection.d.ts.map +1 -0
- package/dist/selection/FilteredRemoteSelection.js +81 -0
- package/dist/selection/RemoteSelections.d.ts +32 -0
- package/dist/selection/RemoteSelections.d.ts.map +1 -0
- package/dist/selection/RemoteSelections.js +149 -0
- package/dist/selection/VertexSelection.d.ts +4 -1
- package/dist/selection/VertexSelection.d.ts.map +1 -1
- package/dist/selection/VertexSelection.js +10 -4
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -124,7 +124,9 @@ export * from "./sample/SampleLoader";
|
|
|
124
124
|
export * from "./sample/SampleLoaderManager";
|
|
125
125
|
export * from "./sample/SampleLoaderState";
|
|
126
126
|
export * from "./sample/SampleMetaData";
|
|
127
|
+
export * from "./selection/FilteredRemoteSelection";
|
|
127
128
|
export * from "./selection/FilteredSelection";
|
|
129
|
+
export * from "./selection/RemoteSelections";
|
|
128
130
|
export * from "./selection/SelectableVertex";
|
|
129
131
|
export * from "./selection/SelectionEntry";
|
|
130
132
|
export * from "./selection/VertexSelection";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -126,7 +126,9 @@ export * from "./sample/SampleLoader";
|
|
|
126
126
|
export * from "./sample/SampleLoaderManager";
|
|
127
127
|
export * from "./sample/SampleLoaderState";
|
|
128
128
|
export * from "./sample/SampleMetaData";
|
|
129
|
+
export * from "./selection/FilteredRemoteSelection";
|
|
129
130
|
export * from "./selection/FilteredSelection";
|
|
131
|
+
export * from "./selection/RemoteSelections";
|
|
130
132
|
export * from "./selection/SelectableVertex";
|
|
131
133
|
export * from "./selection/SelectionEntry";
|
|
132
134
|
export * from "./selection/VertexSelection";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Bijective, Predicate, Subscription, Terminable } from "@opendaw/lib-std";
|
|
2
|
+
import { Addressable } from "@opendaw/lib-box";
|
|
3
|
+
import { UserInterfaceBox } from "@opendaw/studio-boxes";
|
|
4
|
+
import { SelectableVertex } from "./SelectableVertex";
|
|
5
|
+
import { RemoteSelections, RemoteSelectionListener } from "./RemoteSelections";
|
|
6
|
+
/**
|
|
7
|
+
* Scoped, read only view over {@link RemoteSelections}, reusing the *same* predicate + mapping as the
|
|
8
|
+
* matching local {@link FilteredSelection}. Scope is preserved: a remote note selection only ever
|
|
9
|
+
* reaches the note scoped view, never the region renderer.
|
|
10
|
+
*
|
|
11
|
+
* The mapped value is resolved once on selection (while the box is attached) and cached, so a
|
|
12
|
+
* deselection that arrives after the selectable box was deleted never re-resolves an adapter for an
|
|
13
|
+
* already detached box. This mirrors {@link FilteredSelection}, which returns the stored value on
|
|
14
|
+
* deselect rather than mapping again.
|
|
15
|
+
*/
|
|
16
|
+
export declare class FilteredRemoteSelection<T extends Addressable> implements Terminable {
|
|
17
|
+
#private;
|
|
18
|
+
constructor(remote: RemoteSelections, filter: Predicate<SelectableVertex>, mapping: Bijective<T, SelectableVertex>);
|
|
19
|
+
ownersOf(selectable: T): ReadonlyArray<UserInterfaceBox>;
|
|
20
|
+
subscribe(listener: RemoteSelectionListener<T>): Subscription;
|
|
21
|
+
catchupAndSubscribe(listener: RemoteSelectionListener<T>): Subscription;
|
|
22
|
+
terminate(): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=FilteredRemoteSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilteredRemoteSelection.d.ts","sourceRoot":"","sources":["../../src/selection/FilteredRemoteSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAuC,SAAS,EAAa,YAAY,EAAE,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAC/H,OAAO,EAAU,WAAW,EAAC,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAC,gBAAgB,EAAE,uBAAuB,EAAC,MAAM,oBAAoB,CAAA;AAI5E;;;;;;;;;GASG;AACH,qBAAa,uBAAuB,CAAC,CAAC,SAAS,WAAW,CAAE,YAAW,UAAU;;gBAQjE,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,SAAS,CAAC,gBAAgB,CAAC,EACnC,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,gBAAgB,CAAC;IA4BnD,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,aAAa,CAAC,gBAAgB,CAAC;IAIxD,SAAS,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,YAAY;IAE7D,mBAAmB,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,YAAY;IAQvE,SAAS,IAAI,IAAI;CACpB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _FilteredRemoteSelection_remote, _FilteredRemoteSelection_filter, _FilteredRemoteSelection_mapping, _FilteredRemoteSelection_listeners, _FilteredRemoteSelection_values, _FilteredRemoteSelection_subscription;
|
|
13
|
+
import { isDefined, Listeners } from "@opendaw/lib-std";
|
|
14
|
+
import { Address } from "@opendaw/lib-box";
|
|
15
|
+
/**
|
|
16
|
+
* Scoped, read only view over {@link RemoteSelections}, reusing the *same* predicate + mapping as the
|
|
17
|
+
* matching local {@link FilteredSelection}. Scope is preserved: a remote note selection only ever
|
|
18
|
+
* reaches the note scoped view, never the region renderer.
|
|
19
|
+
*
|
|
20
|
+
* The mapped value is resolved once on selection (while the box is attached) and cached, so a
|
|
21
|
+
* deselection that arrives after the selectable box was deleted never re-resolves an adapter for an
|
|
22
|
+
* already detached box. This mirrors {@link FilteredSelection}, which returns the stored value on
|
|
23
|
+
* deselect rather than mapping again.
|
|
24
|
+
*/
|
|
25
|
+
export class FilteredRemoteSelection {
|
|
26
|
+
constructor(remote, filter, mapping) {
|
|
27
|
+
_FilteredRemoteSelection_remote.set(this, void 0);
|
|
28
|
+
_FilteredRemoteSelection_filter.set(this, void 0);
|
|
29
|
+
_FilteredRemoteSelection_mapping.set(this, void 0);
|
|
30
|
+
_FilteredRemoteSelection_listeners.set(this, void 0);
|
|
31
|
+
_FilteredRemoteSelection_values.set(this, void 0); // cache keyed by selectable address
|
|
32
|
+
_FilteredRemoteSelection_subscription.set(this, void 0);
|
|
33
|
+
__classPrivateFieldSet(this, _FilteredRemoteSelection_remote, remote, "f");
|
|
34
|
+
__classPrivateFieldSet(this, _FilteredRemoteSelection_filter, filter, "f");
|
|
35
|
+
__classPrivateFieldSet(this, _FilteredRemoteSelection_mapping, mapping, "f");
|
|
36
|
+
__classPrivateFieldSet(this, _FilteredRemoteSelection_listeners, new Listeners(), "f");
|
|
37
|
+
__classPrivateFieldSet(this, _FilteredRemoteSelection_values, Address.newSet(entry => entry.selectable), "f");
|
|
38
|
+
__classPrivateFieldSet(this, _FilteredRemoteSelection_subscription, __classPrivateFieldGet(this, _FilteredRemoteSelection_remote, "f").catchupAndSubscribe({
|
|
39
|
+
onSelected: (selectable, user) => {
|
|
40
|
+
if (!__classPrivateFieldGet(this, _FilteredRemoteSelection_filter, "f").call(this, selectable)) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const existing = __classPrivateFieldGet(this, _FilteredRemoteSelection_values, "f").getOrNull(selectable.address);
|
|
44
|
+
if (isDefined(existing)) {
|
|
45
|
+
existing.owners++;
|
|
46
|
+
__classPrivateFieldGet(this, _FilteredRemoteSelection_listeners, "f").proxy.onSelected(existing.value, user);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const value = __classPrivateFieldGet(this, _FilteredRemoteSelection_mapping, "f").fy(selectable);
|
|
50
|
+
__classPrivateFieldGet(this, _FilteredRemoteSelection_values, "f").add({ selectable: selectable.address, value, owners: 1 });
|
|
51
|
+
__classPrivateFieldGet(this, _FilteredRemoteSelection_listeners, "f").proxy.onSelected(value, user);
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
onDeselected: (selectable, user) => {
|
|
55
|
+
const existing = __classPrivateFieldGet(this, _FilteredRemoteSelection_values, "f").getOrNull(selectable.address);
|
|
56
|
+
if (!isDefined(existing)) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (--existing.owners === 0) {
|
|
60
|
+
__classPrivateFieldGet(this, _FilteredRemoteSelection_values, "f").removeByKey(selectable.address);
|
|
61
|
+
}
|
|
62
|
+
__classPrivateFieldGet(this, _FilteredRemoteSelection_listeners, "f").proxy.onDeselected(existing.value, user);
|
|
63
|
+
}
|
|
64
|
+
}), "f");
|
|
65
|
+
}
|
|
66
|
+
ownersOf(selectable) {
|
|
67
|
+
return __classPrivateFieldGet(this, _FilteredRemoteSelection_remote, "f").ownersOf(__classPrivateFieldGet(this, _FilteredRemoteSelection_mapping, "f").fx(selectable));
|
|
68
|
+
}
|
|
69
|
+
subscribe(listener) { return __classPrivateFieldGet(this, _FilteredRemoteSelection_listeners, "f").subscribe(listener); }
|
|
70
|
+
catchupAndSubscribe(listener) {
|
|
71
|
+
__classPrivateFieldGet(this, _FilteredRemoteSelection_remote, "f").forEach(({ selectable, user }) => {
|
|
72
|
+
const existing = __classPrivateFieldGet(this, _FilteredRemoteSelection_values, "f").getOrNull(selectable.address);
|
|
73
|
+
if (isDefined(existing)) {
|
|
74
|
+
listener.onSelected(existing.value, user);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
return this.subscribe(listener);
|
|
78
|
+
}
|
|
79
|
+
terminate() { __classPrivateFieldGet(this, _FilteredRemoteSelection_subscription, "f").terminate(); }
|
|
80
|
+
}
|
|
81
|
+
_FilteredRemoteSelection_remote = new WeakMap(), _FilteredRemoteSelection_filter = new WeakMap(), _FilteredRemoteSelection_mapping = new WeakMap(), _FilteredRemoteSelection_listeners = new WeakMap(), _FilteredRemoteSelection_values = new WeakMap(), _FilteredRemoteSelection_subscription = new WeakMap();
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Bijective, ObservableOption, Predicate, Procedure, Subscription, Terminable } from "@opendaw/lib-std";
|
|
2
|
+
import { Addressable } from "@opendaw/lib-box";
|
|
3
|
+
import { RootBox, UserInterfaceBox } from "@opendaw/studio-boxes";
|
|
4
|
+
import { SelectableVertex } from "./SelectableVertex";
|
|
5
|
+
import { FilteredRemoteSelection } from "./FilteredRemoteSelection";
|
|
6
|
+
export interface RemoteSelectionListener<T> {
|
|
7
|
+
onSelected(selectable: T, user: UserInterfaceBox): void;
|
|
8
|
+
onDeselected(selectable: T, user: UserInterfaceBox): void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Read only index of every *other* user's selections in a live room.
|
|
12
|
+
*
|
|
13
|
+
* Mirrors {@link VertexSelection}'s two layer watch, but once per remote user instead of once for
|
|
14
|
+
* the followed user, and indexes `(selectable, user)` pairs so that painting can ask synchronously
|
|
15
|
+
* who else selects a vertex. The followed user is excluded (the local {@link FilteredSelection}
|
|
16
|
+
* renders it), so with a single user the index stays empty and {@link ownersOf} is a miss against an
|
|
17
|
+
* empty set.
|
|
18
|
+
*/
|
|
19
|
+
export declare class RemoteSelections implements Terminable {
|
|
20
|
+
#private;
|
|
21
|
+
constructor(rootBox: RootBox, followed: ObservableOption<UserInterfaceBox>);
|
|
22
|
+
ownersOf(vertex: SelectableVertex): ReadonlyArray<UserInterfaceBox>;
|
|
23
|
+
forEach(procedure: Procedure<{
|
|
24
|
+
selectable: SelectableVertex;
|
|
25
|
+
user: UserInterfaceBox;
|
|
26
|
+
}>): void;
|
|
27
|
+
subscribe(listener: RemoteSelectionListener<SelectableVertex>): Subscription;
|
|
28
|
+
catchupAndSubscribe(listener: RemoteSelectionListener<SelectableVertex>): Subscription;
|
|
29
|
+
createFilteredSelection<T extends Addressable>(filter: Predicate<SelectableVertex>, mapping: Bijective<T, SelectableVertex>): FilteredRemoteSelection<T>;
|
|
30
|
+
terminate(): void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=RemoteSelections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteSelections.d.ts","sourceRoot":"","sources":["../../src/selection/RemoteSelections.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,SAAS,EAIT,gBAAgB,EAEhB,SAAS,EACT,SAAS,EAET,YAAY,EACZ,UAAU,EAGb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,WAAW,EAAwB,MAAM,kBAAkB,CAAA;AAEnE,OAAO,EAAC,OAAO,EAAgB,gBAAgB,EAAC,MAAM,uBAAuB,CAAA;AAC7E,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AAEnD,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAA;AAEjE,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACtC,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACvD,YAAY,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAC5D;AAKD;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,YAAW,UAAU;;gBAUnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;IAsB1E,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,aAAa,CAAC,gBAAgB,CAAC;IAKnE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;QAAC,UAAU,EAAE,gBAAgB,CAAC;QAAC,IAAI,EAAE,gBAAgB,CAAA;KAAC,CAAC,GAAG,IAAI;IAK3F,SAAS,CAAC,QAAQ,EAAE,uBAAuB,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAI5E,mBAAmB,CAAC,QAAQ,EAAE,uBAAuB,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAKtF,uBAAuB,CAAC,CAAC,SAAS,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,gBAAgB,CAAC,EACnC,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC;IAInH,SAAS,IAAI,IAAI;CAwEpB"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _RemoteSelections_instances, _RemoteSelections_terminator, _RemoteSelections_rootBox, _RemoteSelections_index, _RemoteSelections_knownUsers, _RemoteSelections_watchers, _RemoteSelections_listeners, _RemoteSelections_followed, _RemoteSelections_updateFollowed, _RemoteSelections_syncUser, _RemoteSelections_watchUser, _RemoteSelections_addOwner, _RemoteSelections_removeOwner, _RemoteSelections_createEntry;
|
|
13
|
+
import { Arrays, asInstanceOf, isDefined, Listeners, Option, Terminator, UUID } from "@opendaw/lib-std";
|
|
14
|
+
import { Address } from "@opendaw/lib-box";
|
|
15
|
+
import { Pointers } from "@opendaw/studio-enums";
|
|
16
|
+
import { SelectionBox, UserInterfaceBox } from "@opendaw/studio-boxes";
|
|
17
|
+
import { FilteredRemoteSelection } from "./FilteredRemoteSelection";
|
|
18
|
+
/**
|
|
19
|
+
* Read only index of every *other* user's selections in a live room.
|
|
20
|
+
*
|
|
21
|
+
* Mirrors {@link VertexSelection}'s two layer watch, but once per remote user instead of once for
|
|
22
|
+
* the followed user, and indexes `(selectable, user)` pairs so that painting can ask synchronously
|
|
23
|
+
* who else selects a vertex. The followed user is excluded (the local {@link FilteredSelection}
|
|
24
|
+
* renders it), so with a single user the index stays empty and {@link ownersOf} is a miss against an
|
|
25
|
+
* empty set.
|
|
26
|
+
*/
|
|
27
|
+
export class RemoteSelections {
|
|
28
|
+
constructor(rootBox, followed) {
|
|
29
|
+
_RemoteSelections_instances.add(this);
|
|
30
|
+
_RemoteSelections_terminator.set(this, void 0);
|
|
31
|
+
_RemoteSelections_rootBox.set(this, void 0);
|
|
32
|
+
_RemoteSelections_index.set(this, void 0); // sorted on selectable address
|
|
33
|
+
_RemoteSelections_knownUsers.set(this, void 0); // every user currently in the graph
|
|
34
|
+
_RemoteSelections_watchers.set(this, void 0); // one per *watched* (remote) user
|
|
35
|
+
_RemoteSelections_listeners.set(this, void 0);
|
|
36
|
+
_RemoteSelections_followed.set(this, Option.None);
|
|
37
|
+
__classPrivateFieldSet(this, _RemoteSelections_terminator, new Terminator(), "f");
|
|
38
|
+
__classPrivateFieldSet(this, _RemoteSelections_rootBox, rootBox, "f");
|
|
39
|
+
__classPrivateFieldSet(this, _RemoteSelections_index, Address.newSet(entry => entry.selectable.address), "f");
|
|
40
|
+
__classPrivateFieldSet(this, _RemoteSelections_knownUsers, UUID.newSet(user => user.address.uuid), "f");
|
|
41
|
+
__classPrivateFieldSet(this, _RemoteSelections_watchers, UUID.newSet(watcher => watcher.user.address.uuid), "f");
|
|
42
|
+
__classPrivateFieldSet(this, _RemoteSelections_listeners, new Listeners(), "f");
|
|
43
|
+
__classPrivateFieldGet(this, _RemoteSelections_terminator, "f").own(__classPrivateFieldGet(this, _RemoteSelections_rootBox, "f").users.pointerHub.catchupAndSubscribe({
|
|
44
|
+
onAdded: (pointer) => {
|
|
45
|
+
const user = asInstanceOf(pointer.box, UserInterfaceBox);
|
|
46
|
+
__classPrivateFieldGet(this, _RemoteSelections_knownUsers, "f").add(user);
|
|
47
|
+
__classPrivateFieldGet(this, _RemoteSelections_instances, "m", _RemoteSelections_syncUser).call(this, user);
|
|
48
|
+
},
|
|
49
|
+
onRemoved: (pointer) => {
|
|
50
|
+
const user = asInstanceOf(pointer.box, UserInterfaceBox);
|
|
51
|
+
__classPrivateFieldGet(this, _RemoteSelections_knownUsers, "f").removeByKey(user.address.uuid);
|
|
52
|
+
__classPrivateFieldGet(this, _RemoteSelections_instances, "m", _RemoteSelections_syncUser).call(this, user);
|
|
53
|
+
}
|
|
54
|
+
}, Pointers.User));
|
|
55
|
+
__classPrivateFieldGet(this, _RemoteSelections_terminator, "f").own(followed.catchupAndSubscribe(option => __classPrivateFieldGet(this, _RemoteSelections_instances, "m", _RemoteSelections_updateFollowed).call(this, option)));
|
|
56
|
+
}
|
|
57
|
+
ownersOf(vertex) {
|
|
58
|
+
const entry = __classPrivateFieldGet(this, _RemoteSelections_index, "f").getOrNull(vertex.address);
|
|
59
|
+
return isDefined(entry) ? entry.owners.values() : Arrays.empty();
|
|
60
|
+
}
|
|
61
|
+
forEach(procedure) {
|
|
62
|
+
__classPrivateFieldGet(this, _RemoteSelections_index, "f").forEach(entry => entry.owners
|
|
63
|
+
.forEach(user => procedure({ selectable: entry.selectable, user })));
|
|
64
|
+
}
|
|
65
|
+
subscribe(listener) {
|
|
66
|
+
return __classPrivateFieldGet(this, _RemoteSelections_listeners, "f").subscribe(listener);
|
|
67
|
+
}
|
|
68
|
+
catchupAndSubscribe(listener) {
|
|
69
|
+
this.forEach(({ selectable, user }) => listener.onSelected(selectable, user));
|
|
70
|
+
return this.subscribe(listener);
|
|
71
|
+
}
|
|
72
|
+
createFilteredSelection(filter, mapping) {
|
|
73
|
+
return new FilteredRemoteSelection(this, filter, mapping);
|
|
74
|
+
}
|
|
75
|
+
terminate() {
|
|
76
|
+
__classPrivateFieldGet(this, _RemoteSelections_watchers, "f").forEach(watcher => watcher.terminable.terminate());
|
|
77
|
+
__classPrivateFieldGet(this, _RemoteSelections_watchers, "f").clear();
|
|
78
|
+
__classPrivateFieldGet(this, _RemoteSelections_knownUsers, "f").clear();
|
|
79
|
+
__classPrivateFieldGet(this, _RemoteSelections_index, "f").clear();
|
|
80
|
+
__classPrivateFieldGet(this, _RemoteSelections_terminator, "f").terminate();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
_RemoteSelections_terminator = new WeakMap(), _RemoteSelections_rootBox = new WeakMap(), _RemoteSelections_index = new WeakMap(), _RemoteSelections_knownUsers = new WeakMap(), _RemoteSelections_watchers = new WeakMap(), _RemoteSelections_listeners = new WeakMap(), _RemoteSelections_followed = new WeakMap(), _RemoteSelections_instances = new WeakSet(), _RemoteSelections_updateFollowed = function _RemoteSelections_updateFollowed(current) {
|
|
84
|
+
const previous = __classPrivateFieldGet(this, _RemoteSelections_followed, "f");
|
|
85
|
+
__classPrivateFieldSet(this, _RemoteSelections_followed, current.isEmpty() ? Option.None : Option.wrap(current.unwrap()), "f");
|
|
86
|
+
previous.ifSome(user => __classPrivateFieldGet(this, _RemoteSelections_instances, "m", _RemoteSelections_syncUser).call(this, user));
|
|
87
|
+
__classPrivateFieldGet(this, _RemoteSelections_followed, "f").ifSome(user => { if (!previous.contains(user)) {
|
|
88
|
+
__classPrivateFieldGet(this, _RemoteSelections_instances, "m", _RemoteSelections_syncUser).call(this, user);
|
|
89
|
+
} });
|
|
90
|
+
}, _RemoteSelections_syncUser = function _RemoteSelections_syncUser(user) {
|
|
91
|
+
const shouldWatch = __classPrivateFieldGet(this, _RemoteSelections_knownUsers, "f").hasKey(user.address.uuid) && !__classPrivateFieldGet(this, _RemoteSelections_followed, "f").contains(user);
|
|
92
|
+
const watching = __classPrivateFieldGet(this, _RemoteSelections_watchers, "f").hasKey(user.address.uuid);
|
|
93
|
+
if (shouldWatch === watching) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (shouldWatch) {
|
|
97
|
+
__classPrivateFieldGet(this, _RemoteSelections_watchers, "f").add({ user, terminable: __classPrivateFieldGet(this, _RemoteSelections_instances, "m", _RemoteSelections_watchUser).call(this, user) });
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
__classPrivateFieldGet(this, _RemoteSelections_watchers, "f").removeByKey(user.address.uuid).terminable.terminate();
|
|
101
|
+
}
|
|
102
|
+
}, _RemoteSelections_watchUser = function _RemoteSelections_watchUser(user) {
|
|
103
|
+
const boxMap = UUID.newSet(entry => entry.box.address.uuid);
|
|
104
|
+
const subscription = user.selection.pointerHub.catchupAndSubscribe({
|
|
105
|
+
onAdded: (pointer) => {
|
|
106
|
+
// Read only overlay over a *remote* user's boxes: a dangling or concurrently deleted
|
|
107
|
+
// selectable must be skipped, never panic, or the whole YSync transaction is rejected.
|
|
108
|
+
const box = asInstanceOf(pointer.box, SelectionBox);
|
|
109
|
+
box.selectable.targetVertex.ifSome(vertex => {
|
|
110
|
+
const selectable = vertex;
|
|
111
|
+
if (boxMap.add({ box, selectable })) {
|
|
112
|
+
__classPrivateFieldGet(this, _RemoteSelections_instances, "m", _RemoteSelections_addOwner).call(this, selectable, user);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
onRemoved: (pointer) => {
|
|
117
|
+
const box = asInstanceOf(pointer.box, SelectionBox);
|
|
118
|
+
const entry = boxMap.removeByKeyIfExist(box.address.uuid);
|
|
119
|
+
if (isDefined(entry)) {
|
|
120
|
+
__classPrivateFieldGet(this, _RemoteSelections_instances, "m", _RemoteSelections_removeOwner).call(this, entry.selectable, user);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}, Pointers.Selection);
|
|
124
|
+
return {
|
|
125
|
+
terminate: () => {
|
|
126
|
+
subscription.terminate();
|
|
127
|
+
boxMap.forEach(entry => __classPrivateFieldGet(this, _RemoteSelections_instances, "m", _RemoteSelections_removeOwner).call(this, entry.selectable, user));
|
|
128
|
+
boxMap.clear();
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
}, _RemoteSelections_addOwner = function _RemoteSelections_addOwner(selectable, user) {
|
|
132
|
+
const entry = __classPrivateFieldGet(this, _RemoteSelections_index, "f").getOrNull(selectable.address) ?? __classPrivateFieldGet(this, _RemoteSelections_instances, "m", _RemoteSelections_createEntry).call(this, selectable);
|
|
133
|
+
entry.owners.add(user);
|
|
134
|
+
__classPrivateFieldGet(this, _RemoteSelections_listeners, "f").proxy.onSelected(selectable, user);
|
|
135
|
+
}, _RemoteSelections_removeOwner = function _RemoteSelections_removeOwner(selectable, user) {
|
|
136
|
+
const entry = __classPrivateFieldGet(this, _RemoteSelections_index, "f").getOrNull(selectable.address);
|
|
137
|
+
if (!isDefined(entry)) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
entry.owners.removeByKey(user.address.uuid);
|
|
141
|
+
if (entry.owners.size() === 0) {
|
|
142
|
+
__classPrivateFieldGet(this, _RemoteSelections_index, "f").removeByKey(selectable.address);
|
|
143
|
+
}
|
|
144
|
+
__classPrivateFieldGet(this, _RemoteSelections_listeners, "f").proxy.onDeselected(selectable, user);
|
|
145
|
+
}, _RemoteSelections_createEntry = function _RemoteSelections_createEntry(selectable) {
|
|
146
|
+
const created = { selectable, owners: UUID.newSet(owner => owner.address.uuid) };
|
|
147
|
+
__classPrivateFieldGet(this, _RemoteSelections_index, "f").add(created);
|
|
148
|
+
return created;
|
|
149
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Bijective, Editing, int, Predicate, Selection, SelectionListener, Subscription } from "@opendaw/lib-std";
|
|
1
|
+
import { Bijective, Editing, int, ObservableOption, Predicate, Selection, SelectionListener, Subscription } from "@opendaw/lib-std";
|
|
2
2
|
import { Addressable, BoxGraph, Field } from "@opendaw/lib-box";
|
|
3
3
|
import { Pointers } from "@opendaw/studio-enums";
|
|
4
|
+
import { UserInterfaceBox } from "@opendaw/studio-boxes";
|
|
4
5
|
import { SelectableVertex } from "./SelectableVertex";
|
|
5
6
|
import { FilteredSelection } from "./FilteredSelection";
|
|
6
7
|
/**
|
|
@@ -12,6 +13,8 @@ export declare class VertexSelection implements Selection<SelectableVertex> {
|
|
|
12
13
|
readonly editing: Editing;
|
|
13
14
|
readonly boxGraph: BoxGraph;
|
|
14
15
|
constructor(editing: Editing, boxGraph: BoxGraph);
|
|
16
|
+
/** The currently followed user, observable so remote views can react to {@link switch}/{@link release}. */
|
|
17
|
+
get user(): ObservableOption<UserInterfaceBox>;
|
|
15
18
|
switch(target: Field<Pointers.Selection>): this;
|
|
16
19
|
release(): void;
|
|
17
20
|
createFilteredSelection<T extends Addressable>(affiliate: Predicate<SelectableVertex>, map: Bijective<T, SelectableVertex>): FilteredSelection<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VertexSelection.d.ts","sourceRoot":"","sources":["../../src/selection/VertexSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,SAAS,EACT,OAAO,EACP,GAAG,EAGH,SAAS,EACT,SAAS,EACT,iBAAiB,EAEjB,YAAY,EAGf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAU,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAe,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"VertexSelection.d.ts","sourceRoot":"","sources":["../../src/selection/VertexSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,SAAS,EACT,OAAO,EACP,GAAG,EAGH,gBAAgB,EAEhB,SAAS,EACT,SAAS,EACT,iBAAiB,EAEjB,YAAY,EAGf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAU,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAe,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAe,gBAAgB,EAAC,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AAEnD,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AAErD;;;GAGG;AACH,qBAAa,eAAgB,YAAW,SAAS,CAAC,gBAAgB,CAAC;;IASnD,QAAQ,CAAC,OAAO,EAAE,OAAO;IAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ;gBAA7C,OAAO,EAAE,OAAO,EAAW,QAAQ,EAAE,QAAQ;IAQlE,2GAA2G;IAC3G,IAAI,IAAI,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAoB;IAElE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI;IAS/C,OAAO,IAAI,IAAI;IAUf,uBAAuB,CAAC,CAAC,SAAS,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,gBAAgB,CAAC,EACtC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAIzG,MAAM,CAAC,GAAG,WAAW,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAoB7D,QAAQ,CAAC,GAAG,WAAW,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAW/D,WAAW,IAAI,IAAI;IAInB,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,aAAa,CAAC,gBAAgB,CAAC;IAQhF,OAAO,IAAI,OAAO;IAClB,QAAQ,IAAI,OAAO;IAEnB,KAAK,IAAI,GAAG;IAEZ,UAAU,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO;IAEjD,QAAQ,IAAI,aAAa,CAAC,gBAAgB,CAAC;IAE3C,SAAS,CAAC,QAAQ,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAEtE,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,YAAY;CA4BnF"}
|
|
@@ -9,11 +9,11 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var _VertexSelection_instances, _VertexSelection_lifeTime, _VertexSelection_entityMap, _VertexSelection_selectableMap, _VertexSelection_listeners, _VertexSelection_target, _VertexSelection_watch;
|
|
13
|
-
import { asInstanceOf, assert, Listeners, Option, Terminator, UUID } from "@opendaw/lib-std";
|
|
12
|
+
var _VertexSelection_instances, _VertexSelection_lifeTime, _VertexSelection_entityMap, _VertexSelection_selectableMap, _VertexSelection_listeners, _VertexSelection_user, _VertexSelection_target, _VertexSelection_watch;
|
|
13
|
+
import { asInstanceOf, assert, Listeners, MutableObservableOption, Option, Terminator, UUID } from "@opendaw/lib-std";
|
|
14
14
|
import { Address } from "@opendaw/lib-box";
|
|
15
15
|
import { Pointers } from "@opendaw/studio-enums";
|
|
16
|
-
import { SelectionBox } from "@opendaw/studio-boxes";
|
|
16
|
+
import { SelectionBox, UserInterfaceBox } from "@opendaw/studio-boxes";
|
|
17
17
|
import { FilteredSelection } from "./FilteredSelection";
|
|
18
18
|
/**
|
|
19
19
|
* Represents the main selection management within a document.
|
|
@@ -28,17 +28,22 @@ export class VertexSelection {
|
|
|
28
28
|
_VertexSelection_entityMap.set(this, void 0); // sorted on entity
|
|
29
29
|
_VertexSelection_selectableMap.set(this, void 0); // sorted on selectable
|
|
30
30
|
_VertexSelection_listeners.set(this, void 0);
|
|
31
|
+
_VertexSelection_user.set(this, void 0);
|
|
31
32
|
_VertexSelection_target.set(this, Option.None);
|
|
32
33
|
__classPrivateFieldSet(this, _VertexSelection_lifeTime, new Terminator(), "f");
|
|
33
34
|
__classPrivateFieldSet(this, _VertexSelection_entityMap, UUID.newSet(entry => entry.box.address.uuid), "f");
|
|
34
35
|
__classPrivateFieldSet(this, _VertexSelection_selectableMap, Address.newSet(entry => entry.selectable.address), "f");
|
|
35
36
|
__classPrivateFieldSet(this, _VertexSelection_listeners, new Listeners(), "f");
|
|
37
|
+
__classPrivateFieldSet(this, _VertexSelection_user, new MutableObservableOption(), "f");
|
|
36
38
|
}
|
|
39
|
+
/** The currently followed user, observable so remote views can react to {@link switch}/{@link release}. */
|
|
40
|
+
get user() { return __classPrivateFieldGet(this, _VertexSelection_user, "f"); }
|
|
37
41
|
switch(target) {
|
|
38
42
|
this.release();
|
|
39
43
|
console.debug(`VertexSelection.switch(${target.address.toString()})`);
|
|
40
44
|
__classPrivateFieldSet(this, _VertexSelection_target, Option.wrap(target), "f");
|
|
41
45
|
__classPrivateFieldGet(this, _VertexSelection_lifeTime, "f").own(__classPrivateFieldGet(this, _VertexSelection_instances, "m", _VertexSelection_watch).call(this, target));
|
|
46
|
+
__classPrivateFieldGet(this, _VertexSelection_user, "f").wrap(asInstanceOf(target.box, UserInterfaceBox));
|
|
42
47
|
return this;
|
|
43
48
|
}
|
|
44
49
|
release() {
|
|
@@ -50,6 +55,7 @@ export class VertexSelection {
|
|
|
50
55
|
__classPrivateFieldGet(this, _VertexSelection_selectableMap, "f").forEach(entry => __classPrivateFieldGet(this, _VertexSelection_listeners, "f").proxy.onDeselected(entry.selectable));
|
|
51
56
|
__classPrivateFieldGet(this, _VertexSelection_selectableMap, "f").clear();
|
|
52
57
|
__classPrivateFieldGet(this, _VertexSelection_entityMap, "f").clear();
|
|
58
|
+
__classPrivateFieldGet(this, _VertexSelection_user, "f").clear();
|
|
53
59
|
}
|
|
54
60
|
createFilteredSelection(affiliate, map) {
|
|
55
61
|
return new FilteredSelection(this, affiliate, map);
|
|
@@ -112,7 +118,7 @@ export class VertexSelection {
|
|
|
112
118
|
return __classPrivateFieldGet(this, _VertexSelection_listeners, "f").subscribe(listener);
|
|
113
119
|
}
|
|
114
120
|
}
|
|
115
|
-
_VertexSelection_lifeTime = new WeakMap(), _VertexSelection_entityMap = new WeakMap(), _VertexSelection_selectableMap = new WeakMap(), _VertexSelection_listeners = new WeakMap(), _VertexSelection_target = new WeakMap(), _VertexSelection_instances = new WeakSet(), _VertexSelection_watch = function _VertexSelection_watch(target) {
|
|
121
|
+
_VertexSelection_lifeTime = new WeakMap(), _VertexSelection_entityMap = new WeakMap(), _VertexSelection_selectableMap = new WeakMap(), _VertexSelection_listeners = new WeakMap(), _VertexSelection_user = new WeakMap(), _VertexSelection_target = new WeakMap(), _VertexSelection_instances = new WeakSet(), _VertexSelection_watch = function _VertexSelection_watch(target) {
|
|
116
122
|
return target.pointerHub.catchupAndSubscribe({
|
|
117
123
|
onAdded: (pointer) => {
|
|
118
124
|
const box = asInstanceOf(pointer.box, SelectionBox);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opendaw/studio-adapters",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.114",
|
|
4
4
|
"license": "LGPL-3.0-or-later",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
"@opendaw/lib-fusion": "^0.0.94",
|
|
29
29
|
"@opendaw/lib-runtime": "^0.0.79",
|
|
30
30
|
"@opendaw/lib-std": "^0.0.78",
|
|
31
|
-
"@opendaw/studio-boxes": "^0.0.
|
|
32
|
-
"@opendaw/studio-enums": "^0.0.
|
|
31
|
+
"@opendaw/studio-boxes": "^0.0.92",
|
|
32
|
+
"@opendaw/studio-enums": "^0.0.76",
|
|
33
33
|
"soundfont2": "^0.5.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@opendaw/eslint-config": "^0.0.28",
|
|
37
37
|
"@opendaw/typescript-config": "^0.0.32"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "395274c28a7033451249648a8f690d032b901ef4"
|
|
40
40
|
}
|