@livenetworks/ashlar 1.4.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 +189 -99
- 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 -55
- 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 -0
- package/scss/components/_form.scss +7 -0
- package/scss/components/_ln-table.scss +14 -5
- package/scss/components/_sort.scss +10 -0
- package/scss/components/_table.scss +68 -1
- 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 +48 -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 +47 -0
- package/scss/config/mixins/_footer.scss +1 -2
- package/scss/config/mixins/_form.scss +207 -21
- package/scss/config/mixins/_index.scss +4 -1
- package/scss/config/mixins/_ln-table.scss +51 -93
- 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 +232 -38
- 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 +39 -0
- package/scss/ln-ashlar.scss +8 -2
- 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 -1103
- 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 -168
- package/scss/components/_data-table.scss +0 -83
- package/scss/config/mixins/_data-table.scss +0 -346
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(){"use strict";function C(a,i){if(!document.body){document.addEventListener("DOMContentLoaded",function(){C(a,i)}),console.warn("["+i+'] Script loaded before <body> — add "defer" to your <script> tag');return}a()}function y(a,i,u,p){if(a.nodeType!==1)return;const h=i.indexOf("[")!==-1||i.indexOf(".")!==-1||i.indexOf("#")!==-1?i:"["+i+"]",e=Array.from(a.querySelectorAll(h));a.matches&&a.matches(h)&&e.push(a);for(const n of e)n[u]||(n[u]=new p(n))}function D(a,i,u,p,m={}){const h=m.extraAttributes||[],e=m.onAttributeChange||null,n=m.onInit||null;function t(d){const o=d||document.body;y(o,a,i,u),n&&n(o)}return C(function(){const d=new MutationObserver(function(r){for(let c=0;c<r.length;c++){const s=r[c];if(s.type==="childList"){for(let f=0;f<s.addedNodes.length;f++){const l=s.addedNodes[f];l.nodeType===1&&(y(l,a,i,u),n&&n(l))}for(let f=0;f<s.removedNodes.length;f++){const l=s.removedNodes[f];if(l.nodeType===1){const _=a.indexOf("[")!==-1||a.indexOf(".")!==-1||a.indexOf("#")!==-1?a:"["+a+"]",g=Array.from(l.querySelectorAll(_));l.matches&&l.matches(_)&&g.push(l);for(let b=0;b<g.length;b++){const A=g[b];if(!document.contains(A)){const v=A[i];v&&typeof v.destroy=="function"&&v.destroy()}}}}}else s.type==="attributes"&&(e&&s.target[i]?e(s.target,s.attributeName):(y(s.target,a,i,u),n&&n(s.target)))}});let o=[];if(a.indexOf("[")!==-1){const r=/\[([\w-]+)/g;let c;for(;(c=r.exec(a))!==null;)o.push(c[1])}else o.push(a);d.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:o.concat(h)})},p),window[i]=t,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){t(document.body)}):t(document.body),t}const M={};function E(a,i){M[a]=i}function w(a){return M[a]||{ingress:i=>i,egress:i=>i}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=E,window.lnCore.getDataMapper=w),(function(){const a="data-ln-data-coordinator",i="lnDataCoordinator",u="lnCoordinator";if(window[i]!==void 0)return;function p(e){return this.dom=e,this._name=e.getAttribute(a),e[i]=this,e[u]=this,this.mapper=null,this._handlers=null,this.refreshMapper(),m(this),this}p.prototype.refreshMapper=function(){this.mapper=null,this.dom.querySelector("script[data-ln-mapper]")&&console.error("[ln-data-coordinator] Security Error: Inline script mappers using <script data-ln-mapper> are deprecated and disabled due to XSS vulnerability risks (unsafe-eval). Please register your mappers securely via window.lnCore.registerDataMapper() instead.");const n=this.dom.getAttribute("data-ln-data-mapper")||this.dom.getAttribute("data-ln-data-coordinator");n&&window.lnCore&&typeof window.lnCore.getDataMapper=="function"&&(this.mapper=window.lnCore.getDataMapper(n)),this.mapper||(this.mapper={}),typeof this.mapper.ingress!="function"&&(this.mapper.ingress=function(t){return t}),typeof this.mapper.egress!="function"&&(this.mapper.egress=function(t){return t})},p.prototype.findChildren=function(){const e=this.dom.querySelector("[data-ln-data-store]"),n=this.dom.querySelector("[data-ln-api-connector], [data-ln-couchdb-connector], [data-ln-websocket-connector], [data-ln-rest-connector]");return{storeEl:e,connectorEl:n,store:e?e.lnDataStore||e.lnStore:null,connector:n?n.lnConnector||n.lnApiConnector||n.lnCouchDbConnector:null}};function m(e){e._handlers={sync:function(n){e.refreshMapper();const t=e.findChildren();if(!t.store||!t.connector){console.warn("[ln-data-coordinator] Cannot sync: store or connector not found in subtree");return}const d=n.detail.since;t.connector.fetchDelta(d).then(function(o){let r=[],c=[],s=null;o&&Array.isArray(o)?(r=o,s=Math.floor(Date.now()/1e3)):o&&(r=Array.isArray(o.data)?o.data:[],c=Array.isArray(o.deleted)?o.deleted:[],s=o.synced_at!==void 0?o.synced_at:o.since!==void 0?o.since:null);const f=r.map(l=>e.mapper.ingress(l));t.store.applySync(f,c,s)}).catch(function(o){console.error("[ln-data-coordinator] Sync failed:",o)})},create:function(n){e.refreshMapper();const t=e.findChildren();if(!t.store||!t.connector)return;const d=n.detail.tempId,o=n.detail.data||{},r=e.mapper.egress(o);t.connector.create(r).then(function(c){const s=e.mapper.ingress(c);t.store.confirmMutation(d,s,"create")}).catch(function(c){console.error("[ln-data-coordinator] Create mutation failed:",c),t.store.revertMutation(d,"create",c.message||c)})},update:function(n){e.refreshMapper();const t=e.findChildren();if(!t.store||!t.connector)return;const d=n.detail.id,o=n.detail.expected_version;t.store.getById(d).then(function(r){if(!r)throw new Error("Record not found in cache store: "+d);const c=Object.assign({},r);delete c._pending;const s=e.mapper.egress(c);return t.connector.update(d,s,o)}).then(function(r){const c=e.mapper.ingress(r);t.store.confirmMutation(d,c,"update")}).catch(function(r){if(console.error("[ln-data-coordinator] Update mutation failed:",r),r.status===409){const c=r.data&&r.data.remote?e.mapper.ingress(r.data.remote):null,s=r.data?r.data.field_diffs:null;t.store.resolveConflict(d,c,s)}else t.store.revertMutation(d,"update",r.message||r)})},delete:function(n){e.refreshMapper();const t=e.findChildren();if(!t.store||!t.connector)return;const d=n.detail.id;t.connector.delete(d).then(function(){t.store.confirmMutation(d,null,"delete")}).catch(function(o){console.error("[ln-data-coordinator] Delete mutation failed:",o),t.store.revertMutation(d,"delete",o.message||o)})},bulkDelete:function(n){e.refreshMapper();const t=e.findChildren();if(!t.store||!t.connector)return;const d=n.detail.ids||[],o=d.join(",");t.connector.bulkDelete(d).then(function(){t.store.confirmMutation(o,null,"bulk-delete")}).catch(function(r){console.error("[ln-data-coordinator] Bulk delete mutation failed:",r),t.store.revertMutation(o,"bulk-delete",r.message||r)})}},e.dom.addEventListener("ln-store:request-remote-sync",e._handlers.sync),e.dom.addEventListener("ln-store:request-remote-create",e._handlers.create),e.dom.addEventListener("ln-store:request-remote-update",e._handlers.update),e.dom.addEventListener("ln-store:request-remote-delete",e._handlers.delete),e.dom.addEventListener("ln-store:request-remote-bulk-delete",e._handlers.bulkDelete)}p.prototype.destroy=function(){if(!this.dom[i])return;const e=this;e._handlers&&(e.dom.removeEventListener("ln-store:request-remote-sync",e._handlers.sync),e.dom.removeEventListener("ln-store:request-remote-create",e._handlers.create),e.dom.removeEventListener("ln-store:request-remote-update",e._handlers.update),e.dom.removeEventListener("ln-store:request-remote-delete",e._handlers.delete),e.dom.removeEventListener("ln-store:request-remote-bulk-delete",e._handlers.bulkDelete),e._handlers=null),delete this.dom[i],delete this.dom[u]};function h(e,n){const t=e[i];t&&n==="data-ln-data-mapper"&&t.refreshMapper()}D(a,i,p,"ln-data-coordinator",{extraAttributes:["data-ln-data-mapper"],onAttributeChange:h})})()})();
|
|
1
|
+
(function(){"use strict";if(typeof window<"u"){const r=console.warn;console.warn=function(...i){typeof i[0]=="string"&&(i[0].startsWith("[ln-")||i[0].startsWith("[lnCore"))&&!(document.documentElement.hasAttribute("data-ln-debug")||document.body&&document.body.hasAttribute("data-ln-debug"))||r.apply(console,i)}}const I={};function K(r,i){I[r]||(I[r]=document.querySelector('[data-ln-template="'+r+'"]'));const s=I[r];return s?s.content.cloneNode(!0):(console.warn("["+(i||"ln-core")+'] Template "'+r+'" not found'),null)}function c(r,i,s){r.dispatchEvent(new CustomEvent(i,{bubbles:!0,detail:s||{}}))}function T(r,i){if(!r||!i)return r;const s=r.querySelectorAll("[data-ln-field]");for(let f=0;f<s.length;f++){const p=s[f],y=p.getAttribute("data-ln-field");i[y]!=null&&(p.textContent=i[y])}const h=r.querySelectorAll("[data-ln-attr]");for(let f=0;f<h.length;f++){const p=h[f],y=p.getAttribute("data-ln-attr").split(",");for(let E=0;E<y.length;E++){const v=y[E].trim().split(":");if(v.length!==2)continue;const w=v[0].trim(),S=v[1].trim();i[S]!=null&&p.setAttribute(w,i[S])}}const m=r.querySelectorAll("[data-ln-show]");for(let f=0;f<m.length;f++){const p=m[f],y=p.getAttribute("data-ln-show");y in i&&p.classList.toggle("hidden",!i[y])}const d=r.querySelectorAll("[data-ln-class]");for(let f=0;f<d.length;f++){const p=d[f],y=p.getAttribute("data-ln-class").split(",");for(let E=0;E<y.length;E++){const v=y[E].trim().split(":");if(v.length!==2)continue;const w=v[0].trim(),S=v[1].trim();S in i&&p.classList.toggle(w,!!i[S])}}return r}function N(r,i){r.matches&&r.matches("[data-ln-form], [data-ln-fillable]")&&r.dispatchEvent(new CustomEvent("ln-fill",{detail:i??null,bubbles:!0}));const s=r.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let h=0;h<s.length;h++)s[h].dispatchEvent(new CustomEvent("ln-fill",{detail:i??null,bubbles:!0}));return r}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(r){if(!(!r.target.matches||!r.target.matches("[data-ln-fillable]")))if(r.detail)T(r.target,r.detail);else{const i=r.target.querySelectorAll("[data-ln-field]");for(let s=0;s<i.length;s++)i[s].textContent=""}})));function F(r,i){if(!r||!i)return r;const s=document.createTreeWalker(r,NodeFilter.SHOW_TEXT);for(;s.nextNode();){const d=s.currentNode;d.textContent.indexOf("{{")!==-1&&(d.textContent=d.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(f,p){return i[p]!==void 0?i[p]:""}))}const h=function(d,f){return i[f]!==void 0?i[f]:""},m=Array.from(r.querySelectorAll("*"));r.nodeType===1&&m.push(r);for(let d=0;d<m.length;d++){const f=m[d],p=f.attributes;for(let y=0;y<p.length;y++){const E=p[y];E.value.indexOf("{{")!==-1&&f.setAttribute(E.name,E.value.replace(/\{\{\s*(\w+)\s*\}\}/g,h))}}return r}function B(r,i,s,h,m,d){const f={};for(let y=0;y<r.children.length;y++){const E=r.children[y],v=E.getAttribute("data-ln-key");v&&(f[v]=E)}const p=document.createDocumentFragment();for(let y=0;y<i.length;y++){const E=i[y],v=String(h(E));let w=f[v];if(w)m(w,E,y);else{const S=K(s,d);if(!S||(F(S,E),w=S.firstElementChild,!w))continue;w.setAttribute("data-ln-key",v),m(w,E,y)}p.appendChild(w)}r.textContent="",r.appendChild(p)}function j(r,i){if(!document.body){document.addEventListener("DOMContentLoaded",function(){j(r,i)}),console.warn("["+i+'] Script loaded before <body> — add "defer" to your <script> tag');return}r()}function W(r,i){const s={},h=r.querySelectorAll("["+i+"]");for(let m=0;m<h.length;m++)s[h[m].getAttribute(i)]=h[m].textContent,h[m].remove();return s}function O(r,i,s,h){if(r.nodeType!==1)return;const d=i.indexOf("[")!==-1||i.indexOf(".")!==-1||i.indexOf("#")!==-1?i:"["+i+"]",f=Array.from(r.querySelectorAll(d));r.matches&&r.matches(d)&&f.push(r);for(const p of f)p[s]||(p[s]=new h(p))}function Q(r){const i=r.querySelector('input[name="_method"]');return((i&&i.value!==""?i.value:r.method)||"").toUpperCase()}function H(r,i){const s={},h=r.elements;for(let m=0;m<h.length;m++){const d=h[m];if(!(!d.name||d.disabled||d.type==="file"||d.type==="submit"||d.type==="button"))if(d.type==="checkbox")s[d.name]||(s[d.name]=[]),d.checked&&s[d.name].push(d.value);else if(d.type==="radio")d.checked&&(s[d.name]=d.value);else if(d.type==="select-multiple"){s[d.name]=[];for(let f=0;f<d.options.length;f++)d.options[f].selected&&s[d.name].push(d.options[f].value)}else s[d.name]=d.value}return s}function V(r,i,s,h,m={}){const d=m.extraAttributes||[],f=m.onAttributeChange||null,p=m.onInit||null;function y(E){const v=E||document.body;O(v,r,i,s),p&&p(v)}return j(function(){const E=new MutationObserver(function(w){for(let S=0;S<w.length;S++){const _=w[S];if(_.type==="childList"){for(let x=0;x<_.addedNodes.length;x++){const k=_.addedNodes[x];k.nodeType===1&&(O(k,r,i,s),p&&p(k))}for(let x=0;x<_.removedNodes.length;x++){const k=_.removedNodes[x];if(k.nodeType===1){const t=r.indexOf("[")!==-1||r.indexOf(".")!==-1||r.indexOf("#")!==-1?r:"["+r+"]",n=Array.from(k.querySelectorAll(t));k.matches&&k.matches(t)&&n.push(k);for(let o=0;o<n.length;o++){const a=n[o];if(!document.contains(a)){const l=a[i];l&&typeof l.destroy=="function"&&l.destroy()}}}}}else _.type==="attributes"&&(f&&_.target[i]?f(_.target,_.attributeName):(O(_.target,r,i,s),p&&p(_.target)))}});let v=[];if(r.indexOf("[")!==-1){const w=/\[([\w-]+)/g;let S;for(;(S=w.exec(r))!==null;)v.push(S[1])}else v.push(r);E.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:v.concat(d)})},h),window[i]=y,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){y(document.body)}):y(document.body),y}const z={};function X(r,i){z[r]=i}function $(r){return z[r]||{ingress:i=>i,egress:i=>i}}const P={};function U(r,i){if(!r||typeof i!="object")return;const s=r.toLowerCase().split("-")[0];P[s]=i}function J(r){if(!r)return null;const i=r.toLowerCase().split("-")[0];return P[i]||null}U("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=X,window.lnCore.getDataMapper=$,window.lnCore.registerLocaleFallback=U,window.lnCore.getLocaleFallback=J,window.lnCore.fillTemplate=F,window.lnCore.fill=T,window.lnCore.lnFill=N,window.lnCore.renderList=B);function G(r){return(r||"").replace(/^#/,"")}function M(r){const i=r===void 0?location.hash:r,s={},h=G(i);if(!h)return s;const m=h.split("&");for(let d=0;d<m.length;d++){const f=m[d];if(!f)continue;const p=f.indexOf(":"),y=p>-1?f.slice(0,p):f,E=p>-1?f.slice(p+1):"";if(y)try{s[y]=decodeURIComponent(E)}catch{s[y]=E}}return s}function Y(r){if(!r)return null;const i=M();return r in i?i[r]:null}function Z(r,i){if(!r)return;const s=M();i==null?delete s[r]:s[r]=String(i);const m=Object.keys(s).map(function(d){const f=s[d];return f===""?d:d+":"+encodeURIComponent(f)}).join("&");G(location.hash)!==m&&(location.hash=m)}function ee(r){return r.button===1||r.ctrlKey||r.metaKey||r.shiftKey?!1:(r.preventDefault(),!0)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=M,window.lnCore.hashGet=Y,window.lnCore.hashSet=Z,window.lnCore.hashLinkClick=ee);function te(r){return r=r||{},{sort:r.sort,filters:r.filters,search:r.search,offset:r.offset,limit:r.limit,queryGen:r.queryGen}}function R(r,i,s){const h=!r||!!r.initializationError;return i&&(s||h||!r.isLoaded)?"remote":r&&!r.initializationError?"store":"none"}class ne{constructor(){this._pending=new Map}wait(i){return i?this._pending.has(i)?Promise.reject(new Error(`Duplicate mutation requestId: ${i}`)):new Promise((s,h)=>{this._pending.set(i,{resolve:s,reject:h})}):Promise.reject(new Error("Mutation requestId is required"))}resolve(i){return this._settle(i,!1)}reject(i){return this._settle(i,!0)}close(i){const s=i||new Error("Mutation receipt registry closed");for(const h of this._pending.values())h.reject(s);this._pending.clear()}_settle(i,s){const h=i&&i.requestId;if(!h)return!1;const m=this._pending.get(h);return m?(this._pending.delete(h),s?m.reject(i.error||new Error("Store mutation failed")):m.resolve(i),!0):!1}}(function(){const r="data-ln-data-coordinator",i="lnDataCoordinator",s="lnCoordinator",h="data-ln-form-scope";if(window[i]!==void 0)return;const m=new Set;let d=!1,f=null,p=null,y=null;function E(){d||(d=!0,f=function(){c(document,"ln-data-store:online",{}),m.forEach(function(e){e._maybeSync()})},p=function(){c(document,"ln-data-store:offline",{})},y=function(){document.visibilityState==="visible"&&m.forEach(function(e){const t=e.findChildren(),n=t.store;n&&t.connector&&n.isInitialized&&!n.initializationError&&!n.isSyncing&&!e._noAutosync&&(!n.hasCache||e._isStale())&&n.forceSync()})},window.addEventListener("online",f),window.addEventListener("offline",p),document.addEventListener("visibilitychange",y))}function v(){d&&(m.size>0||(window.removeEventListener("online",f),window.removeEventListener("offline",p),document.removeEventListener("visibilitychange",y),f=null,p=null,y=null,d=!1))}function w(){try{return crypto.randomUUID()}catch{return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{const n=Math.random()*16|0;return(t==="x"?n:n&3|8).toString(16)})}}const S=["ln-api-connector","ln-couchdb-connector"];function _(e){return this.dom=e,this._name=e.getAttribute(r),e[i]=this,e[s]=this,this.mapper=null,this._handlers=null,this._boundQueries=new WeakMap,this._boundDelivered=new WeakMap,this._mutationReceipts=new ne,this._dict=W(e,"data-ln-data-coordinator-dict"),this._parseStaleAttributes(),this.refreshMapper(),x(this),m.add(this),E(),this._checkInitialSync(),this}_.prototype._parseStaleAttributes=function(){const t=this.findChildren().storeEl,n=this.dom.getAttribute("data-ln-data-coordinator-stale")||(t?t.getAttribute("data-ln-data-store-stale"):null),o=parseInt(n,10);this._staleThreshold=n==="never"||n==="-1"?-1:isNaN(o)?300:o;const a=this.dom.hasAttribute("data-ln-data-coordinator-no-autosync")||(t?t.hasAttribute("data-ln-data-store-no-autosync"):!1);this._noAutosync=!!a},_.prototype._isStale=function(){if(this._staleThreshold===-1)return!1;const t=this.findChildren().store;return!t||!t.lastSyncedAt?!0:Date.now()/1e3-t.lastSyncedAt>this._staleThreshold},_.prototype._maybeSync=function(){const e=this.findChildren(),t=e.store;!t||t.initializationError||!e.connector||this._noAutosync||!t.isInitialized||t.isSyncing||(!t.hasCache||this._isStale())&&t.forceSync()},_.prototype._checkInitialSync=function(){const e=this,n=this.findChildren().store;n&&Promise.resolve(n.ready).then(function(){const o=e.findChildren(),a=o.store;if(a&&a.initializationError){e._reportReconciliationError("store-initialize",a.initializationError,null);return}!a||!o.connector||e._noAutosync||a.isSyncing||(!a.hasCache||e._isStale())&&a.forceSync()}).catch(function(o){e._reportReconciliationError("store-initialize",o,null)})},_.prototype.refreshMapper=function(){this.mapper=null,this.dom.querySelector("script[data-ln-mapper]")&&console.error("[ln-data-coordinator] Security Error: Inline script mappers using <script data-ln-mapper> are deprecated and disabled due to XSS vulnerability risks (unsafe-eval). Please register your mappers securely via window.lnCore.registerDataMapper() instead.");const t=this.dom.getAttribute("data-ln-data-mapper")||this.dom.getAttribute("data-ln-data-coordinator");t&&window.lnCore&&typeof window.lnCore.getDataMapper=="function"&&(this.mapper=window.lnCore.getDataMapper(t)),this.mapper||(this.mapper={}),typeof this.mapper.ingress!="function"&&(this.mapper.ingress=function(n){return n}),typeof this.mapper.egress!="function"&&(this.mapper.egress=function(n){return n})},_.prototype.findChildren=function(){const e=this.dom.querySelector("[data-ln-data-store]"),t=this.dom.querySelector("[data-ln-api-connector], [data-ln-couchdb-connector], [data-ln-websocket-connector], [data-ln-rest-connector]"),n=this.dom.querySelector("[data-ln-api-queue]");return{storeEl:e,connectorEl:t,queueEl:n,store:e?e.lnDataStore||e.lnStore:null,connector:t?t.lnConnector||t.lnApiConnector||t.lnCouchDbConnector:null,queue:n?n.lnApiQueue:null}},_.prototype._handleSubmitRecord=function(e){const t=this.findChildren();if(!t.storeEl){console.warn('[ln-data-coordinator] form submit claimed but no [data-ln-data-store] child found in "'+(this._name||"")+'"');return}const n=e.data||{},o=n.id,a=n.expected_version,l=Object.assign({},n);delete l.id,delete l.expected_version;const u=e.method.toUpperCase();u==="POST"?this._fanOutCreate(t,l,e.action):(u==="PUT"||u==="PATCH")&&this._fanOutUpdate(t,o,l,a,e.action)},_.prototype._fanOutCreate=function(e,t,n){this.refreshMapper();const o="_temp_"+w();c(e.storeEl,"ln-data-store:request-create",{tempId:o,data:t}),e.queue?c(e.queueEl,"ln-api-queue:request-enqueue",{chainKey:o,op:"create",targetId:null,payload:this.mapper.egress(t),expectedVersion:null,meta:{tempId:o,action:n}}):e.connector&&c(e.connectorEl,"ln-api-connector:request-create",{data:this.mapper.egress(t),url:n,meta:{entryId:w(),queued:!1,op:"create",tempId:o}})},_.prototype._fanOutUpdate=function(e,t,n,o,a){this.refreshMapper(),c(e.storeEl,"ln-data-store:request-update",{id:t,data:n}),e.queue?c(e.queueEl,"ln-api-queue:request-enqueue",{chainKey:t,op:"update",targetId:t,payload:this.mapper.egress(n),expectedVersion:o,meta:{id:t,action:a}}):e.connector&&c(e.connectorEl,"ln-api-connector:request-update",{id:t,data:this.mapper.egress(n),expected_version:o,url:a,meta:{entryId:w(),queued:!1,op:"update",id:t}})},_.prototype._fanOutDelete=function(e,t){this.refreshMapper(),c(e.storeEl,"ln-data-store:request-delete",{id:t}),e.queue?c(e.queueEl,"ln-api-queue:request-enqueue",{chainKey:t,op:"delete",targetId:t,payload:null,expectedVersion:null,meta:{id:t}}):e.connector&&c(e.connectorEl,"ln-api-connector:request-delete",{id:t,meta:{entryId:w(),queued:!1,op:"delete",id:t}})},_.prototype._fanOutBulkDelete=function(e,t){this.refreshMapper();const n=t.join(",");c(e.storeEl,"ln-data-store:request-bulk-delete",{ids:t}),e.queue?c(e.queueEl,"ln-api-queue:request-enqueue",{chainKey:n,op:"bulk-delete",targetId:null,payload:{ids:t},expectedVersion:null,meta:{bulkKey:n,ids:t}}):e.connector&&c(e.connectorEl,"ln-api-connector:request-bulk-delete",{ids:t,meta:{entryId:w(),queued:!1,op:"bulk-delete",bulkKey:n}})},_.prototype._toastFromMessage=function(e){e&&window.dispatchEvent(new CustomEvent("ln-toast:enqueue",{detail:{type:e.type||"success",title:e.title||"",message:e.body||""}}))},_.prototype._toastFromDict=function(e){const t=this._dict[e];t&&window.dispatchEvent(new CustomEvent("ln-toast:enqueue",{detail:{type:"error",title:"",message:t}}))},_.prototype._requestStoreMutation=function(e,t,n){const o=e.storeEl;if(!o)return Promise.reject(new Error("Store element not found"));const a=w(),l=this._mutationReceipts.wait(a);try{c(o,"ln-data-store:request-"+t,Object.assign({},n,{requestId:a}))}catch(u){this._mutationReceipts.reject({requestId:a,error:u})}return l},_.prototype._reportReconciliationError=function(e,t,n){c(this.dom,"ln-data-coordinator:error",{operation:e,error:t,meta:n||null})};function x(e){e._handlers={sync:function(t){e.refreshMapper();const n=e.findChildren();if(!n.store||!n.connector){console.warn("[ln-data-coordinator] Cannot sync: store or connector not found in subtree");return}c(n.connectorEl,"ln-api-connector:request-sync",{since:t.detail.since,meta:{op:"sync"}})},reqCreate:function(t){const n=e.findChildren();n.storeEl&&e._fanOutCreate(n,t.detail.data||{},t.detail.action)},reqUpdate:function(t){const n=e.findChildren();n.storeEl&&e._fanOutUpdate(n,t.detail.id,t.detail.data||{},t.detail.expected_version,t.detail.action)},reqDelete:function(t){const n=e.findChildren();n.storeEl&&e._fanOutDelete(n,t.detail.id)},reqBulkDelete:function(t){const n=e.findChildren();n.storeEl&&e._fanOutBulkDelete(n,t.detail.ids||[])},queueFailed:function(){e._toastFromDict("network")},queueSend:function(t){e.refreshMapper();const n=e.findChildren();if(!n.store||!n.connector||!n.queue)return;const o=t.detail||{},a=o.entryId,l=o.op,u=o.targetId,b=o.payload,g=o.expectedVersion,q=o.meta||{},C=q.action||null,A=o.idempotencyKey||a;l==="create"?c(n.connectorEl,"ln-api-connector:request-create",{data:b,url:C,idempotencyKey:A,meta:{entryId:a,queued:!0,op:"create",tempId:q.tempId}}):l==="update"?c(n.connectorEl,"ln-api-connector:request-update",{id:u,data:b,expected_version:g,url:C,idempotencyKey:A,meta:{entryId:a,queued:!0,op:"update",id:u}}):l==="delete"?c(n.connectorEl,"ln-api-connector:request-delete",{id:u,idempotencyKey:A,meta:{entryId:a,queued:!0,op:"delete",id:u}}):l==="bulk-delete"?c(n.connectorEl,"ln-api-connector:request-bulk-delete",{ids:b&&b.ids?b.ids:[],idempotencyKey:A,meta:{entryId:a,queued:!0,op:"bulk-delete",bulkKey:q.bulkKey}}):console.warn("[ln-data-coordinator] Unknown queue op:",l)},formSubmit:function(t){const n=t.target;if(t.defaultPrevented)return;const o=n.hasAttribute(h)?n.getAttribute(h):null;if(o===null)return;let a;if(o?a=o===e._name:a=n.closest("[data-ln-data-coordinator]")===e.dom,!a)return;const l=Q(n);if(l!=="POST"&&l!=="PUT"&&l!=="PATCH")return;t.preventDefault();const u=H(n);delete u._method,delete u._token,e._handleSubmitRecord({data:u,method:l,action:n.getAttribute("action")||""})},connFetched:function(t){const n=t.detail.meta||{},o=e.findChildren();e.refreshMapper();const a=t.detail.data;let l=[],u=[],b=null;Array.isArray(a)?(l=a,b=Math.floor(Date.now()/1e3)):a&&(l=Array.isArray(a.data)?a.data:[],u=Array.isArray(a.deleted)?a.deleted:[],b=a.synced_at!==void 0?a.synced_at:a.since!==void 0?a.since:null);const g=l.map(q=>e.mapper.ingress(q));if(o.store&&!o.store.initializationError)n.kind?n.kind==="table"||n.kind==="list"?o.store.applyQuery(g,{total:t.detail.total}).then(function(q){c(n.targetEl,"ln-"+n.kind+":set-loading",{loading:!1}),c(n.targetEl,"ln-"+n.kind+":set-data",{data:q,total:t.detail.total!==void 0?t.detail.total:q.length,filtered:t.detail.filtered!==void 0?t.detail.filtered:q.length,offset:t.detail.offset,queryGen:t.detail.queryGen}),e._boundDelivered.set(n.targetEl,!0)}):n.kind==="options"?o.store.applyQuery(g,{total:t.detail.total}).then(function(){return o.store.getAll({})}).then(function(q){c(n.targetEl,"ln-options:set-data",{data:q.data})}):n.kind==="stat"&&o.store.applyQuery(g,{total:t.detail.total}).then(function(){const q=t.detail.filtered!==void 0?t.detail.filtered:t.detail.total!==void 0?t.detail.total:g.length;c(n.targetEl,"ln-stat:set-count",{count:q})}):o.store.applySync(g,u,b||Math.floor(Date.now()/1e3),{total:t.detail.total,filtered:t.detail.filtered,offset:t.detail.offset,queryGen:t.detail.queryGen,targetEl:n.targetEl});else if(n.targetEl&&n.kind){if(n.kind==="table"||n.kind==="list")c(n.targetEl,"ln-"+n.kind+":set-loading",{loading:!1}),c(n.targetEl,"ln-"+n.kind+":set-data",{data:g,total:t.detail.total!==void 0?t.detail.total:g.length,filtered:t.detail.filtered!==void 0?t.detail.filtered:g.length,offset:t.detail.offset,queryGen:t.detail.queryGen}),e._boundDelivered.set(n.targetEl,!0);else if(n.kind==="options")c(n.targetEl,"ln-options:set-data",{data:g});else if(n.kind==="stat"){const q=t.detail.filtered!==void 0?t.detail.filtered:t.detail.total!==void 0?t.detail.total:g.length;c(n.targetEl,"ln-stat:set-count",{count:q})}}},connCreated:function(t){const n=e.findChildren();if(!n.storeEl)return;const o=t.detail.meta||{},a=e.mapper.ingress(t.detail.record);e._requestStoreMutation(n,"update",{id:o.tempId,data:a}).then(function(){e._toastFromMessage(t.detail.message),o.queued&&n.queue&&c(n.queueEl,"ln-api-queue:resolve-create",{entryId:o.entryId,oldKey:o.tempId,newId:a.id})}).catch(function(l){e._reportReconciliationError("create-reconcile",l,o)})},connUpdated:function(t){const n=e.findChildren();if(!n.storeEl)return;const o=t.detail.meta||{},a=e.mapper.ingress(t.detail.record);e._requestStoreMutation(n,"update",{id:o.id,data:a}).then(function(){e._toastFromMessage(t.detail.message),o.queued&&n.queue&&c(n.queueEl,"ln-api-queue:ack",{entryId:o.entryId})}).catch(function(l){e._reportReconciliationError("update-reconcile",l,o)})},connDeleted:function(t){const n=e.findChildren();if(!n.storeEl)return;const o=t.detail.meta||{};e._toastFromMessage(t.detail.message),o.queued&&n.queue&&c(n.queueEl,"ln-api-queue:ack",{entryId:o.entryId})},connBulkDeleted:function(t){const n=e.findChildren();if(!n.storeEl)return;const o=t.detail.meta||{};e._toastFromMessage(t.detail.message),o.queued&&n.queue&&c(n.queueEl,"ln-api-queue:ack",{entryId:o.entryId})},connError:function(t){const n=t.detail||{},o=n.meta||{},a=o.op||n.action,l=n.status||0,u=e.findChildren();if(a==="sync"){u.storeEl&&c(u.storeEl,"ln-data-store:request-sync-failed",{error:n.error,status:l}),console.error("[ln-data-coordinator] Sync failed:",n.error);return}if(a==="query"){o.targetEl&&o.kind&&(c(o.targetEl,"ln-"+o.kind+":set-loading",{loading:!1}),(o.kind==="table"||o.kind==="list")&&c(o.targetEl,"ln-"+o.kind+":page-failed",{offset:o.offset})),e._reportReconciliationError("query",n.error||n,o);return}if(!u.storeEl)return;const b=l===401||l===419,g=l===0||l>=500,q=l===409;if(b){e._toastFromDict("auth"),o.queued&&u.queue&&c(u.queueEl,"ln-api-queue:nack",{entryId:o.entryId,reason:"auth"});return}if(g){o.queued&&u.queue?c(u.queueEl,"ln-api-queue:nack",{entryId:o.entryId,reason:"retry"}):e._toastFromDict("network");return}let C=Promise.resolve();if(q&&a==="update"){const A=n.data&&n.data.remote?e.mapper.ingress(n.data.remote):null;A&&(C=e._requestStoreMutation(u,"update",{id:o.id,data:A})),e._toastFromDict("conflict")}else a==="create"&&(C=e._requestStoreMutation(u,"delete",{id:o.tempId})),e._toastFromDict("rejected");o.queued&&u.queue?C.then(function(){c(u.queueEl,"ln-api-queue:nack",{entryId:o.entryId,reason:"drop"})}).catch(function(A){e._reportReconciliationError("deterministic-reconcile",A,o)}):C.catch(function(A){e._reportReconciliationError("deterministic-reconcile",A,o)})},storeInitialized:function(t){const n=e.findChildren(),o=n.store;if(!o||o.initializationError||!n.connector||e._noAutosync||o.isSyncing)return;(t.detail||{}).hasCache?e._isStale()&&o.forceSync():o.forceSync()},reqTableData:function(t){e._serveData(t,"table")},reqListData:function(t){e._serveData(t,"list")},reqOptions:function(t){e._serveOptions(t)},reqStat:function(t){e._serveStat(t)},refresh:function(t){e._mutationReceipts.resolve(t.detail),e._refreshAll()},mutationError:function(t){e._mutationReceipts.reject(t.detail)},refreshSynced:function(t){t.detail&&t.detail.changed&&e._refreshAll(t.detail.meta)}},e.dom.addEventListener("ln-data-store:request-remote-sync",e._handlers.sync),e.dom.addEventListener("ln-data-coordinator:request-create",e._handlers.reqCreate),e.dom.addEventListener("ln-data-coordinator:request-update",e._handlers.reqUpdate),e.dom.addEventListener("ln-data-coordinator:request-delete",e._handlers.reqDelete),e.dom.addEventListener("ln-data-coordinator:request-bulk-delete",e._handlers.reqBulkDelete),e.dom.addEventListener("ln-api-queue:send",e._handlers.queueSend),e.dom.addEventListener("ln-api-queue:failed",e._handlers.queueFailed),e.dom.addEventListener("ln-data-store:initialized",e._handlers.storeInitialized),document.addEventListener("submit",e._handlers.formSubmit),S.forEach(function(t){e.dom.addEventListener(t+":fetched",e._handlers.connFetched),e.dom.addEventListener(t+":created",e._handlers.connCreated),e.dom.addEventListener(t+":updated",e._handlers.connUpdated),e.dom.addEventListener(t+":deleted",e._handlers.connDeleted),e.dom.addEventListener(t+":bulk-deleted",e._handlers.connBulkDeleted),e.dom.addEventListener(t+":error",e._handlers.connError)}),document.addEventListener("ln-table:request-data",e._handlers.reqTableData),document.addEventListener("ln-list:request-data",e._handlers.reqListData),document.addEventListener("ln-options:request-data",e._handlers.reqOptions),document.addEventListener("ln-stat:request-count",e._handlers.reqStat),e.dom.addEventListener("ln-data-store:ready",e._handlers.refresh),e.dom.addEventListener("ln-data-store:created",e._handlers.refresh),e.dom.addEventListener("ln-data-store:updated",e._handlers.refresh),e.dom.addEventListener("ln-data-store:deleted",e._handlers.refresh),e.dom.addEventListener("ln-data-store:mutation-error",e._handlers.mutationError),e.dom.addEventListener("ln-data-store:synced",e._handlers.refreshSynced)}_.prototype._ownsStore=function(e){const t=this.findChildren();return!!(t.store&&t.store._name===e&&e||this._name===e&&e)},_.prototype._serveData=function(e,t){const n=e.target,o=t==="table"?"data-ln-table-store":"data-ln-list-store",a=n.getAttribute(o)||n.getAttribute("data-ln-table-source")||n.getAttribute("data-ln-list-source");if(!a||!this._ownsStore(a))return;const l=e.detail||{},u=te(l);this._boundQueries.set(n,u);const b=this.findChildren(),g=this,q=l.offset!=null,C=b.store;return(C&&C.ready?C.ready:Promise.resolve()).then(function(){const L=R(C,b.connector,q);if(L==="remote"){c(n,"ln-"+t+":set-loading",{loading:!0}),c(b.connectorEl,"ln-api-connector:request-query",{query:u,meta:{targetEl:n,kind:t,offset:u.offset,limit:u.limit}});return}if(L!=="store"){c(n,"ln-"+t+":set-loading",{loading:!1});return}return C.getAll(u).then(function(D){const re={data:D.data,total:D.total,filtered:D.filtered,offset:l.offset!==void 0?l.offset:D.offset,queryGen:l.queryGen!==void 0?l.queryGen:D.queryGen};c(n,"ln-"+t+":set-data",re),g._boundDelivered.set(n,!0)})}).catch(function(L){c(n,"ln-"+t+":set-loading",{loading:!1}),c(g.dom,"ln-data-coordinator:error",{operation:"query",kind:t,store:a,target:n,error:L})})},_.prototype._serveOptions=function(e){const t=e.target,n=t.getAttribute("data-ln-options");if(!this._ownsStore(n))return;const o=this.findChildren(),a=o.store,l=a&&a.ready?a.ready:Promise.resolve(),u=this;return l.then(function(){const b=R(a,o.connector,!1);if(b==="remote"){c(o.connectorEl,"ln-api-connector:request-query",{query:{},meta:{targetEl:t,kind:"options"}});return}if(b==="store")return a.getAll({}).then(function(g){c(t,"ln-options:set-data",{data:g.data})})}).catch(function(b){u._reportReconciliationError("options-query",b,{targetEl:t,kind:"options"})})},_.prototype._serveStat=function(e){const t=e.target,n=t.getAttribute("data-ln-stat");if(!this._ownsStore(n))return;const o=e.detail&&e.detail.filters?e.detail.filters:null,a=this.findChildren(),l=a.store,u=l&&l.ready?l.ready:Promise.resolve(),b=this;return u.then(function(){const g=R(l,a.connector,!1);if(g==="remote"){c(a.connectorEl,"ln-api-connector:request-query",{query:{filters:o},meta:{targetEl:t,kind:"stat"}});return}if(g==="store")return l.count(o).then(function(q){c(t,"ln-stat:set-count",{count:q})})}).catch(function(g){b._reportReconciliationError("stat-query",g,{targetEl:t,kind:"stat"})})},_.prototype._refreshAll=function(e){const t=this,n=document.querySelectorAll("[data-ln-table-store],[data-ln-list-store],[data-ln-options],[data-ln-stat]");for(let o=0;o<n.length;o++){const a=n[o];let l,u;if(a.hasAttribute("data-ln-table-store")?(l=a.getAttribute("data-ln-table-store"),u="table"):a.hasAttribute("data-ln-list-store")?(l=a.getAttribute("data-ln-list-store"),u="list"):a.hasAttribute("data-ln-options")?(l=a.getAttribute("data-ln-options"),u="options"):a.hasAttribute("data-ln-stat")&&(l=a.getAttribute("data-ln-stat"),u="stat"),!this._ownsStore(l))continue;const b=this.findChildren().store;if(u==="table"||u==="list"){const g=u==="table"?"data-ln-table-window":"data-ln-list-window";if(a.hasAttribute(g)){c(a,"ln-"+u+":request-revalidate",{});continue}const q=t._boundQueries.get(a)||{sort:null,filters:{},search:""};(function(C,A){b.getAll(q).then(function(L){const D={data:L.data,total:e&&e.total!==void 0?e.total:L.total,filtered:e&&e.filtered!==void 0?e.filtered:L.filtered,offset:e&&e.offset!==void 0?e.offset:q.offset,queryGen:e&&e.queryGen!==void 0?e.queryGen:q.queryGen};c(C,"ln-"+A+":set-loading",{loading:!1}),c(C,"ln-"+A+":set-data",D),t._boundDelivered.set(C,!0)})})(a,u)}else if(u==="options")(function(g){b.getAll({}).then(function(q){c(g,"ln-options:set-data",{data:q.data})})})(a);else if(u==="stat"){const g=a.getAttribute("data-ln-stat-filter");let q=null;if(g){const C=g.indexOf(":");if(C!==-1){const A=g.slice(0,C),L=g.slice(C+1);q={},q[A]=[L]}}(function(C,A){b.count(A).then(function(L){c(C,"ln-stat:set-count",{count:L})})})(a,q)}}},_.prototype.destroy=function(){if(!this.dom[i])return;const e=this;e._handlers&&(e.dom.removeEventListener("ln-data-store:request-remote-sync",e._handlers.sync),e.dom.removeEventListener("ln-data-coordinator:request-create",e._handlers.reqCreate),e.dom.removeEventListener("ln-data-coordinator:request-update",e._handlers.reqUpdate),e.dom.removeEventListener("ln-data-coordinator:request-delete",e._handlers.reqDelete),e.dom.removeEventListener("ln-data-coordinator:request-bulk-delete",e._handlers.reqBulkDelete),e.dom.removeEventListener("ln-api-queue:send",e._handlers.queueSend),e.dom.removeEventListener("ln-api-queue:failed",e._handlers.queueFailed),e.dom.removeEventListener("ln-data-store:initialized",e._handlers.storeInitialized),document.removeEventListener("submit",e._handlers.formSubmit),S.forEach(function(t){e.dom.removeEventListener(t+":fetched",e._handlers.connFetched),e.dom.removeEventListener(t+":created",e._handlers.connCreated),e.dom.removeEventListener(t+":updated",e._handlers.connUpdated),e.dom.removeEventListener(t+":deleted",e._handlers.connDeleted),e.dom.removeEventListener(t+":bulk-deleted",e._handlers.connBulkDeleted),e.dom.removeEventListener(t+":error",e._handlers.connError)}),document.removeEventListener("ln-table:request-data",e._handlers.reqTableData),document.removeEventListener("ln-list:request-data",e._handlers.reqListData),document.removeEventListener("ln-options:request-data",e._handlers.reqOptions),document.removeEventListener("ln-stat:request-count",e._handlers.reqStat),e.dom.removeEventListener("ln-data-store:ready",e._handlers.refresh),e.dom.removeEventListener("ln-data-store:created",e._handlers.refresh),e.dom.removeEventListener("ln-data-store:updated",e._handlers.refresh),e.dom.removeEventListener("ln-data-store:deleted",e._handlers.refresh),e.dom.removeEventListener("ln-data-store:mutation-error",e._handlers.mutationError),e.dom.removeEventListener("ln-data-store:synced",e._handlers.refreshSynced),e._handlers=null),e._boundQueries=null,e._boundDelivered=null,e._mutationReceipts.close(new Error("Data coordinator destroyed")),e._mutationReceipts=null,m.delete(this),v(),delete this.dom[i],delete this.dom[s]};function k(e,t){const n=e[i];n&&t==="data-ln-data-mapper"&&n.refreshMapper()}V(r,i,_,"ln-data-coordinator",{extraAttributes:["data-ln-data-mapper"],onAttributeChange:k})})()})();
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function normalizeDataQuery(detail) {
|
|
2
|
+
detail = detail || {};
|
|
3
|
+
return {
|
|
4
|
+
sort: detail.sort,
|
|
5
|
+
filters: detail.filters,
|
|
6
|
+
search: detail.search,
|
|
7
|
+
offset: detail.offset,
|
|
8
|
+
limit: detail.limit,
|
|
9
|
+
queryGen: detail.queryGen
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function selectDataSource(store, connector, isWindowed) {
|
|
14
|
+
const storeUnavailable = !store || !!store.initializationError;
|
|
15
|
+
if (connector && (isWindowed || storeUnavailable || !store.isLoaded)) return 'remote';
|
|
16
|
+
if (store && !store.initializationError) return 'store';
|
|
17
|
+
return 'none';
|
|
18
|
+
}
|