@web-atoms/core 2.6.24 → 2.6.26

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 (130) hide show
  1. package/dist/core/XNode.d.ts +1 -13
  2. package/dist/core/XNode.d.ts.map +1 -1
  3. package/dist/core/XNode.js +2 -24
  4. package/dist/core/XNode.js.map +1 -1
  5. package/dist/tsconfig.tsbuildinfo +1 -1
  6. package/dist-esm/App.js +231 -235
  7. package/dist-esm/Atom.js +93 -96
  8. package/dist-esm/MockApp.js +17 -18
  9. package/dist-esm/Pack.js +1 -3
  10. package/dist-esm/core/AtomBinder.js +189 -187
  11. package/dist-esm/core/AtomComponent.js +479 -502
  12. package/dist-esm/core/AtomDispatcher.js +46 -48
  13. package/dist-esm/core/AtomDisposableList.js +24 -25
  14. package/dist-esm/core/AtomEnumerator.js +15 -16
  15. package/dist-esm/core/AtomList.js +193 -192
  16. package/dist-esm/core/AtomLoader.js +229 -215
  17. package/dist-esm/core/AtomMap.js +7 -8
  18. package/dist-esm/core/AtomOnce.js +22 -24
  19. package/dist-esm/core/AtomSelectableList.js +240 -243
  20. package/dist-esm/core/AtomUri.js +70 -72
  21. package/dist-esm/core/AtomWatcher.js +105 -111
  22. package/dist-esm/core/Bind.js +271 -269
  23. package/dist-esm/core/BindableProperty.js +26 -27
  24. package/dist-esm/core/CancelTokenFactory.js +21 -24
  25. package/dist-esm/core/Color.js +1 -2
  26. package/dist-esm/core/Colors.js +545 -231
  27. package/dist-esm/core/Command.js +236 -223
  28. package/dist-esm/core/Defer.js +21 -22
  29. package/dist-esm/core/EventScope.js +96 -88
  30. package/dist-esm/core/ExpressionParser.js +132 -144
  31. package/dist-esm/core/ExtendControl.js +7 -8
  32. package/dist-esm/core/FormattedError.js +7 -8
  33. package/dist-esm/core/FormattedString.js +4 -5
  34. package/dist-esm/core/Hacks.js +41 -42
  35. package/dist-esm/core/IFetchEvent.js +1 -2
  36. package/dist-esm/core/IScreen.js +1 -2
  37. package/dist-esm/core/IValueConverter.js +1 -2
  38. package/dist-esm/core/InheritedProperty.js +61 -63
  39. package/dist-esm/core/InjectProperty.js +12 -13
  40. package/dist-esm/core/KeyValuePairs.js +1 -2
  41. package/dist-esm/core/Markdown.js +14 -17
  42. package/dist-esm/core/MarkdownError.js +6 -7
  43. package/dist-esm/core/PropertyBinding.js +1 -2
  44. package/dist-esm/core/PropertyMap.js +28 -27
  45. package/dist-esm/core/Route.js +149 -148
  46. package/dist-esm/core/SingleInvoker.js +32 -35
  47. package/dist-esm/core/StringHelper.js +49 -51
  48. package/dist-esm/core/TransientDisposable.js +14 -16
  49. package/dist-esm/core/WatchProperty.js +18 -17
  50. package/dist-esm/core/WebImage.js +7 -8
  51. package/dist-esm/core/XNode.d.ts +1 -13
  52. package/dist-esm/core/XNode.d.ts.map +1 -1
  53. package/dist-esm/core/XNode.js +116 -120
  54. package/dist-esm/core/XNode.js.map +1 -1
  55. package/dist-esm/core/sleep.js +21 -24
  56. package/dist-esm/core/types.js +102 -103
  57. package/dist-esm/di/DISingleton.js +7 -5
  58. package/dist-esm/di/DITransient.js +7 -5
  59. package/dist-esm/di/IMockOrInject.js +1 -2
  60. package/dist-esm/di/IServiceProvider.js +1 -2
  61. package/dist-esm/di/Inject.js +67 -67
  62. package/dist-esm/di/Register.js +25 -26
  63. package/dist-esm/di/RegisterScoped.js +4 -3
  64. package/dist-esm/di/RegisterSingleton.js +4 -3
  65. package/dist-esm/di/ServiceCollection.js +38 -37
  66. package/dist-esm/di/ServiceProvider.js +94 -94
  67. package/dist-esm/di/TypeKey.js +13 -12
  68. package/dist-esm/services/BusyIndicatorService.js +7 -11
  69. package/dist-esm/services/CacheService.js +54 -62
  70. package/dist-esm/services/FetchBuilder.js +327 -278
  71. package/dist-esm/services/JsonService.js +118 -116
  72. package/dist-esm/services/MockNavigationService.js +127 -126
  73. package/dist-esm/services/NavigationService.js +95 -102
  74. package/dist-esm/services/ReferenceService.js +30 -33
  75. package/dist-esm/services/http/AjaxOptions.js +1 -3
  76. package/dist-esm/services/http/JsonError.js +16 -15
  77. package/dist-esm/services/http/RestService.js +314 -323
  78. package/dist-esm/style/StyleRule.js +1 -2
  79. package/dist-esm/test.js +0 -1
  80. package/dist-esm/tsconfig.esm.tsbuildinfo +1 -1
  81. package/dist-esm/unit/AtomTest.js +10 -11
  82. package/dist-esm/view-model/Action.js +258 -223
  83. package/dist-esm/view-model/AtomViewModel.js +234 -232
  84. package/dist-esm/view-model/AtomWindowViewModel.js +13 -14
  85. package/dist-esm/view-model/BindableUrlParameter.js +7 -8
  86. package/dist-esm/view-model/Delay.js +21 -25
  87. package/dist-esm/view-model/Disposable.js +28 -29
  88. package/dist-esm/view-model/Load.js +72 -73
  89. package/dist-esm/view-model/Once.js +33 -35
  90. package/dist-esm/view-model/baseTypes.js +4 -5
  91. package/dist-esm/view-model/bindPromise.js +24 -27
  92. package/dist-esm/view-model/bindProperty.js +3 -4
  93. package/dist-esm/view-model/bindUrlParameter.js +39 -43
  94. package/dist-esm/web/controls/AtomComboBox.js +56 -63
  95. package/dist-esm/web/controls/AtomControl.js +485 -490
  96. package/dist-esm/web/controls/AtomGridSplitter.js +57 -50
  97. package/dist-esm/web/controls/AtomGridView.js +230 -222
  98. package/dist-esm/web/controls/AtomItemsControl.js +677 -688
  99. package/dist-esm/web/controls/AtomPage.js +6 -7
  100. package/dist-esm/web/controls/AtomTemplate.js +1 -3
  101. package/dist-esm/web/controls/AtomTemplateControl.js +28 -29
  102. package/dist-esm/web/controls/AtomViewStack.js +19 -20
  103. package/dist-esm/web/core/AtomUI.js +200 -200
  104. package/dist-esm/web/core/Encoder.js +142 -152
  105. package/dist-esm/web/core/HtmlNode.js +141 -139
  106. package/dist-esm/web/images/Busy.js +1 -2
  107. package/dist-esm/web/images/BusyDataUrl.js +2 -869
  108. package/dist-esm/web/images/Button.js +1 -2
  109. package/dist-esm/web/images/ButtonDataUrl.js +2 -30
  110. package/dist-esm/web/images/CloseButton.js +1 -2
  111. package/dist-esm/web/images/CloseButtonDataUrl.js +2 -30
  112. package/dist-esm/web/images/CloseButtonHover.js +1 -2
  113. package/dist-esm/web/images/CloseButtonHoverDataUrl.js +2 -24
  114. package/dist-esm/web/services/LastTarget.js +31 -29
  115. package/dist-esm/web/services/MarkdownService.js +19 -31
  116. package/dist-esm/web/services/NotificationPopup.js +28 -21
  117. package/dist-esm/web/services/PopupService.js +512 -478
  118. package/dist-esm/web/services/PopupWindow.js +266 -247
  119. package/dist-esm/web/styles/AtomAlertWindowStyle.js +39 -40
  120. package/dist-esm/web/styles/AtomFrameStyle.js +15 -16
  121. package/dist-esm/web/styles/AtomNotificationStyle.js +19 -20
  122. package/dist-esm/web/styles/AtomPageLinkStyle.js +11 -12
  123. package/dist-esm/web/styles/AtomPopupStyle.js +9 -10
  124. package/dist-esm/web/styles/AtomStyle.js +61 -64
  125. package/dist-esm/web/styles/AtomStyleSheet.js +50 -51
  126. package/dist-esm/web/styles/AtomWindowStyle.js +116 -117
  127. package/dist-esm/web/styles/IStyleDeclaration.js +1 -2
  128. package/dist-esm/web/styles/StyleBuilder.js +79 -80
  129. package/package.json +1 -1
  130. package/src/core/XNode.ts +12 -38
@@ -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
+ }