wj-elements 0.0.10 → 0.0.12
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/dist/localize-20081fd1.js +55 -0
- package/dist/router-links-26e4a166.js +204 -0
- package/dist/style.css +2243 -2
- package/dist/wj-animation.js +35 -23
- package/dist/wj-aside.js +22 -16
- package/dist/wj-avatar.js +49 -30
- package/dist/wj-badge.js +22 -18
- package/dist/wj-breadcrumb.js +102 -50
- package/dist/wj-breadcrumbs.js +36 -19
- package/dist/wj-button-group.js +36 -22
- package/dist/wj-button.js +104 -39
- package/dist/wj-card-content.js +18 -14
- package/dist/wj-card-controls.js +18 -14
- package/dist/wj-card-header.js +20 -14
- package/dist/wj-card-subtitle.js +19 -15
- package/dist/wj-card-title.js +18 -14
- package/dist/wj-card.js +20 -14
- package/dist/wj-carousel-item.js +22 -16
- package/dist/wj-carousel.js +169 -92
- package/dist/wj-checkbox.js +46 -24
- package/dist/wj-chip.js +39 -21
- package/dist/wj-col.js +31 -17
- package/dist/wj-color-picker.js +877 -509
- package/dist/wj-container.js +20 -16
- package/dist/wj-copy-button.js +112 -64
- package/dist/wj-dialog.js +68 -42
- package/dist/wj-divider.js +20 -14
- package/dist/wj-dropdown.js +29 -17
- package/dist/wj-element.js +415 -241
- package/dist/wj-fetchAndParseCSS.js +49 -32
- package/dist/wj-file-upload-item.js +64 -38
- package/dist/wj-file-upload.js +237 -137
- package/dist/wj-footer.js +18 -14
- package/dist/wj-form.js +18 -14
- package/dist/wj-format-digital.js +40 -25
- package/dist/wj-grid.js +20 -16
- package/dist/wj-header.js +22 -16
- package/dist/wj-icon-picker.js +122 -68
- package/dist/wj-icon.js +144 -64
- package/dist/wj-img-comparer.js +72 -41
- package/dist/wj-img.js +31 -19
- package/dist/wj-infinite-scroll.js +90 -52
- package/dist/wj-input-file.js +50 -27
- package/dist/wj-input.js +169 -70
- package/dist/wj-item.js +34 -17
- package/dist/wj-label.js +21 -19
- package/dist/wj-list.js +20 -15
- package/dist/wj-main.js +18 -14
- package/dist/wj-masonry.js +140 -83
- package/dist/wj-master.js +492 -350
- package/dist/wj-menu-button.js +19 -15
- package/dist/wj-menu-item.js +150 -64
- package/dist/wj-menu-label.js +21 -17
- package/dist/wj-menu.js +24 -18
- package/dist/wj-popup.js +1140 -712
- package/dist/wj-progress-bar.js +100 -40
- package/dist/wj-radio-group.js +38 -25
- package/dist/wj-radio.js +46 -22
- package/dist/wj-rate.js +121 -71
- package/dist/wj-relative-time.js +48 -24
- package/dist/wj-route.js +11 -8
- package/dist/wj-router-link.js +25 -17
- package/dist/wj-router-outlet.js +135 -71
- package/dist/wj-routerx.js +1121 -641
- package/dist/wj-row.js +21 -19
- package/dist/wj-slider.js +97 -55
- package/dist/wj-split-view.js +81 -43
- package/dist/wj-store.js +195 -110
- package/dist/wj-textarea.js +86 -37
- package/dist/wj-thumbnail.js +19 -15
- package/dist/wj-toast.js +87 -34
- package/dist/wj-toggle.js +42 -24
- package/dist/wj-toolbar-action.js +27 -16
- package/dist/wj-toolbar.js +26 -19
- package/dist/wj-tooltip.js +40 -24
- package/dist/wj-visually-hidden.js +18 -14
- package/package.json +1 -1
- package/dist/localize-762a9f0f.js +0 -43
- package/dist/router-links-e0087f84.js +0 -146
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
const translations = /* @__PURE__ */ new Map();
|
|
2
|
+
class LocalizerDefault {
|
|
3
|
+
constructor(element) {
|
|
4
|
+
this.element = element;
|
|
5
|
+
this.languages = translations;
|
|
6
|
+
this.lang = this.element.lang || document.documentElement.lang || "en";
|
|
7
|
+
this.dir = this.element.dir || document.documentElement.dir || "ltr";
|
|
8
|
+
this.setLanguage();
|
|
9
|
+
}
|
|
10
|
+
// Nastavenie aktuálneho jazyka
|
|
11
|
+
setLanguage() {
|
|
12
|
+
if (this.languages.has(this.lang)) {
|
|
13
|
+
this.currentLang = this.lang;
|
|
14
|
+
} else {
|
|
15
|
+
console.error(`Language "${this.lang}" not loaded.`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
// Vyhľadávanie prekladu podľa kľúča
|
|
19
|
+
translate(key) {
|
|
20
|
+
const langMap = this.languages.get(this.currentLang);
|
|
21
|
+
return langMap ? langMap[key] || key : key;
|
|
22
|
+
}
|
|
23
|
+
// Formátovanie čísla podľa aktuálneho jazyka
|
|
24
|
+
formatNumber(number, options) {
|
|
25
|
+
return new Intl.NumberFormat(this.currentLang, options).format(number);
|
|
26
|
+
}
|
|
27
|
+
// Formátovanie dátumu podľa aktuálneho jazyka
|
|
28
|
+
formatDate(date) {
|
|
29
|
+
return new Intl.DateTimeFormat(this.currentLang).format(new Date(date));
|
|
30
|
+
}
|
|
31
|
+
relativeTime(value = 0, unit, options = { numeric: "auto" }) {
|
|
32
|
+
return new Intl.RelativeTimeFormat(this.currentLang, options).format(value, unit);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function registerTranslation(...translation) {
|
|
36
|
+
translation.map((t) => {
|
|
37
|
+
const code = t.code.toLowerCase();
|
|
38
|
+
if (translations.has(code)) {
|
|
39
|
+
translations.set(code, { ...translations.get(code), ...t });
|
|
40
|
+
} else {
|
|
41
|
+
translations.set(code, t);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
class Localizer extends LocalizerDefault {
|
|
46
|
+
constructor(element) {
|
|
47
|
+
super(element);
|
|
48
|
+
}
|
|
49
|
+
static registerTranslation(...translation) {
|
|
50
|
+
registerTranslation(...translation);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
Localizer as L
|
|
55
|
+
};
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
const routerLinksData = Symbol("routerLinksData");
|
|
2
|
+
const unbindRouterLinks = Symbol("unbindRouterLinks");
|
|
3
|
+
const resolved = Promise.resolve();
|
|
4
|
+
const linkContainers = /* @__PURE__ */ new Set();
|
|
5
|
+
let router;
|
|
6
|
+
const delegate = function(el, eventName, selector, listener, context) {
|
|
7
|
+
const handler = function(e) {
|
|
8
|
+
var node = e.target;
|
|
9
|
+
for (; node; node = node.parentNode) {
|
|
10
|
+
if (node.matches && node.matches(selector)) {
|
|
11
|
+
e.selectorTarget = node;
|
|
12
|
+
listener.call(context, e);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
handler.eventName = eventName;
|
|
17
|
+
el.addEventListener(eventName, handler, false);
|
|
18
|
+
return handler;
|
|
19
|
+
};
|
|
20
|
+
function isModifiedEvent(event) {
|
|
21
|
+
return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);
|
|
22
|
+
}
|
|
23
|
+
const undelegate = function(el, handler) {
|
|
24
|
+
const eventName = handler.eventName;
|
|
25
|
+
el.removeEventListener(eventName, handler, false);
|
|
26
|
+
};
|
|
27
|
+
const camelize = (str) => {
|
|
28
|
+
if (str.indexOf("-") === -1)
|
|
29
|
+
return str;
|
|
30
|
+
const words = str.split("-");
|
|
31
|
+
let result = "";
|
|
32
|
+
for (let i = 0; i < words.length; i++) {
|
|
33
|
+
const word = words[i];
|
|
34
|
+
result += i ? word.charAt(0).toUpperCase() + word.slice(1) : word;
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
function mutationHandler(mutations, observer) {
|
|
39
|
+
mutations.forEach(function(mutation) {
|
|
40
|
+
if (mutation.type === "attributes") {
|
|
41
|
+
const attr = mutation.attributeName;
|
|
42
|
+
if (attr.indexOf("param-") === 0 || attr.indexOf("query-") === 0) {
|
|
43
|
+
updateLink(mutation.target, observer.ownerEl);
|
|
44
|
+
}
|
|
45
|
+
} else {
|
|
46
|
+
mutation.addedNodes.forEach((node) => {
|
|
47
|
+
if (node.nodeType === 1) {
|
|
48
|
+
if (node.getAttribute("route"))
|
|
49
|
+
updateLink(node, observer.ownerEl);
|
|
50
|
+
createLinks(observer.ownerEl, node);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
const elementsObserverConfig = { childList: true, subtree: true, attributes: true };
|
|
57
|
+
function getAttributeValues(el, prefix, result) {
|
|
58
|
+
const attributes = el.attributes;
|
|
59
|
+
for (let i = 0; i < attributes.length; i++) {
|
|
60
|
+
const attr = attributes[i];
|
|
61
|
+
if (attr.name.indexOf(prefix) === 0) {
|
|
62
|
+
const paramName = camelize(attr.name.slice(prefix.length));
|
|
63
|
+
result[paramName] = attr.value;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
function getDefaults(ownerEl, routeName, propName, routeEl, options) {
|
|
69
|
+
let result = options[propName];
|
|
70
|
+
if (typeof result === "function")
|
|
71
|
+
result = result.call(ownerEl, routeName, routeEl);
|
|
72
|
+
return result || {};
|
|
73
|
+
}
|
|
74
|
+
function getRouteProp(ownerEl, routeName, routeEl, propName, attrPrefix) {
|
|
75
|
+
const options = ownerEl[routerLinksData].options;
|
|
76
|
+
const defaults = getDefaults(ownerEl, routeName, propName, routeEl, options);
|
|
77
|
+
const rootEl = routeEl.closest(options.selector || "[routerlinks]");
|
|
78
|
+
if (rootEl) {
|
|
79
|
+
getAttributeValues(rootEl, attrPrefix, defaults);
|
|
80
|
+
}
|
|
81
|
+
return getAttributeValues(routeEl, attrPrefix, defaults);
|
|
82
|
+
}
|
|
83
|
+
function updateActiveClass(el, routeName, params, query) {
|
|
84
|
+
const activeClass = el.hasAttribute("active-class") ? el.getAttribute("active-class") : "active";
|
|
85
|
+
if (activeClass) {
|
|
86
|
+
const isActive = router.isActive(routeName, params, query, el.hasAttribute("exact"));
|
|
87
|
+
el.classList.toggle(activeClass, isActive);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function updateLink(el, ownerEl) {
|
|
91
|
+
const routeName = el.getAttribute("route");
|
|
92
|
+
if (!routeName)
|
|
93
|
+
return;
|
|
94
|
+
const params = getRouteProp(ownerEl, routeName, el, "params", "param-");
|
|
95
|
+
const query = getRouteProp(ownerEl, routeName, el, "query", "query-");
|
|
96
|
+
try {
|
|
97
|
+
const href = router.generate(routeName, params, query);
|
|
98
|
+
const anchorEl = el.tagName === "A" ? el : el.querySelector("a");
|
|
99
|
+
if (anchorEl)
|
|
100
|
+
anchorEl.setAttribute("href", href);
|
|
101
|
+
if (!router.state.activeTransition) {
|
|
102
|
+
updateActiveClass(el, routeName, params, query);
|
|
103
|
+
}
|
|
104
|
+
} catch (error) {
|
|
105
|
+
console.warn(`Error generating link for "${routeName}": ${error}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function createLinks(ownerEl, rootEl) {
|
|
109
|
+
const routeEls = rootEl.querySelectorAll("[route]");
|
|
110
|
+
routeEls.forEach((el) => {
|
|
111
|
+
updateLink(el, ownerEl);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function linkClickHandler(e) {
|
|
115
|
+
if (e.button !== 0 || isModifiedEvent(e))
|
|
116
|
+
return;
|
|
117
|
+
e.preventDefault();
|
|
118
|
+
const el = e.selectorTarget;
|
|
119
|
+
const routeName = el.getAttribute("route");
|
|
120
|
+
if (!routeName)
|
|
121
|
+
return;
|
|
122
|
+
const params = getRouteProp(this, routeName, el, "params", "param-");
|
|
123
|
+
const query = getRouteProp(this, routeName, el, "query", "query-");
|
|
124
|
+
const method = el.hasAttribute("replace") ? "replaceWith" : "transitionTo";
|
|
125
|
+
router[method](routeName, params, query);
|
|
126
|
+
}
|
|
127
|
+
function bindRouterLinks(ownerEl, options = {}) {
|
|
128
|
+
const { selector = "[routerlinks]" } = options;
|
|
129
|
+
const rootEls = selector ? ownerEl.querySelectorAll(selector) : [ownerEl];
|
|
130
|
+
const observer = new MutationObserver(mutationHandler);
|
|
131
|
+
const eventHandlers = [];
|
|
132
|
+
observer.ownerEl = ownerEl;
|
|
133
|
+
ownerEl[routerLinksData] = { options, rootEls, observer };
|
|
134
|
+
rootEls.forEach((rootEl) => {
|
|
135
|
+
eventHandlers.push(delegate(rootEl, "click", "[route]", linkClickHandler, ownerEl));
|
|
136
|
+
createLinks(ownerEl, rootEl);
|
|
137
|
+
observer.observe(rootEl, elementsObserverConfig);
|
|
138
|
+
});
|
|
139
|
+
linkContainers.add(ownerEl);
|
|
140
|
+
return function() {
|
|
141
|
+
linkContainers.delete(ownerEl);
|
|
142
|
+
eventHandlers.forEach((eventHandler, i) => undelegate(rootEls[i], eventHandler));
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const createClass = (ctor, options = {}) => {
|
|
146
|
+
return class extends ctor {
|
|
147
|
+
connectedCallback() {
|
|
148
|
+
super.connectedCallback && super.connectedCallback();
|
|
149
|
+
const renderWait = this.updateComplete || resolved;
|
|
150
|
+
renderWait.then(() => {
|
|
151
|
+
this[unbindRouterLinks] = bindRouterLinks(this, options);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
disconnectedCallback() {
|
|
155
|
+
super.disconnectedCallback && super.disconnectedCallback();
|
|
156
|
+
if (this[unbindRouterLinks]) {
|
|
157
|
+
this[unbindRouterLinks]();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
const withRouterLinks = (optionsOrCtorOrDescriptor, options) => {
|
|
163
|
+
if (typeof optionsOrCtorOrDescriptor === "function") {
|
|
164
|
+
return createClass(optionsOrCtorOrDescriptor, options);
|
|
165
|
+
}
|
|
166
|
+
if (optionsOrCtorOrDescriptor.kind === "class") {
|
|
167
|
+
const { kind, elements } = optionsOrCtorOrDescriptor;
|
|
168
|
+
return {
|
|
169
|
+
kind,
|
|
170
|
+
elements,
|
|
171
|
+
finisher(ctor) {
|
|
172
|
+
return createClass(ctor, options);
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
return (ctorOrDescriptor) => {
|
|
177
|
+
return withRouterLinks(ctorOrDescriptor, optionsOrCtorOrDescriptor);
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
function create(instance) {
|
|
181
|
+
router = instance;
|
|
182
|
+
}
|
|
183
|
+
function done() {
|
|
184
|
+
linkContainers.forEach((ownerEl) => {
|
|
185
|
+
const data = ownerEl[routerLinksData];
|
|
186
|
+
data.rootEls.forEach((el) => {
|
|
187
|
+
const routeName = el.getAttribute("route");
|
|
188
|
+
if (!routeName)
|
|
189
|
+
return;
|
|
190
|
+
const params = getRouteProp(ownerEl, routeName, el, "params", "param-");
|
|
191
|
+
const query = getRouteProp(ownerEl, routeName, el, "query", "query-");
|
|
192
|
+
updateActiveClass(el, routeName, params, query);
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
const routerLinks = {
|
|
197
|
+
create,
|
|
198
|
+
done
|
|
199
|
+
};
|
|
200
|
+
export {
|
|
201
|
+
bindRouterLinks as b,
|
|
202
|
+
routerLinks as r,
|
|
203
|
+
withRouterLinks as w
|
|
204
|
+
};
|