@web-atoms/core 2.6.24 → 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 (120) hide show
  1. package/dist-esm/App.js +231 -235
  2. package/dist-esm/Atom.js +93 -96
  3. package/dist-esm/MockApp.js +17 -18
  4. package/dist-esm/Pack.js +1 -3
  5. package/dist-esm/core/AtomBinder.js +189 -187
  6. package/dist-esm/core/AtomComponent.js +479 -502
  7. package/dist-esm/core/AtomDispatcher.js +46 -48
  8. package/dist-esm/core/AtomDisposableList.js +24 -25
  9. package/dist-esm/core/AtomEnumerator.js +15 -16
  10. package/dist-esm/core/AtomList.js +193 -192
  11. package/dist-esm/core/AtomLoader.js +229 -215
  12. package/dist-esm/core/AtomMap.js +7 -8
  13. package/dist-esm/core/AtomOnce.js +22 -24
  14. package/dist-esm/core/AtomSelectableList.js +240 -243
  15. package/dist-esm/core/AtomUri.js +70 -72
  16. package/dist-esm/core/AtomWatcher.js +105 -111
  17. package/dist-esm/core/Bind.js +271 -269
  18. package/dist-esm/core/BindableProperty.js +26 -27
  19. package/dist-esm/core/CancelTokenFactory.js +21 -24
  20. package/dist-esm/core/Color.js +1 -2
  21. package/dist-esm/core/Colors.js +545 -231
  22. package/dist-esm/core/Command.js +236 -223
  23. package/dist-esm/core/Defer.js +21 -22
  24. package/dist-esm/core/EventScope.js +96 -88
  25. package/dist-esm/core/ExpressionParser.js +132 -144
  26. package/dist-esm/core/ExtendControl.js +7 -8
  27. package/dist-esm/core/FormattedError.js +7 -8
  28. package/dist-esm/core/FormattedString.js +4 -5
  29. package/dist-esm/core/Hacks.js +41 -42
  30. package/dist-esm/core/IFetchEvent.js +1 -2
  31. package/dist-esm/core/IScreen.js +1 -2
  32. package/dist-esm/core/IValueConverter.js +1 -2
  33. package/dist-esm/core/InheritedProperty.js +61 -63
  34. package/dist-esm/core/InjectProperty.js +12 -13
  35. package/dist-esm/core/KeyValuePairs.js +1 -2
  36. package/dist-esm/core/Markdown.js +14 -17
  37. package/dist-esm/core/MarkdownError.js +6 -7
  38. package/dist-esm/core/PropertyBinding.js +1 -2
  39. package/dist-esm/core/PropertyMap.js +28 -27
  40. package/dist-esm/core/Route.js +149 -148
  41. package/dist-esm/core/SingleInvoker.js +32 -35
  42. package/dist-esm/core/StringHelper.js +49 -51
  43. package/dist-esm/core/TransientDisposable.js +14 -16
  44. package/dist-esm/core/WatchProperty.js +18 -17
  45. package/dist-esm/core/WebImage.js +7 -8
  46. package/dist-esm/core/XNode.js +134 -117
  47. package/dist-esm/core/sleep.js +21 -24
  48. package/dist-esm/core/types.js +102 -103
  49. package/dist-esm/di/DISingleton.js +7 -5
  50. package/dist-esm/di/DITransient.js +7 -5
  51. package/dist-esm/di/IMockOrInject.js +1 -2
  52. package/dist-esm/di/IServiceProvider.js +1 -2
  53. package/dist-esm/di/Inject.js +67 -67
  54. package/dist-esm/di/Register.js +25 -26
  55. package/dist-esm/di/RegisterScoped.js +4 -3
  56. package/dist-esm/di/RegisterSingleton.js +4 -3
  57. package/dist-esm/di/ServiceCollection.js +38 -37
  58. package/dist-esm/di/ServiceProvider.js +94 -94
  59. package/dist-esm/di/TypeKey.js +13 -12
  60. package/dist-esm/services/BusyIndicatorService.js +7 -11
  61. package/dist-esm/services/CacheService.js +54 -62
  62. package/dist-esm/services/FetchBuilder.js +327 -278
  63. package/dist-esm/services/JsonService.js +118 -116
  64. package/dist-esm/services/MockNavigationService.js +127 -126
  65. package/dist-esm/services/NavigationService.js +95 -102
  66. package/dist-esm/services/ReferenceService.js +30 -33
  67. package/dist-esm/services/http/AjaxOptions.js +1 -3
  68. package/dist-esm/services/http/JsonError.js +16 -15
  69. package/dist-esm/services/http/RestService.js +314 -323
  70. package/dist-esm/style/StyleRule.js +1 -2
  71. package/dist-esm/test.js +0 -1
  72. package/dist-esm/unit/AtomTest.js +10 -11
  73. package/dist-esm/view-model/Action.js +258 -223
  74. package/dist-esm/view-model/AtomViewModel.js +234 -232
  75. package/dist-esm/view-model/AtomWindowViewModel.js +13 -14
  76. package/dist-esm/view-model/BindableUrlParameter.js +7 -8
  77. package/dist-esm/view-model/Delay.js +21 -25
  78. package/dist-esm/view-model/Disposable.js +28 -29
  79. package/dist-esm/view-model/Load.js +72 -73
  80. package/dist-esm/view-model/Once.js +33 -35
  81. package/dist-esm/view-model/baseTypes.js +4 -5
  82. package/dist-esm/view-model/bindPromise.js +24 -27
  83. package/dist-esm/view-model/bindProperty.js +3 -4
  84. package/dist-esm/view-model/bindUrlParameter.js +39 -43
  85. package/dist-esm/web/controls/AtomComboBox.js +56 -63
  86. package/dist-esm/web/controls/AtomControl.js +485 -490
  87. package/dist-esm/web/controls/AtomGridSplitter.js +57 -50
  88. package/dist-esm/web/controls/AtomGridView.js +230 -222
  89. package/dist-esm/web/controls/AtomItemsControl.js +677 -688
  90. package/dist-esm/web/controls/AtomPage.js +6 -7
  91. package/dist-esm/web/controls/AtomTemplate.js +1 -3
  92. package/dist-esm/web/controls/AtomTemplateControl.js +28 -29
  93. package/dist-esm/web/controls/AtomViewStack.js +19 -20
  94. package/dist-esm/web/core/AtomUI.js +200 -200
  95. package/dist-esm/web/core/Encoder.js +142 -152
  96. package/dist-esm/web/core/HtmlNode.js +141 -139
  97. package/dist-esm/web/images/Busy.js +1 -2
  98. package/dist-esm/web/images/BusyDataUrl.js +2 -869
  99. package/dist-esm/web/images/Button.js +1 -2
  100. package/dist-esm/web/images/ButtonDataUrl.js +2 -30
  101. package/dist-esm/web/images/CloseButton.js +1 -2
  102. package/dist-esm/web/images/CloseButtonDataUrl.js +2 -30
  103. package/dist-esm/web/images/CloseButtonHover.js +1 -2
  104. package/dist-esm/web/images/CloseButtonHoverDataUrl.js +2 -24
  105. package/dist-esm/web/services/LastTarget.js +31 -29
  106. package/dist-esm/web/services/MarkdownService.js +19 -31
  107. package/dist-esm/web/services/NotificationPopup.js +28 -21
  108. package/dist-esm/web/services/PopupService.js +512 -478
  109. package/dist-esm/web/services/PopupWindow.js +266 -247
  110. package/dist-esm/web/styles/AtomAlertWindowStyle.js +39 -40
  111. package/dist-esm/web/styles/AtomFrameStyle.js +15 -16
  112. package/dist-esm/web/styles/AtomNotificationStyle.js +19 -20
  113. package/dist-esm/web/styles/AtomPageLinkStyle.js +11 -12
  114. package/dist-esm/web/styles/AtomPopupStyle.js +9 -10
  115. package/dist-esm/web/styles/AtomStyle.js +61 -64
  116. package/dist-esm/web/styles/AtomStyleSheet.js +50 -51
  117. package/dist-esm/web/styles/AtomWindowStyle.js +116 -117
  118. package/dist-esm/web/styles/IStyleDeclaration.js +1 -2
  119. package/dist-esm/web/styles/StyleBuilder.js +79 -80
  120. package/package.json +1 -1
