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.
Files changed (129) hide show
  1. package/build_module/css/css-props.js +38 -1
  2. package/build_module/css/css-props.js.map +1 -1
  3. package/build_module/css/format-css-type.d.ts +4 -3
  4. package/build_module/css/format-css-type.js +7 -0
  5. package/build_module/css/format-css-type.js.map +1 -1
  6. package/build_module/decoration/component.d.ts +4 -14
  7. package/build_module/decoration/component.js +29 -29
  8. package/build_module/decoration/component.js.map +1 -1
  9. package/build_module/dot.js +130 -68
  10. package/build_module/dot.js.map +1 -1
  11. package/build_module/events/event-manager.d.ts +14 -0
  12. package/build_module/events/event-manager.js +98 -0
  13. package/build_module/events/event-manager.js.map +1 -0
  14. package/build_module/events/synthetic-event.d.ts +17 -0
  15. package/build_module/events/synthetic-event.js +33 -0
  16. package/build_module/events/synthetic-event.js.map +1 -0
  17. package/build_module/helpers/render-stylesheet.js +18 -9
  18. package/build_module/helpers/render-stylesheet.js.map +1 -1
  19. package/build_module/index.d.ts +3 -1
  20. package/build_module/index.js +14 -1
  21. package/build_module/index.js.map +1 -1
  22. package/build_module/reactivity/binding.d.ts +3 -1
  23. package/build_module/reactivity/binding.js +8 -2
  24. package/build_module/reactivity/binding.js.map +1 -1
  25. package/build_module/reactivity/computed.d.ts +18 -0
  26. package/build_module/reactivity/computed.js +106 -0
  27. package/build_module/reactivity/computed.js.map +1 -0
  28. package/build_module/reactivity/priority.d.ts +6 -0
  29. package/build_module/reactivity/priority.js +8 -0
  30. package/build_module/reactivity/priority.js.map +1 -0
  31. package/build_module/reactivity/ref-collection.d.ts +8 -0
  32. package/build_module/reactivity/ref-collection.js +32 -0
  33. package/build_module/reactivity/ref-collection.js.map +1 -0
  34. package/build_module/reactivity/ref.d.ts +5 -3
  35. package/build_module/reactivity/ref.js +31 -2
  36. package/build_module/reactivity/ref.js.map +1 -1
  37. package/build_module/reactivity/scheduler.d.ts +22 -0
  38. package/build_module/reactivity/scheduler.js +124 -0
  39. package/build_module/reactivity/scheduler.js.map +1 -0
  40. package/build_module/reactivity/store.d.ts +14 -0
  41. package/build_module/reactivity/store.js +91 -0
  42. package/build_module/reactivity/store.js.map +1 -0
  43. package/build_module/reactivity/subscription.d.ts +2 -1
  44. package/build_module/reactivity/subscription.js +4 -5
  45. package/build_module/reactivity/subscription.js.map +1 -1
  46. package/build_module/reactivity/watcher.d.ts +6 -3
  47. package/build_module/reactivity/watcher.js +31 -10
  48. package/build_module/reactivity/watcher.js.map +1 -1
  49. package/build_module/routing/helpers.d.ts +2 -0
  50. package/build_module/routing/helpers.js +21 -0
  51. package/build_module/routing/helpers.js.map +1 -0
  52. package/build_module/routing/index.d.ts +5 -0
  53. package/build_module/routing/index.js +6 -0
  54. package/build_module/routing/index.js.map +1 -0
  55. package/build_module/routing/link.d.ts +2 -0
  56. package/build_module/routing/link.js +45 -0
  57. package/build_module/routing/link.js.map +1 -0
  58. package/build_module/routing/router.d.ts +23 -0
  59. package/build_module/routing/router.js +209 -0
  60. package/build_module/routing/router.js.map +1 -0
  61. package/build_module/routing/scroll-manager.d.ts +1 -0
  62. package/build_module/routing/scroll-manager.js +33 -0
  63. package/build_module/routing/scroll-manager.js.map +1 -0
  64. package/build_module/routing/state.d.ts +7 -0
  65. package/build_module/routing/state.js +45 -0
  66. package/build_module/routing/state.js.map +1 -0
  67. package/build_module/v-meta-nodes/style-v-node.d.ts +17 -7
  68. package/build_module/v-meta-nodes/style-v-node.js +181 -85
  69. package/build_module/v-meta-nodes/style-v-node.js.map +1 -1
  70. package/build_module/v-style-nodes/base-v-style.d.ts +10 -11
  71. package/build_module/v-style-nodes/base-v-style.js +23 -95
  72. package/build_module/v-style-nodes/base-v-style.js.map +1 -1
  73. package/build_module/v-style-nodes/css-function-builder-v-style.d.ts +0 -3
  74. package/build_module/v-style-nodes/css-function-builder-v-style.js +10 -5
  75. package/build_module/v-style-nodes/css-function-builder-v-style.js.map +1 -1
  76. package/build_module/v-style-nodes/style-sheet-builder.d.ts +9 -0
  77. package/build_module/v-style-nodes/style-sheet-builder.js +51 -0
  78. package/build_module/v-style-nodes/style-sheet-builder.js.map +1 -0
  79. package/build_module/v-style-nodes/transform-v-style.js.map +1 -1
  80. package/build_module/vdom-nodes/collection-vdom.d.ts +3 -1
  81. package/build_module/vdom-nodes/collection-vdom.js +114 -97
  82. package/build_module/vdom-nodes/collection-vdom.js.map +1 -1
  83. package/build_module/vdom-nodes/component-context.d.ts +5 -0
  84. package/build_module/vdom-nodes/component-context.js +5 -0
  85. package/build_module/vdom-nodes/component-context.js.map +1 -0
  86. package/build_module/vdom-nodes/component-vdom.d.ts +22 -0
  87. package/build_module/vdom-nodes/component-vdom.js +250 -12
  88. package/build_module/vdom-nodes/component-vdom.js.map +1 -1
  89. package/build_module/vdom-nodes/conditional-vdom.d.ts +1 -0
  90. package/build_module/vdom-nodes/conditional-vdom.js +14 -0
  91. package/build_module/vdom-nodes/conditional-vdom.js.map +1 -1
  92. package/build_module/vdom-nodes/container-vdom.d.ts +6 -2
  93. package/build_module/vdom-nodes/container-vdom.js +54 -1
  94. package/build_module/vdom-nodes/container-vdom.js.map +1 -1
  95. package/build_module/vdom-nodes/element-vdom.d.ts +2 -1
  96. package/build_module/vdom-nodes/element-vdom.js +72 -18
  97. package/build_module/vdom-nodes/element-vdom.js.map +1 -1
  98. package/build_module/vdom-nodes/html-vdom.d.ts +1 -0
  99. package/build_module/vdom-nodes/html-vdom.js +12 -0
  100. package/build_module/vdom-nodes/html-vdom.js.map +1 -1
  101. package/build_module/vdom-nodes/text-vdom.d.ts +1 -0
  102. package/build_module/vdom-nodes/text-vdom.js +3 -0
  103. package/build_module/vdom-nodes/text-vdom.js.map +1 -1
  104. package/build_module/vdom-nodes/vdom.d.ts +2 -0
  105. package/build_module/vdom-nodes/vdom.js +17 -0
  106. package/build_module/vdom-nodes/vdom.js.map +1 -1
  107. package/package.json +58 -57
  108. package/readme.md +32 -26
  109. package/build_module/css/css.d.ts +0 -0
  110. package/build_module/css/css.js +0 -1
  111. package/build_module/css/css.js.map +0 -1
  112. package/build_module/decoration/use-styles.d.ts +0 -14
  113. package/build_module/decoration/use-styles.js +0 -19
  114. package/build_module/decoration/use-styles.js.map +0 -1
  115. package/build_module/helpers/render-css.d.ts +0 -2
  116. package/build_module/helpers/render-css.js +0 -20
  117. package/build_module/helpers/render-css.js.map +0 -1
  118. package/build_module/helpers.d.ts +0 -3
  119. package/build_module/helpers.js +0 -50
  120. package/build_module/helpers.js.map +0 -1
  121. package/build_module/reactive.d.ts +0 -46
  122. package/build_module/reactive.js +0 -150
  123. package/build_module/reactive.js.map +0 -1
  124. package/build_module/reactivity/bound-reactive.d.ts +0 -13
  125. package/build_module/reactivity/bound-reactive.js +0 -20
  126. package/build_module/reactivity/bound-reactive.js.map +0 -1
  127. package/build_module/reactivity/reactive.d.ts +0 -22
  128. package/build_module/reactivity/reactive.js +0 -54
  129. package/build_module/reactivity/reactive.js.map +0 -1
