document-model 6.0.0-dev.70 → 6.0.0-dev.72
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.
|
@@ -2,20 +2,28 @@ import type { DocumentModelModule } from "@powerhousedao/shared/document-model";
|
|
|
2
2
|
import type { Action, DocumentOperations, Operation, PHBaseState, PHDocument, PHDocumentHeader } from "./ph-types.js";
|
|
3
3
|
import type { DocumentAction } from "./types.js";
|
|
4
4
|
type ScreamingSnakeToCamel<S extends string> = S extends `${infer Head}_${infer Tail}` ? `${Lowercase<Head>}${Capitalize<ScreamingSnakeToCamel<Tail>>}` : Lowercase<S>;
|
|
5
|
+
export type DocumentChangeEvent<TState extends PHBaseState = PHBaseState> = {
|
|
6
|
+
document: PHDocument<TState>;
|
|
7
|
+
};
|
|
8
|
+
export type DocumentChangeListener<TState extends PHBaseState = PHBaseState> = (event: DocumentChangeEvent<TState>) => void;
|
|
5
9
|
export type ActionMap<TAction extends Action, TReturn = void> = {
|
|
6
10
|
[K in (TAction | DocumentAction)["type"] as ScreamingSnakeToCamel<K>]: (input: Extract<TAction | DocumentAction, {
|
|
7
11
|
type: K;
|
|
8
12
|
}>["input"]) => TReturn & ActionMap<TAction, TReturn>;
|
|
9
13
|
};
|
|
10
14
|
export declare class PHDocumentController<TState extends PHBaseState> implements PHDocument<TState> {
|
|
11
|
-
|
|
12
|
-
protected
|
|
15
|
+
readonly module: DocumentModelModule<TState>;
|
|
16
|
+
protected _document: PHDocument<TState>;
|
|
17
|
+
private listeners;
|
|
13
18
|
constructor(module: DocumentModelModule<TState>, initialDocument?: PHDocument<TState>);
|
|
19
|
+
get document(): PHDocument<TState>;
|
|
14
20
|
get header(): PHDocumentHeader;
|
|
15
21
|
get state(): TState;
|
|
16
22
|
get initialState(): TState;
|
|
17
23
|
get operations(): DocumentOperations;
|
|
18
24
|
get clipboard(): Operation[];
|
|
25
|
+
onChange(listener: DocumentChangeListener<TState>): () => void;
|
|
26
|
+
private notifyListeners;
|
|
19
27
|
static forDocumentModel<TState extends PHBaseState, TAction extends Action>(module: DocumentModelModule<TState>): new (initialDocument?: PHDocument<TState>) => PHDocumentController<TState> & ActionMap<TAction, PHDocumentController<TState>>;
|
|
20
28
|
}
|
|
21
29
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/core/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,UAAU,EACV,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,KAAK,qBAAqB,CAAC,CAAC,SAAS,MAAM,IACzC,CAAC,SAAS,GAAG,MAAM,IAAI,IAAI,MAAM,IAAI,EAAE,GACnC,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,EAAE,GAC9D,SAAS,CAAC,CAAC,CAAC,CAAC;AAEnB,MAAM,MAAM,SAAS,CAAC,OAAO,SAAS,MAAM,EAAE,OAAO,GAAG,IAAI,IAAI;KAC7D,CAAC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,CAAC,MAAM,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,GAAG,CACrE,KAAK,EAAE,OAAO,CAAC,OAAO,GAAG,cAAc,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,OAAO,CAAC,KAC3D,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3C,CAAC;AAEF,qBAAa,oBAAoB,CAC/B,MAAM,SAAS,WAAW,CAC1B,YAAW,UAAU,CAAC,MAAM,CAAC;IAC7B,
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/core/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,UAAU,EACV,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,KAAK,qBAAqB,CAAC,CAAC,SAAS,MAAM,IACzC,CAAC,SAAS,GAAG,MAAM,IAAI,IAAI,MAAM,IAAI,EAAE,GACnC,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,EAAE,GAC9D,SAAS,CAAC,CAAC,CAAC,CAAC;AAEnB,MAAM,MAAM,mBAAmB,CAAC,MAAM,SAAS,WAAW,GAAG,WAAW,IAAI;IAC1E,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAAC,MAAM,SAAS,WAAW,GAAG,WAAW,IAAI,CAC7E,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,KAC/B,IAAI,CAAC;AAEV,MAAM,MAAM,SAAS,CAAC,OAAO,SAAS,MAAM,EAAE,OAAO,GAAG,IAAI,IAAI;KAC7D,CAAC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,CAAC,MAAM,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,GAAG,CACrE,KAAK,EAAE,OAAO,CAAC,OAAO,GAAG,cAAc,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,OAAO,CAAC,KAC3D,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3C,CAAC;AAEF,qBAAa,oBAAoB,CAC/B,MAAM,SAAS,WAAW,CAC1B,YAAW,UAAU,CAAC,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC7C,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,SAAS,CAAwC;gBAGvD,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,EACnC,eAAe,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC;IAkBtC,IAAI,QAAQ,IAAI,UAAU,CAAC,MAAM,CAAC,CAEjC;IAED,IAAI,MAAM,IAAI,gBAAgB,CAE7B;IACD,IAAI,KAAK,IAAI,MAAM,CAElB;IACD,IAAI,YAAY,IAAI,MAAM,CAEzB;IACD,IAAI,UAAU,IAAI,kBAAkB,CAEnC;IACD,IAAI,SAAS,IAAI,SAAS,EAAE,CAE3B;IAED,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI;IAO9D,OAAO,CAAC,eAAe;IAQvB,MAAM,CAAC,gBAAgB,CAAC,MAAM,SAAS,WAAW,EAAE,OAAO,SAAS,MAAM,EACxE,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAMnB,KACd,eAAe,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,KACjC,oBAAoB,CAAC,MAAM,CAAC,GAC/B,SAAS,CAAC,OAAO,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;CAErD"}
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
export class PHDocumentController {
|
|
2
2
|
module;
|
|
3
|
-
|
|
3
|
+
_document;
|
|
4
|
+
listeners = [];
|
|
4
5
|
constructor(module, initialDocument) {
|
|
5
6
|
this.module = module;
|
|
6
|
-
this.
|
|
7
|
+
this._document = initialDocument ?? module.utils.createDocument();
|
|
7
8
|
// dynamically add action methods to the controller
|
|
8
9
|
for (const actionType in this.module.actions) {
|
|
9
10
|
Object.defineProperty(this, actionType, {
|
|
10
11
|
value: (input) => {
|
|
11
12
|
const action = this.module.actions[actionType](input);
|
|
12
|
-
this.
|
|
13
|
+
this._document = this.module.reducer(this._document, action);
|
|
14
|
+
this.notifyListeners();
|
|
13
15
|
return this;
|
|
14
16
|
},
|
|
15
17
|
});
|
|
16
18
|
}
|
|
17
19
|
}
|
|
20
|
+
get document() {
|
|
21
|
+
return this._document;
|
|
22
|
+
}
|
|
18
23
|
get header() {
|
|
19
24
|
return this.document.header;
|
|
20
25
|
}
|
|
@@ -30,6 +35,20 @@ export class PHDocumentController {
|
|
|
30
35
|
get clipboard() {
|
|
31
36
|
return this.document.clipboard;
|
|
32
37
|
}
|
|
38
|
+
onChange(listener) {
|
|
39
|
+
this.listeners.push(listener);
|
|
40
|
+
return () => {
|
|
41
|
+
this.listeners = this.listeners.filter((l) => l !== listener);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
notifyListeners() {
|
|
45
|
+
if (this.listeners.length === 0)
|
|
46
|
+
return;
|
|
47
|
+
const event = { document: this._document };
|
|
48
|
+
for (const listener of this.listeners) {
|
|
49
|
+
listener(event);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
33
52
|
static forDocumentModel(module) {
|
|
34
53
|
return class extends PHDocumentController {
|
|
35
54
|
constructor(initialDocument) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/core/controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/core/controller.ts"],"names":[],"mappings":"AA8BA,MAAM,OAAO,oBAAoB;IAGtB,MAAM,CAA8B;IACnC,SAAS,CAAqB;IAChC,SAAS,GAAqC,EAAE,CAAC;IAEzD,YACE,MAAmC,EACnC,eAAoC;QAEpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,eAAe,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAElE,mDAAmD;QACnD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC7C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE;gBACtC,KAAK,EAAE,CAAC,KAAc,EAAE,EAAE;oBACxB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;oBACtD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;oBAC7D,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC;gBACd,CAAC;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IACD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC7B,CAAC;IACD,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;IACpC,CAAC;IACD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;IAClC,CAAC;IACD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IACjC,CAAC;IAED,QAAQ,CAAC,QAAwC;QAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;QAChE,CAAC,CAAC;IACJ,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACxC,MAAM,KAAK,GAAgC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QACxE,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,gBAAgB,CACrB,MAAmC;QAEnC,OAAO,KAAM,SAAQ,oBAA4B;YAC/C,YAAY,eAAoC;gBAC9C,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACjC,CAAC;SAI+C,CAAC;IACrD,CAAC;CACF"}
|