package/dist-esm/App.js CHANGED
@@ -10,269 +10,265 @@ import "./core/AtomList.js";
10
10
  import "@web-atoms/date-time/dist/DateTime.js";
11
11
  import "@web-atoms/date-time/dist/TimeSpan.js";
12
12
  class AtomHandler {
13
- constructor(message) {
14
- this.message = message;
15
- this.list = new Array();
16
- }
13
+ constructor(message) {
14
+ this.message = message;
15
+ this.list = new Array();
16
+ }
17
17
  }
18
18
  export class AtomMessageAction {
19
- constructor(msg, a) {
20
- this.message = msg;
21
- this.action = a;
22
- }
19
+ constructor(msg, a) {
20
+ this.message = msg;
21
+ this.action = a;
22
+ }
23
23
  }
24
- const { head } = document;
25
- const addMarker = (name) => {
26
- const e = document.createElement("meta");
27
- e.setAttribute("name", name);
28
- return e;
24
+ const {
25
+ head
26
+ } = document;
27
+ const addMarker = name => {
28
+ const e = document.createElement("meta");
29
+ e.setAttribute("name", name);
30
+ return e;
29
31
  };
30
32
  const markers = {
31
- "global-high": head.insertAdjacentElement("afterbegin", addMarker("global-high")),
32
- global: head.insertAdjacentElement("afterbegin", addMarker("global")),
33
- "global-low": head.insertAdjacentElement("afterbegin", addMarker("global-low")),
34
- "local-low": head.insertAdjacentElement("beforeend", addMarker("local-low")),
35
- local: head.insertAdjacentElement("beforeend", addMarker("local")),
36
- "local-high": head.insertAdjacentElement("beforeend", addMarker("local-high")),
33
+ "global-high": head.insertAdjacentElement("afterbegin", addMarker("global-high")),
34
+ global: head.insertAdjacentElement("afterbegin", addMarker("global")),
35
+ "global-low": head.insertAdjacentElement("afterbegin", addMarker("global-low")),
36
+ "local-low": head.insertAdjacentElement("beforeend", addMarker("local-low")),
37
+ local: head.insertAdjacentElement("beforeend", addMarker("local")),
38
+ "local-high": head.insertAdjacentElement("beforeend", addMarker("local-high"))
37
39
  };
38
40
  let App = class App extends ServiceProvider {
39
- static { App_1 = this; }
40
- static installStyleSheet(ssConfig) {
41
- if (typeof ssConfig !== "object") {
42
- ssConfig = { href: ssConfig };
43
- }
44
- const links = document.getElementsByTagName("link");
45
- for (let index = 0; index < links.length; index++) {
46
- const element = links[index];
47
- const href = element.getAttribute("href");
48
- if (href === ssConfig.href) {
49
- return;
50
- }
51
- }
52
- const ss = document.createElement("link");
53
- ss.rel = "stylesheet";
54
- ss.href = ssConfig.href;
55
- if (ssConfig.crossOrigin) {
56
- ss.crossOrigin = ssConfig.crossOrigin;
57
- }
58
- if (ssConfig.integrity) {
59
- ss.integrity = ssConfig.integrity;
60
- }
61
- const matches = /((global|local)(\-(high|low))?)\.css/.exec(ss.href);
62
- if (matches) {
63
- const m = matches[1];
64
- if (m) {
65
- const marker = markers[m];
66
- if (marker) {
67
- marker.insertAdjacentElement("afterend", ss);
68
- return;
69
- }
70
- }
71
- }
72
- document.head.appendChild(ss);
73
- }
74
- static installScript(location) {
75
- const links = document.getElementsByTagName("script");
76
- for (let index = 0; index < links.length; index++) {
77
- const element = links[index];
78
- const href = element.getAttribute("src");
79
- if (href === location) {
80
- return element.loaderPromise;
81
- }
82
- }
83
- const script = document.createElement("script");
84
- const p = new Promise((resolve, reject) => {
85
- script.type = "text/javascript";
86
- script.src = location;
87
- const s = script;
88
- script.onload = s.onreadystatechange = () => {
89
- if ((s.readyState && s.readyState !== "complete" && s.readyState !== "loaded")) {
90
- return;
91
- }
92
- script.onload = s.onreadystatechange = null;
93
- resolve();
94
- };
95
- document.body.appendChild(script);
96
- });
97
- script.loaderPromise = p;
98
- return p;
99
- }
100
- static authorize(authorize = true) {
101
- const detail = {
102
- authorize,
103
- authorized: true
104
- };
105
- const ce = new CustomEvent("authorize", {
106
- bubbles: true,
107
- detail
108
- });
109
- document.body.dispatchEvent(ce);
110
- if (!ce.detail.authorized) {
111
- return false;
112
- }
113
- return true;
114
- }
115
- get url() {
116
- return this.mUrl;
117
- }
118
- set url(v) {
119
- this.mUrl = v;
120
- AtomBinder.refreshValue(this, "url");
121
- }
122
- get contextId() {
123
- return "none";
41
+ static {
42
+ App_1 = this;
43
+ }
44
+ static installStyleSheet(ssConfig) {
45
+ if (typeof ssConfig !== "object") {
46
+ ssConfig = {
47
+ href: ssConfig
48
+ };
124
49
  }
125
- constructor() {
126
- super(null);
127
- this.appReady = false;
128
- this.readyHandlers = [];
129
- this.onError = (error) => {
130
- console.log(error);
131
- };
132
- App_1.current = this;
133
- this.screen = {};
134
- this.bag = {};
135
- this.put(App_1, this);
136
- this.dispatcher = new AtomDispatcher();
137
- this.dispatcher.start();
138
- this.put(AtomDispatcher, this.dispatcher);
139
- setTimeout(() => {
140
- this.invokeReady();
141
- }, 5);
50
+ const links = document.getElementsByTagName("link");
51
+ for (let index = 0; index < links.length; index++) {
52
+ const element = links[index];
53
+ const href = element.getAttribute("href");
54
+ if (href === ssConfig.href) {
55
+ return;
56
+ }
142
57
  }
143
- createBusyIndicator(taskInfo) {
144
- this.busyIndicatorService = this.busyIndicatorService
145
- || this.resolve(BusyIndicatorService);
146
- return this.busyIndicatorService.createIndicator(taskInfo);
58
+ const ss = document.createElement("link");
59
+ ss.rel = "stylesheet";
60
+ ss.href = ssConfig.href;
61
+ if (ssConfig.crossOrigin) {
62
+ ss.crossOrigin = ssConfig.crossOrigin;
147
63
  }
148
- syncUrl() {
64
+ if (ssConfig.integrity) {
65
+ ss.integrity = ssConfig.integrity;
149
66
  }
150
- callLater(f) {
151
- this.dispatcher.callLater(f);
152
- }
153
- installStyleSheet(ssConfig) {
154
- App_1.installStyleSheet(ssConfig);
155
- }
156
- installScript(location) {
157
- return App_1.installScript(location);
158
- }
159
- updateDefaultStyle(content) {
160
- throw new Error("Platform does not support StyleSheets");
67
+ const matches = /((global|local)(\-(high|low))?)\.css/.exec(ss.href);
68
+ if (matches) {
69
+ const m = matches[1];
70
+ if (m) {
71
+ const marker = markers[m];
72
+ if (marker) {
73
+ marker.insertAdjacentElement("afterend", ss);
74
+ return;
75
+ }
76
+ }
161
77
  }
162
- waitForPendingCalls() {
163
- return this.dispatcher.waitForAll();
78
+ document.head.appendChild(ss);
79
+ }
80
+ static installScript(location) {
81
+ const links = document.getElementsByTagName("script");
82
+ for (let index = 0; index < links.length; index++) {
83
+ const element = links[index];
84
+ const href = element.getAttribute("src");
85
+ if (href === location) {
86
+ return element.loaderPromise;
87
+ }
164
88
  }
165
- setTimeoutAsync(task, timeInMS = 1, previousToken) {
166
- if (previousToken !== void 0) {
167
- clearTimeout(previousToken);
89
+ const script = document.createElement("script");
90
+ const p = new Promise((resolve, reject) => {
91
+ script.type = "text/javascript";
92
+ script.src = location;
93
+ const s = script;
94
+ script.onload = s.onreadystatechange = () => {
95
+ if (s.readyState && s.readyState !== "complete" && s.readyState !== "loaded") {
96
+ return;
168
97
  }
169
- return setTimeout(() => {
170
- try {
171
- const p = task();
172
- if (p?.then) {
173
- p.catch((error) => {
174
- if (CancelToken.isCancelled(error)) {
175
- return;
176
- }
177
- console.error(error);
178
- });
179
- }
180
- }
181
- catch (e) {
182
- if (CancelToken.isCancelled(e)) {
183
- return;
184
- }
185
- console.error(e);
186
- }
187
- }, timeInMS);
98
+ script.onload = s.onreadystatechange = null;
99
+ resolve();
100
+ };
101
+ document.body.appendChild(script);
102
+ });
103
+ script.loaderPromise = p;
104
+ return p;
105
+ }
106
+ static authorize(authorize = true) {
107
+ const detail = {
108
+ authorize,
109
+ authorized: true
110
+ };
111
+ const ce = new CustomEvent("authorize", {
112
+ bubbles: true,
113
+ detail
114
+ });
115
+ document.body.dispatchEvent(ce);
116
+ if (!ce.detail.authorized) {
117
+ return false;
118
+ }
119
+ return true;
120
+ }
121
+ get url() {
122
+ return this.mUrl;
123
+ }
124
+ set url(v) {
125
+ this.mUrl = v;
126
+ AtomBinder.refreshValue(this, "url");
127
+ }
128
+ get contextId() {
129
+ return "none";
130
+ }
131
+ constructor() {
132
+ super(null);
133
+ this.appReady = false;
134
+ this.readyHandlers = [];
135
+ this.onError = error => {
136
+ console.log(error);
137
+ };
138
+ App_1.current = this;
139
+ this.screen = {};
140
+ this.bag = {};
141
+ this.put(App_1, this);
142
+ this.dispatcher = new AtomDispatcher();
143
+ this.dispatcher.start();
144
+ this.put(AtomDispatcher, this.dispatcher);
145
+ setTimeout(() => {
146
+ this.invokeReady();
147
+ }, 5);
148
+ }
149
+ createBusyIndicator(taskInfo) {
150
+ this.busyIndicatorService = this.busyIndicatorService || this.resolve(BusyIndicatorService);
151
+ return this.busyIndicatorService.createIndicator(taskInfo);
152
+ }
153
+ syncUrl() {}
154
+ callLater(f) {
155
+ this.dispatcher.callLater(f);
156
+ }
157
+ installStyleSheet(ssConfig) {
158
+ App_1.installStyleSheet(ssConfig);
159
+ }
160
+ installScript(location) {
161
+ return App_1.installScript(location);
162
+ }
163
+ updateDefaultStyle(content) {
164
+ throw new Error("Platform does not support StyleSheets");
165
+ }
166
+ waitForPendingCalls() {
167
+ return this.dispatcher.waitForAll();
168
+ }
169
+ setTimeoutAsync(task, timeInMS = 1, previousToken) {
170
+ if (previousToken !== void 0) {
171
+ clearTimeout(previousToken);
188
172
  }
189
- runAsync(tf) {
190
- try {
191
- const p = tf();
192
- if (p && p.then && p.catch) {
193
- p.catch((error) => {
194
- this.onError("runAsync");
195
- this.onError(error);
196
- });
173
+ return setTimeout(() => {
174
+ try {
175
+ const p = task();
176
+ if (p?.then) {
177
+ p.catch(error => {
178
+ if (CancelToken.isCancelled(error)) {
179
+ return;
197
180
  }
181
+ console.error(error);
182
+ });
198
183
  }
199
- catch (e) {
200
- this.onError("runAsync");
201
- this.onError(e);
184
+ } catch (e) {
185
+ if (CancelToken.isCancelled(e)) {
186
+ return;
202
187
  }
188
+ console.error(e);
189
+ }
190
+ }, timeInMS);
191
+ }
192
+ runAsync(tf) {
193
+ try {
194
+ const p = tf();
195
+ if (p && p.then && p.catch) {
196
+ p.catch(error => {
197
+ this.onError("runAsync");
198
+ this.onError(error);
199
+ });
200
+ }
201
+ } catch (e) {
202
+ this.onError("runAsync");
203
+ this.onError(e);
203
204
  }
204
- broadcast(channel, data) {
205
- const ary = this.bag[channel];
206
- if (!ary) {
207
- return;
208
- }
209
- for (const entry of ary.list) {
210
- entry.call(this, channel, data);
211
- }
205
+ }
206
+ broadcast(channel, data) {
207
+ const ary = this.bag[channel];
208
+ if (!ary) {
209
+ return;
212
210
  }
213
- subscribe(channel, action) {
214
- let ary = this.bag[channel];
215
- if (!ary) {
216
- ary = new AtomHandler(channel);
217
- this.bag[channel] = ary;
218
- }
219
- ary.list.push(action);
220
- return {
221
- dispose: () => {
222
- ary.list = ary.list.filter((a) => a !== action);
223
- if (!ary.list.length) {
224
- this.bag[channel] = null;
225
- }
226
- }
227
- };
211
+ for (const entry of ary.list) {
212
+ entry.call(this, channel, data);
228
213
  }
229
- main() {
214
+ }
215
+ subscribe(channel, action) {
216
+ let ary = this.bag[channel];
217
+ if (!ary) {
218
+ ary = new AtomHandler(channel);
219
+ this.bag[channel] = ary;
230
220
  }
231
- onReady(f) {
232
- if (this.readyHandlers) {
233
- this.readyHandlers.push(f);
234
- }
235
- else {
236
- this.invokeReadyHandler(f);
221
+ ary.list.push(action);
222
+ return {
223
+ dispose: () => {
224
+ ary.list = ary.list.filter(a => a !== action);
225
+ if (!ary.list.length) {
226
+ this.bag[channel] = null;
237
227
  }
228
+ }
229
+ };
230
+ }
231
+ main() {}
232
+ onReady(f) {
233
+ if (this.readyHandlers) {
234
+ this.readyHandlers.push(f);
235
+ } else {
236
+ this.invokeReadyHandler(f);
238
237
  }
239
- invokeReady() {
240
- if (this.invokeReadyHandler) {
241
- for (const iterator of this.readyHandlers) {
242
- this.invokeReadyHandler(iterator);
243
- }
244
- }
245
- this.readyHandlers = null;
238
+ }
239
+ invokeReady() {
240
+ if (this.invokeReadyHandler) {
241
+ for (const iterator of this.readyHandlers) {
242
+ this.invokeReadyHandler(iterator);
243
+ }
246
244
  }
247
- invokeReadyHandler(f) {
248
- const indicator = this.createBusyIndicator();
249
- const a = f();
250
- if (a && a.then && a.catch) {
251
- a.then((r) => {
252
- indicator[Symbol.dispose]();
253
- });
254
- a.catch((e) => {
255
- indicator[Symbol.dispose]();
256
- console.error(typeof e === "string" ? e : JSON.stringify(e));
257
- });
258
- return;
259
- }
245
+ this.readyHandlers = null;
246
+ }
247
+ invokeReadyHandler(f) {
248
+ const indicator = this.createBusyIndicator();
249
+ const a = f();
250
+ if (a && a.then && a.catch) {
251
+ a.then(r => {
260
252
  indicator[Symbol.dispose]();
253
+ });
254
+ a.catch(e => {
255
+ indicator[Symbol.dispose]();
256
+ console.error(typeof e === "string" ? e : JSON.stringify(e));
257
+ });
258
+ return;
261
259
  }
260
+ indicator[Symbol.dispose]();
261
+ }
262
262
  };
263
- App = App_1 = __decorate([
264
- RegisterSingleton,
265
- __metadata("design:paramtypes", [])
266
- ], App);
263
+ App = App_1 = __decorate([RegisterSingleton, __metadata("design:paramtypes", [])], App);
267
264
  export { App };
268
- const ESMPack = (window.ESMPack ??= {});
265
+ const ESMPack = window.ESMPack ??= {};
269
266
  ESMPack.render = async (imports, element) => {
270
- const app = new App();
271
- if (typeof imports === "string") {
272
- imports = await import(imports);
273
- }
274
- const c = new imports.default(app);
275
- element.replaceWith(c.element);
267
+ const app = new App();
268
+ if (typeof imports === "string") {
269
+ imports = await import(imports);
270
+ }
271
+ const c = new imports.default(app);
272
+ element.replaceWith(c.element);
276
273
  };
277
- ESMPack.installStyleSheet = App.installStyleSheet;
278
- //# sourceMappingURL=App.js.map
274
+ ESMPack.installStyleSheet = App.installStyleSheet;