@@ -0,0 +1,209 @@
1
+ import dot from "../dot";
2
+ import { currentPath, previousPath, navigate } from "./state";
3
+ import { Vdom } from "../vdom-nodes/vdom";
4
+ const beforeHooks = [];
5
+ const afterHooks = [];
6
+ const globalRoutes = dot.watch([]);
7
+ export function setGlobalRoutes(routes) {
8
+ globalRoutes.value = routes;
9
+ }
10
+ export function getGlobalRoutes() {
11
+ return globalRoutes.value;
12
+ }
13
+ export function matchRoute(routes, path, basePath = "") {
14
+ const relativePath = path.startsWith(basePath) ? path.slice(basePath.length) : path;
15
+ const pathSegments = relativePath.split("/").filter(s => s !== "");
16
+ for (const route of routes) {
17
+ const routeSegments = route.path.split("/").filter(s => s !== "");
18
+ const params = {};
19
+ let match = true;
20
+ const hasMultiWildcard = routeSegments.indexOf("*") !== -1;
21
+ const isPrefixMatchAllowed = !!(route.children && route.children.length > 0);
22
+ if (!hasMultiWildcard && !isPrefixMatchAllowed && routeSegments.length !== pathSegments.length) {
23
+ continue;
24
+ }
25
+ if (routeSegments.length > pathSegments.length) {
26
+ continue;
27
+ }
28
+ for (let i = 0; i < routeSegments.length; i++) {
29
+ const rSeg = routeSegments[i];
30
+ const pSeg = pathSegments[i];
31
+ if (rSeg === "*") {
32
+ match = true;
33
+ break;
34
+ }
35
+ if (pSeg === undefined) {
36
+ match = false;
37
+ break;
38
+ }
39
+ if (rSeg === "+") {
40
+ continue;
41
+ }
42
+ if (rSeg.startsWith("{") && rSeg.endsWith("}")) {
43
+ const paramName = rSeg.slice(1, -1);
44
+ params[paramName] = pSeg;
45
+ continue;
46
+ }
47
+ if (rSeg.startsWith(":")) {
48
+ const paramName = rSeg.slice(1);
49
+ params[paramName] = pSeg;
50
+ continue;
51
+ }
52
+ if (rSeg !== pSeg) {
53
+ match = false;
54
+ break;
55
+ }
56
+ }
57
+ if (match) {
58
+ const matchedSegments = pathSegments.slice(0, routeSegments.length);
59
+ const matchedPath = (basePath.endsWith("/") ? basePath.slice(0, -1) : basePath) + "/" + matchedSegments.join("/");
60
+ return { route, params, matchedPath };
61
+ }
62
+ }
63
+ return null;
64
+ }
65
+ export const Router = dot.component(class {
66
+ constructor() {
67
+ this.resolvedComponent = dot.watch(null);
68
+ this.currentMatch = null;
69
+ this.lastPath = "";
70
+ this.subId = -1;
71
+ this.loaderCache = new Map();
72
+ }
73
+ static { this.props = {
74
+ routes: { type: Array, required: true },
75
+ notFound: { type: Object, default: null },
76
+ loading: { type: Object, default: null },
77
+ basePath: { type: String, default: "" }
78
+ }; }
79
+ mounting() {
80
+ this.subId = currentPath.subscribe(() => {
81
+ this._?.cvdom.requestUpdate();
82
+ });
83
+ }
84
+ unmounting() {
85
+ currentPath._detachBinding(this.subId);
86
+ }
87
+ build(dot) {
88
+ setGlobalRoutes(this.props.routes);
89
+ const path = currentPath.value;
90
+ const match = matchRoute(this.props.routes, path, this.props.basePath);
91
+ this.currentMatch = match;
92
+ const proceed = (comp) => {
93
+ if (!match)
94
+ return;
95
+ let title = match.route.title;
96
+ if (typeof title === "function") {
97
+ title = title(match.params);
98
+ }
99
+ if (title) {
100
+ document.title = title;
101
+ }
102
+ if (typeof comp === "function" && !comp.prototype?.build) {
103
+ if (this.loaderCache.has(comp)) {
104
+ this.resolvedComponent.value = this.loaderCache.get(comp);
105
+ afterHooks.forEach(h => h(path, previousPath.value));
106
+ return;
107
+ }
108
+ const result = comp();
109
+ if (result instanceof Promise) {
110
+ result.then(m => {
111
+ const resolved = m.default || m;
112
+ this.loaderCache.set(comp, resolved);
113
+ this.resolvedComponent.value = resolved;
114
+ this._?.cvdom.requestUpdate();
115
+ afterHooks.forEach(h => h(path, previousPath.value));
116
+ });
117
+ this.resolvedComponent.value = this.props.loading || dot.div("Loading...");
118
+ return;
119
+ }
120
+ }
121
+ this.resolvedComponent.value = comp;
122
+ afterHooks.forEach(h => h(path, previousPath.value));
123
+ };
124
+ if (!match) {
125
+ this.resolvedComponent.value = this.props.notFound || dot.div("404 - Not Found");
126
+ }
127
+ else if (match.route.redirect) {
128
+ const target = typeof match.route.redirect === "function"
129
+ ? match.route.redirect(match.params)
130
+ : match.route.redirect;
131
+ navigate(target, true);
132
+ return dot.div();
133
+ }
134
+ else {
135
+ const guards = [...beforeHooks];
136
+ if (match.route.beforeEnter) {
137
+ guards.push(match.route.beforeEnter);
138
+ }
139
+ const runGuards = async (index) => {
140
+ if (index >= guards.length) {
141
+ proceed(match.route.component);
142
+ return;
143
+ }
144
+ const guard = guards[index];
145
+ let nextCalled = false;
146
+ const handleNext = (nextVal) => {
147
+ if (nextCalled)
148
+ return;
149
+ nextCalled = true;
150
+ if (nextVal === false) {
151
+ navigate(previousPath.value, true);
152
+ }
153
+ else if (typeof nextVal === "string") {
154
+ navigate(nextVal, true);
155
+ }
156
+ else {
157
+ runGuards(index + 1);
158
+ }
159
+ };
160
+ const result = guard(path, previousPath.value, handleNext);
161
+ if (result instanceof Promise) {
162
+ const asyncResult = await result;
163
+ if (!nextCalled) {
164
+ if (asyncResult === false || typeof asyncResult === "string") {
165
+ handleNext(asyncResult);
166
+ }
167
+ else {
168
+ handleNext();
169
+ }
170
+ }
171
+ }
172
+ else if (result !== undefined && !nextCalled) {
173
+ handleNext(result);
174
+ }
175
+ };
176
+ runGuards(0);
177
+ }
178
+ const C = this.resolvedComponent.value;
179
+ if (!C)
180
+ return dot.div();
181
+ const currentMatch = this.currentMatch;
182
+ if (typeof C === "function" && C.prototype?.build) {
183
+ return dot.mount(new C(), {
184
+ routeParams: currentMatch?.params,
185
+ basePath: currentMatch?.matchedPath
186
+ });
187
+ }
188
+ if (typeof C === "object" && C.build) {
189
+ return dot.mount(C, {
190
+ routeParams: currentMatch?.params,
191
+ basePath: currentMatch?.matchedPath
192
+ });
193
+ }
194
+ if (C instanceof Vdom)
195
+ return C;
196
+ return dot.div(C);
197
+ }
198
+ });
199
+ Router.beforeEach = (guard) => {
200
+ beforeHooks.push(guard);
201
+ };
202
+ Router.afterEach = (hook) => {
203
+ afterHooks.push(hook);
204
+ };
205
+ Router.clearHooks = () => {
206
+ beforeHooks.length = 0;
207
+ afterHooks.length = 0;
208
+ };
209
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/routing/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function initScrollManager(): void;
@@ -0,0 +1,33 @@
1
+ import { currentPath, currentHash } from "./state";
2
+ const scrollPositions = new Map();
3
+ export function initScrollManager() {
4
+ if (typeof window === "undefined")
5
+ return;
6
+ window.addEventListener("scroll", () => {
7
+ scrollPositions.set(window.location.pathname, {
8
+ x: window.pageXOffset,
9
+ y: window.pageYOffset
10
+ });
11
+ }, { passive: true });
12
+ currentPath.subscribe((newPath) => {
13
+ setTimeout(() => {
14
+ const hash = currentHash.value;
15
+ if (hash && hash.startsWith("#")) {
16
+ const id = hash.substring(1);
17
+ const element = document.getElementById(id);
18
+ if (element) {
19
+ element.scrollIntoView();
20
+ return;
21
+ }
22
+ }
23
+ const savedPosition = scrollPositions.get(newPath);
24
+ if (savedPosition) {
25
+ window.scrollTo(savedPosition.x, savedPosition.y);
26
+ }
27
+ else {
28
+ window.scrollTo(0, 0);
29
+ }
30
+ }, 0);
31
+ });
32
+ }
33
+ //# sourceMappingURL=scroll-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-manager.js","sourceRoot":"","sources":["../../src/routing/scroll-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAoC,CAAC;AAMpE,MAAM,UAAU,iBAAiB;IAChC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAM1C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC7C,CAAC,EAAE,MAAM,CAAC,WAAW;YACrB,CAAC,EAAE,MAAM,CAAC,WAAW;SACrB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtB,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;QAEjC,UAAU,CAAC,GAAG,EAAE;YACf,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;YAC/B,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACjC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBAC5C,IAAI,OAAO,EAAE;oBACZ,OAAO,CAAC,cAAc,EAAE,CAAC;oBACzB,OAAO;iBACP;aACD;YAED,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,aAAa,EAAE;gBAClB,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;aAClD;iBAAM;gBACN,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACtB;QACF,CAAC,EAAE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const currentPath: import("dothtml-interfaces").IWatcher<string>;
2
+ export declare const previousPath: import("dothtml-interfaces").IWatcher<string>;
3
+ export declare const currentSearch: import("dothtml-interfaces").IWatcher<string>;
4
+ export declare const currentHash: import("dothtml-interfaces").IWatcher<string>;
5
+ export declare function navigate(path: string, replace?: boolean): void;
6
+ export declare function useQueryParams(): import("dothtml-interfaces").IWatcher<Record<string, string>>;
7
+ export declare function useHash(): import("dothtml-interfaces").IWatcher<string>;
@@ -0,0 +1,45 @@
1
+ import dot from "../dot";
2
+ export const currentPath = dot.watch(typeof window !== "undefined" ? window.location.pathname : "/");
3
+ export const previousPath = dot.watch(typeof window !== "undefined" ? window.location.pathname : "/");
4
+ export const currentSearch = dot.watch(typeof window !== "undefined" ? window.location.search : "");
5
+ export const currentHash = dot.watch(typeof window !== "undefined" ? window.location.hash : "");
6
+ export function navigate(path, replace = false) {
7
+ if (typeof window === "undefined")
8
+ return;
9
+ previousPath.value = window.location.pathname;
10
+ if (replace) {
11
+ window.history.replaceState({}, "", path);
12
+ }
13
+ else {
14
+ window.history.pushState({}, "", path);
15
+ }
16
+ currentPath.value = window.location.pathname;
17
+ currentSearch.value = window.location.search;
18
+ currentHash.value = window.location.hash;
19
+ }
20
+ export function useQueryParams() {
21
+ return dot.computed(() => {
22
+ const search = currentSearch.value;
23
+ const params = new URLSearchParams(search);
24
+ const result = {};
25
+ params.forEach((value, key) => {
26
+ result[key] = value;
27
+ });
28
+ return result;
29
+ });
30
+ }
31
+ export function useHash() {
32
+ return dot.computed(() => {
33
+ const hash = currentHash.value;
34
+ return hash.startsWith("#") ? hash.substring(1) : hash;
35
+ });
36
+ }
37
+ if (typeof window !== "undefined") {
38
+ window.addEventListener("popstate", () => {
39
+ previousPath.value = currentPath.value;
40
+ currentPath.value = window.location.pathname;
41
+ currentSearch.value = window.location.search;
42
+ currentHash.value = window.location.hash;
43
+ });
44
+ }
45
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/routing/state.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,26 @@
1
1
  import { IDotCss } from "dothtml-interfaces";
