@schukai/monster 3.97.0 → 3.98.0
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.
- package/CHANGELOG.md +20 -0
- package/package.json +1 -1
- package/source/components/accessibility/locale-picker.mjs +553 -482
- package/source/components/accessibility/stylesheet/locale-picker.mjs +13 -6
- package/source/components/datatable/columnbar.mjs +50 -3
- package/source/components/datatable/constants.mjs +7 -0
- package/source/components/datatable/datatable/header.mjs +1 -0
- package/source/components/datatable/datatable.mjs +1168 -934
- package/source/components/datatable/filter/date-range.mjs +145 -14
- package/source/components/datatable/filter/input.mjs +50 -3
- package/source/components/datatable/filter/range.mjs +92 -7
- package/source/components/datatable/filter-button.mjs +46 -3
- package/source/components/datatable/filter.mjs +95 -10
- package/source/components/datatable/pagination.mjs +82 -7
- package/source/components/datatable/save-button.mjs +46 -3
- package/source/components/datatable/style/datatable.pcss +1 -0
- package/source/components/datatable/stylesheet/datatable.mjs +7 -14
- package/source/components/form/field-set.mjs +77 -6
- package/source/components/form/select.mjs +149 -30
- package/source/components/layout/details.mjs +50 -3
- package/source/components/layout/tabs.mjs +50 -3
- package/source/components/notify/monitor-attribute-errors.mjs +235 -0
- package/source/components/notify/style/monitor-attribute-errors.pcss +0 -0
- package/source/components/notify/stylesheet/monitor-attribute-errors.mjs +38 -0
- package/source/dom/customelement.mjs +3 -3
- package/source/i18n/locale.mjs +151 -151
- package/source/i18n/map/languages.mjs +88 -88
- package/source/i18n/util.mjs +122 -114
- package/source/monster.mjs +1 -0
- package/source/types/version.mjs +1 -1
- package/test/cases/monster.mjs +1 -1
- package/test/web/import.js +1 -0
- package/test/web/test.html +2 -2
- package/test/web/tests.js +432 -13
File without changes
|
@@ -0,0 +1,38 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright © schukai GmbH and all contributing authors, 2025. All rights reserved.
|
3
|
+
* Node module: @schukai/monster
|
4
|
+
*
|
5
|
+
* This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
|
6
|
+
* The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
|
7
|
+
*
|
8
|
+
* For those who do not wish to adhere to the AGPLv3, a commercial license is available.
|
9
|
+
* Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
|
10
|
+
* For more information about purchasing a commercial license, please contact schukai GmbH.
|
11
|
+
*/
|
12
|
+
|
13
|
+
import { addAttributeToken } from "../../../dom/attributes.mjs";
|
14
|
+
import { ATTRIBUTE_ERRORMESSAGE } from "../../../dom/constants.mjs";
|
15
|
+
|
16
|
+
export { MonitorAttributeErrorsStyleSheet };
|
17
|
+
|
18
|
+
/**
|
19
|
+
* @private
|
20
|
+
* @type {CSSStyleSheet}
|
21
|
+
*/
|
22
|
+
const MonitorAttributeErrorsStyleSheet = new CSSStyleSheet();
|
23
|
+
|
24
|
+
try {
|
25
|
+
MonitorAttributeErrorsStyleSheet.insertRule(
|
26
|
+
`
|
27
|
+
@layer monitorattributeerrors {
|
28
|
+
|
29
|
+
}`,
|
30
|
+
0,
|
31
|
+
);
|
32
|
+
} catch (e) {
|
33
|
+
addAttributeToken(
|
34
|
+
document.getRootNode().querySelector("html"),
|
35
|
+
ATTRIBUTE_ERRORMESSAGE,
|
36
|
+
e + "",
|
37
|
+
);
|
38
|
+
}
|
@@ -235,7 +235,7 @@ class CustomElement extends HTMLElement {
|
|
235
235
|
*
|
236
236
|
* @param attribute
|
237
237
|
* @param callback
|
238
|
-
* @return {
|
238
|
+
* @return {CustomElement}
|
239
239
|
*/
|
240
240
|
addAttributeObserver(attribute, callback) {
|
241
241
|
validateFunction(callback);
|
@@ -246,7 +246,7 @@ class CustomElement extends HTMLElement {
|
|
246
246
|
/**
|
247
247
|
*
|
248
248
|
* @param attribute
|
249
|
-
* @return {
|
249
|
+
* @return {CustomElement}
|
250
250
|
*/
|
251
251
|
removeAttributeObserver(attribute) {
|
252
252
|
delete this[attributeObserverSymbol][attribute];
|
@@ -308,7 +308,7 @@ class CustomElement extends HTMLElement {
|
|
308
308
|
*
|
309
309
|
* Before you can use this method, you must have loaded the translations.
|
310
310
|
*
|
311
|
-
* @return {
|
311
|
+
* @return {CustomElement}
|
312
312
|
* @throws {Error} Cannot find an element with translations. Add a translation object to the document.
|
313
313
|
*/
|
314
314
|
updateI18n() {
|
package/source/i18n/locale.mjs
CHANGED
@@ -12,12 +12,12 @@
|
|
12
12
|
* SPDX-License-Identifier: AGPL-3.0
|
13
13
|
*/
|
14
14
|
|
15
|
-
import {instanceSymbol} from "../constants.mjs";
|
16
|
-
import {Base} from "../types/base.mjs";
|
17
|
-
import {validateString} from "../types/validate.mjs";
|
18
|
-
import {clone} from "../util/clone.mjs";
|
15
|
+
import { instanceSymbol } from "../constants.mjs";
|
16
|
+
import { Base } from "../types/base.mjs";
|
17
|
+
import { validateString } from "../types/validate.mjs";
|
18
|
+
import { clone } from "../util/clone.mjs";
|
19
19
|
|
20
|
-
export {Locale, parseLocale};
|
20
|
+
export { Locale, parseLocale };
|
21
21
|
|
22
22
|
/**
|
23
23
|
* @type {symbol}
|
@@ -69,116 +69,116 @@ const localeStringSymbol = Symbol("localeString");
|
|
69
69
|
* @see https://datatracker.ietf.org/doc/html/rfc3066
|
70
70
|
*/
|
71
71
|
class Locale extends Base {
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
72
|
+
/**
|
73
|
+
* @param {string} language
|
74
|
+
* @param {string} [region]
|
75
|
+
* @param {string} [script]
|
76
|
+
* @param {string} [variants]
|
77
|
+
* @param {string} [extlang]
|
78
|
+
* @param {string} [privateUse]
|
79
|
+
* @throws {Error} unsupported locale
|
80
|
+
*/
|
81
|
+
constructor(language, region, script, variants, extlang, privateUse) {
|
82
|
+
super();
|
83
83
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
84
|
+
this[propertiesSymbol] = {
|
85
|
+
language: language === undefined ? undefined : validateString(language),
|
86
|
+
script: script === undefined ? undefined : validateString(script),
|
87
|
+
region: region === undefined ? undefined : validateString(region),
|
88
|
+
variants: variants === undefined ? undefined : validateString(variants),
|
89
|
+
extlang: extlang === undefined ? undefined : validateString(extlang),
|
90
|
+
privateUse:
|
91
|
+
privateUse === undefined ? undefined : validateString(privateUse),
|
92
|
+
};
|
93
93
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
94
|
+
const s = [];
|
95
|
+
if (language !== undefined) s.push(language);
|
96
|
+
if (script !== undefined) s.push(script);
|
97
|
+
if (region !== undefined) s.push(region);
|
98
|
+
if (variants !== undefined) s.push(variants);
|
99
|
+
if (extlang !== undefined) s.push(extlang);
|
100
|
+
if (privateUse !== undefined) s.push(privateUse);
|
101
101
|
|
102
|
-
|
103
|
-
|
104
|
-
|
102
|
+
if (s.length === 0) {
|
103
|
+
throw new Error("unsupported locale");
|
104
|
+
}
|
105
105
|
|
106
|
-
|
107
|
-
|
106
|
+
this[localeStringSymbol] = s.join("-");
|
107
|
+
}
|
108
108
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
109
|
+
/**
|
110
|
+
* This method is called by the `instanceof` operator.
|
111
|
+
* @return {symbol}
|
112
|
+
* @since 3.27.0
|
113
|
+
*/
|
114
|
+
static get [instanceSymbol]() {
|
115
|
+
return Symbol.for("@schukai/monster/i18n/locale@@instance");
|
116
|
+
}
|
117
117
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
118
|
+
/**
|
119
|
+
* @return {string}
|
120
|
+
*/
|
121
|
+
get localeString() {
|
122
|
+
return this[localeStringSymbol];
|
123
|
+
}
|
124
124
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
125
|
+
/**
|
126
|
+
* @return {string|undefined}
|
127
|
+
*/
|
128
|
+
get language() {
|
129
|
+
return this[propertiesSymbol].language;
|
130
|
+
}
|
131
131
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
132
|
+
/**
|
133
|
+
* @return {string|undefined}
|
134
|
+
*/
|
135
|
+
get region() {
|
136
|
+
return this[propertiesSymbol].region;
|
137
|
+
}
|
138
138
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
139
|
+
/**
|
140
|
+
* @return {string|undefined}
|
141
|
+
*/
|
142
|
+
get script() {
|
143
|
+
return this[propertiesSymbol].script;
|
144
|
+
}
|
145
145
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
146
|
+
/**
|
147
|
+
* @return {string|undefined}
|
148
|
+
*/
|
149
|
+
get variants() {
|
150
|
+
return this[propertiesSymbol].variants;
|
151
|
+
}
|
152
152
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
153
|
+
/**
|
154
|
+
* @return {string|undefined}
|
155
|
+
*/
|
156
|
+
get extlang() {
|
157
|
+
return this[propertiesSymbol].extlang;
|
158
|
+
}
|
159
159
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
160
|
+
/**
|
161
|
+
* @return {string|undefined}
|
162
|
+
*/
|
163
|
+
get privateUse() {
|
164
|
+
return this[propertiesSymbol].privateValue;
|
165
|
+
}
|
166
166
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
167
|
+
/**
|
168
|
+
* @return {string}
|
169
|
+
*/
|
170
|
+
toString() {
|
171
|
+
return `${this.localeString}`;
|
172
|
+
}
|
173
173
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
174
|
+
/**
|
175
|
+
* The structure has the following: language, script, region, variants, extlang, privateUse
|
176
|
+
*
|
177
|
+
* @return {Monster.I18n.LocaleMap}
|
178
|
+
*/
|
179
|
+
getMap() {
|
180
|
+
return clone(this[propertiesSymbol]);
|
181
|
+
}
|
182
182
|
}
|
183
183
|
|
184
184
|
/**
|
@@ -260,63 +260,63 @@ class Locale extends Base {
|
|
260
260
|
* @throws {Error} unsupported locale
|
261
261
|
*/
|
262
262
|
function parseLocale(locale) {
|
263
|
-
|
263
|
+
locale = validateString(locale).replace(/_/g, "-");
|
264
264
|
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
265
|
+
let language;
|
266
|
+
let region;
|
267
|
+
let variants;
|
268
|
+
let parts;
|
269
|
+
let script;
|
270
|
+
let extlang;
|
271
|
+
const regexRegular =
|
272
|
+
"(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)";
|
273
|
+
const regexIrregular =
|
274
|
+
"(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)";
|
275
|
+
const regexGrandfathered = `(${regexIrregular}|${regexRegular})`;
|
276
|
+
const regexPrivateUse = "(x(-[A-Za-z0-9]{1,8})+)";
|
277
|
+
const regexSingleton = "[0-9A-WY-Za-wy-z]";
|
278
|
+
const regexExtension = `(${regexSingleton}(-[A-Za-z0-9]{2,8})+)`;
|
279
|
+
const regexVariant = "([A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3})";
|
280
|
+
const regexRegion = "([A-Za-z]{2}|[0-9]{3})";
|
281
|
+
const regexScript = "([A-Za-z]{4})";
|
282
|
+
const regexExtlang = "([A-Za-z]{3}(-[A-Za-z]{3}){0,2})";
|
283
|
+
const regexLanguage = `(([A-Za-z]{2,3}(-${regexExtlang})?)|[A-Za-z]{4}|[A-Za-z]{5,8})`;
|
284
|
+
const regexLangtag = `(${regexLanguage}(-${regexScript})?(-${regexRegion})?(-${regexVariant})*(-${regexExtension})*(-${regexPrivateUse})?)`;
|
285
|
+
const regexLanguageTag = `^(${regexGrandfathered}|${regexLangtag}|${regexPrivateUse})$`;
|
286
|
+
const regex = new RegExp(regexLanguageTag);
|
287
|
+
let match;
|
288
288
|
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
289
|
+
if ((match = regex.exec(locale)) !== null) {
|
290
|
+
if (match.index === regex.lastIndex) {
|
291
|
+
regex.lastIndex++;
|
292
|
+
}
|
293
|
+
}
|
294
294
|
|
295
|
-
|
296
|
-
|
297
|
-
|
295
|
+
if (match === undefined || match === null) {
|
296
|
+
throw new Error("unsupported locale");
|
297
|
+
}
|
298
298
|
|
299
|
-
|
300
|
-
|
299
|
+
if (match[6] !== undefined) {
|
300
|
+
language = match[6];
|
301
301
|
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
302
|
+
parts = language.split("-");
|
303
|
+
if (parts.length > 1) {
|
304
|
+
language = parts[0];
|
305
|
+
extlang = parts[1];
|
306
|
+
}
|
307
|
+
}
|
308
308
|
|
309
|
-
|
310
|
-
|
311
|
-
|
309
|
+
if (match[14] !== undefined) {
|
310
|
+
region = match[14];
|
311
|
+
}
|
312
312
|
|
313
|
-
|
314
|
-
|
315
|
-
|
313
|
+
if (match[12] !== undefined) {
|
314
|
+
script = match[12];
|
315
|
+
}
|
316
316
|
|
317
|
-
|
318
|
-
|
319
|
-
|
317
|
+
if (match[16] !== undefined) {
|
318
|
+
variants = match[16];
|
319
|
+
}
|
320
320
|
|
321
|
-
|
321
|
+
return new Locale(language, region, script, variants, extlang);
|
322
322
|
}
|
@@ -13,92 +13,92 @@
|
|
13
13
|
*/
|
14
14
|
|
15
15
|
export const languages = {
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
16
|
+
en: "English",
|
17
|
+
"en-GB": "English (United Kingdom)",
|
18
|
+
"en-US": "English (United States)",
|
19
|
+
"en-CA": "English (Canada)",
|
20
|
+
"en-AU": "English (Australia)",
|
21
|
+
es: "Español",
|
22
|
+
"es-ES": "Español (España)",
|
23
|
+
"es-MX": "Español (México)",
|
24
|
+
"es-AR": "Español (Argentina)",
|
25
|
+
zh: "中文",
|
26
|
+
"zh-CN": "中文(简体)",
|
27
|
+
"zh-TW": "中文(繁體)",
|
28
|
+
"zh-HK": "中文(香港)",
|
29
|
+
fr: "Français",
|
30
|
+
"fr-FR": "Français (France)",
|
31
|
+
"fr-CA": "Français (Canada)",
|
32
|
+
"fr-BE": "Français (Belgique)",
|
33
|
+
de: "Deutsch",
|
34
|
+
"de-DE": "Deutsch (Deutschland)",
|
35
|
+
"de-AT": "Deutsch (Österreich)",
|
36
|
+
"de-CH": "Deutsch (Schweiz)",
|
37
|
+
ja: "日本語",
|
38
|
+
ru: "Русский",
|
39
|
+
"ru-RU": "Русский (Россия)",
|
40
|
+
it: "Italiano",
|
41
|
+
"it-IT": "Italiano (Italia)",
|
42
|
+
pt: "Português",
|
43
|
+
"pt-PT": "Português (Portugal)",
|
44
|
+
"pt-BR": "Português (Brasil)",
|
45
|
+
ko: "한국어",
|
46
|
+
ar: "العربية",
|
47
|
+
hi: "हिन्दी",
|
48
|
+
bn: "বাংলা",
|
49
|
+
pa: "ਪੰਜਾਬੀ",
|
50
|
+
id: "Bahasa Indonesia",
|
51
|
+
vi: "Tiếng Việt",
|
52
|
+
tr: "Türkçe",
|
53
|
+
"tr-TR": "Türkçe (Türkiye)",
|
54
|
+
pl: "Polski",
|
55
|
+
"pl-PL": "Polski (Polska)",
|
56
|
+
uk: "Українська",
|
57
|
+
"uk-UA": "Українська (Україна)",
|
58
|
+
ro: "Română",
|
59
|
+
"ro-RO": "Română (România)",
|
60
|
+
nl: "Nederlands",
|
61
|
+
"nl-NL": "Nederlands (Nederland)",
|
62
|
+
el: "Ελληνικά",
|
63
|
+
"el-GR": "Ελληνικά (Ελλάδα)",
|
64
|
+
hu: "Magyar",
|
65
|
+
"hu-HU": "Magyar (Magyarország)",
|
66
|
+
sv: "Svenska",
|
67
|
+
"sv-SE": "Svenska (Sverige)",
|
68
|
+
cs: "Čeština",
|
69
|
+
"cs-CZ": "Čeština (Česká republika)",
|
70
|
+
bg: "Български",
|
71
|
+
"bg-BG": "Български (България)",
|
72
|
+
da: "Dansk",
|
73
|
+
"da-DK": "Dansk (Danmark)",
|
74
|
+
fi: "Suomi",
|
75
|
+
"fi-FI": "Suomi (Suomi)",
|
76
|
+
sk: "Slovenčina",
|
77
|
+
"sk-SK": "Slovenčina (Slovensko)",
|
78
|
+
he: "עברית",
|
79
|
+
th: "ไทย",
|
80
|
+
sr: "Српски",
|
81
|
+
"sr-RS": "Српски (Србија)",
|
82
|
+
no: "Norsk",
|
83
|
+
"no-NO": "Norsk (Norge)",
|
84
|
+
lt: "Lietuvių",
|
85
|
+
"lt-LT": "Lietuvių (Lietuva)",
|
86
|
+
lv: "Latviešu",
|
87
|
+
"lv-LV": "Latviešu (Latvija)",
|
88
|
+
et: "Eesti",
|
89
|
+
"et-EE": "Eesti (Eesti)",
|
90
|
+
hr: "Hrvatski",
|
91
|
+
"hr-HR": "Hrvatski (Hrvatska)",
|
92
|
+
sl: "Slovenščina",
|
93
|
+
"sl-SI": "Slovenščina (Slovenija)",
|
94
|
+
mt: "Malti",
|
95
|
+
"mt-MT": "Malti (Malta)",
|
96
|
+
is: "Íslenska",
|
97
|
+
"is-IS": "Íslenska (Ísland)",
|
98
|
+
ga: "Gaeilge",
|
99
|
+
"ga-IE": "Gaeilge (Éire)",
|
100
|
+
cy: "Cymraeg",
|
101
|
+
"cy-GB": "Cymraeg (Y Deyrnas Unedig)",
|
102
|
+
sq: "Shqip",
|
103
|
+
"sq-AL": "Shqip (Shqipëria)",
|
104
104
|
};
|