@web-atoms/core 2.6.21 → 2.6.25

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 (137) hide show
  1. package/dist/App.d.ts +1 -1
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js.map +1 -1
  4. package/dist/core/SingleInvoker.d.ts.map +1 -1
  5. package/dist/core/SingleInvoker.js.map +1 -1
  6. package/dist/core/sleep.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/dist-esm/App.d.ts +1 -1
  9. package/dist-esm/App.d.ts.map +1 -1
  10. package/dist-esm/App.js +231 -235
  11. package/dist-esm/App.js.map +1 -1
  12. package/dist-esm/Atom.js +93 -96
  13. package/dist-esm/MockApp.js +17 -18
  14. package/dist-esm/Pack.js +1 -3
  15. package/dist-esm/core/AtomBinder.js +189 -187
  16. package/dist-esm/core/AtomComponent.js +479 -502
  17. package/dist-esm/core/AtomDispatcher.js +46 -48
  18. package/dist-esm/core/AtomDisposableList.js +24 -25
  19. package/dist-esm/core/AtomEnumerator.js +15 -16
  20. package/dist-esm/core/AtomList.js +193 -192
  21. package/dist-esm/core/AtomLoader.js +229 -215
  22. package/dist-esm/core/AtomMap.js +7 -8
  23. package/dist-esm/core/AtomOnce.js +22 -24
  24. package/dist-esm/core/AtomSelectableList.js +240 -243
  25. package/dist-esm/core/AtomUri.js +70 -72
  26. package/dist-esm/core/AtomWatcher.js +105 -111
  27. package/dist-esm/core/Bind.js +271 -269
  28. package/dist-esm/core/BindableProperty.js +26 -27
  29. package/dist-esm/core/CancelTokenFactory.js +21 -24
  30. package/dist-esm/core/Color.js +1 -2
  31. package/dist-esm/core/Colors.js +545 -231
  32. package/dist-esm/core/Command.js +236 -223
  33. package/dist-esm/core/Defer.js +21 -22
  34. package/dist-esm/core/EventScope.js +96 -88
  35. package/dist-esm/core/ExpressionParser.js +132 -144
  36. package/dist-esm/core/ExtendControl.js +7 -8
  37. package/dist-esm/core/FormattedError.js +7 -8
  38. package/dist-esm/core/FormattedString.js +4 -5
  39. package/dist-esm/core/Hacks.js +41 -42
  40. package/dist-esm/core/IFetchEvent.js +1 -2
  41. package/dist-esm/core/IScreen.js +1 -2
  42. package/dist-esm/core/IValueConverter.js +1 -2
  43. package/dist-esm/core/InheritedProperty.js +61 -63
  44. package/dist-esm/core/InjectProperty.js +12 -13
  45. package/dist-esm/core/KeyValuePairs.js +1 -2
  46. package/dist-esm/core/Markdown.js +14 -17
  47. package/dist-esm/core/MarkdownError.js +6 -7
  48. package/dist-esm/core/PropertyBinding.js +1 -2
  49. package/dist-esm/core/PropertyMap.js +28 -27
  50. package/dist-esm/core/Route.js +149 -148
  51. package/dist-esm/core/SingleInvoker.d.ts.map +1 -1
  52. package/dist-esm/core/SingleInvoker.js +32 -35
  53. package/dist-esm/core/SingleInvoker.js.map +1 -1
  54. package/dist-esm/core/StringHelper.js +49 -51
  55. package/dist-esm/core/TransientDisposable.js +14 -16
  56. package/dist-esm/core/WatchProperty.js +18 -17
  57. package/dist-esm/core/WebImage.js +7 -8
  58. package/dist-esm/core/XNode.js +134 -117
  59. package/dist-esm/core/sleep.js +21 -24
  60. package/dist-esm/core/sleep.js.map +1 -1
  61. package/dist-esm/core/types.js +102 -103
  62. package/dist-esm/di/DISingleton.js +7 -5
  63. package/dist-esm/di/DITransient.js +7 -5
  64. package/dist-esm/di/IMockOrInject.js +1 -2
  65. package/dist-esm/di/IServiceProvider.js +1 -2
  66. package/dist-esm/di/Inject.js +67 -67
  67. package/dist-esm/di/Register.js +25 -26
  68. package/dist-esm/di/RegisterScoped.js +4 -3
  69. package/dist-esm/di/RegisterSingleton.js +4 -3
  70. package/dist-esm/di/ServiceCollection.js +38 -37
  71. package/dist-esm/di/ServiceProvider.js +94 -94
  72. package/dist-esm/di/TypeKey.js +13 -12
  73. package/dist-esm/services/BusyIndicatorService.js +7 -11
  74. package/dist-esm/services/CacheService.js +54 -62
  75. package/dist-esm/services/FetchBuilder.js +327 -278
  76. package/dist-esm/services/JsonService.js +118 -116
  77. package/dist-esm/services/MockNavigationService.js +127 -126
  78. package/dist-esm/services/NavigationService.js +95 -102
  79. package/dist-esm/services/ReferenceService.js +30 -33
  80. package/dist-esm/services/http/AjaxOptions.js +1 -3
  81. package/dist-esm/services/http/JsonError.js +16 -15
  82. package/dist-esm/services/http/RestService.js +314 -323
  83. package/dist-esm/style/StyleRule.js +1 -2
  84. package/dist-esm/test.js +0 -1
  85. package/dist-esm/tsconfig.esm.tsbuildinfo +1 -1
  86. package/dist-esm/unit/AtomTest.js +10 -11
  87. package/dist-esm/view-model/Action.js +258 -223
  88. package/dist-esm/view-model/AtomViewModel.js +234 -232
  89. package/dist-esm/view-model/AtomWindowViewModel.js +13 -14
  90. package/dist-esm/view-model/BindableUrlParameter.js +7 -8
  91. package/dist-esm/view-model/Delay.js +21 -25
  92. package/dist-esm/view-model/Disposable.js +28 -29
  93. package/dist-esm/view-model/Load.js +72 -73
  94. package/dist-esm/view-model/Once.js +33 -35
  95. package/dist-esm/view-model/baseTypes.js +4 -5
  96. package/dist-esm/view-model/bindPromise.js +24 -27
  97. package/dist-esm/view-model/bindProperty.js +3 -4
  98. package/dist-esm/view-model/bindUrlParameter.js +39 -43
  99. package/dist-esm/web/controls/AtomComboBox.js +56 -63
  100. package/dist-esm/web/controls/AtomControl.js +485 -490
  101. package/dist-esm/web/controls/AtomGridSplitter.js +57 -50
  102. package/dist-esm/web/controls/AtomGridView.js +230 -222
  103. package/dist-esm/web/controls/AtomItemsControl.js +677 -688
  104. package/dist-esm/web/controls/AtomPage.js +6 -7
  105. package/dist-esm/web/controls/AtomTemplate.js +1 -3
  106. package/dist-esm/web/controls/AtomTemplateControl.js +28 -29
  107. package/dist-esm/web/controls/AtomViewStack.js +19 -20
  108. package/dist-esm/web/core/AtomUI.js +200 -200
  109. package/dist-esm/web/core/Encoder.js +142 -152
  110. package/dist-esm/web/core/HtmlNode.js +141 -139
  111. package/dist-esm/web/images/Busy.js +1 -2
  112. package/dist-esm/web/images/BusyDataUrl.js +2 -869
  113. package/dist-esm/web/images/Button.js +1 -2
  114. package/dist-esm/web/images/ButtonDataUrl.js +2 -30
  115. package/dist-esm/web/images/CloseButton.js +1 -2
  116. package/dist-esm/web/images/CloseButtonDataUrl.js +2 -30
  117. package/dist-esm/web/images/CloseButtonHover.js +1 -2
  118. package/dist-esm/web/images/CloseButtonHoverDataUrl.js +2 -24
  119. package/dist-esm/web/services/LastTarget.js +31 -29
  120. package/dist-esm/web/services/MarkdownService.js +19 -31
  121. package/dist-esm/web/services/NotificationPopup.js +28 -21
  122. package/dist-esm/web/services/PopupService.js +512 -478
  123. package/dist-esm/web/services/PopupWindow.js +266 -247
  124. package/dist-esm/web/styles/AtomAlertWindowStyle.js +39 -40
  125. package/dist-esm/web/styles/AtomFrameStyle.js +15 -16
  126. package/dist-esm/web/styles/AtomNotificationStyle.js +19 -20
  127. package/dist-esm/web/styles/AtomPageLinkStyle.js +11 -12
  128. package/dist-esm/web/styles/AtomPopupStyle.js +9 -10
  129. package/dist-esm/web/styles/AtomStyle.js +61 -64
  130. package/dist-esm/web/styles/AtomStyleSheet.js +50 -51
  131. package/dist-esm/web/styles/AtomWindowStyle.js +116 -117
  132. package/dist-esm/web/styles/IStyleDeclaration.js +1 -2
  133. package/dist-esm/web/styles/StyleBuilder.js +79 -80
  134. package/package.json +3 -1
  135. package/src/App.ts +1 -1
  136. package/src/core/SingleInvoker.ts +1 -1
  137. package/src/core/sleep.ts +1 -1
