dothtml 6.0.0-beta.45 → 6.0.0-beta.47

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.
Files changed (152) hide show
  1. package/build_module/constants.js +2 -0
  2. package/build_module/constants.js.map +1 -0
  3. package/build_module/css/css-props.js +79 -0
  4. package/build_module/css/css-props.js.map +1 -0
  5. package/{dist/build_module → build_module}/css/format-css-type.d.ts +4 -3
  6. package/build_module/css/format-css-type.js +80 -0
  7. package/build_module/css/format-css-type.js.map +1 -0
  8. package/build_module/decoration/component.d.ts +4 -0
  9. package/build_module/decoration/component.js +35 -0
  10. package/build_module/decoration/component.js.map +1 -0
  11. package/build_module/dot.js +404 -0
  12. package/build_module/dot.js.map +1 -0
  13. package/build_module/events/event-manager.d.ts +14 -0
  14. package/build_module/events/event-manager.js +98 -0
  15. package/build_module/events/event-manager.js.map +1 -0
  16. package/build_module/events/synthetic-event.d.ts +17 -0
  17. package/build_module/events/synthetic-event.js +33 -0
  18. package/build_module/events/synthetic-event.js.map +1 -0
  19. package/build_module/helpers/render-stylesheet.js +36 -0
  20. package/build_module/helpers/render-stylesheet.js.map +1 -0
  21. package/build_module/helpers/tools.js +50 -0
  22. package/build_module/helpers/tools.js.map +1 -0
  23. package/build_module/index.d.ts +9 -0
  24. package/build_module/index.js +19 -0
  25. package/build_module/index.js.map +1 -0
  26. package/{dist/build_module → build_module}/reactivity/binding.d.ts +3 -1
  27. package/build_module/reactivity/binding.js +26 -0
  28. package/build_module/reactivity/binding.js.map +1 -0
  29. package/build_module/reactivity/computed.d.ts +18 -0
  30. package/build_module/reactivity/computed.js +106 -0
  31. package/build_module/reactivity/computed.js.map +1 -0
  32. package/build_module/reactivity/priority.d.ts +6 -0
  33. package/build_module/reactivity/priority.js +8 -0
  34. package/build_module/reactivity/priority.js.map +1 -0
  35. package/build_module/reactivity/reactive-attr.js +7 -0
  36. package/build_module/reactivity/reactive-attr.js.map +1 -0
  37. package/build_module/reactivity/reactive-style.js +7 -0
  38. package/build_module/reactivity/reactive-style.js.map +1 -0
  39. package/build_module/reactivity/ref-collection.d.ts +8 -0
  40. package/build_module/reactivity/ref-collection.js +32 -0
  41. package/build_module/reactivity/ref-collection.js.map +1 -0
  42. package/build_module/reactivity/ref.d.ts +7 -0
  43. package/build_module/reactivity/ref.js +35 -0
  44. package/build_module/reactivity/ref.js.map +1 -0
  45. package/build_module/reactivity/scheduler.d.ts +22 -0
  46. package/build_module/reactivity/scheduler.js +124 -0
  47. package/build_module/reactivity/scheduler.js.map +1 -0
  48. package/build_module/reactivity/store.d.ts +14 -0
  49. package/build_module/reactivity/store.js +91 -0
  50. package/build_module/reactivity/store.js.map +1 -0
  51. package/{dist/build_module → build_module}/reactivity/subscription.d.ts +2 -1
  52. package/build_module/reactivity/subscription.js +40 -0
  53. package/build_module/reactivity/subscription.js.map +1 -0
  54. package/{dist/build_module → build_module}/reactivity/watcher.d.ts +6 -3
  55. package/build_module/reactivity/watcher.js +82 -0
  56. package/build_module/reactivity/watcher.js.map +1 -0
  57. package/build_module/routing/helpers.d.ts +2 -0
  58. package/build_module/routing/helpers.js +21 -0
  59. package/build_module/routing/helpers.js.map +1 -0
  60. package/build_module/routing/index.d.ts +5 -0
  61. package/build_module/routing/index.js +6 -0
  62. package/build_module/routing/index.js.map +1 -0
  63. package/build_module/routing/link.d.ts +2 -0
  64. package/build_module/routing/link.js +45 -0
  65. package/build_module/routing/link.js.map +1 -0
  66. package/build_module/routing/router.d.ts +23 -0
  67. package/build_module/routing/router.js +209 -0
  68. package/build_module/routing/router.js.map +1 -0
  69. package/build_module/routing/scroll-manager.d.ts +1 -0
  70. package/build_module/routing/scroll-manager.js +33 -0
  71. package/build_module/routing/scroll-manager.js.map +1 -0
  72. package/build_module/routing/state.d.ts +7 -0
  73. package/build_module/routing/state.js +45 -0
  74. package/build_module/routing/state.js.map +1 -0
  75. package/build_module/v-dom-node.d.ts +0 -0
  76. package/build_module/v-dom-node.js +1 -0
  77. package/build_module/v-dom-node.js.map +1 -0
  78. package/build_module/v-meta-nodes/attribute-v-node.js +53 -0
  79. package/build_module/v-meta-nodes/attribute-v-node.js.map +1 -0
  80. package/build_module/v-meta-nodes/style-v-node.d.ts +26 -0
  81. package/build_module/v-meta-nodes/style-v-node.js +239 -0
  82. package/build_module/v-meta-nodes/style-v-node.js.map +1 -0
  83. package/build_module/v-meta-nodes/v-meta-node.js +3 -0
  84. package/build_module/v-meta-nodes/v-meta-node.js.map +1 -0
  85. package/build_module/v-style-nodes/base-v-style.d.ts +13 -0
  86. package/build_module/v-style-nodes/base-v-style.js +41 -0
  87. package/build_module/v-style-nodes/base-v-style.js.map +1 -0
  88. package/{dist/build_module → build_module}/v-style-nodes/css-function-builder-v-style.d.ts +0 -3
  89. package/build_module/v-style-nodes/css-function-builder-v-style.js +33 -0
  90. package/build_module/v-style-nodes/css-function-builder-v-style.js.map +1 -0
  91. package/build_module/v-style-nodes/filter-v-style.js +35 -0
  92. package/build_module/v-style-nodes/filter-v-style.js.map +1 -0
  93. package/build_module/v-style-nodes/style-sheet-builder.d.ts +9 -0
  94. package/build_module/v-style-nodes/style-sheet-builder.js +55 -0
  95. package/build_module/v-style-nodes/style-sheet-builder.js.map +1 -0
  96. package/build_module/v-style-nodes/transform-v-style.js +76 -0
  97. package/build_module/v-style-nodes/transform-v-style.js.map +1 -0
  98. package/build_module/v-style-nodes/v-style.js +6 -0
  99. package/build_module/v-style-nodes/v-style.js.map +1 -0
  100. package/{dist/build_module → build_module}/vdom-nodes/collection-vdom.d.ts +3 -1
  101. package/build_module/vdom-nodes/collection-vdom.js +174 -0
  102. package/build_module/vdom-nodes/collection-vdom.js.map +1 -0
  103. package/build_module/vdom-nodes/component-context.d.ts +5 -0
  104. package/build_module/vdom-nodes/component-context.js +5 -0
  105. package/build_module/vdom-nodes/component-context.js.map +1 -0
  106. package/build_module/vdom-nodes/component-vdom.d.ts +35 -0
  107. package/build_module/vdom-nodes/component-vdom.js +338 -0
  108. package/build_module/vdom-nodes/component-vdom.js.map +1 -0
  109. package/{dist/build_module → build_module}/vdom-nodes/conditional-vdom.d.ts +1 -0
  110. package/build_module/vdom-nodes/conditional-vdom.js +112 -0
  111. package/build_module/vdom-nodes/conditional-vdom.js.map +1 -0
  112. package/{dist/build_module → build_module}/vdom-nodes/container-vdom.d.ts +6 -2
  113. package/build_module/vdom-nodes/container-vdom.js +163 -0
  114. package/build_module/vdom-nodes/container-vdom.js.map +1 -0
  115. package/{dist/build_module → build_module}/vdom-nodes/element-vdom.d.ts +2 -1
  116. package/build_module/vdom-nodes/element-vdom.js +218 -0
  117. package/build_module/vdom-nodes/element-vdom.js.map +1 -0
  118. package/{dist/build_module → build_module}/vdom-nodes/html-vdom.d.ts +1 -0
  119. package/build_module/vdom-nodes/html-vdom.js +65 -0
  120. package/build_module/vdom-nodes/html-vdom.js.map +1 -0
  121. package/{dist/build_module → build_module}/vdom-nodes/text-vdom.d.ts +1 -0
  122. package/build_module/vdom-nodes/text-vdom.js +40 -0
  123. package/build_module/vdom-nodes/text-vdom.js.map +1 -0
  124. package/{dist/build_module → build_module}/vdom-nodes/vdom.d.ts +2 -0
  125. package/build_module/vdom-nodes/vdom.js +58 -0
  126. package/build_module/vdom-nodes/vdom.js.map +1 -0
  127. package/build_module/window-wrapper.js +39 -0
  128. package/build_module/window-wrapper.js.map +1 -0
  129. package/package.json +58 -64
  130. package/readme.md +32 -26
  131. package/dist/build_module/index.d.ts +0 -7
  132. package/dist/build_module/reactivity/ref.d.ts +0 -5
  133. package/dist/build_module/v-meta-nodes/style-v-node.d.ts +0 -16
  134. package/dist/build_module/v-style-nodes/base-v-style.d.ts +0 -14
  135. package/dist/build_module/vdom-nodes/component-vdom.d.ts +0 -13
  136. package/dist/index.cjs.js +0 -2
  137. package/dist/index.cjs.js.map +0 -1
  138. package/dist/index.esm.js +0 -2
  139. package/dist/index.esm.js.map +0 -1
  140. /package/{dist/build_module → build_module}/constants.d.ts +0 -0
  141. /package/{dist/build_module → build_module}/css/css-props.d.ts +0 -0
  142. /package/{dist/build_module → build_module}/dot.d.ts +0 -0
  143. /package/{dist/build_module → build_module}/helpers/render-stylesheet.d.ts +0 -0
  144. /package/{dist/build_module → build_module}/helpers/tools.d.ts +0 -0
  145. /package/{dist/build_module → build_module}/reactivity/reactive-attr.d.ts +0 -0
  146. /package/{dist/build_module → build_module}/reactivity/reactive-style.d.ts +0 -0
  147. /package/{dist/build_module → build_module}/v-meta-nodes/attribute-v-node.d.ts +0 -0
  148. /package/{dist/build_module → build_module}/v-meta-nodes/v-meta-node.d.ts +0 -0
  149. /package/{dist/build_module → build_module}/v-style-nodes/filter-v-style.d.ts +0 -0
  150. /package/{dist/build_module → build_module}/v-style-nodes/transform-v-style.d.ts +0 -0
  151. /package/{dist/build_module → build_module}/v-style-nodes/v-style.d.ts +0 -0
  152. /package/{dist/build_module → build_module}/window-wrapper.d.ts +0 -0
