@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 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";
@@ -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;AAE9C,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;;IAQnD,QAAQ,CAAC,OAAO,EAAE,OAAO;IAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ;gBAA7C,OAAO,EAAE,OAAO,EAAW,QAAQ,EAAE,QAAQ;IAOlE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI;IAQ/C,OAAO,IAAI,IAAI;IASf,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"}
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.112",
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.91",
32
- "@opendaw/studio-enums": "^0.0.75",
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": "ebbc65ad5e1e4553b662913c895afb35210c2ea1"
39
+ "gitHead": "395274c28a7033451249648a8f690d032b901ef4"
40
40
  }