@livenetworks/ashlar 1.5.1 → 1.6.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/README.md +189 -177
- package/js/COMPONENTS.md +55 -49
- package/js/index.js +22 -5
- package/js/ln-accordion/README.md +186 -137
- package/js/ln-accordion/ln-accordion.js +1 -1
- package/js/ln-ajax/README.md +73 -4
- package/js/ln-ajax/ln-ajax.js +1 -1
- package/js/ln-ajax/src/ln-ajax.js +13 -13
- package/js/ln-api-connector/README.md +261 -150
- package/js/ln-api-connector/ln-api-connector.js +1 -1
- package/js/ln-api-connector/src/ln-api-connector.js +368 -265
- package/js/ln-api-queue/README.md +219 -0
- package/js/ln-api-queue/ln-api-queue.js +1 -0
- package/js/ln-api-queue/src/ln-api-queue.js +320 -0
- package/js/ln-api-queue/src/queue-storage.js +455 -0
- package/js/ln-autoresize/README.md +47 -0
- package/js/ln-autoresize/ln-autoresize.js +1 -1
- package/js/ln-autosave/README.md +33 -1
- package/js/ln-autosave/ln-autosave.js +1 -1
- package/js/ln-autosave/src/ln-autosave.js +4 -4
- package/js/ln-circular-progress/README.md +27 -13
- package/js/ln-circular-progress/ln-circular-progress.js +1 -1
- package/js/ln-circular-progress/src/ln-circular-progress.js +18 -5
- package/js/ln-confirm/README.md +162 -86
- package/js/ln-confirm/_ln-confirm.scss +11 -0
- package/js/ln-confirm/ln-confirm.js +1 -1
- package/js/ln-confirm/src/ln-confirm.js +77 -41
- package/js/ln-core/README.md +896 -0
- package/js/ln-core/hash.js +92 -0
- package/js/ln-core/helpers.js +337 -8
- package/js/ln-core/index.js +4 -2
- package/js/ln-core/persist.js +29 -3
- package/js/ln-core/positioning.js +1 -35
- package/js/ln-core/window-cache.js +213 -0
- package/js/ln-couchdb-connector/README.md +177 -156
- package/js/ln-couchdb-connector/ln-couchdb-connector.js +1 -1
- package/js/ln-couchdb-connector/src/ln-couchdb-connector.js +398 -348
- package/js/ln-data-coordinator/README.md +536 -165
- package/js/ln-data-coordinator/ln-data-coordinator.js +1 -1
- package/js/ln-data-coordinator/src/data-read-policy.js +18 -0
- package/js/ln-data-coordinator/src/ln-data-coordinator.js +1042 -249
- package/js/ln-data-coordinator/src/mutation-receipts.js +46 -0
- package/js/ln-data-store/README.md +241 -94
- package/js/ln-data-store/ln-data-store.js +1 -1
- package/js/ln-data-store/src/ln-data-store.js +694 -699
- package/js/ln-date/README.md +39 -1
- package/js/ln-date/ln-date-dev.scss +14 -0
- package/js/ln-date/ln-date.js +1 -1
- package/js/ln-date/src/ln-date.js +236 -178
- package/js/ln-debug/README.md +58 -0
- package/js/ln-debug/ln-debug.js +1 -0
- package/js/ln-debug/src/ln-debug.js +19 -0
- package/js/ln-dropdown/README.md +31 -8
- package/js/ln-dropdown/ln-dropdown.js +1 -1
- package/js/ln-dropdown/src/ln-dropdown.js +30 -13
- package/js/ln-editor/README.md +274 -0
- package/js/ln-editor/ln-editor.js +1 -0
- package/js/ln-editor/ln-editor.scss +43 -0
- package/js/ln-editor/src/ln-editor.js +619 -0
- package/js/ln-external-links/README.md +44 -5
- package/js/ln-external-links/ln-external-links.js +1 -1
- package/js/ln-fill/README.md +199 -0
- package/js/ln-fill/ln-fill.js +1 -0
- package/js/ln-fill/src/ln-fill.js +87 -0
- package/js/ln-filter/README.md +92 -2
- package/js/ln-filter/ln-filter-dev.scss +8 -0
- package/js/ln-filter/ln-filter.js +1 -1
- package/js/ln-filter/src/ln-filter.js +22 -7
- package/js/ln-form/README.md +212 -49
- package/js/ln-form/ln-form.js +1 -1
- package/js/ln-form/src/ln-form.js +99 -199
- package/js/ln-http/README.md +125 -89
- package/js/ln-http/ln-http.js +1 -1
- package/js/ln-http/src/ln-http.js +32 -13
- package/js/ln-icon/README.md +130 -0
- package/js/ln-icon/ln-icon.js +1 -0
- package/js/{ln-icons/src/ln-icons.js → ln-icon/src/ln-icon.js} +20 -15
- package/js/ln-link/README.md +47 -9
- package/js/ln-link/ln-link.js +1 -1
- package/js/ln-link/src/ln-link.js +22 -6
- package/js/ln-list/README.md +129 -0
- package/js/ln-list/ln-list.js +1 -0
- package/js/ln-list/ln-list.scss +28 -0
- package/js/ln-list/src/ln-list.js +1216 -0
- package/js/ln-modal/README.md +185 -154
- package/js/ln-modal/ln-modal-dev.scss +13 -0
- package/js/ln-modal/ln-modal.js +1 -1
- package/js/ln-modal/ln-modal.scss +28 -4
- package/js/ln-modal/src/ln-modal.js +137 -201
- package/js/ln-modal-coordinator/README.md +99 -0
- package/js/ln-modal-coordinator/ln-modal-coordinator-dev.scss +8 -0
- package/js/ln-modal-coordinator/ln-modal-coordinator.js +1 -0
- package/js/ln-modal-coordinator/src/ln-modal-coordinator.js +345 -0
- package/js/ln-nav/README.md +46 -3
- package/js/ln-nav/ln-nav.js +1 -1
- package/js/ln-nav/src/ln-nav.js +92 -127
- package/js/ln-number/README.md +28 -1
- package/js/ln-number/ln-number-dev.scss +13 -0
- package/js/ln-number/ln-number.js +1 -1
- package/js/ln-number/src/ln-number.js +443 -350
- package/js/ln-options/README.md +66 -0
- package/js/ln-options/ln-options.js +1 -0
- package/js/ln-options/src/ln-options.js +74 -0
- package/js/ln-popover/README.md +40 -5
- package/js/ln-popover/ln-popover.js +1 -1
- package/js/ln-popover/src/ln-popover.js +38 -11
- package/js/ln-progress/README.md +413 -442
- package/js/ln-progress/ln-progress.js +1 -1
- package/js/ln-progress/src/ln-progress.js +98 -150
- package/js/ln-router/README.md +432 -0
- package/js/ln-router/ln-router.js +1 -0
- package/js/ln-router/src/ln-router.js +539 -0
- package/js/ln-search/README.md +158 -83
- package/js/ln-search/ln-search-dev.scss +8 -0
- package/js/ln-search/ln-search.js +1 -1
- package/js/ln-search/src/ln-search.js +12 -9
- package/js/ln-slug/README.md +110 -0
- package/js/ln-slug/ln-slug.js +1 -0
- package/js/ln-slug/src/ln-slug.js +74 -0
- package/js/ln-sort/README.md +170 -0
- package/js/ln-sort/ln-sort-dev.scss +8 -0
- package/js/ln-sort/ln-sort.js +1 -0
- package/js/ln-sort/src/ln-sort.js +178 -0
- package/js/ln-sortable/README.md +133 -95
- package/js/ln-sortable/ln-sortable.js +1 -1
- package/js/ln-stat/README.md +55 -0
- package/js/ln-stat/ln-stat.js +1 -0
- package/js/ln-stat/src/ln-stat.js +55 -0
- package/js/ln-table/README.md +285 -101
- package/js/ln-table/ln-table-dev.scss +17 -0
- package/js/ln-table/ln-table.js +1 -1
- package/js/ln-table/ln-table.scss +1 -1
- package/js/ln-table/src/ln-table.js +1493 -473
- package/js/ln-table-coordinator/README.md +73 -0
- package/js/ln-table-coordinator/ln-table-coordinator.js +1 -0
- package/js/ln-table-coordinator/src/ln-table-coordinator.js +160 -0
- package/js/ln-tabs/README.md +221 -137
- package/js/ln-tabs/ln-tabs-dev.scss +18 -0
- package/js/ln-tabs/ln-tabs.js +1 -1
- package/js/ln-tabs/src/ln-tabs.js +41 -24
- package/js/ln-time/README.md +14 -0
- package/js/ln-time/ln-time.js +1 -1
- package/js/ln-time/src/ln-time.js +223 -192
- package/js/ln-toast/README.md +178 -122
- package/js/ln-toast/ln-toast.js +1 -15
- package/js/ln-toast/src/ln-toast.js +232 -210
- package/js/ln-toast/template.html +16 -12
- package/js/ln-toggle/README.md +61 -2
- package/js/ln-toggle/ln-toggle-dev.scss +13 -0
- package/js/ln-toggle/ln-toggle.js +1 -1
- package/js/ln-toggle/src/ln-toggle.js +56 -43
- package/js/ln-tooltip/README.md +95 -58
- package/js/ln-tooltip/ln-tooltip-dev.scss +9 -0
- package/js/ln-tooltip/ln-tooltip.js +1 -1
- package/js/ln-tooltip/src/ln-tooltip.js +45 -6
- package/js/ln-translations/README.md +118 -96
- package/js/ln-translations/ln-translations.js +1 -1
- package/js/ln-translations/src/ln-translations.js +10 -5
- package/js/ln-upload/README.md +85 -10
- package/js/ln-upload/ln-upload.js +1 -1
- package/js/ln-upload/src/ln-upload.js +26 -10
- package/js/ln-validate/README.md +72 -0
- package/js/ln-validate/ln-validate-dev.scss +15 -0
- package/js/ln-validate/ln-validate.js +1 -1
- package/js/ln-validate/src/ln-validate.js +64 -0
- package/package.json +61 -56
- package/scss/base/_global.scss +2 -2
- package/scss/base/_typography.scss +1 -2
- package/scss/components/_date.scss +1 -0
- package/scss/components/_dropdown.scss +0 -5
- package/scss/components/_editor.scss +5 -0
- package/scss/components/_filter.scss +26 -25
- package/scss/components/_form.scss +7 -0
- package/scss/components/_ln-table.scss +13 -3
- package/scss/components/_sort.scss +10 -0
- package/scss/components/_table.scss +36 -23
- package/scss/components/_toast.scss +68 -41
- package/scss/components/_toggle.scss +16 -0
- package/scss/config/_density.scss +205 -117
- package/scss/config/_icons.scss +10 -9
- package/scss/config/_tokens.scss +69 -47
- package/scss/config/mixins/_accordion.scss +2 -7
- package/scss/config/mixins/_alert.scss +4 -4
- package/scss/config/mixins/_breadcrumbs.scss +2 -2
- package/scss/config/mixins/_btn.scss +1 -1
- package/scss/config/mixins/_card.scss +89 -14
- package/scss/config/mixins/_collapsible.scss +3 -0
- package/scss/config/mixins/_colors.scss +1 -1
- package/scss/config/mixins/_diagnostics.scss +11 -0
- package/scss/config/mixins/_display.scss +1 -0
- package/scss/config/mixins/_dropdown.scss +3 -5
- package/scss/config/mixins/_editor.scss +124 -0
- package/scss/config/mixins/_empty-state.scss +7 -0
- package/scss/config/mixins/_filter.scss +3 -5
- package/scss/config/mixins/_footer.scss +1 -2
- package/scss/config/mixins/_form.scss +207 -21
- package/scss/config/mixins/_index.scss +2 -0
- package/scss/config/mixins/_ln-table.scss +41 -2
- package/scss/config/mixins/_modal.scss +149 -66
- package/scss/config/mixins/_nav.scss +3 -4
- package/scss/config/mixins/_popover.scss +39 -0
- package/scss/config/mixins/_sidebar.scss +1 -1
- package/scss/config/mixins/_sort.scss +42 -0
- package/scss/config/mixins/_table.scss +85 -60
- package/scss/config/mixins/_toast.scss +179 -152
- package/scss/config/mixins/_tooltip.scss +17 -7
- package/scss/config/mixins/_typography.scss +4 -2
- package/scss/ln-ashlar-dev.scss +27 -9
- package/scss/ln-ashlar.scss +7 -1
- package/js/ln-data-table/README.md +0 -110
- package/js/ln-data-table/ln-data-table.js +0 -1
- package/js/ln-data-table/ln-data-table.scss +0 -10
- package/js/ln-data-table/src/ln-data-table.js +0 -1087
- package/js/ln-icons/README.md +0 -88
- package/js/ln-icons/ln-icons.js +0 -1
- package/js/ln-table/ln-table-sort.js +0 -1
- package/js/ln-table/src/ln-table-sort.js +0 -156
package/js/ln-date/README.md
CHANGED
|
@@ -8,7 +8,18 @@ Locale-aware date formatting with native browser picker.
|
|
|
8
8
|
<input type="date" name="birthday" data-ln-date>
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
On initialization, the component wraps the original input in a `<span data-ln-date-field>` container and injects a visible text input, a hidden native date picker, a hidden form-submit input, and a calendar button
|
|
11
|
+
On initialization, the component wraps the original input in a `<span data-ln-date-field>` container and injects a visible text input, a hidden native date picker, a hidden form-submit input, and a calendar button:
|
|
12
|
+
|
|
13
|
+
```html
|
|
14
|
+
<span data-ln-date-field>
|
|
15
|
+
<input type="text" data-ln-date>
|
|
16
|
+
<input type="date" tabindex="-1" style="position:absolute;opacity:0;width:0;height:0;overflow:hidden;pointer-events:none">
|
|
17
|
+
<input type="hidden" name="birthday" value="2026-04-19">
|
|
18
|
+
<button type="button" aria-label="Open date picker">
|
|
19
|
+
<svg class="ln-icon" aria-hidden="true"><use href="#ln-icon-calendar"></use></svg>
|
|
20
|
+
</button>
|
|
21
|
+
</span>
|
|
22
|
+
```
|
|
12
23
|
|
|
13
24
|
## Styling
|
|
14
25
|
|
|
@@ -49,6 +60,7 @@ The hidden input holds the ISO date string (YYYY-MM-DD) for form submission.
|
|
|
49
60
|
| Attribute | On | Description |
|
|
50
61
|
|-----------|-----|-------------|
|
|
51
62
|
| `data-ln-date` | `<input>` | Enables date formatting. Value = format (keyword or pattern). Default: `medium` |
|
|
63
|
+
| `data-ln-date-label` | `<input>` | Optional. Translated `aria-label` for the injected calendar button. Default: `Open date picker` (dev fallback only). |
|
|
52
64
|
|
|
53
65
|
### Format Keywords (locale-aware via Intl.DateTimeFormat)
|
|
54
66
|
|
|
@@ -159,3 +171,29 @@ If you only need date-formatting functionality without the rest of the Ashlar li
|
|
|
159
171
|
### 3. Source & Reference
|
|
160
172
|
* **Active Development Source**: [js/ln-date/src/ln-date.js](file:///c:/laragon/www/ln-ashlar/js/ln-date/src/ln-date.js) — The source of truth containing the ES module implementation.
|
|
161
173
|
* **Compiled Standalone Release**: [js/ln-date/ln-date.js](file:///c:/laragon/www/ln-ashlar/js/ln-date/ln-date.js) — The compiled IIFE distribution file.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## 🔧 Internals
|
|
178
|
+
|
|
179
|
+
Source: `js/ln-date/ln-date.js`. Each `[data-ln-date]` gets a `_component` instance at `element.lnDate` (`dom` visible input, `_wrapper`, `_hidden` form input, `_picker` hidden native date input, `_btn` calendar button, `_lastISO` — the last known valid ISO value, used to revert on invalid typed input).
|
|
180
|
+
|
|
181
|
+
### Format resolution
|
|
182
|
+
|
|
183
|
+
`data-ln-date`'s value is read once: empty or a keyword match (`short`, `medium`, `long`, and the `datetime` variants) resolves to `Intl.DateTimeFormat`; anything else is treated as a custom ICU-style token pattern with locale-aware month names. Formatters are cached at `_formatters[locale + '|' + JSON.stringify(options)]` — one entry per unique locale+options combo, same caching pattern as `ln-number`/`ln-time`.
|
|
184
|
+
|
|
185
|
+
### Value flow (picker)
|
|
186
|
+
|
|
187
|
+
Calendar button click → `picker.showPicker()` (falls back to `picker.click()` if `showPicker()` throws — it requires a user gesture — or isn't supported) → user selects in the native picker → `change` fires on the hidden date input → `picker.value` (ISO) is read, written to the hidden form input directly (bypassing the interceptor, see below), formatted via `Intl`/custom pattern, and the display input + `ln-date:change` follow.
|
|
188
|
+
|
|
189
|
+
### Programmatic set (interceptor)
|
|
190
|
+
|
|
191
|
+
`hidden.value` is wrapped via `Object.defineProperty`, same pattern as `ln-number`: a `populateForm()`-style set parses the ISO string, updates the display formatting, and syncs `picker.value` to keep the native picker's own state consistent with a script-driven change.
|
|
192
|
+
|
|
193
|
+
### Typed input flow
|
|
194
|
+
|
|
195
|
+
On blur: empty → clear + dispatch; unchanged from the current formatted display → no-op; otherwise `_parseTyped(text)` branches on the separator (`.` → `dd.MM.yyyy`, `/` → `MM/dd/yyyy`, `-` → ISO or `dd-MM-yyyy` depending on which part is 4 digits) and two-digit years resolve 00–49→2000s, 50–99→1900s. A valid parse updates hidden + picker + display and dispatches `ln-date:change`; an invalid parse reverts the display to `_lastISO`'s formatted value.
|
|
196
|
+
|
|
197
|
+
### Observers
|
|
198
|
+
|
|
199
|
+
A shared `document.body` `MutationObserver` auto-initializes new `[data-ln-date]` elements (`childList`) and re-initializes on `data-ln-date` attribute addition (`attributes`). A separate observer on `document.documentElement` watches `lang` and re-formats every active instance when it changes.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
@use '../../scss/config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
[data-ln-debug] {
|
|
4
|
+
// 1. Date element misuse: data-ln-date belongs on <input>, <span>, <time>, or <td>
|
|
5
|
+
[data-ln-date]:not(input, span, time, td, p, div, b, strong, data) {
|
|
6
|
+
@include dev-inline-error("data-ln-date belongs on <input>, <span>, <time>, or <td>");
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// 2. Date input missing ID: input[data-ln-date] must have an id for proper labeling/association
|
|
10
|
+
input[data-ln-date]:not([id]) {
|
|
11
|
+
@include dev-inline-error("data-ln-date is missing required 'id' attribute");
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
package/js/ln-date/ln-date.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(){"use strict";function _(r,i,p){r.dispatchEvent(new CustomEvent(i,{bubbles:!0,detail:p||{}}))}function A(r,i){if(!document.body){document.addEventListener("DOMContentLoaded",function(){A(r,i)}),console.warn("["+i+'] Script loaded before <body> — add "defer" to your <script> tag');return}r()}function C(r,i,p,c){if(r.nodeType!==1)return;const S=i.indexOf("[")!==-1||i.indexOf(".")!==-1||i.indexOf("#")!==-1?i:"["+i+"]",M=Array.from(r.querySelectorAll(S));r.matches&&r.matches(S)&&M.push(r);for(const v of M)v[p]||(v[p]=new c(v))}function x(r){const i=r.closest("[lang]");return(i?i.lang:null)||navigator.language}function P(r,i,{get:p,set:c}){Object.defineProperty(r,"value",{get:function(){return p?p.call(this):i.get.call(this)},set:function(b){c?c.call(this,b,S=>i.set.call(this,S)):i.set.call(this,b)},configurable:!0})}function L(r,i,p,c,b={}){const S=b.extraAttributes||[],M=b.onAttributeChange||null,v=b.onInit||null;function I(E){const m=E||document.body;C(m,r,i,p),v&&v(m)}return A(function(){const E=new MutationObserver(function(g){for(let w=0;w<g.length;w++){const y=g[w];if(y.type==="childList"){for(let t=0;t<y.addedNodes.length;t++){const e=y.addedNodes[t];e.nodeType===1&&(C(e,r,i,p),v&&v(e))}for(let t=0;t<y.removedNodes.length;t++){const e=y.removedNodes[t];if(e.nodeType===1){const s=r.indexOf("[")!==-1||r.indexOf(".")!==-1||r.indexOf("#")!==-1?r:"["+r+"]",u=Array.from(e.querySelectorAll(s));e.matches&&e.matches(s)&&u.push(e);for(let d=0;d<u.length;d++){const o=u[d];if(!document.contains(o)){const f=o[i];f&&typeof f.destroy=="function"&&f.destroy()}}}}}else y.type==="attributes"&&(M&&y.target[i]?M(y.target,y.attributeName):(C(y.target,r,i,p),v&&v(y.target)))}});let m=[];if(r.indexOf("[")!==-1){const g=/\[([\w-]+)/g;let w;for(;(w=g.exec(r))!==null;)m.push(w[1])}else m.push(r);E.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:m.concat(S)})},c),window[i]=I,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){I(document.body)}):I(document.body),I}const F={};function R(r,i){F[r]=i}function T(r){return F[r]||{ingress:i=>i,egress:i=>i}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=R,window.lnCore.getDataMapper=T),(function(){const r="data-ln-date",i="lnDate";if(window[i]!==void 0)return;const p={},c=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value");function b(t,e){const a=t+"|"+JSON.stringify(e);return p[a]||(p[a]=new Intl.DateTimeFormat(t,e)),p[a]}const S=/^(short|medium|long)(\s+datetime)?$/,M={short:{dateStyle:"short"},medium:{dateStyle:"medium"},long:{dateStyle:"long"},"short datetime":{dateStyle:"short",timeStyle:"short"},"medium datetime":{dateStyle:"medium",timeStyle:"short"},"long datetime":{dateStyle:"long",timeStyle:"short"}};function v(t){return!t||t===""?{dateStyle:"medium"}:t.match(S)?M[t]:null}function I(t,e,a){const s=t.getDate(),u=t.getMonth(),d=t.getFullYear(),o=t.getHours(),f=t.getMinutes(),n={yyyy:String(d),yy:String(d).slice(-2),MMMM:b(a,{month:"long"}).format(t),MMM:b(a,{month:"short"}).format(t),MM:String(u+1).padStart(2,"0"),M:String(u+1),dd:String(s).padStart(2,"0"),d:String(s),HH:String(o).padStart(2,"0"),mm:String(f).padStart(2,"0")};return e.replace(/yyyy|yy|MMMM|MMM|MM|M|dd|d|HH|mm/g,function(l){return n[l]})}function E(t,e,a){const s=v(e);return s?b(a,s).format(t):I(t,e,a)}function m(t){if(t.tagName!=="INPUT")return console.warn("[ln-date] Can only be applied to <input>, got:",t.tagName),this;if(t[i])return t[i];t[i]=this,this.dom=t;const e=this,a=t.value,s=t.name,u=document.createElement("span");u.setAttribute("data-ln-date-field",""),t.parentNode.insertBefore(u,t),u.appendChild(t),this._wrapper=u;const d=document.createElement("input");d.type="hidden",d.name=s,t.removeAttribute("name"),t.insertAdjacentElement("afterend",d),this._hidden=d;const o=document.createElement("input");o.type="date",o.tabIndex=-1,o.style.cssText="position:absolute;opacity:0;width:0;height:0;overflow:hidden;pointer-events:none",d.insertAdjacentElement("afterend",o),this._picker=o,t.type="text";const f=document.createElement("button");if(f.type="button",f.setAttribute("aria-label","Open date picker"),f.innerHTML='<svg class="ln-icon" aria-hidden="true"><use href="#ln-calendar"></use></svg>',o.insertAdjacentElement("afterend",f),this._btn=f,this._lastISO="",Object.defineProperty(d,"value",{get:function(){return c.get.call(d)},set:function(n){if(c.set.call(d,n),n&&n!==""){const l=g(n);l&&(e._displayFormatted(l),c.set.call(o,n),e._lastISO=n,_(e.dom,"ln-date:change",{value:n,formatted:e.dom.value,date:l}),e.dom.dispatchEvent(new Event("change",{bubbles:!0})))}else n===""&&(e.dom.value="",c.set.call(o,""),e._lastISO="",_(e.dom,"ln-date:change",{value:"",formatted:"",date:null}),e.dom.dispatchEvent(new Event("change",{bubbles:!0})))}}),P(t,c,{get:function(){return c.get.call(t)},set:function(n,l){if(e._isFormatting){l(n);return}if(!n||n===""){l(""),e._setHiddenRaw(""),c.set.call(e._picker,""),e._lastISO="",_(t,"ln-date:change",{value:"",formatted:"",date:null}),t.dispatchEvent(new Event("change",{bubbles:!0}));return}let h=g(n);if(h||(h=w(n)),h){const k=h.getFullYear(),D=String(h.getMonth()+1).padStart(2,"0"),O=String(h.getDate()).padStart(2,"0"),N=k+"-"+D+"-"+O;e._setHiddenRaw(N),c.set.call(e._picker,N),e._lastISO=N;const B=t.getAttribute(r)||"",Y=x(t),H=E(h,B,Y);l(H),_(t,"ln-date:change",{value:N,formatted:H,date:h}),t.dispatchEvent(new Event("change",{bubbles:!0}))}else l(String(n)),e._setHiddenRaw(""),c.set.call(e._picker,""),e._lastISO="",_(t,"ln-date:change",{value:"",formatted:String(n),date:null}),t.dispatchEvent(new Event("change",{bubbles:!0}))}}),this._onPickerChange=function(){const n=o.value;if(n){const l=g(n);l&&(e._setHiddenRaw(n),e._displayFormatted(l),e._lastISO=n,_(e.dom,"ln-date:change",{value:n,formatted:e.dom.value,date:l}))}else e._setHiddenRaw(""),e.dom.value="",e._lastISO="",_(e.dom,"ln-date:change",{value:"",formatted:"",date:null})},o.addEventListener("change",this._onPickerChange),this._onBlur=function(){const n=e.dom.value.trim();if(n===""){e._lastISO!==""&&(e._setHiddenRaw(""),c.set.call(e._picker,""),e.dom.value="",e._lastISO="",_(e.dom,"ln-date:change",{value:"",formatted:"",date:null}));return}if(e._lastISO){const h=g(e._lastISO);if(h){const k=e.dom.getAttribute(r)||"",D=x(e.dom),O=E(h,k,D);if(n===O)return}}const l=w(n);if(l){const h=l.getFullYear(),k=String(l.getMonth()+1).padStart(2,"0"),D=String(l.getDate()).padStart(2,"0"),O=h+"-"+k+"-"+D;e._setHiddenRaw(O),c.set.call(e._picker,O),e._displayFormatted(l),e._lastISO=O,_(e.dom,"ln-date:change",{value:O,formatted:e.dom.value,date:l})}else if(e._lastISO){const h=g(e._lastISO);h&&e._displayFormatted(h)}else e.dom.value=""},t.addEventListener("blur",this._onBlur),this._onBtnClick=function(){e._openPicker()},f.addEventListener("click",this._onBtnClick),a&&a!==""){const n=g(a);n&&(this._setHiddenRaw(a),c.set.call(o,a),this._displayFormatted(n),this._lastISO=a,_(t,"ln-date:change",{value:a,formatted:t.value,date:n}),t.dispatchEvent(new Event("change",{bubbles:!0})))}return this}function g(t){if(!t||typeof t!="string")return null;const e=t.split("T"),a=e[0].split("-");if(a.length<3)return null;const s=parseInt(a[0],10),u=parseInt(a[1],10)-1,d=parseInt(a[2],10);if(isNaN(s)||isNaN(u)||isNaN(d))return null;let o=0,f=0;if(e[1]){const l=e[1].split(":");o=parseInt(l[0],10)||0,f=parseInt(l[1],10)||0}const n=new Date(s,u,d,o,f);return n.getFullYear()!==s||n.getMonth()!==u||n.getDate()!==d?null:n}function w(t){if(!t||typeof t!="string"||(t=t.trim(),t.length<6))return null;let e,a;if(t.indexOf(".")!==-1)e=".",a=t.split(".");else if(t.indexOf("/")!==-1)e="/",a=t.split("/");else if(t.indexOf("-")!==-1)e="-",a=t.split("-");else return null;if(a.length!==3)return null;const s=[];for(let n=0;n<3;n++){const l=parseInt(a[n],10);if(isNaN(l))return null;s.push(l)}let u,d,o;e==="."?(u=s[0],d=s[1],o=s[2]):e==="/"?(d=s[0],u=s[1],o=s[2]):a[0].length===4?(o=s[0],d=s[1],u=s[2]):(u=s[0],d=s[1],o=s[2]),o<100&&(o+=o<50?2e3:1900);const f=new Date(o,d-1,u);return f.getFullYear()!==o||f.getMonth()!==d-1||f.getDate()!==u?null:f}m.prototype._openPicker=function(){if(typeof this._picker.showPicker=="function")try{this._picker.showPicker()}catch{this._picker.click()}else this._picker.click()},m.prototype._setHiddenRaw=function(t){c.set.call(this._hidden,t)},m.prototype._displayFormatted=function(t){const e=this.dom.getAttribute(r)||"",a=x(this.dom);this._isFormatting=!0,this.dom.value=E(t,e,a),this._isFormatting=!1},Object.defineProperty(m.prototype,"value",{get:function(){return c.get.call(this._hidden)},set:function(t){if(!t||t===""){this._setHiddenRaw(""),c.set.call(this._picker,""),this.dom.value="",this._lastISO="";return}const e=g(t);e&&(this._setHiddenRaw(t),c.set.call(this._picker,t),this._displayFormatted(e),this._lastISO=t,_(this.dom,"ln-date:change",{value:t,formatted:this.dom.value,date:e}))}}),Object.defineProperty(m.prototype,"date",{get:function(){const t=this.value;return t?g(t):null},set:function(t){if(!t||!(t instanceof Date)||isNaN(t.getTime())){this.value="";return}const e=t.getFullYear(),a=String(t.getMonth()+1).padStart(2,"0"),s=String(t.getDate()).padStart(2,"0");this.value=e+"-"+a+"-"+s}}),Object.defineProperty(m.prototype,"formatted",{get:function(){return this.dom.value}}),m.prototype.destroy=function(){if(!this.dom[i])return;this._picker.removeEventListener("change",this._onPickerChange),this.dom.removeEventListener("blur",this._onBlur),this._btn.removeEventListener("click",this._onBtnClick),this.dom.name=this._hidden.name,this.dom.type="date";const t=this.value;this._hidden.remove(),this._picker.remove(),this._btn.remove(),this._wrapper&&this._wrapper.parentNode&&(this._wrapper.parentNode.insertBefore(this.dom,this._wrapper),this._wrapper.remove()),t&&(this.dom.value=t),_(this.dom,"ln-date:destroyed",{target:this.dom}),delete this.dom[i]};function y(){new MutationObserver(function(){const t=document.querySelectorAll("["+r+"]");for(let e=0;e<t.length;e++){const a=t[e][i];if(a&&a.value){const s=g(a.value);s&&a._displayFormatted(s)}}}).observe(document.documentElement,{attributes:!0,attributeFilter:["lang"]})}L(r,i,m,"ln-date"),y()})()})();
|
|
1
|
+
(function(){"use strict";if(typeof window<"u"){const e=console.warn;console.warn=function(...n){typeof n[0]=="string"&&(n[0].startsWith("[ln-")||n[0].startsWith("[lnCore"))&&!(document.documentElement.hasAttribute("data-ln-debug")||document.body&&document.body.hasAttribute("data-ln-debug"))||e.apply(console,n)}}const F={};function X(e,n){F[e]||(F[e]=document.querySelector('[data-ln-template="'+e+'"]'));const r=F[e];return r?r.content.cloneNode(!0):(console.warn("["+(n||"ln-core")+'] Template "'+e+'" not found'),null)}function P(e,n,r){e.dispatchEvent(new CustomEvent(n,{bubbles:!0,detail:r||{}}))}function H(e,n){if(!e||!n)return e;const r=e.querySelectorAll("[data-ln-field]");for(let s=0;s<r.length;s++){const c=r[s],u=c.getAttribute("data-ln-field");n[u]!=null&&(c.textContent=n[u])}const a=e.querySelectorAll("[data-ln-attr]");for(let s=0;s<a.length;s++){const c=a[s],u=c.getAttribute("data-ln-attr").split(",");for(let p=0;p<u.length;p++){const y=u[p].trim().split(":");if(y.length!==2)continue;const S=y[0].trim(),w=y[1].trim();n[w]!=null&&c.setAttribute(S,n[w])}}const f=e.querySelectorAll("[data-ln-show]");for(let s=0;s<f.length;s++){const c=f[s],u=c.getAttribute("data-ln-show");u in n&&c.classList.toggle("hidden",!n[u])}const m=e.querySelectorAll("[data-ln-class]");for(let s=0;s<m.length;s++){const c=m[s],u=c.getAttribute("data-ln-class").split(",");for(let p=0;p<u.length;p++){const y=u[p].trim().split(":");if(y.length!==2)continue;const S=y[0].trim(),w=y[1].trim();w in n&&c.classList.toggle(S,!!n[w])}}return e}function $(e,n){e.matches&&e.matches("[data-ln-form], [data-ln-fillable]")&&e.dispatchEvent(new CustomEvent("ln-fill",{detail:n??null,bubbles:!0}));const r=e.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let a=0;a<r.length;a++)r[a].dispatchEvent(new CustomEvent("ln-fill",{detail:n??null,bubbles:!0}));return e}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(e){if(!(!e.target.matches||!e.target.matches("[data-ln-fillable]")))if(e.detail)H(e.target,e.detail);else{const n=e.target.querySelectorAll("[data-ln-field]");for(let r=0;r<n.length;r++)n[r].textContent=""}})));function W(e,n){if(!e||!n)return e;const r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;r.nextNode();){const m=r.currentNode;m.textContent.indexOf("{{")!==-1&&(m.textContent=m.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(s,c){return n[c]!==void 0?n[c]:""}))}const a=function(m,s){return n[s]!==void 0?n[s]:""},f=Array.from(e.querySelectorAll("*"));e.nodeType===1&&f.push(e);for(let m=0;m<f.length;m++){const s=f[m],c=s.attributes;for(let u=0;u<c.length;u++){const p=c[u];p.value.indexOf("{{")!==-1&&s.setAttribute(p.name,p.value.replace(/\{\{\s*(\w+)\s*\}\}/g,a))}}return e}function z(e,n,r,a,f,m){const s={};for(let u=0;u<e.children.length;u++){const p=e.children[u],y=p.getAttribute("data-ln-key");y&&(s[y]=p)}const c=document.createDocumentFragment();for(let u=0;u<n.length;u++){const p=n[u],y=String(a(p));let S=s[y];if(S)f(S,p,u);else{const w=X(r,m);if(!w||(W(w,p),S=w.firstElementChild,!S))continue;S.setAttribute("data-ln-key",y),f(S,p,u)}c.appendChild(S)}e.textContent="",e.appendChild(c)}function K(e,n){if(!document.body){document.addEventListener("DOMContentLoaded",function(){K(e,n)}),console.warn("["+n+'] Script loaded before <body> — add "defer" to your <script> tag');return}e()}function Q(e,n){const r={},a=e.querySelectorAll("["+n+"]");for(let f=0;f<a.length;f++)r[a[f].getAttribute(n)]=a[f].textContent,a[f].remove();return r}function q(e,n,r,a){if(e.nodeType!==1)return;const m=n.indexOf("[")!==-1||n.indexOf(".")!==-1||n.indexOf("#")!==-1?n:"["+n+"]",s=Array.from(e.querySelectorAll(m));e.matches&&e.matches(m)&&s.push(e);for(const c of s)c[r]||(c[r]=new a(c))}const U={mk:"mk-MK",de:"de-DE",fr:"fr-FR",es:"es-ES",it:"it-IT",nl:"nl-NL",pt:"pt-PT",ru:"ru-RU",bg:"bg-BG",hr:"hr-HR",sr:"sr-RS",sq:"sq-AL",el:"el-GR",en:"en-US"};function N(e){const n=e?e.closest("[lang]"):null,r=(n?n.getAttribute("lang")||n.lang:null)||(document.documentElement?document.documentElement.getAttribute("lang")||document.documentElement.lang:null)||navigator.language;if(!r)return"en-US";const a=r.trim().toLowerCase();return a.indexOf("-")===-1&&U[a]?U[a]:r}function Z(e,n,{get:r,set:a}){Object.defineProperty(e,"value",{get:function(){return r?r.call(this):n.get.call(this)},set:function(f){a?a.call(this,f,m=>n.set.call(this,m)):n.set.call(this,f)},configurable:!0})}function tt(e,n,r,a,f={}){const m=f.extraAttributes||[],s=f.onAttributeChange||null,c=f.onInit||null;function u(p){const y=p||document.body;q(y,e,n,r),c&&c(y)}return K(function(){const p=new MutationObserver(function(S){for(let w=0;w<S.length;w++){const E=S[w];if(E.type==="childList"){for(let k=0;k<E.addedNodes.length;k++){const _=E.addedNodes[k];_.nodeType===1&&(q(_,e,n,r),c&&c(_))}for(let k=0;k<E.removedNodes.length;k++){const _=E.removedNodes[k];if(_.nodeType===1){const D=e.indexOf("[")!==-1||e.indexOf(".")!==-1||e.indexOf("#")!==-1?e:"["+e+"]",t=Array.from(_.querySelectorAll(D));_.matches&&_.matches(D)&&t.push(_);for(let i=0;i<t.length;i++){const o=t[i];if(!document.contains(o)){const l=o[n];l&&typeof l.destroy=="function"&&l.destroy()}}}}}else E.type==="attributes"&&(s&&E.target[n]?s(E.target,E.attributeName):(q(E.target,e,n,r),c&&c(E.target)))}});let y=[];if(e.indexOf("[")!==-1){const S=/\[([\w-]+)/g;let w;for(;(w=S.exec(e))!==null;)y.push(w[1])}else y.push(e);p.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:y.concat(m)})},a),window[n]=u,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){u(document.body)}):u(document.body),u}const Y={};function et(e,n){Y[e]=n}function nt(e){return Y[e]||{ingress:n=>n,egress:n=>n}}const G={};function R(e,n){if(!e||typeof n!="object")return;const r=e.toLowerCase().split("-")[0];G[r]=n}function j(e){if(!e)return null;const n=e.toLowerCase().split("-")[0];return G[n]||null}R("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=et,window.lnCore.getDataMapper=nt,window.lnCore.registerLocaleFallback=R,window.lnCore.getLocaleFallback=j,window.lnCore.fillTemplate=W,window.lnCore.fill=H,window.lnCore.lnFill=$,window.lnCore.renderList=z);function J(e){return(e||"").replace(/^#/,"")}function B(e){const n=e===void 0?location.hash:e,r={},a=J(n);if(!a)return r;const f=a.split("&");for(let m=0;m<f.length;m++){const s=f[m];if(!s)continue;const c=s.indexOf(":"),u=c>-1?s.slice(0,c):s,p=c>-1?s.slice(c+1):"";if(u)try{r[u]=decodeURIComponent(p)}catch{r[u]=p}}return r}function it(e){if(!e)return null;const n=B();return e in n?n[e]:null}function ot(e,n){if(!e)return;const r=B();n==null?delete r[e]:r[e]=String(n);const f=Object.keys(r).map(function(m){const s=r[m];return s===""?m:m+":"+encodeURIComponent(s)}).join("&");J(location.hash)!==f&&(location.hash=f)}function rt(e){return e.button===1||e.ctrlKey||e.metaKey||e.shiftKey?!1:(e.preventDefault(),!0)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=B,window.lnCore.hashGet=it,window.lnCore.hashSet=ot,window.lnCore.hashLinkClick=rt),(function(){const e="data-ln-date",n="lnDate";if(window[n]!==void 0)return;const r={},a=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value");function f(t,i){const o=t+"|"+JSON.stringify(i);return r[o]||(r[o]=new Intl.DateTimeFormat(t,i)),r[o]}const m=/^(short|medium|long)(\s+datetime)?$/,s={short:{dateStyle:"short"},medium:{dateStyle:"medium"},long:{dateStyle:"long"},"short datetime":{dateStyle:"short",timeStyle:"short"},"medium datetime":{dateStyle:"medium",timeStyle:"short"},"long datetime":{dateStyle:"long",timeStyle:"short"}};function c(t){return!t||t===""?{dateStyle:"medium"}:t.match(m)?s[t]:null}function u(t,i,o){const l=t.getDate(),h=t.getMonth(),b=t.getFullYear(),g=t.getHours(),A=t.getMinutes();let C,O;const d=j(o),x=(o||"").toLowerCase().split("-")[0],L=f(o,{month:"long"}).resolvedOptions().locale.toLowerCase().split("-")[0],T=d&&L!==x;T&&d.monthsLong?C=d.monthsLong[h]:C=f(o,{month:"long"}).format(t),T&&d.monthsShort?O=d.monthsShort[h]:O=f(o,{month:"short"}).format(t);const V={yyyy:String(b),yy:String(b).slice(-2),MMMM:C,MMM:O,MM:String(h+1).padStart(2,"0"),M:String(h+1),dd:String(l).padStart(2,"0"),d:String(l),HH:String(g).padStart(2,"0"),mm:String(A).padStart(2,"0")};return i.replace(/yyyy|yy|MMMM|MMM|MM|M|dd|d|HH|mm/g,function(I){return V[I]})}function p(t,i,o){const l=c(i);if(l){const h=f(o,l),b=(o||"").toLowerCase().split("-")[0],g=h.resolvedOptions().locale.toLowerCase().split("-")[0];return j(o)&&g!==b?u(t,"dd.MM.yyyy",o):h.format(t)}return u(t,i,o)}function y(t){if(!t)return"";const i=t.getFullYear(),o=String(t.getMonth()+1).padStart(2,"0"),l=String(t.getDate()).padStart(2,"0");return i+"-"+o+"-"+l}function S(t,i,o){P(t.dom,"ln-date:change",{value:i,formatted:t.dom.value,date:o}),t.dom.dispatchEvent(new Event("change",{bubbles:!0}))}function w(t,i,o,l){t._setHiddenRaw(i),a.set.call(t._picker,i),t._lastISO=i,l!==void 0?(t._isFormatting=!0,t.dom.value=l,t._isFormatting=!1):o&&t._displayFormatted(o),S(t,i,o)}function E(t){t._setHiddenRaw(""),a.set.call(t._picker,""),t._isFormatting=!0,t.dom.value="",t._isFormatting=!1,t._lastISO="",S(t,"",null)}k.prototype._initTextElement=function(){const t=this.dom;let i=t.getAttribute("data-ln-value"),o=t.getAttribute("data-ln-date"),l=t.getAttribute("datetime"),h=null;i!==null&&i!==""?h=i:l!==null&&l!==""?h=l:o!==null&&o!==""&&o!=="true"&&!m.test(o)?h=o:h=t.textContent.trim();let b=_(h)||M(h);if(!b&&h)if(isNaN(h))b=new Date(h);else{const g=Number(h);b=new Date(g>1e11?g:g*1e3)}if(b&&!isNaN(b.getTime())){const g=y(b);this._rawValue=g,t.hasAttribute("data-ln-value")||t.setAttribute("data-ln-value",g),this._formatTextContent()}else this._rawValue=null},k.prototype._formatTextContent=function(){if(this._rawValue){const t=_(this._rawValue);if(t){let o=this.dom.getAttribute("data-ln-date-format");if(!o){const h=this.dom.getAttribute("data-ln-date");h&&m.test(h)&&(o=h)}const l=N(this.dom);this.dom.textContent=p(t,o||"medium",l)}}};function k(t){if(t[n])return t[n];if(t[n]=this,this.dom=t,t.tagName!=="INPUT")return this.isTextElement=!0,this._initTextElement(),this;this.isTextElement=!1;const i=this,o=t.value,l=t.name,b=(t.closest(".form-element, form")||t.parentNode).querySelectorAll("[data-ln-date-dict]");for(let d=0;d<b.length;d++){const x=b[d].getAttribute("data-ln-date-dict");if(x){const v=Q(b[d],"data-ln-date-dict-key");v["months-long"]&&(v.monthsLong=v["months-long"].split(",").map(L=>L.trim())),v["months-short"]&&(v.monthsShort=v["months-short"].split(",").map(L=>L.trim())),R(x,v)}}const g=document.createElement("span");g.setAttribute("data-ln-date-field",""),t.parentNode.insertBefore(g,t),g.appendChild(t),this._wrapper=g;const A=document.createElement("input");A.type="hidden",A.name=l,t.removeAttribute("name"),t.hasAttribute("data-ln-fill-as")&&A.setAttribute("data-ln-fill-as",t.getAttribute("data-ln-fill-as")),t.insertAdjacentElement("afterend",A),this._hidden=A;const C=document.createElement("input");C.type="date",C.tabIndex=-1,C.style.cssText="position:absolute;opacity:0;width:0;height:0;overflow:hidden;pointer-events:none",A.insertAdjacentElement("afterend",C),this._picker=C,t.type="text";const O=document.createElement("button");if(O.type="button",O.setAttribute("aria-label",t.getAttribute("data-ln-date-label")||"Open date picker"),O.innerHTML='<svg class="ln-icon" aria-hidden="true"><use href="#ln-icon-calendar"></use></svg>',C.insertAdjacentElement("afterend",O),this._btn=O,this._lastISO="",Object.defineProperty(A,"value",{get:function(){return a.get.call(A)},set:function(d){if(a.set.call(A,d),d&&d!==""){const x=_(d);x&&w(i,d,x)}else d===""&&E(i)}}),Z(t,a,{get:function(){return a.get.call(t)},set:function(d,x){if(i._isFormatting){x(d);return}if(!d||d===""){x(""),E(i);return}const v=_(d)||M(d);if(v){const L=y(v),T=t.getAttribute(e)||"",V=N(t),I=p(v,T,V);x(I),w(i,L,v,I)}else x(String(d)),E(i)}}),this._onPickerChange=function(){const d=C.value;if(d){const x=_(d);x&&w(i,d,x)}else E(i)},C.addEventListener("change",this._onPickerChange),this._onBlur=function(){const d=i.dom.value.trim();if(d===""){i._lastISO!==""&&E(i);return}if(i._lastISO){const v=_(i._lastISO);if(v){const L=i.dom.getAttribute(e)||"",T=N(i.dom);if(d===p(v,L,T))return}}const x=M(d);if(x){const v=y(x);w(i,v,x)}else if(i._lastISO){const v=_(i._lastISO);v&&i._displayFormatted(v)}else i.dom.value=""},t.addEventListener("blur",this._onBlur),this._onBtnClick=function(){i._openPicker()},O.addEventListener("click",this._onBtnClick),o&&o!==""){const d=_(o);d&&w(i,o,d)}return this}function _(t){if(!t||typeof t!="string")return null;const i=t.split("T"),o=i[0].split("-");if(o.length<3)return null;const l=parseInt(o[0],10),h=parseInt(o[1],10)-1,b=parseInt(o[2],10);if(isNaN(l)||isNaN(h)||isNaN(b))return null;let g=0,A=0;if(i[1]){const O=i[1].split(":");g=parseInt(O[0],10)||0,A=parseInt(O[1],10)||0}const C=new Date(l,h,b,g,A);return C.getFullYear()!==l||C.getMonth()!==h||C.getDate()!==b?null:C}function M(t){if(!t||typeof t!="string"||(t=t.trim(),t.length<6))return null;let i,o;if(t.indexOf(".")!==-1)i=".",o=t.split(".");else if(t.indexOf("/")!==-1)i="/",o=t.split("/");else if(t.indexOf("-")!==-1)i="-",o=t.split("-");else return null;if(o.length!==3)return null;const l=[];for(let C=0;C<3;C++){const O=parseInt(o[C],10);if(isNaN(O))return null;l.push(O)}let h,b,g;i==="."?(h=l[0],b=l[1],g=l[2]):i==="/"?(b=l[0],h=l[1],g=l[2]):o[0].length===4?(g=l[0],b=l[1],h=l[2]):(h=l[0],b=l[1],g=l[2]),g<100&&(g+=g<50?2e3:1900);const A=new Date(g,b-1,h);return A.getFullYear()!==g||A.getMonth()!==b-1||A.getDate()!==h?null:A}k.prototype._openPicker=function(){if(typeof this._picker.showPicker=="function")try{this._picker.showPicker()}catch{this._picker.click()}else this._picker.click()},k.prototype._setHiddenRaw=function(t){a.set.call(this._hidden,t)},k.prototype._displayFormatted=function(t){const i=this.dom.getAttribute(e)||"",o=N(this.dom);this._isFormatting=!0,this.dom.value=p(t,i,o),this._isFormatting=!1},Object.defineProperty(k.prototype,"value",{get:function(){return this.isTextElement?this._rawValue||"":a.get.call(this._hidden)},set:function(t){if(this.isTextElement){if(!t||t===""){this._rawValue=null,this.dom.removeAttribute("data-ln-value"),this.dom.textContent="";return}const o=_(t)||M(t);if(!o)return;const l=y(o);this._rawValue=l,this.dom.setAttribute("data-ln-value",l),this._formatTextContent();return}if(!t||t===""){E(this);return}const i=_(t);i&&w(this,t,i)}}),Object.defineProperty(k.prototype,"date",{get:function(){const t=this.value;return t?_(t):null},set:function(t){if(!t||!(t instanceof Date)||isNaN(t.getTime())){this.value="";return}this.value=y(t)}}),Object.defineProperty(k.prototype,"formatted",{get:function(){return this.isTextElement?this.dom.textContent:this.dom.value}}),k.prototype.destroy=function(){if(!this.dom[n])return;if(this.isTextElement){P(this.dom,"ln-date:destroyed",{target:this.dom}),delete this.dom[n];return}this._picker.removeEventListener("change",this._onPickerChange),this.dom.removeEventListener("blur",this._onBlur),this._btn.removeEventListener("click",this._onBtnClick);const t=this.value;this._hidden.remove(),this._picker.remove(),this._btn.remove(),this._wrapper&&this._wrapper.parentNode&&(this._wrapper.parentNode.insertBefore(this.dom,this._wrapper),this._wrapper.remove()),delete this.dom.value,this.dom.name=this._hidden.name,this.dom.type="date",t&&(this.dom.value=t),P(this.dom,"ln-date:destroyed",{target:this.dom}),delete this.dom[n]};function D(){new MutationObserver(function(){const t=document.querySelectorAll("["+e+"]");for(let i=0;i<t.length;i++){const o=t[i][n];if(o){if(o.isTextElement)o._formatTextContent();else if(o.value){const l=_(o.value);l&&o._displayFormatted(l)}}}}).observe(document.documentElement,{attributes:!0,attributeFilter:["lang"],subtree:!0})}tt(e,n,k,"ln-date",{extraAttributes:["data-ln-date-format","data-ln-date-locale","data-ln-value","datetime","lang"],onAttributeChange:function(t){const i=t[n];if(i){if(i.isTextElement)i._initTextElement();else if(i.value){const o=_(i.value);o&&i._displayFormatted(o)}}}}),D()})()})();
|