@@ -3,237 +3,250 @@ import Route from "./Route.js";
3
3
  import { CancelToken } from "./types.js";
4
4
  export const routeSymbol = Symbol("routeSymbol");
5
5
  export const displayRouteSymbol = Symbol("displayRouteSymbol");
6
- document.body.addEventListener("click", (ce) => {
7
- let target = ce.target;
8
- let clickCommand;
9
- let commandParameter;
10
- while (target) {
11
- clickCommand = target.getAttribute("data-click-command");
12
- const cp = target.commandParameter;
13
- if (cp) {
14
- commandParameter = cp;
15
- }
16
- if (clickCommand) {
17
- break;
18
- }
19
- target = target.parentElement;
20
- }
21
- if (!clickCommand) {
22
- return;
6
+ document.body.addEventListener("click", ce => {
7
+ let target = ce.target;
8
+ let clickCommand;
9
+ let commandParameter;
10
+ while (target) {
11
+ clickCommand = target.getAttribute("data-click-command");
12
+ const cp = target.commandParameter;
13
+ if (cp) {
14
+ commandParameter = cp;
23
15
  }
24
- const cmd = Command.registry.get(clickCommand);
25
- if (cmd) {
26
- cmd.eventScope.dispatch(target, commandParameter);
16
+ if (clickCommand) {
17
+ break;
27
18
  }
19
+ target = target.parentElement;
20
+ }
21
+ if (!clickCommand) {
22
+ return;
23
+ }
24
+ const cmd = Command.registry.get(clickCommand);
25
+ if (cmd) {
26
+ cmd.eventScope.dispatch(target, commandParameter);
27
+ }
28
28
  });
29
29
  let id = 1;
30
- export class PageCommands {
31
- }
32
- const defaultOrSelf = (x) => x?.default ?? x;
30
+ export class PageCommands {}
31
+ const defaultOrSelf = x => x?.default ?? x;
33
32
  export default class Command {
34
- static { this.routePrefix = ""; }
35
- static { this.registry = new Map(); }
36
- static { this.routes = []; }
37
- static invokeRoute(route = location.hash.startsWith("#!")
38
- ? location.hash.substring(2)
39
- : location.href, forceDisplay = false) {
40
- let sp;
41
- if (/^http(s)?\:\/\//i.test(route)) {
42
- const url = new URL(route);
43
- sp = url.searchParams;
44
- route = url.hash.startsWith("#!") ? url.hash.substring(2) : url.pathname;
45
- }
46
- else {
47
- if (route.startsWith("#!")) {
48
- route = route.substring(2);
49
- }
50
- }
51
- const index = route.indexOf("?");
52
- if (index !== -1) {
53
- sp = new URLSearchParams(route.substring(index + 1));
54
- route = route.substring(0, index);
55
- }
56
- else {
57
- sp ??= new URLSearchParams("");
58
- }
59
- for (const iterator of this.routes) {
60
- const params = iterator.route.matches(route, sp);
61
- if (params) {
62
- params[routeSymbol] = route;
63
- params[displayRouteSymbol] = forceDisplay
64
- ? (sp.size > 0 ? `${route}?${sp.toString()}` : route)
65
- : "";
66
- iterator.dispatch(params, true);
67
- return iterator;
68
- }
69
- }
33
+ static {
34
+ this.routePrefix = "";
35
+ }
36
+ static {
37
+ this.registry = new Map();
38
+ }
39
+ static {
40
+ this.routes = [];
41
+ }
42
+ static invokeRoute(route = location.hash.startsWith("#!") ? location.hash.substring(2) : location.href, forceDisplay = false) {
43
+ let sp;
44
+ if (/^http(s)?\:\/\//i.test(route)) {
45
+ const url = new URL(route);
46
+ sp = url.searchParams;
47
+ route = url.hash.startsWith("#!") ? url.hash.substring(2) : url.pathname;
48
+ } else {
49
+ if (route.startsWith("#!")) {
50
+ route = route.substring(2);
51
+ }
70
52
  }
71
- static create({ name = `command${id++}`, eventScope = EventScope.create(), route, routeQueries, routeOrder = 0, routeDefaults, pageLoader, pageListener, openPage, pushPage, registerOnClick, pushPageForResult, pushPageForResultOrCancel, listener }) {
72
- let cmd = new Command(name, eventScope, registerOnClick);
73
- if (route) {
74
- if (this.routePrefix) {
75
- if (!route.startsWith(this.routePrefix)) {
76
- route = this.routePrefix + route;
77
- }
78
- }
79
- cmd = cmd.withRoute(route, routeQueries, routeOrder, routeDefaults);
80
- }
81
- cmd.listener = listener;
82
- if (openPage) {
83
- let pageType;
84
- cmd.listener = async (ce) => {
85
- const p = ce.detail ?? {};
86
- return p.returnResult
87
- ? PageCommands.pushPageForResult(pageType ??= defaultOrSelf(await openPage()), p)
88
- : PageCommands.openPage(pageType ??= defaultOrSelf(await openPage()), p);
89
- };
90
- }
91
- if (pushPage) {
92
- let pageType;
93
- cmd.listener = async (ce) => {
94
- const p = ce.detail ?? {};
95
- return p.returnResult
96
- ? PageCommands.pushPageForResult(pageType ??= defaultOrSelf(await pushPage()), p)
97
- : PageCommands.pushPage(pageType ??= defaultOrSelf(await pushPage()), p);
98
- };
99
- }
100
- if (pushPageForResult) {
101
- let pageType;
102
- cmd.listener = async (ce) => PageCommands.pushPageForResult(pageType ??= defaultOrSelf(await pushPageForResult()), ce.detail ?? {});
103
- }
104
- if (pushPageForResultOrCancel) {
105
- let pageType;
106
- cmd.listener = async (ce) => {
107
- try {
108
- return await PageCommands.pushPageForResult(pageType ??= defaultOrSelf(await pushPageForResultOrCancel()), ce.detail ?? {});
109
- }
110
- catch (e) {
111
- if (CancelToken.isCancelled(e)) {
112
- return;
113
- }
114
- console.error(e);
115
- }
116
- };
117
- }
118
- if (pageLoader) {
119
- let pageType;
120
- cmd.listener = async (ce) => {
121
- try {
122
- pageType ??= defaultOrSelf(await pageLoader());
123
- return pageListener(pageType)(ce);
124
- }
125
- catch (e) {
126
- if (CancelToken.isCancelled(e)) {
127
- return;
128
- }
129
- console.error(e);
130
- }
131
- };
132
- }
133
- return cmd;
134
- }
135
- get eventName() {
136
- return this.eventScope.eventType;
137
- }
138
- get route() {
139
- return this.routeObj;
140
- }
141
- constructor(name = `command${id++}`, eventScope = EventScope.create(), registerOnClick = (p) => ({
142
- "data-click-command": this.name,
143
- "commandParameter": p
144
- })) {
145
- this.name = name;
146
- this.eventScope = eventScope;
147
- this.registerOnClick = registerOnClick;
148
- Command.registry.set(this.name, this);
149
- }
150
- displayRoute(p, absoluteUrl = false) {
151
- let route = Route.encodeUrl(this.routeObj.substitute(p));
152
- if (absoluteUrl) {
153
- if (route.startsWith("#!")) {
154
- route = location.href.split("#")[0] + route;
155
- }
156
- else if (route.startsWith("/")) {
157
- route = location.protocol + "//" + location.host + route;
158
- }
159
- }
160
- return route;
161
- }
162
- withRoute(route, queries, order = 0, defaults) {
163
- this.routeObj = Route.create(route, queries, order);
164
- Command.routes.push(this);
165
- Command.routes.sort((a, b) => a.route.order - b.route.order);
166
- this.defaults = defaults;
167
- return this;
168
- }
169
- listen(r, handler = this.listener) {
170
- if (!handler) {
171
- throw new Error("Handler must be specified...");
172
- }
173
- const d = this.eventScope.listen((e) => {
174
- const ce = e;
175
- try {
176
- ce.executed = true;
177
- ce.promise = handler(e);
178
- }
179
- catch (error) {
180
- ce.promise = Promise.reject(error);
181
- }
182
- r.app.runAsync(() => ce.promise);
183
- });
184
- return r.registerDisposable(d);
185
- }
186
- dispatch(detail, cancelable) {
187
- if (this.route) {
188
- detail = this.updateRoute(detail);
189
- }
190
- this.eventScope.dispatch(document.body, detail, { cancelable, bubbles: true });
191
- }
192
- updateRoute(detail) {
193
- const d = detail ??= {};
194
- let r = d[routeSymbol];
195
- if (r === null || r === void 0) {
196
- r = this.route.substitute(d);
197
- d[routeSymbol] = r;
198
- d[displayRouteSymbol] = r;
199
- }
200
- const { defaults } = this;
201
- if (defaults) {
202
- for (const key in defaults) {
203
- if (Object.prototype.hasOwnProperty.call(defaults, key)) {
204
- const element = defaults[key];
205
- if (d[key] === void 0) {
206
- d[key] = element;
207
- }
208
- }
209
- }
210
- }
211
- return detail;
53
+ const index = route.indexOf("?");
54
+ if (index !== -1) {
55
+ sp = new URLSearchParams(route.substring(index + 1));
56
+ route = route.substring(0, index);
57
+ } else {
58
+ sp ??= new URLSearchParams("");
212
59
  }
213
- async dispatchAsync(detail, cancelable) {
214
- if (this.route) {
215
- detail = this.updateRoute(detail);
216
- }
217
- const ce = new CustomEvent(this.eventScope.eventType, { detail, cancelable });
218
- ce.returnResult = true;
219
- window.dispatchEvent(ce);
220
- if (ce.executed) {
221
- const promise = ce.promise;
222
- if (promise) {
223
- return await promise;
224
- }
225
- }
60
+ for (const iterator of this.routes) {
61
+ const params = iterator.route.matches(route, sp);
62
+ if (params) {
63
+ params[routeSymbol] = route;
64
+ params[displayRouteSymbol] = forceDisplay ? sp.size > 0 ? `${route}?${sp.toString()}` : route : "";
65
+ iterator.dispatch(params, true);
66
+ return iterator;
67
+ }
68
+ }
69
+ }
70
+ static create({
71
+ name = `command${id++}`,
72
+ eventScope = EventScope.create(),
73
+ route,
74
+ routeQueries,
75
+ routeOrder = 0,
76
+ routeDefaults,
77
+ pageLoader,
78
+ pageListener,
79
+ openPage,
80
+ pushPage,
81
+ registerOnClick,
82
+ pushPageForResult,
83
+ pushPageForResultOrCancel,
84
+ listener
85
+ }) {
86
+ let cmd = new Command(name, eventScope, registerOnClick);
87
+ if (route) {
88
+ if (this.routePrefix) {
89
+ if (!route.startsWith(this.routePrefix)) {
90
+ route = this.routePrefix + route;
91
+ }
92
+ }
93
+ cmd = cmd.withRoute(route, routeQueries, routeOrder, routeDefaults);
94
+ }
95
+ cmd.listener = listener;
96
+ if (openPage) {
97
+ let pageType;
98
+ cmd.listener = async ce => {
99
+ const p = ce.detail ?? {};
100
+ return p.returnResult ? PageCommands.pushPageForResult(pageType ??= defaultOrSelf(await openPage()), p) : PageCommands.openPage(pageType ??= defaultOrSelf(await openPage()), p);
101
+ };
102
+ }
103
+ if (pushPage) {
104
+ let pageType;
105
+ cmd.listener = async ce => {
106
+ const p = ce.detail ?? {};
107
+ return p.returnResult ? PageCommands.pushPageForResult(pageType ??= defaultOrSelf(await pushPage()), p) : PageCommands.pushPage(pageType ??= defaultOrSelf(await pushPage()), p);
108
+ };
109
+ }
110
+ if (pushPageForResult) {
111
+ let pageType;
112
+ cmd.listener = async ce => PageCommands.pushPageForResult(pageType ??= defaultOrSelf(await pushPageForResult()), ce.detail ?? {});
113
+ }
114
+ if (pushPageForResultOrCancel) {
115
+ let pageType;
116
+ cmd.listener = async ce => {
117
+ try {
118
+ return await PageCommands.pushPageForResult(pageType ??= defaultOrSelf(await pushPageForResultOrCancel()), ce.detail ?? {});
119
+ } catch (e) {
120
+ if (CancelToken.isCancelled(e)) {
121
+ return;
122
+ }
123
+ console.error(e);
124
+ }
125
+ };
126
+ }
127
+ if (pageLoader) {
128
+ let pageType;
129
+ cmd.listener = async ce => {
130
+ try {
131
+ pageType ??= defaultOrSelf(await pageLoader());
132
+ return pageListener(pageType)(ce);
133
+ } catch (e) {
134
+ if (CancelToken.isCancelled(e)) {
135
+ return;
136
+ }
137
+ console.error(e);
138
+ }
139
+ };
226
140
  }
141
+ return cmd;
142
+ }
143
+ get eventName() {
144
+ return this.eventScope.eventType;
145
+ }
146
+ get route() {
147
+ return this.routeObj;
148
+ }
149
+ constructor(name = `command${id++}`, eventScope = EventScope.create(), registerOnClick = p => ({
150
+ "data-click-command": this.name,
151
+ "commandParameter": p
152
+ })) {
153
+ this.name = name;
154
+ this.eventScope = eventScope;
155
+ this.registerOnClick = registerOnClick;
156
+ Command.registry.set(this.name, this);
157
+ }
158
+ displayRoute(p, absoluteUrl = false) {
159
+ let route = Route.encodeUrl(this.routeObj.substitute(p));
160
+ if (absoluteUrl) {
161
+ if (route.startsWith("#!")) {
162
+ route = location.href.split("#")[0] + route;
163
+ } else if (route.startsWith("/")) {
164
+ route = location.protocol + "//" + location.host + route;
165
+ }
166
+ }
167
+ return route;
168
+ }
169
+ withRoute(route, queries, order = 0, defaults) {
170
+ this.routeObj = Route.create(route, queries, order);
171
+ Command.routes.push(this);
172
+ Command.routes.sort((a, b) => a.route.order - b.route.order);
173
+ this.defaults = defaults;
174
+ return this;
175
+ }
176
+ listen(r, handler = this.listener) {
177
+ if (!handler) {
178
+ throw new Error("Handler must be specified...");
179
+ }
180
+ const d = this.eventScope.listen(e => {
181
+ const ce = e;
182
+ try {
183
+ ce.executed = true;
184
+ ce.promise = handler(e);
185
+ } catch (error) {
186
+ ce.promise = Promise.reject(error);
187
+ }
188
+ r.app.runAsync(() => ce.promise);
189
+ });
190
+ return r.registerDisposable(d);
191
+ }
192
+ dispatch(detail, cancelable) {
193
+ if (this.route) {
194
+ detail = this.updateRoute(detail);
195
+ }
196
+ this.eventScope.dispatch(document.body, detail, {
197
+ cancelable,
198
+ bubbles: true
199
+ });
200
+ }
201
+ updateRoute(detail) {
202
+ const d = detail ??= {};
203
+ let r = d[routeSymbol];
204
+ if (r === null || r === void 0) {
205
+ r = this.route.substitute(d);
206
+ d[routeSymbol] = r;
207
+ d[displayRouteSymbol] = r;
208
+ }
209
+ const {
210
+ defaults
211
+ } = this;
212
+ if (defaults) {
213
+ for (const key in defaults) {
214
+ if (Object.prototype.hasOwnProperty.call(defaults, key)) {
215
+ const element = defaults[key];
216
+ if (d[key] === void 0) {
217
+ d[key] = element;
218
+ }
219
+ }
220
+ }
221
+ }
222
+ return detail;
223
+ }
224
+ async dispatchAsync(detail, cancelable) {
225
+ if (this.route) {
226
+ detail = this.updateRoute(detail);
227
+ }
228
+ const ce = new CustomEvent(this.eventScope.eventType, {
229
+ detail,
230
+ cancelable
231
+ });
232
+ ce.returnResult = true;
233
+ window.dispatchEvent(ce);
234
+ if (ce.executed) {
235
+ const promise = ce.promise;
236
+ if (promise) {
237
+ return await promise;
238
+ }
239
+ }
240
+ }
227
241
  }
228
242
  export class Commands {
229
- static install(control) {
230
- this.app = control.app;
231
- for (const key in this) {
232
- const element = this[key];
233
- if (element instanceof Command) {
234
- element.listen(control);
235
- }
236
- }
243
+ static install(control) {
244
+ this.app = control.app;
245
+ for (const key in this) {
246
+ const element = this[key];
247
+ if (element instanceof Command) {
248
+ element.listen(control);
249
+ }
237
250
  }
238
- }
239
- //# sourceMappingURL=Command.js.map
251
+ }
252
+ }
@@ -1,26 +1,25 @@
1
1
  import { CancelToken } from "./types.js";
2
2
  export default function Defer(n = 250) {
3
- return (target, key, descriptor) => {
4
- const old = descriptor.value;
5
- const k = Symbol.for(`defer_${key}`);
6
- descriptor.value = function (...a) {
7
- const id = this[k];
8
- if (id) {
9
- clearTimeout(id);
3
+ return (target, key, descriptor) => {
4
+ const old = descriptor.value;
5
+ const k = Symbol.for(`defer_${key}`);
6
+ descriptor.value = function (...a) {
7
+ const id = this[k];
8
+ if (id) {
9
+ clearTimeout(id);
10
+ }
11
+ this[k] = setTimeout(() => {
12
+ this[k] = undefined;
13
+ const result = old.apply(this, a);
14
+ if (result?.then) {
15
+ result.catch(e => {
16
+ if (CancelToken.isCancelled(e)) {
17
+ return;
10
18
  }
11
- this[k] = setTimeout(() => {
12
- this[k] = undefined;
13
- const result = old.apply(this, a);
14
- if (result?.then) {
15
- result.catch((e) => {
16
- if (CancelToken.isCancelled(e)) {
17
- return;
18
- }
19
- console.error(e);
20
- });
21
- }
22
- }, n);
23
- };
19
+ console.error(e);
20
+ });
21
+ }
22
+ }, n);
24
23
  };
25
- }
26
- //# sourceMappingURL=Defer.js.map
24
+ };
25
+ }