@@ -0,0 +1,22 @@
1
+ import { Priority } from "./priority";
2
+ import Subscription from "./subscription";
3
+ declare class Scheduler {
4
+ private queues;
5
+ private isPending;
6
+ private startTime;
7
+ private frameYieldMs;
8
+ private isSync;
9
+ private isSyncing;
10
+ private channel;
11
+ constructor();
12
+ enqueue(subscription: Subscription, priority?: Priority): void;
13
+ private scheduleFlush;
14
+ shouldYield(): boolean;
15
+ private workLoop;
16
+ private flushQueues;
17
+ flushSync(): void;
18
+ setSync(sync: boolean): void;
19
+ clear(): void;
20
+ }
21
+ export declare const scheduler: Scheduler;
22
+ export {};
@@ -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":"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"}
@@ -2,6 +2,7 @@ import { IBinding } from "dothtml-interfaces";
2
2
  export default class Subscription {
3
3
  boundReactive: IBinding;
4
4
  item: any;
5
+ active: boolean;
5
6
  constructor(boundReactive: IBinding, item: any);
6
- update(): void;
7
+ update(): any;
7
8
  }
@@ -0,0 +1,40 @@
1
+ import VMetaNode from "../v-meta-nodes/v-meta-node";
2
+ import CollectionVdom from "../vdom-nodes/collection-vdom";
3
+ import { ConditionalVdom } from "../vdom-nodes/conditional-vdom";
4
+ import { HtmlVdom } from "../vdom-nodes/html-vdom";
5
+ import { TextVdom } from "../vdom-nodes/text-vdom";
6
+ import ReactiveAttr from "./reactive-attr";
7
+ export default class Subscription {
8
+ constructor(boundReactive, item) {
9
+ this.active = true;
10
+ this.boundReactive = boundReactive;
11
+ this.item = item;
12
+ }
13
+ update() {
14
+ if (!this.active)
15
+ return;
16
+ let value = this.boundReactive._get();
17
+ if (this.item instanceof TextVdom) {
18
+ this.item.textNode.textContent = value ?? "";
19
+ }
20
+ else if (this.item instanceof HtmlVdom) {
21
+ this.item.updateHtml(value);
22
+ }
23
+ else if (this.item instanceof ReactiveAttr) {
24
+ this.item.elementVdom.setAttr(this.item.attribute, this.boundReactive);
25
+ }
26
+ else if (this.item instanceof VMetaNode) {
27
+ this.item.update();
28
+ }
29
+ else if (this.item instanceof CollectionVdom) {
30
+ return this.item.updateList();
31
+ }
32
+ else if (this.item instanceof ConditionalVdom) {
33
+ this.item.updateConditions();
34
+ }
35
+ else if (this.item instanceof Function) {
36
+ this.item(value);
37
+ }
38
+ }
39
+ }
40
+ //# sourceMappingURL=subscription.js.map
@@ -0,0 +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;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
  }
