dothtml 6.0.0-beta.44 → 6.0.0-beta.46
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/build_module/css/css-props.js +38 -1
- package/build_module/css/css-props.js.map +1 -1
- package/build_module/css/format-css-type.d.ts +4 -3
- package/build_module/css/format-css-type.js +7 -0
- package/build_module/css/format-css-type.js.map +1 -1
- package/build_module/decoration/component.d.ts +4 -14
- package/build_module/decoration/component.js +29 -29
- package/build_module/decoration/component.js.map +1 -1
- package/build_module/dot.js +130 -68
- package/build_module/dot.js.map +1 -1
- package/build_module/events/event-manager.d.ts +14 -0
- package/build_module/events/event-manager.js +98 -0
- package/build_module/events/event-manager.js.map +1 -0
- package/build_module/events/synthetic-event.d.ts +17 -0
- package/build_module/events/synthetic-event.js +33 -0
- package/build_module/events/synthetic-event.js.map +1 -0
- package/build_module/helpers/render-stylesheet.js +18 -9
- package/build_module/helpers/render-stylesheet.js.map +1 -1
- package/build_module/index.d.ts +3 -1
- package/build_module/index.js +14 -1
- package/build_module/index.js.map +1 -1
- package/build_module/reactivity/binding.d.ts +3 -1
- package/build_module/reactivity/binding.js +8 -2
- package/build_module/reactivity/binding.js.map +1 -1
- package/build_module/reactivity/computed.d.ts +18 -0
- package/build_module/reactivity/computed.js +106 -0
- package/build_module/reactivity/computed.js.map +1 -0
- package/build_module/reactivity/priority.d.ts +6 -0
- package/build_module/reactivity/priority.js +8 -0
- package/build_module/reactivity/priority.js.map +1 -0
- package/build_module/reactivity/ref-collection.d.ts +8 -0
- package/build_module/reactivity/ref-collection.js +32 -0
- package/build_module/reactivity/ref-collection.js.map +1 -0
- package/build_module/reactivity/ref.d.ts +5 -3
- package/build_module/reactivity/ref.js +31 -2
- package/build_module/reactivity/ref.js.map +1 -1
- package/build_module/reactivity/scheduler.d.ts +22 -0
- package/build_module/reactivity/scheduler.js +124 -0
- package/build_module/reactivity/scheduler.js.map +1 -0
- package/build_module/reactivity/store.d.ts +14 -0
- package/build_module/reactivity/store.js +91 -0
- package/build_module/reactivity/store.js.map +1 -0
- package/build_module/reactivity/subscription.d.ts +2 -1
- package/build_module/reactivity/subscription.js +4 -5
- package/build_module/reactivity/subscription.js.map +1 -1
- package/build_module/reactivity/watcher.d.ts +6 -3
- package/build_module/reactivity/watcher.js +31 -10
- package/build_module/reactivity/watcher.js.map +1 -1
- package/build_module/routing/helpers.d.ts +2 -0
- package/build_module/routing/helpers.js +21 -0
- package/build_module/routing/helpers.js.map +1 -0
- package/build_module/routing/index.d.ts +5 -0
- package/build_module/routing/index.js +6 -0
- package/build_module/routing/index.js.map +1 -0
- package/build_module/routing/link.d.ts +2 -0
- package/build_module/routing/link.js +45 -0
- package/build_module/routing/link.js.map +1 -0
- package/build_module/routing/router.d.ts +23 -0
- package/build_module/routing/router.js +209 -0
- package/build_module/routing/router.js.map +1 -0
- package/build_module/routing/scroll-manager.d.ts +1 -0
- package/build_module/routing/scroll-manager.js +33 -0
- package/build_module/routing/scroll-manager.js.map +1 -0
- package/build_module/routing/state.d.ts +7 -0
- package/build_module/routing/state.js +45 -0
- package/build_module/routing/state.js.map +1 -0
- package/build_module/v-meta-nodes/style-v-node.d.ts +17 -7
- package/build_module/v-meta-nodes/style-v-node.js +181 -85
- package/build_module/v-meta-nodes/style-v-node.js.map +1 -1
- package/build_module/v-style-nodes/base-v-style.d.ts +10 -11
- package/build_module/v-style-nodes/base-v-style.js +23 -95
- package/build_module/v-style-nodes/base-v-style.js.map +1 -1
- package/build_module/v-style-nodes/css-function-builder-v-style.d.ts +0 -3
- package/build_module/v-style-nodes/css-function-builder-v-style.js +10 -5
- package/build_module/v-style-nodes/css-function-builder-v-style.js.map +1 -1
- package/build_module/v-style-nodes/style-sheet-builder.d.ts +9 -0
- package/build_module/v-style-nodes/style-sheet-builder.js +51 -0
- package/build_module/v-style-nodes/style-sheet-builder.js.map +1 -0
- package/build_module/v-style-nodes/transform-v-style.js.map +1 -1
- package/build_module/vdom-nodes/collection-vdom.d.ts +3 -1
- package/build_module/vdom-nodes/collection-vdom.js +114 -97
- package/build_module/vdom-nodes/collection-vdom.js.map +1 -1
- package/build_module/vdom-nodes/component-context.d.ts +5 -0
- package/build_module/vdom-nodes/component-context.js +5 -0
- package/build_module/vdom-nodes/component-context.js.map +1 -0
- package/build_module/vdom-nodes/component-vdom.d.ts +22 -0
- package/build_module/vdom-nodes/component-vdom.js +250 -12
- package/build_module/vdom-nodes/component-vdom.js.map +1 -1
- package/build_module/vdom-nodes/conditional-vdom.d.ts +1 -0
- package/build_module/vdom-nodes/conditional-vdom.js +14 -0
- package/build_module/vdom-nodes/conditional-vdom.js.map +1 -1
- package/build_module/vdom-nodes/container-vdom.d.ts +6 -2
- package/build_module/vdom-nodes/container-vdom.js +54 -1
- package/build_module/vdom-nodes/container-vdom.js.map +1 -1
- package/build_module/vdom-nodes/element-vdom.d.ts +2 -1
- package/build_module/vdom-nodes/element-vdom.js +72 -18
- package/build_module/vdom-nodes/element-vdom.js.map +1 -1
- package/build_module/vdom-nodes/html-vdom.d.ts +1 -0
- package/build_module/vdom-nodes/html-vdom.js +12 -0
- package/build_module/vdom-nodes/html-vdom.js.map +1 -1
- package/build_module/vdom-nodes/text-vdom.d.ts +1 -0
- package/build_module/vdom-nodes/text-vdom.js +3 -0
- package/build_module/vdom-nodes/text-vdom.js.map +1 -1
- package/build_module/vdom-nodes/vdom.d.ts +2 -0
- package/build_module/vdom-nodes/vdom.js +17 -0
- package/build_module/vdom-nodes/vdom.js.map +1 -1
- package/package.json +58 -57
- package/readme.md +32 -26
- package/build_module/css/css.d.ts +0 -0
- package/build_module/css/css.js +0 -1
- package/build_module/css/css.js.map +0 -1
- package/build_module/decoration/use-styles.d.ts +0 -14
- package/build_module/decoration/use-styles.js +0 -19
- package/build_module/decoration/use-styles.js.map +0 -1
- package/build_module/helpers/render-css.d.ts +0 -2
- package/build_module/helpers/render-css.js +0 -20
- package/build_module/helpers/render-css.js.map +0 -1
- package/build_module/helpers.d.ts +0 -3
- package/build_module/helpers.js +0 -50
- package/build_module/helpers.js.map +0 -1
- package/build_module/reactive.d.ts +0 -46
- package/build_module/reactive.js +0 -150
- package/build_module/reactive.js.map +0 -1
- package/build_module/reactivity/bound-reactive.d.ts +0 -13
- package/build_module/reactivity/bound-reactive.js +0 -20
- package/build_module/reactivity/bound-reactive.js.map +0 -1
- package/build_module/reactivity/reactive.d.ts +0 -22
- package/build_module/reactivity/reactive.js +0 -54
- package/build_module/reactivity/reactive.js.map +0 -1
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { Priority } from "./priority";
|
|
2
|
+
class Scheduler {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.queues = [
|
|
5
|
+
new Set(),
|
|
6
|
+
new Set(),
|
|
7
|
+
new Set(),
|
|
8
|
+
new Set(),
|
|
9
|
+
];
|
|
10
|
+
this.isPending = false;
|
|
11
|
+
this.startTime = 0;
|
|
12
|
+
this.frameYieldMs = 5;
|
|
13
|
+
this.isSync = false;
|
|
14
|
+
this.isSyncing = false;
|
|
15
|
+
this.channel = typeof MessageChannel !== "undefined" ? new MessageChannel() : null;
|
|
16
|
+
if (this.channel) {
|
|
17
|
+
this.channel.port1.onmessage = () => this.workLoop();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
enqueue(subscription, priority = Priority.Normal) {
|
|
21
|
+
this.queues[priority].add(subscription);
|
|
22
|
+
if (priority === Priority.Immediate || this.isSync) {
|
|
23
|
+
this.flushSync();
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.scheduleFlush();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
scheduleFlush() {
|
|
30
|
+
if (this.isPending)
|
|
31
|
+
return;
|
|
32
|
+
this.isPending = true;
|
|
33
|
+
if (this.channel) {
|
|
34
|
+
this.channel.port2.postMessage(null);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
setTimeout(() => this.workLoop(), 0);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
shouldYield() {
|
|
41
|
+
return performance.now() - this.startTime >= this.frameYieldMs;
|
|
42
|
+
}
|
|
43
|
+
workLoop() {
|
|
44
|
+
this.startTime = performance.now();
|
|
45
|
+
this.isPending = false;
|
|
46
|
+
let hasMoreWork = this.flushQueues();
|
|
47
|
+
if (hasMoreWork) {
|
|
48
|
+
this.scheduleFlush();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
flushQueues() {
|
|
52
|
+
for (let p = Priority.Immediate; p <= Priority.Background; p++) {
|
|
53
|
+
const queue = this.queues[p];
|
|
54
|
+
if (queue.size === 0)
|
|
55
|
+
continue;
|
|
56
|
+
const currentQueue = Array.from(queue);
|
|
57
|
+
queue.clear();
|
|
58
|
+
for (const subscription of currentQueue) {
|
|
59
|
+
if (subscription.active) {
|
|
60
|
+
const continuation = subscription.update();
|
|
61
|
+
if (continuation) {
|
|
62
|
+
this.queues[p].add(subscription);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (this.shouldYield()) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
for (let p = Priority.Immediate; p <= Priority.Background; p++) {
|
|
71
|
+
if (this.queues[p].size > 0)
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
flushSync() {
|
|
77
|
+
if (this.isSyncing)
|
|
78
|
+
return;
|
|
79
|
+
this.isSyncing = true;
|
|
80
|
+
this.isPending = true;
|
|
81
|
+
const originalShouldYield = this.shouldYield;
|
|
82
|
+
this.shouldYield = () => false;
|
|
83
|
+
try {
|
|
84
|
+
let hasMoreWork = true;
|
|
85
|
+
while (hasMoreWork) {
|
|
86
|
+
hasMoreWork = false;
|
|
87
|
+
for (let p = Priority.Immediate; p <= Priority.Background; p++) {
|
|
88
|
+
const queue = this.queues[p];
|
|
89
|
+
if (queue.size === 0)
|
|
90
|
+
continue;
|
|
91
|
+
const currentQueue = Array.from(queue);
|
|
92
|
+
queue.clear();
|
|
93
|
+
for (const subscription of currentQueue) {
|
|
94
|
+
if (subscription.active) {
|
|
95
|
+
const continuation = subscription.update();
|
|
96
|
+
if (continuation) {
|
|
97
|
+
queue.add(subscription);
|
|
98
|
+
hasMoreWork = true;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (queue.size > 0)
|
|
103
|
+
hasMoreWork = true;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
this.shouldYield = originalShouldYield;
|
|
109
|
+
this.isPending = false;
|
|
110
|
+
this.isSyncing = false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
setSync(sync) {
|
|
114
|
+
this.isSync = sync;
|
|
115
|
+
}
|
|
116
|
+
clear() {
|
|
117
|
+
for (const queue of this.queues) {
|
|
118
|
+
queue.clear();
|
|
119
|
+
}
|
|
120
|
+
this.isPending = false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export const scheduler = new Scheduler();
|
|
124
|
+
//# sourceMappingURL=scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/reactivity/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface StoreOptions<TState, TActions, TGetters> {
|
|
2
|
+
id?: string;
|
|
3
|
+
state?: () => TState;
|
|
4
|
+
getters?: TGetters & ThisType<TState & TGetters & {
|
|
5
|
+
$id: string;
|
|
6
|
+
}>;
|
|
7
|
+
actions?: TActions & ThisType<TState & TGetters & TActions & {
|
|
8
|
+
$id: string;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
export declare function createStore<TState extends Record<string, any>, TActions extends Record<string, Function>, TGetters extends Record<string, (state: any) => any>>(options: StoreOptions<TState, TActions, TGetters>): () => any;
|
|
12
|
+
export declare function getStore(id: string): any;
|
|
13
|
+
export declare function clearStores(): void;
|
|
14
|
+
export declare function getStores(): Record<string, any>;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import Watcher from "./watcher";
|
|
2
|
+
import Computed from "./computed";
|
|
3
|
+
import { getCurrentComponent } from "../vdom-nodes/component-context";
|
|
4
|
+
const storeRegistry = new Map();
|
|
5
|
+
export function createStore(options) {
|
|
6
|
+
const { id, state: stateFn, getters, actions } = options;
|
|
7
|
+
if (id && storeRegistry.has(id)) {
|
|
8
|
+
return () => storeRegistry.get(id);
|
|
9
|
+
}
|
|
10
|
+
const createInstance = () => {
|
|
11
|
+
const store = {
|
|
12
|
+
$id: id,
|
|
13
|
+
_state: {},
|
|
14
|
+
_getters: {}
|
|
15
|
+
};
|
|
16
|
+
if (stateFn) {
|
|
17
|
+
const rawState = stateFn();
|
|
18
|
+
for (const key in rawState) {
|
|
19
|
+
const watcher = new Watcher();
|
|
20
|
+
watcher.value = rawState[key];
|
|
21
|
+
store._state[key] = watcher;
|
|
22
|
+
Object.defineProperty(store, key, {
|
|
23
|
+
get: () => store._state[key],
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (getters) {
|
|
30
|
+
for (const key in getters) {
|
|
31
|
+
Object.defineProperty(store, key, {
|
|
32
|
+
get: () => store._getters[key],
|
|
33
|
+
enumerable: true,
|
|
34
|
+
configurable: true
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
for (const key in getters) {
|
|
38
|
+
const computed = new Computed(() => getters[key].call(store, store));
|
|
39
|
+
store._getters[key] = computed;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (actions) {
|
|
43
|
+
for (const key in actions) {
|
|
44
|
+
store[key] = actions[key].bind(store);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
store.$dispose = () => {
|
|
48
|
+
for (const key in store._getters) {
|
|
49
|
+
store._getters[key].dispose();
|
|
50
|
+
}
|
|
51
|
+
if (id) {
|
|
52
|
+
storeRegistry.delete(id);
|
|
53
|
+
}
|
|
54
|
+
store._state = {};
|
|
55
|
+
store._getters = {};
|
|
56
|
+
};
|
|
57
|
+
if (id) {
|
|
58
|
+
storeRegistry.set(id, store);
|
|
59
|
+
}
|
|
60
|
+
return store;
|
|
61
|
+
};
|
|
62
|
+
let singletonStore;
|
|
63
|
+
if (id) {
|
|
64
|
+
singletonStore = createInstance();
|
|
65
|
+
}
|
|
66
|
+
return () => {
|
|
67
|
+
let currentStore = id ? singletonStore : createInstance();
|
|
68
|
+
if (!id) {
|
|
69
|
+
const currentComponent = getCurrentComponent();
|
|
70
|
+
if (currentComponent && currentComponent.registerDisposable) {
|
|
71
|
+
currentComponent.registerDisposable(() => currentStore.$dispose());
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return currentStore;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export function getStore(id) {
|
|
78
|
+
return storeRegistry.get(id);
|
|
79
|
+
}
|
|
80
|
+
export function clearStores() {
|
|
81
|
+
storeRegistry.forEach(store => store.$dispose());
|
|
82
|
+
storeRegistry.clear();
|
|
83
|
+
}
|
|
84
|
+
export function getStores() {
|
|
85
|
+
const stores = {};
|
|
86
|
+
storeRegistry.forEach((store, id) => {
|
|
87
|
+
stores[id] = store;
|
|
88
|
+
});
|
|
89
|
+
return stores;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/reactivity/store.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAe,CAAC;AAS7C,MAAM,UAAU,WAAW,CAIzB,OAAiD;IAClD,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAEzD,IAAI,EAAE,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAChC,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KACnC;IAED,MAAM,cAAc,GAAG,GAAG,EAAE;QAC3B,MAAM,KAAK,GAAQ;YAClB,GAAG,EAAE,EAAE;YACP,MAAM,EAAE,EAA6B;YACrC,QAAQ,EAAE,EAAmC;SAC7C,CAAC;QAGF,IAAI,OAAO,EAAE;YACZ,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;YAC3B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;gBAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC9B,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC9B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;gBAE5B,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE;oBACjC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;oBAC5B,UAAU,EAAE,IAAI;oBAChB,YAAY,EAAE,IAAI;iBAClB,CAAC,CAAC;aACH;SACD;QAGD,IAAI,OAAO,EAAE;YACZ,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;gBAC1B,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE;oBACjC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAC9B,UAAU,EAAE,IAAI;oBAChB,YAAY,EAAE,IAAI;iBAClB,CAAC,CAAC;aACH;YAED,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;gBAC1B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACrE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;aAC/B;SACD;QAGD,IAAI,OAAO,EAAE;YACZ,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;gBAC1B,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACtC;SACD;QAED,KAAK,CAAC,QAAQ,GAAG,GAAG,EAAE;YACrB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE;gBACjC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;aAC9B;YACD,IAAI,EAAE,EAAE;gBACP,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aACzB;YACD,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;YAClB,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;QACrB,CAAC,CAAC;QAEF,IAAI,EAAE,EAAE;YACP,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;SAC7B;QAED,OAAO,KAAK,CAAC;IACd,CAAC,CAAC;IAEF,IAAI,cAAmB,CAAC;IACxB,IAAI,EAAE,EAAE;QACP,cAAc,GAAG,cAAc,EAAE,CAAC;KAClC;IAED,OAAO,GAAG,EAAE;QACX,IAAI,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;QAE1D,IAAI,CAAC,EAAE,EAAE;YACR,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;YAC/C,IAAI,gBAAgB,IAAK,gBAAwB,CAAC,kBAAkB,EAAE;gBACpE,gBAAwB,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;aAC5E;SACD;QACD,OAAO,YAAY,CAAC;IACrB,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAU;IAClC,OAAO,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,WAAW;IAC1B,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,aAAa,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,SAAS;IACxB,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACnC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -4,13 +4,15 @@ import { ConditionalVdom } from "../vdom-nodes/conditional-vdom";
|
|
|
4
4
|
import { HtmlVdom } from "../vdom-nodes/html-vdom";
|
|
5
5
|
import { TextVdom } from "../vdom-nodes/text-vdom";
|
|
6
6
|
import ReactiveAttr from "./reactive-attr";
|
|
7
|
-
import ReactiveStyle from "./reactive-style";
|
|
8
7
|
export default class Subscription {
|
|
9
8
|
constructor(boundReactive, item) {
|
|
9
|
+
this.active = true;
|
|
10
10
|
this.boundReactive = boundReactive;
|
|
11
11
|
this.item = item;
|
|
12
12
|
}
|
|
13
13
|
update() {
|
|
14
|
+
if (!this.active)
|
|
15
|
+
return;
|
|
14
16
|
let value = this.boundReactive._get();
|
|
15
17
|
if (this.item instanceof TextVdom) {
|
|
16
18
|
this.item.textNode.textContent = value ?? "";
|
|
@@ -24,11 +26,8 @@ export default class Subscription {
|
|
|
24
26
|
else if (this.item instanceof VMetaNode) {
|
|
25
27
|
this.item.update();
|
|
26
28
|
}
|
|
27
|
-
else if (this.item instanceof ReactiveStyle) {
|
|
28
|
-
this.item.vStyle.updateProp(this.item.prop, value);
|
|
29
|
-
}
|
|
30
29
|
else if (this.item instanceof CollectionVdom) {
|
|
31
|
-
this.item.updateList();
|
|
30
|
+
return this.item.updateList();
|
|
32
31
|
}
|
|
33
32
|
else if (this.item instanceof ConditionalVdom) {
|
|
34
33
|
this.item.updateConditions();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../src/reactivity/subscription.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,6BAA6B,CAAC;AACpD,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,YAAY,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../src/reactivity/subscription.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,6BAA6B,CAAC;AACpD,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAM3C,MAAM,CAAC,OAAO,OAAO,YAAY;IAKhC,YAAY,aAAuB,EAAE,IAAS;QAF9C,WAAM,GAAY,IAAI,CAAC;QAGtB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAGD,MAAM;QACL,IAAG,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAEtC,IAAG,IAAI,CAAC,IAAI,YAAY,QAAQ,EAAC;YAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,KAAe,IAAI,EAAE,CAAC;SACvD;aACI,IAAG,IAAI,CAAC,IAAI,YAAY,QAAQ,EAAC;YACrC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SAC5B;aACI,IAAG,IAAI,CAAC,IAAI,YAAY,YAAY,EAAC;YACzC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;SACvE;aACI,IAAG,IAAI,CAAC,IAAI,YAAY,SAAS,EAAC;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;SACnB;aACI,IAAG,IAAI,CAAC,IAAI,YAAY,cAAc,EAAC;YAE3C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;SAC9B;aACI,IAAG,IAAI,CAAC,IAAI,YAAY,eAAe,EAAC;YAE5C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC7B;aACI,IAAG,IAAI,CAAC,IAAI,YAAY,QAAQ,EAAC;YACrC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACjB;IACF,CAAC;CACD"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { IBinding, IWatcher } from "dothtml-interfaces";
|
|
2
2
|
import Binding from "./binding";
|
|
3
3
|
import Subscription from "./subscription";
|
|
4
|
+
import { Priority } from "./priority";
|
|
5
|
+
export declare const dependencyStack: Array<any>;
|
|
4
6
|
export default class Watcher<T = any> implements IWatcher<T> {
|
|
5
7
|
bindAs<Td>(transform: ((v: T) => Td) | {
|
|
6
8
|
display?: (v: T) => Td;
|
|
@@ -13,10 +15,11 @@ export default class Watcher<T = any> implements IWatcher<T> {
|
|
|
13
15
|
constructor();
|
|
14
16
|
get value(): T;
|
|
15
17
|
set value(v: T);
|
|
18
|
+
setValue(v: T, priority?: Priority): void;
|
|
16
19
|
private updater;
|
|
17
20
|
nextId: number;
|
|
18
|
-
subscribe(callback: Function): any;
|
|
19
|
-
_subscribe(boundReactive: IBinding, item: any): number;
|
|
21
|
+
subscribe(callback: Function, sync?: boolean): any;
|
|
22
|
+
_subscribe(boundReactive: IBinding, item: any, sync?: boolean): number;
|
|
20
23
|
_detachBinding(id: number): void;
|
|
21
|
-
updateObservers(): void;
|
|
24
|
+
updateObservers(priority?: Priority): void;
|
|
22
25
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import Binding from "./binding";
|
|
2
2
|
import Subscription from "./subscription";
|
|
3
|
+
import { Priority } from "./priority";
|
|
4
|
+
import { scheduler } from "./scheduler";
|
|
5
|
+
export const dependencyStack = [];
|
|
3
6
|
const TEXT_OFFSET = 0;
|
|
4
7
|
const HTML_OFFSET = 1;
|
|
5
8
|
const ATTR_OFFSET = 2;
|
|
@@ -30,32 +33,50 @@ export default class Watcher {
|
|
|
30
33
|
this.nextId = 1;
|
|
31
34
|
}
|
|
32
35
|
get value() {
|
|
36
|
+
const active = dependencyStack[dependencyStack.length - 1];
|
|
37
|
+
if (active && active.addDependency) {
|
|
38
|
+
active.addDependency(this);
|
|
39
|
+
}
|
|
33
40
|
return this._value;
|
|
34
41
|
}
|
|
35
42
|
set value(v) {
|
|
43
|
+
this.setValue(v);
|
|
44
|
+
}
|
|
45
|
+
setValue(v, priority = Priority.Normal) {
|
|
36
46
|
this._value = v;
|
|
37
|
-
this.updater(this._value);
|
|
47
|
+
this.updater(this._value, priority);
|
|
38
48
|
}
|
|
39
|
-
updater(value) {
|
|
49
|
+
updater(value, priority = Priority.Normal) {
|
|
40
50
|
for (let b in this.allBindings) {
|
|
41
|
-
this.allBindings[b]
|
|
51
|
+
const sub = this.allBindings[b];
|
|
52
|
+
if (sub.sync) {
|
|
53
|
+
sub.update();
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
scheduler.enqueue(sub, priority);
|
|
57
|
+
}
|
|
42
58
|
}
|
|
43
59
|
}
|
|
44
|
-
subscribe(callback) {
|
|
60
|
+
subscribe(callback, sync = false) {
|
|
45
61
|
let br = new Binding(this);
|
|
46
|
-
return br._subscribe(callback);
|
|
62
|
+
return br._subscribe(callback, sync);
|
|
47
63
|
}
|
|
48
|
-
_subscribe(boundReactive, item) {
|
|
64
|
+
_subscribe(boundReactive, item, sync = false) {
|
|
49
65
|
let id = this.nextId++;
|
|
50
|
-
|
|
66
|
+
const sub = new Subscription(boundReactive, item);
|
|
67
|
+
sub.sync = sync;
|
|
68
|
+
this.allBindings[id] = sub;
|
|
51
69
|
return id;
|
|
52
70
|
}
|
|
53
71
|
_detachBinding(id) {
|
|
54
|
-
|
|
72
|
+
if (this.allBindings[id]) {
|
|
73
|
+
this.allBindings[id].active = false;
|
|
74
|
+
delete this.allBindings[id];
|
|
75
|
+
}
|
|
55
76
|
}
|
|
56
|
-
updateObservers() {
|
|
77
|
+
updateObservers(priority = Priority.Normal) {
|
|
57
78
|
let updatedValue = this.value;
|
|
58
|
-
this.updater(updatedValue);
|
|
79
|
+
this.updater(updatedValue, priority);
|
|
59
80
|
}
|
|
60
81
|
}
|
|
61
82
|
//# sourceMappingURL=watcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/reactivity/watcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/reactivity/watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function generatePath(routes, name, params = {}, basePath = "") {
|
|
2
|
+
for (const route of routes) {
|
|
3
|
+
const fullPath = (basePath.endsWith("/") ? basePath.slice(0, -1) : basePath) + (route.path.startsWith("/") ? "" : "/") + route.path;
|
|
4
|
+
if (route.name === name) {
|
|
5
|
+
let resolvedPath = fullPath;
|
|
6
|
+
for (const key in params) {
|
|
7
|
+
const value = params[key];
|
|
8
|
+
resolvedPath = resolvedPath.replace(new RegExp(`\\{${key}\\}`, "g"), value);
|
|
9
|
+
resolvedPath = resolvedPath.replace(new RegExp(`:${key}`, "g"), value);
|
|
10
|
+
}
|
|
11
|
+
return resolvedPath;
|
|
12
|
+
}
|
|
13
|
+
if (route.children) {
|
|
14
|
+
const result = generatePath(route.children, name, params, fullPath);
|
|
15
|
+
if (result)
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/routing/helpers.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,YAAY,CAAC,MAAyB,EAAE,IAAY,EAAE,SAAc,EAAE,EAAE,WAAmB,EAAE;IAC5G,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC3B,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;QAEpI,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;YAExB,IAAI,YAAY,GAAG,QAAQ,CAAC;YAC5B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;gBACzB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC1B,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC5E,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;aACvE;YACD,OAAO,YAAY,CAAC;SACpB;QAED,IAAI,KAAK,CAAC,QAAQ,EAAE;YACnB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YACpE,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;SAC1B;KACD;IAED,OAAO,IAAI,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import dot from "../dot";
|
|
2
|
+
import { currentPath, navigate } from "./state";
|
|
3
|
+
import { getGlobalRoutes } from "./router";
|
|
4
|
+
import { generatePath } from "./helpers";
|
|
5
|
+
export const Link = dot.component(class {
|
|
6
|
+
static { this.props = {
|
|
7
|
+
to: { type: String, default: "" },
|
|
8
|
+
name: { type: String, default: "" },
|
|
9
|
+
params: { type: Object, default: () => ({}) },
|
|
10
|
+
activeClass: { type: String, default: "active" },
|
|
11
|
+
exact: { type: Boolean, default: false },
|
|
12
|
+
label: { type: String, default: "" }
|
|
13
|
+
}; }
|
|
14
|
+
getResolvedPath() {
|
|
15
|
+
if (this.props.name) {
|
|
16
|
+
return generatePath(getGlobalRoutes(), this.props.name, this.props.params) || "";
|
|
17
|
+
}
|
|
18
|
+
return this.props.to;
|
|
19
|
+
}
|
|
20
|
+
build() {
|
|
21
|
+
const resolvedPath = dot.computed(() => this.getResolvedPath());
|
|
22
|
+
return dot.a({
|
|
23
|
+
hRef: resolvedPath,
|
|
24
|
+
class: dot.computed(() => {
|
|
25
|
+
const path = currentPath.value;
|
|
26
|
+
const target = resolvedPath.value;
|
|
27
|
+
const isActive = this.props.exact
|
|
28
|
+
? path === target
|
|
29
|
+
: path.startsWith(target);
|
|
30
|
+
return isActive ? this.props.activeClass : "";
|
|
31
|
+
}),
|
|
32
|
+
onClick: (e) => {
|
|
33
|
+
if ((e.button === 0 || e.button === undefined) &&
|
|
34
|
+
!e.ctrlKey &&
|
|
35
|
+
!e.shiftKey &&
|
|
36
|
+
!e.altKey &&
|
|
37
|
+
!e.metaKey) {
|
|
38
|
+
e.preventDefault();
|
|
39
|
+
navigate(resolvedPath.value);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}, this.props.label || this.slots?.default);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/routing/link.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,QAAQ,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAChC;aACQ,UAAK,GAAG;QACd,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QACjC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QACnC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;QAC7C,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;QAChD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QACxC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;KACpC,CAAC;IAKM,eAAe;QACtB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACpB,OAAO,YAAY,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SACjF;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACtB,CAAC;IAED,KAAK;QACJ,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAEhE,OAAO,GAAG,CAAC,CAAC,CAAC;YACZ,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACxB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;gBAC/B,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;gBAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;oBAChC,CAAC,CAAC,IAAI,KAAK,MAAM;oBACjB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAE3B,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,CAAC,CAAC;YACF,OAAO,EAAE,CAAC,CAAa,EAAE,EAAE;gBAE1B,IACC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;oBAC1C,CAAC,CAAC,CAAC,OAAO;oBACV,CAAC,CAAC,CAAC,QAAQ;oBACX,CAAC,CAAC,CAAC,MAAM;oBACT,CAAC,CAAC,CAAC,OAAO,EACT;oBACD,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;iBAC7B;YAGF,CAAC;SAED,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;CACD,CACD,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { IDotComponent } from "dothtml-interfaces";
|
|
2
|
+
import { Vdom } from "../vdom-nodes/vdom";
|
|
3
|
+
export type DotComponentSource = any | {
|
|
4
|
+
new (...args: any[]): IDotComponent;
|
|
5
|
+
} | Vdom;
|
|
6
|
+
export interface RouteDefinition {
|
|
7
|
+
path: string;
|
|
8
|
+
component?: DotComponentSource | (() => Promise<any>);
|
|
9
|
+
redirect?: string | ((params: Record<string, string>) => string);
|
|
10
|
+
name?: string;
|
|
11
|
+
title?: string | ((params: Record<string, string>) => string);
|
|
12
|
+
children?: RouteDefinition[];
|
|
13
|
+
beforeEnter?: NavigationGuard;
|
|
14
|
+
}
|
|
15
|
+
export type NavigationGuard = (to: string, from: string, next: (path?: string | boolean) => void) => void | string | boolean | Promise<void | string | boolean>;
|
|
16
|
+
export declare function setGlobalRoutes(routes: RouteDefinition[]): void;
|
|
17
|
+
export declare function getGlobalRoutes(): RouteDefinition[];
|
|
18
|
+
export declare function matchRoute(routes: RouteDefinition[], path: string, basePath?: string): {
|
|
19
|
+
route: RouteDefinition;
|
|
20
|
+
params: Record<string, string>;
|
|
21
|
+
matchedPath: string;
|
|
22
|
+
};
|
|
23
|
+
export declare const Router: new (attrs?: import("dothtml-interfaces").ComponentArgs<[], []>) => IDotComponent & (new (attrs?: import("dothtml-interfaces").ComponentArgs<[], []>) => IDotComponent);
|