2
2
  import VMetaNode from "./v-meta-node";
3
- import Binding from "../reactivity/binding";
3
+ import BaseVStyle from "../v-style-nodes/base-v-style";
4
4
  export default class StyleVNode extends VMetaNode {
5
- target: NodeListOf<Element> | HTMLElement | string;
5
+ target: HTMLElement | string;
6
6
  document: Document;
7
7
  shadowRoot: ShadowRoot;
8
- styleValue: IDotCss;
9
- observables: Array<Binding>;
10
- observableIds: Array<number>;
11
- constructor(styleValue: IDotCss);
8
+ styleSource: IDotCss | BaseVStyle;
9
+ private styleElement;
10
+ private observables;
11
+ private observableIds;
12
+ private isQueued;
13
+ private updateSubscription;
14
+ constructor(styleSource: IDotCss | BaseVStyle);
15
+ private extractObservables;
16
+ private processValue;
17
+ private tryExtractObservable;
12
18
  render(target: HTMLElement | string, document?: Document, shadowRoot?: ShadowRoot): void;
13
19
  update(): void;
20
+ private applyStyles;
21
+ private applySingleStyle;
22
+ private getStyleString;
23
+ private formatSingleStyle;
14
24
  unrender(): void;
15
- toString(): void;
25
+ toString(): string;
16
26
  }