@@ -0,0 +1,82 @@
1
+ import Binding from "./binding";
2
+ import Subscription from "./subscription";
3
+ import { Priority } from "./priority";
4
+ import { scheduler } from "./scheduler";
5
+ export const dependencyStack = [];
6
+ const TEXT_OFFSET = 0;
7
+ const HTML_OFFSET = 1;
8
+ const ATTR_OFFSET = 2;
9
+ const ATTR_COLLECTION_OFFSET = 3;
10
+ const STYLE_OFFSET = 4;
11
+ const COND_OFFSET = 5;
12
+ const ARRAY_OFFSET = 6;
13
+ const CB_OFFSET = 7;
14
+ const CATEGORIES = CB_OFFSET + 1;
15
+ export default class Watcher {
16
+ bindAs(transform) {
17
+ let br = new Binding(this);
18
+ if (transform["call"] && transform["apply"]) {
19
+ br._transform = {
20
+ display: transform
21
+ };
22
+ }
23
+ else {
24
+ br._transform = transform;
25
+ }
26
+ return br;
27
+ }
28
+ bind() {
29
+ return new Binding(this);
30
+ }
31
+ constructor() {
32
+ this.allBindings = {};
33
+ this.nextId = 1;
34
+ }
35
+ get value() {
36
+ const active = dependencyStack[dependencyStack.length - 1];
37
+ if (active && active.addDependency) {
38
+ active.addDependency(this);
39
+ }
40
+ return this._value;
41
+ }
42
+ set value(v) {
43
+ this.setValue(v);
44
+ }
45
+ setValue(v, priority = Priority.Normal) {
46
+ this._value = v;
47
+ this.updater(this._value, priority);
48
+ }
49
+ updater(value, priority = Priority.Normal) {
50
+ for (let b in this.allBindings) {
51
+ const sub = this.allBindings[b];
52
+ if (sub.sync) {
53
+ sub.update();
54
+ }
55
+ else {
56
+ scheduler.enqueue(sub, priority);
57
+ }
58
+ }
59
+ }
60
+ subscribe(callback, sync = false) {
61
+ let br = new Binding(this);
62
+ return br._subscribe(callback, sync);
63
+ }
64
+ _subscribe(boundReactive, item, sync = false) {
65
+ let id = this.nextId++;
66
+ const sub = new Subscription(boundReactive, item);
67
+ sub.sync = sync;
68
+ this.allBindings[id] = sub;
69
+ return id;
70
+ }
71
+ _detachBinding(id) {
72
+ if (this.allBindings[id]) {
73
+ this.allBindings[id].active = false;
74
+ delete this.allBindings[id];
75
+ }
76
+ }
77
+ updateObservers(priority = Priority.Normal) {
78
+ let updatedValue = this.value;
79
+ this.updater(updatedValue, priority);
80
+ }
81
+ }
82
+ //# sourceMappingURL=watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/reactivity/watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { RouteDefinition } from "./router";
2
+ export declare function generatePath(routes: RouteDefinition[], name: string, params?: any, basePath?: string): string | null;
@@ -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,5 @@
1
+ export * from "./state";
2
+ export * from "./router";
3
+ export * from "./link";
4
+ export * from "./helpers";
5
+ export * from "./scroll-manager";
@@ -0,0 +1,6 @@
1
+ export * from "./state";
2
+ export * from "./router";
3
+ export * from "./link";
4
+ export * from "./helpers";
5
+ export * from "./scroll-manager";
6
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ import { IDotComponent } from "dothtml-interfaces";
2
+ export declare const Link: new (attrs?: import("dothtml-interfaces").ComponentArgs<[], []>) => IDotComponent & (new (attrs?: import("dothtml-interfaces").ComponentArgs<[], []>) => IDotComponent);
@@ -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);