@livenetworks/ashlar 1.5.1 → 1.6.1

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 (217) hide show
  1. package/README.md +189 -177
  2. package/js/COMPONENTS.md +55 -49
  3. package/js/index.js +22 -5
  4. package/js/ln-accordion/README.md +186 -137
  5. package/js/ln-accordion/ln-accordion.js +1 -1
  6. package/js/ln-ajax/README.md +73 -4
  7. package/js/ln-ajax/ln-ajax.js +1 -1
  8. package/js/ln-ajax/src/ln-ajax.js +13 -13
  9. package/js/ln-api-connector/README.md +261 -150
  10. package/js/ln-api-connector/ln-api-connector.js +1 -1
  11. package/js/ln-api-connector/src/ln-api-connector.js +368 -265
  12. package/js/ln-api-queue/README.md +219 -0
  13. package/js/ln-api-queue/ln-api-queue.js +1 -0
  14. package/js/ln-api-queue/src/ln-api-queue.js +320 -0
  15. package/js/ln-api-queue/src/queue-storage.js +455 -0
  16. package/js/ln-autoresize/README.md +47 -0
  17. package/js/ln-autoresize/ln-autoresize.js +1 -1
  18. package/js/ln-autosave/README.md +33 -1
  19. package/js/ln-autosave/ln-autosave.js +1 -1
  20. package/js/ln-autosave/src/ln-autosave.js +4 -4
  21. package/js/ln-circular-progress/README.md +27 -13
  22. package/js/ln-circular-progress/ln-circular-progress.js +1 -1
  23. package/js/ln-circular-progress/src/ln-circular-progress.js +18 -5
  24. package/js/ln-confirm/README.md +165 -86
  25. package/js/ln-confirm/_ln-confirm.scss +11 -0
  26. package/js/ln-confirm/ln-confirm.js +1 -1
  27. package/js/ln-confirm/src/ln-confirm.js +82 -42
  28. package/js/ln-core/README.md +896 -0
  29. package/js/ln-core/hash.js +92 -0
  30. package/js/ln-core/helpers.js +337 -8
  31. package/js/ln-core/index.js +4 -2
  32. package/js/ln-core/persist.js +29 -3
  33. package/js/ln-core/positioning.js +1 -35
  34. package/js/ln-core/window-cache.js +213 -0
  35. package/js/ln-couchdb-connector/README.md +177 -156
  36. package/js/ln-couchdb-connector/ln-couchdb-connector.js +1 -1
  37. package/js/ln-couchdb-connector/src/ln-couchdb-connector.js +398 -348
  38. package/js/ln-data-coordinator/README.md +536 -165
  39. package/js/ln-data-coordinator/ln-data-coordinator.js +1 -1
  40. package/js/ln-data-coordinator/src/data-read-policy.js +18 -0
  41. package/js/ln-data-coordinator/src/ln-data-coordinator.js +1042 -249
  42. package/js/ln-data-coordinator/src/mutation-receipts.js +46 -0
  43. package/js/ln-data-store/README.md +241 -94
  44. package/js/ln-data-store/ln-data-store.js +1 -1
  45. package/js/ln-data-store/src/ln-data-store.js +694 -699
  46. package/js/ln-date/README.md +39 -1
  47. package/js/ln-date/ln-date-dev.scss +14 -0
  48. package/js/ln-date/ln-date.js +1 -1
  49. package/js/ln-date/src/ln-date.js +236 -178
  50. package/js/ln-debug/README.md +58 -0
  51. package/js/ln-debug/ln-debug.js +1 -0
  52. package/js/ln-debug/src/ln-debug.js +19 -0
  53. package/js/ln-dropdown/README.md +31 -8
  54. package/js/ln-dropdown/ln-dropdown.js +1 -1
  55. package/js/ln-dropdown/src/ln-dropdown.js +30 -13
  56. package/js/ln-editor/README.md +274 -0
  57. package/js/ln-editor/ln-editor.js +1 -0
  58. package/js/ln-editor/ln-editor.scss +43 -0
  59. package/js/ln-editor/src/ln-editor.js +619 -0
  60. package/js/ln-external-links/README.md +44 -5
  61. package/js/ln-external-links/ln-external-links.js +1 -1
  62. package/js/ln-fill/README.md +199 -0
  63. package/js/ln-fill/ln-fill.js +1 -0
  64. package/js/ln-fill/src/ln-fill.js +87 -0
  65. package/js/ln-filter/README.md +92 -2
  66. package/js/ln-filter/ln-filter-dev.scss +8 -0
  67. package/js/ln-filter/ln-filter.js +1 -1
  68. package/js/ln-filter/src/ln-filter.js +22 -7
  69. package/js/ln-form/README.md +212 -49
  70. package/js/ln-form/ln-form.js +1 -1
  71. package/js/ln-form/src/ln-form.js +99 -199
  72. package/js/ln-http/README.md +125 -89
  73. package/js/ln-http/ln-http.js +1 -1
  74. package/js/ln-http/src/ln-http.js +32 -13
  75. package/js/ln-icon/README.md +130 -0
  76. package/js/ln-icon/ln-icon.js +1 -0
  77. package/js/{ln-icons/src/ln-icons.js → ln-icon/src/ln-icon.js} +20 -15
  78. package/js/ln-link/README.md +47 -9
  79. package/js/ln-link/ln-link.js +1 -1
  80. package/js/ln-link/src/ln-link.js +22 -6
  81. package/js/ln-list/README.md +129 -0
  82. package/js/ln-list/ln-list.js +1 -0
  83. package/js/ln-list/ln-list.scss +28 -0
  84. package/js/ln-list/src/ln-list.js +1216 -0
  85. package/js/ln-modal/README.md +185 -154
  86. package/js/ln-modal/ln-modal-dev.scss +13 -0
  87. package/js/ln-modal/ln-modal.js +1 -1
  88. package/js/ln-modal/ln-modal.scss +28 -4
  89. package/js/ln-modal/src/ln-modal.js +137 -201
  90. package/js/ln-modal-coordinator/README.md +99 -0
  91. package/js/ln-modal-coordinator/ln-modal-coordinator-dev.scss +8 -0
  92. package/js/ln-modal-coordinator/ln-modal-coordinator.js +1 -0
  93. package/js/ln-modal-coordinator/src/ln-modal-coordinator.js +345 -0
  94. package/js/ln-nav/README.md +46 -3
  95. package/js/ln-nav/ln-nav.js +1 -1
  96. package/js/ln-nav/src/ln-nav.js +92 -127
  97. package/js/ln-number/README.md +28 -1
  98. package/js/ln-number/ln-number-dev.scss +13 -0
  99. package/js/ln-number/ln-number.js +1 -1
  100. package/js/ln-number/src/ln-number.js +443 -350
  101. package/js/ln-options/README.md +66 -0
  102. package/js/ln-options/ln-options.js +1 -0
  103. package/js/ln-options/src/ln-options.js +74 -0
  104. package/js/ln-popover/README.md +40 -5
  105. package/js/ln-popover/ln-popover.js +1 -1
  106. package/js/ln-popover/src/ln-popover.js +38 -11
  107. package/js/ln-progress/README.md +413 -442
  108. package/js/ln-progress/ln-progress.js +1 -1
  109. package/js/ln-progress/src/ln-progress.js +98 -150
  110. package/js/ln-router/README.md +432 -0
  111. package/js/ln-router/ln-router.js +1 -0
  112. package/js/ln-router/src/ln-router.js +539 -0
  113. package/js/ln-search/README.md +158 -83
  114. package/js/ln-search/ln-search-dev.scss +8 -0
  115. package/js/ln-search/ln-search.js +1 -1
  116. package/js/ln-search/src/ln-search.js +12 -9
  117. package/js/ln-slug/README.md +110 -0
  118. package/js/ln-slug/ln-slug.js +1 -0
  119. package/js/ln-slug/src/ln-slug.js +74 -0
  120. package/js/ln-sort/README.md +170 -0
  121. package/js/ln-sort/ln-sort-dev.scss +8 -0
  122. package/js/ln-sort/ln-sort.js +1 -0
  123. package/js/ln-sort/src/ln-sort.js +178 -0
  124. package/js/ln-sortable/README.md +133 -95
  125. package/js/ln-sortable/ln-sortable.js +1 -1
  126. package/js/ln-stat/README.md +55 -0
  127. package/js/ln-stat/ln-stat.js +1 -0
  128. package/js/ln-stat/src/ln-stat.js +55 -0
  129. package/js/ln-table/README.md +285 -101
  130. package/js/ln-table/ln-table-dev.scss +17 -0
  131. package/js/ln-table/ln-table.js +1 -1
  132. package/js/ln-table/ln-table.scss +1 -1
  133. package/js/ln-table/src/ln-table.js +1493 -473
  134. package/js/ln-table-coordinator/README.md +73 -0
  135. package/js/ln-table-coordinator/ln-table-coordinator.js +1 -0
  136. package/js/ln-table-coordinator/src/ln-table-coordinator.js +160 -0
  137. package/js/ln-tabs/README.md +221 -137
  138. package/js/ln-tabs/ln-tabs-dev.scss +18 -0
  139. package/js/ln-tabs/ln-tabs.js +1 -1
  140. package/js/ln-tabs/src/ln-tabs.js +41 -24
  141. package/js/ln-time/README.md +14 -0
  142. package/js/ln-time/ln-time.js +1 -1
  143. package/js/ln-time/src/ln-time.js +223 -192
  144. package/js/ln-toast/README.md +178 -122
  145. package/js/ln-toast/ln-toast.js +1 -15
  146. package/js/ln-toast/src/ln-toast.js +232 -210
  147. package/js/ln-toast/template.html +16 -12
  148. package/js/ln-toggle/README.md +61 -2
  149. package/js/ln-toggle/ln-toggle-dev.scss +13 -0
  150. package/js/ln-toggle/ln-toggle.js +1 -1
  151. package/js/ln-toggle/src/ln-toggle.js +56 -43
  152. package/js/ln-tooltip/README.md +95 -58
  153. package/js/ln-tooltip/ln-tooltip-dev.scss +9 -0
  154. package/js/ln-tooltip/ln-tooltip.js +1 -1
  155. package/js/ln-tooltip/src/ln-tooltip.js +45 -6
  156. package/js/ln-translations/README.md +118 -96
  157. package/js/ln-translations/ln-translations.js +1 -1
  158. package/js/ln-translations/src/ln-translations.js +10 -5
  159. package/js/ln-upload/README.md +85 -10
  160. package/js/ln-upload/ln-upload.js +1 -1
  161. package/js/ln-upload/src/ln-upload.js +26 -10
  162. package/js/ln-validate/README.md +72 -0
  163. package/js/ln-validate/ln-validate-dev.scss +15 -0
  164. package/js/ln-validate/ln-validate.js +1 -1
  165. package/js/ln-validate/src/ln-validate.js +64 -0
  166. package/package.json +61 -56
  167. package/scss/base/_global.scss +2 -2
  168. package/scss/base/_typography.scss +1 -2
  169. package/scss/components/_date.scss +1 -0
  170. package/scss/components/_dropdown.scss +0 -5
  171. package/scss/components/_editor.scss +5 -0
  172. package/scss/components/_filter.scss +26 -25
  173. package/scss/components/_form.scss +7 -0
  174. package/scss/components/_ln-table.scss +13 -3
  175. package/scss/components/_sort.scss +10 -0
  176. package/scss/components/_table.scss +36 -23
  177. package/scss/components/_toast.scss +68 -41
  178. package/scss/components/_toggle.scss +16 -0
  179. package/scss/config/_density.scss +205 -117
  180. package/scss/config/_icons.scss +10 -9
  181. package/scss/config/_tokens.scss +69 -47
  182. package/scss/config/mixins/_accordion.scss +2 -7
  183. package/scss/config/mixins/_alert.scss +4 -4
  184. package/scss/config/mixins/_breadcrumbs.scss +2 -2
  185. package/scss/config/mixins/_btn.scss +1 -1
  186. package/scss/config/mixins/_card.scss +89 -14
  187. package/scss/config/mixins/_collapsible.scss +3 -0
  188. package/scss/config/mixins/_colors.scss +1 -1
  189. package/scss/config/mixins/_diagnostics.scss +11 -0
  190. package/scss/config/mixins/_display.scss +1 -0
  191. package/scss/config/mixins/_dropdown.scss +3 -5
  192. package/scss/config/mixins/_editor.scss +124 -0
  193. package/scss/config/mixins/_empty-state.scss +7 -0
  194. package/scss/config/mixins/_filter.scss +3 -5
  195. package/scss/config/mixins/_footer.scss +1 -2
  196. package/scss/config/mixins/_form.scss +207 -21
  197. package/scss/config/mixins/_index.scss +2 -0
  198. package/scss/config/mixins/_ln-table.scss +41 -2
  199. package/scss/config/mixins/_modal.scss +149 -66
  200. package/scss/config/mixins/_nav.scss +3 -4
  201. package/scss/config/mixins/_popover.scss +39 -0
  202. package/scss/config/mixins/_sidebar.scss +1 -1
  203. package/scss/config/mixins/_sort.scss +42 -0
  204. package/scss/config/mixins/_table.scss +85 -60
  205. package/scss/config/mixins/_toast.scss +179 -152
  206. package/scss/config/mixins/_tooltip.scss +17 -7
  207. package/scss/config/mixins/_typography.scss +4 -2
  208. package/scss/ln-ashlar-dev.scss +27 -9
  209. package/scss/ln-ashlar.scss +7 -1
  210. package/js/ln-data-table/README.md +0 -110
  211. package/js/ln-data-table/ln-data-table.js +0 -1
  212. package/js/ln-data-table/ln-data-table.scss +0 -10
  213. package/js/ln-data-table/src/ln-data-table.js +0 -1087
  214. package/js/ln-icons/README.md +0 -88
  215. package/js/ln-icons/ln-icons.js +0 -1
  216. package/js/ln-table/ln-table-sort.js +0 -1
  217. package/js/ln-table/src/ln-table-sort.js +0 -156
@@ -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. See [`docs/js/date.md`](../../docs/js/date.md) for the full DOM transform.
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
+
@@ -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()})()})();