@livenetworks/ashlar 1.5.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +162 -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 +77 -41
  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
@@ -0,0 +1 @@
1
+ (function(){"use strict";if(typeof window<"u"){const i=console.warn;console.warn=function(...l){typeof l[0]=="string"&&(l[0].startsWith("[ln-")||l[0].startsWith("[lnCore"))&&!(document.documentElement.hasAttribute("data-ln-debug")||document.body&&document.body.hasAttribute("data-ln-debug"))||i.apply(console,l)}}const R={};function B(i,l){R[i]||(R[i]=document.querySelector('[data-ln-template="'+i+'"]'));const o=R[i];return o?o.content.cloneNode(!0):(console.warn("["+(l||"ln-core")+'] Template "'+i+'" not found'),null)}function T(i,l,o){i.dispatchEvent(new CustomEvent(l,{bubbles:!0,detail:o||{}}))}function Q(i,l,o){const h=new CustomEvent(l,{bubbles:!0,cancelable:!0,detail:o||{}});return i.dispatchEvent(h),h}function J(i,l,o){i._applyFilterAndSort(),i._vStart=-1,i._vEnd=-1,i._render(),i._updateFooter();const h={sort:i.currentSort,filters:i.currentFilters,search:i.currentSearch};h[o]=i.name,T(i.dom,l,h)}function N(i,l){if(!i||!l)return i;const o=i.querySelectorAll("[data-ln-field]");for(let d=0;d<o.length;d++){const a=o[d],u=a.getAttribute("data-ln-field");l[u]!=null&&(a.textContent=l[u])}const h=i.querySelectorAll("[data-ln-attr]");for(let d=0;d<h.length;d++){const a=h[d],u=a.getAttribute("data-ln-attr").split(",");for(let m=0;m<u.length;m++){const g=u[m].trim().split(":");if(g.length!==2)continue;const A=g[0].trim(),E=g[1].trim();l[E]!=null&&a.setAttribute(A,l[E])}}const y=i.querySelectorAll("[data-ln-show]");for(let d=0;d<y.length;d++){const a=y[d],u=a.getAttribute("data-ln-show");u in l&&a.classList.toggle("hidden",!l[u])}const b=i.querySelectorAll("[data-ln-class]");for(let d=0;d<b.length;d++){const a=b[d],u=a.getAttribute("data-ln-class").split(",");for(let m=0;m<u.length;m++){const g=u[m].trim().split(":");if(g.length!==2)continue;const A=g[0].trim(),E=g[1].trim();E in l&&a.classList.toggle(A,!!l[E])}}return i}function Z(i,l){i.matches&&i.matches("[data-ln-form], [data-ln-fillable]")&&i.dispatchEvent(new CustomEvent("ln-fill",{detail:l??null,bubbles:!0}));const o=i.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let h=0;h<o.length;h++)o[h].dispatchEvent(new CustomEvent("ln-fill",{detail:l??null,bubbles:!0}));return i}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(i){if(!(!i.target.matches||!i.target.matches("[data-ln-fillable]")))if(i.detail)N(i.target,i.detail);else{const l=i.target.querySelectorAll("[data-ln-field]");for(let o=0;o<l.length;o++)l[o].textContent=""}})));function W(i,l){if(!i||!l)return i;const o=document.createTreeWalker(i,NodeFilter.SHOW_TEXT);for(;o.nextNode();){const b=o.currentNode;b.textContent.indexOf("{{")!==-1&&(b.textContent=b.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(d,a){return l[a]!==void 0?l[a]:""}))}const h=function(b,d){return l[d]!==void 0?l[d]:""},y=Array.from(i.querySelectorAll("*"));i.nodeType===1&&y.push(i);for(let b=0;b<y.length;b++){const d=y[b],a=d.attributes;for(let u=0;u<a.length;u++){const m=a[u];m.value.indexOf("{{")!==-1&&d.setAttribute(m.name,m.value.replace(/\{\{\s*(\w+)\s*\}\}/g,h))}}return i}function tt(i,l,o,h,y,b){const d={};for(let u=0;u<i.children.length;u++){const m=i.children[u],g=m.getAttribute("data-ln-key");g&&(d[g]=m)}const a=document.createDocumentFragment();for(let u=0;u<l.length;u++){const m=l[u],g=String(h(m));let A=d[g];if(A)y(A,m,u);else{const E=B(o,b);if(!E||(W(E,m),A=E.firstElementChild,!A))continue;A.setAttribute("data-ln-key",g),y(A,m,u)}a.appendChild(A)}i.textContent="",i.appendChild(a)}function V(i,l){if(!document.body){document.addEventListener("DOMContentLoaded",function(){V(i,l)}),console.warn("["+l+'] Script loaded before <body> — add "defer" to your <script> tag');return}i()}function G(i,l,o){if(i){const h=i.querySelector('[data-ln-template="'+l+'"]');if(h)return h.content.cloneNode(!0)}return B(l,o)}function z(i,l,o,h){if(i.nodeType!==1)return;const b=l.indexOf("[")!==-1||l.indexOf(".")!==-1||l.indexOf("#")!==-1?l:"["+l+"]",d=Array.from(i.querySelectorAll(b));i.matches&&i.matches(b)&&d.push(i);for(const a of d)a[o]||(a[o]=new h(a))}const P={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 j(i){const l=i?i.closest("[lang]"):null,o=(l?l.getAttribute("lang")||l.lang:null)||(document.documentElement?document.documentElement.getAttribute("lang")||document.documentElement.lang:null)||navigator.language;if(!o)return"en-US";const h=o.trim().toLowerCase();return h.indexOf("-")===-1&&P[h]?P[h]:o}function et(i){let l=!1;for(let o=0;o<i.length;o++){const h=i[o];if(!(h===""||h==null)&&(l=!0,!Number.isFinite(Number(h))))return"string"}return l?"number":"string"}function it(i,l,o,h){if(o==="number"){const d=parseFloat(i),a=parseFloat(l);return(isNaN(d)?0:d)-(isNaN(a)?0:a)}const y=i!=null?String(i):"",b=l!=null?String(l):"";return h?h.compare(y,b):y<b?-1:y>b?1:0}function nt(i,l,o,h,y={}){const b=y.extraAttributes||[],d=y.onAttributeChange||null,a=y.onInit||null;function u(m){const g=m||document.body;z(g,i,l,o),a&&a(g)}return V(function(){const m=new MutationObserver(function(A){for(let E=0;E<A.length;E++){const f=A[E];if(f.type==="childList"){for(let t=0;t<f.addedNodes.length;t++){const e=f.addedNodes[t];e.nodeType===1&&(z(e,i,l,o),a&&a(e))}for(let t=0;t<f.removedNodes.length;t++){const e=f.removedNodes[t];if(e.nodeType===1){const s=i.indexOf("[")!==-1||i.indexOf(".")!==-1||i.indexOf("#")!==-1?i:"["+i+"]",c=Array.from(e.querySelectorAll(s));e.matches&&e.matches(s)&&c.push(e);for(let _=0;_<c.length;_++){const S=c[_];if(!document.contains(S)){const w=S[l];w&&typeof w.destroy=="function"&&w.destroy()}}}}}else f.type==="attributes"&&(d&&f.target[l]?d(f.target,f.attributeName):(z(f.target,i,l,o),a&&a(f.target)))}});let g=[];if(i.indexOf("[")!==-1){const A=/\[([\w-]+)/g;let E;for(;(E=A.exec(i))!==null;)g.push(E[1])}else g.push(i);m.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:g.concat(b)})},h),window[l]=u,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){u(document.body)}):u(document.body),u}const $={};function st(i,l){$[i]=l}function lt(i){return $[i]||{ingress:l=>l,egress:l=>l}}const K={};function Y(i,l){if(!i||typeof l!="object")return;const o=i.toLowerCase().split("-")[0];K[o]=l}function rt(i){if(!i)return null;const l=i.toLowerCase().split("-")[0];return K[l]||null}Y("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=st,window.lnCore.getDataMapper=lt,window.lnCore.registerLocaleFallback=Y,window.lnCore.getLocaleFallback=rt,window.lnCore.fillTemplate=W,window.lnCore.fill=N,window.lnCore.lnFill=Z,window.lnCore.renderList=tt);function ot(i,l){let o=!1;return function(){o||(o=!0,queueMicrotask(function(){o=!1,i()}))}}function at(i){i=i||{};let l=i.windowSize>0?i.windowSize:1e3,o=i.pageSize>0?i.pageSize:200,h=i.threshold!=null?i.threshold:25,y=i.fetchDebounce!=null?i.fetchDebounce:120;const b=typeof i.requestPage=="function"?i.requestPage:function(){},d=typeof i.onChange=="function"?i.onChange:function(){},a=new Map,u=new Map,m=new Set;let g=0,A=0,E=0,f={sort:null,filters:{},search:""},t=null,e=0,n=0,s=!1;function c(r){u.set(r,++e)}function _(){return!!(f&&(f.search||f.filters&&Object.keys(f.filters).length))}function S(){if(a.size<=l)return;const r=Array.from(a.keys()).sort(function(v,D){return(u.get(v)||0)-(u.get(D)||0)});let p=0;for(;a.size>l&&p<r.length;)a.delete(r[p]),u.delete(r[p]),p++}function w(r,p){m.add(r),b(f,r,p)}return{get:function(r){return a.get(r)},has:function(r){return a.has(r)},peek:function(){return a.size?a.values().next().value:void 0},get logicalTotal(){return g},get grandTotal(){return A},get queryGen(){return E},get size(){return a.size},ensure:function(r,p){clearTimeout(t),n=r;for(let k=r;k<p;k++)a.has(k)&&c(k);if(g<=0)return;const v=Math.max(0,r-h),D=Math.min(g,p+h),H=Math.floor(v/o),M=Math.floor(Math.max(0,D-1)/o);let F=-1,q=o;for(let k=H;k<=M;k++){const I=k*o,x=Math.min(o,g-I);let L=!1;for(let C=I;C<I+x;C++)if(!a.has(C)){L=!0;break}if(L&&!m.has(I)){F=I,q=x;break}}F!==-1&&(t=setTimeout(function(){w(F,q)},y))},ingest:function(r){if(r=r||{},r.queryGen!=null&&r.queryGen!==E)return;s&&(a.clear(),u.clear(),s=!1),A=r.total!=null?r.total:A,g=r.filtered!=null?r.filtered:r.data?r.data.length:g;const p=r.offset||0,v=r.data||[];for(let D=0;D<v.length;D++)a.set(p+D,v[D]),c(p+D);m.delete(p),S(),d()},requestInitial:function(r){r&&(f=r),w(0,o)},invalidate:function(r){E++,m.clear(),clearTimeout(t),r&&(f=r),s=!0,w(0,o)},revalidate:function(){E++,m.clear(),clearTimeout(t),s=!0;const r=Math.max(0,Math.floor(n/o)*o),p=g>0?Math.min(o,Math.max(1,g-r)):o;w(r,p)},release:function(r){m.delete(r)},destroy:function(){clearTimeout(t),a.clear(),u.clear(),m.clear()},configure:function(r){r=r||{};let p=!1;if(r.windowSize!=null&&r.windowSize>0&&r.windowSize!==l){const v=r.windowSize<l;l=r.windowSize,v&&S(),p=!0}r.pageSize!=null&&r.pageSize>0&&(o=r.pageSize),r.threshold!=null&&r.threshold>=0&&(h=r.threshold),r.fetchDebounce!=null&&r.fetchDebounce>=0&&(y=r.fetchDebounce),p&&d()},setGrandTotal:function(r){r==null||isNaN(r)||r<0||(A=r,_()||(g=r),d())}}}function X(i){return(i||"").replace(/^#/,"")}function U(i){const l=i===void 0?location.hash:i,o={},h=X(l);if(!h)return o;const y=h.split("&");for(let b=0;b<y.length;b++){const d=y[b];if(!d)continue;const a=d.indexOf(":"),u=a>-1?d.slice(0,a):d,m=a>-1?d.slice(a+1):"";if(u)try{o[u]=decodeURIComponent(m)}catch{o[u]=m}}return o}function ct(i){if(!i)return null;const l=U();return i in l?l[i]:null}function dt(i,l){if(!i)return;const o=U();l==null?delete o[i]:o[i]=String(l);const y=Object.keys(o).map(function(b){const d=o[b];return d===""?b:b+":"+encodeURIComponent(d)}).join("&");X(location.hash)!==y&&(location.hash=y)}function ht(i){return i.button===1||i.ctrlKey||i.metaKey||i.shiftKey?!1:(i.preventDefault(),!0)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=U,window.lnCore.hashGet=ct,window.lnCore.hashSet=dt,window.lnCore.hashLinkClick=ht),(function(){const i="data-ln-list",l="lnList",o="data-ln-list-empty";if(window[l]!==void 0)return;function u(t,e){if(t==null||isNaN(t))return"";try{return new Intl.NumberFormat(j(e)).format(t)}catch{return String(t)}}function m(t){let e=t;for(;e&&e!==document.body&&e!==document.documentElement;){const s=getComputedStyle(e).overflowY;if(s==="auto"||s==="scroll")return e;e=e.parentElement}return null}function g(t){const e=t._scrollContainer||m(t.dom);return{container:e,top:e?e.scrollTop:window.scrollY}}function A(t){t.container?t.container.scrollTop=t.top:window.scrollTo(window.scrollX,t.top)}function E(t){if(!t)return 0;const e=getComputedStyle(t),n=parseFloat(e.marginTop)||0,s=parseFloat(e.marginBottom)||0;return t.offsetHeight+n+s}function f(t){this.dom=t,this.tbody=t.querySelector("[data-ln-list-body]")||t,this.isDataDriven=t.hasAttribute("data-ln-list-source"),this.name=t.getAttribute(i)||"",this.source=t.getAttribute("data-ln-list-source")||"",this._totalSpan=t.querySelector("[data-ln-list-total]"),this._filteredSpan=t.querySelector("[data-ln-list-filtered]"),this._filteredSpan&&(this._filteredWrap=this._filteredSpan.parentElement!==t?this._filteredSpan.parentElement:null),this._selectedSpan=t.querySelector("[data-ln-list-selected]"),this._selectedSpan&&(this._selectedWrap=this._selectedSpan.parentElement!==t?this._selectedSpan.parentElement:null),this._data=[],this._filteredData=[],this._searchTerm="",this._columnFilters={},this.selectedIds=new Set,this._virtual=!1,this._itemHeight=0,this._vStart=-1,this._vEnd=-1,this._rafId=null,this._scrollHandler=null,this._resizeHandler=null,this._scrollContainer=null,this.isUl=this.tbody.tagName==="UL"||this.tbody.tagName==="OL";const e=this;return this._selectable=t.hasAttribute("data-ln-list-selectable"),this._selectableActive=!1,this._selectable&&this._enableSelection(),this.isDataDriven?(this.isLoaded=!1,this.totalCount=0,this.visibleCount=0,this.currentSort=null,this.currentFilters={},this.currentSearch="",this._windowed=!1,this._cache=null,this.isDataDriven&&t.hasAttribute("data-ln-list-window")&&this._enterWindowedMode(),this._lastTotal=0,this._lastFiltered=0,this._onSetData=function(n){const s=n.detail||{};if(e._windowed){t.classList.remove("ln-list--loading"),e._cache.ingest(s);return}e._data=s.data||[],e._lastTotal=s.total!=null?s.total:e._data.length,e._lastFiltered=s.filtered!=null?s.filtered:e._data.length,e.totalCount=e._lastTotal,e.visibleCount=e._lastFiltered,e.isLoaded=!0,t.classList.remove("ln-list--loading"),e._vStart=-1,e._vEnd=-1,e._applyFilterAndSort(),e._render(),e._updateFooter(),T(t,"ln-list:rendered",{list:e.name,total:e.totalCount,visible:e.visibleCount})},t.addEventListener("ln-list:set-data",this._onSetData),this._onSetLoading=function(n){const s=n.detail&&n.detail.loading;t.classList.toggle("ln-list--loading",!!s),s&&(e.isLoaded=!1)},t.addEventListener("ln-list:set-loading",this._onSetLoading),this._onPageFailed=function(n){!e._windowed||!e._cache||e._cache.release(n.detail&&n.detail.offset)},t.addEventListener("ln-list:page-failed",this._onPageFailed),this._onRequestRevalidate=function(){!e._windowed||!e._cache||e._cache.revalidate()},t.addEventListener("ln-list:request-revalidate",this._onRequestRevalidate),this._onClearAll=function(n){n.target.closest("[data-ln-list-clear-all]")&&(e.currentFilters={},T(t,"ln-list:clear-filters",{list:e.name}),e._requestData())},t.addEventListener("click",this._onClearAll),this._onSort=function(n){n.detail.field!=null&&(n.preventDefault(),e.currentSort=n.detail.direction==="none"?null:{field:n.detail.field,direction:n.detail.direction},e._windowed?e._requestData():(e._applyFilterAndSort(),e._vStart=-1,e._vEnd=-1,e._render()))},t.addEventListener("ln-sort:change",this._onSort),this._windowed&&this._selectable&&this._selectAllCheckbox&&this._selectAllCheckbox.classList.add("hidden"),this._onItemClick=function(n){if(n.target.closest("[data-ln-item-select]")||n.target.closest("[data-ln-item-action]")||n.target.closest("a")||n.target.closest("button")||n.ctrlKey||n.metaKey||n.button===1)return;const s=n.target.closest("[data-ln-item]");if(!s)return;const c=s.getAttribute("data-ln-item-id"),_=s._lnRecord||{};T(t,"ln-list:item-click",{list:e.name,id:c,record:_})},this.tbody&&this.tbody.addEventListener("click",this._onItemClick),this._onItemAction=function(n){const s=n.target.closest("[data-ln-item-action]");if(!s)return;n.stopPropagation();const c=s.closest("[data-ln-item]");if(!c)return;const _=s.getAttribute("data-ln-item-action"),S=c.getAttribute("data-ln-item-id"),w=c._lnRecord||{};T(t,"ln-list:item-action",{list:e.name,id:S,action:_,record:w})},this.tbody&&this.tbody.addEventListener("click",this._onItemAction),this._onSearchChange=function(n){n.preventDefault(),e.currentSearch=n.detail&&n.detail.term||"",T(t,"ln-list:search",{list:e.name,query:e.currentSearch}),e._requestData()},t.addEventListener("ln-search:change",this._onSearchChange),this.tbody&&this.tbody.children.length>0&&this._parseChildren(),this._windowed?this._kickWindowInitial():T(t,"ln-list:request-data",{list:this.name,sort:this.currentSort,filters:this.currentFilters,search:this.currentSearch})):(this._emptyObserver=null,this.tbody&&this.tbody.children.length>0?this._parseChildren():this.tbody&&(this._emptyObserver=new MutationObserver(function(){e.tbody.children.length>0&&(e._emptyObserver.disconnect(),e._emptyObserver=null,e._parseChildren())}),this._emptyObserver.observe(this.tbody,{childList:!0})),this._onSearch=function(n){n.preventDefault(),e._searchTerm=n.detail&&n.detail.term||"",e._applyFilterAndSort(),e._vStart=-1,e._vEnd=-1,e._render(),e._updateFooter(),T(t,"ln-list:filter",{term:e._searchTerm,matched:e._filteredData.length,total:e._data.length})},t.addEventListener("ln-search:change",this._onSearch)),this._onClear=function(n){if(!n.target.closest("[data-ln-list-clear]")||Q(t,"ln-list:before-clear-search",{list:e.name}).defaultPrevented)return;e.isDataDriven?e.currentSearch="":e._searchTerm="";const _=document.querySelector('[data-ln-search="'+t.id+'"]');if(_){const S=_.tagName==="INPUT"?_:_.querySelector("input");S&&(S.value="",S.dispatchEvent(new Event("input",{bubbles:!0})))}e.isDataDriven?(T(t,"ln-list:search",{list:e.name,query:""}),e._requestData()):(e._applyFilterAndSort(),e._vStart=-1,e._vEnd=-1,e._render(),e._updateFooter(),T(t,"ln-list:filter",{term:"",matched:e._filteredData.length,total:e._data.length}))},t.addEventListener("click",this._onClear),this}f.prototype._parseChildren=function(){const t=Array.from(this.tbody.children).filter(e=>!e.classList.contains("ln-list__spacer"));this._data=[],t.length>0&&(this._itemHeight=E(t[0])||50);for(let e=0;e<t.length;e++){const n=t[e],s=n.getAttribute("data-ln-item-id")||n.getAttribute("id"),c=n.textContent.trim().toLowerCase();let _=null;if(this.isDataDriven){_={},s!=null&&(_.id=s);const S=n.querySelectorAll("[data-ln-list-field]");for(let w=0;w<S.length;w++){const r=S[w],p=r.getAttribute("data-ln-list-field");p&&(_[p]=r.textContent.trim())}}this._data.push({html:n.outerHTML,searchText:c,id:s,..._})}this._filteredData=this._data.slice(),this.isDataDriven&&(this._lastTotal=this._data.length,this._lastFiltered=this._data.length,this.totalCount=this._data.length,this.visibleCount=this._data.length,this._updateFooter()),this._render(),T(this.dom,"ln-list:ready",{total:this._data.length})},f.prototype._applyFilterAndSort=function(){if(this.isDataDriven){const t=(this.currentSearch||"").trim().toLowerCase(),e=this.currentFilters||{},n=Object.keys(e).length>0;if(this._filteredData=this._data.filter(function(r){if(t){let p=!1;for(const v in r)if(r.hasOwnProperty(v)&&typeof r[v]=="string"&&v!=="html"&&v!=="searchText"&&r[v].toLowerCase().indexOf(t)!==-1){p=!0;break}if(!p)return!1}if(n)for(const p in e){const v=e[p];if(v&&v.length>0){const D=r[p],H=D!=null?String(D):"";if(v.indexOf(H)===-1)return!1}}return!0}),this.visibleCount=this._filteredData.length,!this.currentSort||!this.currentSort.field||!this.currentSort.direction)return;const s=this.currentSort.field,c=this.currentSort.direction==="desc"?-1:1,_=this._filteredData.map(function(r){return r[s]}),S=et(_),w=typeof Intl<"u"?new Intl.Collator(j(this.dom),{sensitivity:"base"}):null;this._filteredData.sort(function(r,p){return it(r[s],p[s],S,w)*c})}else{const t=this._searchTerm;t?this._filteredData=this._data.filter(function(e){return e.searchText.indexOf(t)!==-1}):this._filteredData=this._data.slice()}},f.prototype._render=function(){if(this.tbody)if(this.isDataDriven){if(this._windowed){this._renderWindowed();return}const t=this._lastTotal,e=this.visibleCount;if(t===0||this._filteredData.length===0||e===0){this._disableVirtualScroll(),this._showEmptyState();return}this._filteredData.length>200?(this._enableVirtualScroll(),this._renderVirtual()):(this._disableVirtualScroll(),this._renderAll())}else{const t=this._filteredData.length;t===0&&this._searchTerm?(this._disableVirtualScroll(),this._showEmptyState()):t>200?(this._enableVirtualScroll(),this._renderVirtual()):(this._disableVirtualScroll(),this._renderAll())}},f.prototype._renderAll=function(){if(this.isDataDriven){const t=this._filteredData,e=document.createDocumentFragment();for(let s=0;s<t.length;s++){const c=this._buildItem(t[s]);if(!c)break;e.appendChild(c)}const n=g(this);this.tbody.textContent="",this.tbody.appendChild(e),A(n),this._selectable&&this._updateSelectAll()}else{const t=[],e=this._filteredData;for(let s=0;s<e.length;s++)t.push(e[s].html);const n=g(this);this.tbody.innerHTML=t.join(""),A(n),this._selectable&&this._restoreSelection()}},f.prototype._readGridLayout=function(){const t=getComputedStyle(this.tbody),e=t.gridTemplateColumns;let n=1;if(e&&e!=="none"){const c=e.trim().split(/\s+/).filter(Boolean);c.length>0&&(n=c.length)}const s=parseFloat(t.rowGap);return{columns:n,rowGap:isNaN(s)?0:s}},f.prototype._measureItemHeight=function(){if(this._windowed){const t=this._cache.peek(),e=t?this._buildItem(t):this._buildPlaceholderItem();e&&(this.tbody.textContent="",this.tbody.appendChild(e),this._itemHeight=E(e)||50,this.tbody.textContent="")}else if(this.isDataDriven){if(this._data.length>0){const t=this._buildItem(this._data[0]);t&&(this.tbody.textContent="",this.tbody.appendChild(t),this._itemHeight=E(t)||50,this.tbody.textContent="")}}else{const t=this.tbody.children;t.length>0&&(this._itemHeight=E(t[0])||50)}},f.prototype._enableVirtualScroll=function(){if(this._virtual)return;this._virtual=!0,this._vStart=-1,this._vEnd=-1;const t=this;this._itemHeight||this._measureItemHeight(),this._scrollContainer=m(this.dom);const e=this._scrollContainer||window;this._scrollHandler=function(){t._rafId||(t._rafId=requestAnimationFrame(function(){t._rafId=null,t._windowed?t._renderWindowed():t._renderVirtual()}))},this._resizeHandler=function(){t._itemHeight=0,t._measureItemHeight(),t._vStart=-1,t._vEnd=-1,t._windowed?t._renderWindowed():t._renderVirtual()},e.addEventListener("scroll",this._scrollHandler,{passive:!0}),window.addEventListener("resize",this._resizeHandler,{passive:!0})},f.prototype._disableVirtualScroll=function(){this._virtual&&(this._virtual=!1,this._scrollHandler&&((this._scrollContainer||window).removeEventListener("scroll",this._scrollHandler),this._scrollHandler=null),this._resizeHandler&&(window.removeEventListener("resize",this._resizeHandler),this._resizeHandler=null),this._scrollContainer=null,this._rafId&&(cancelAnimationFrame(this._rafId),this._rafId=null),this._vStart=-1,this._vEnd=-1)},f.prototype._renderVirtual=function(){const t=this._filteredData,e=t.length,n=this._itemHeight;if(!n||!e)return;const s=this._scrollContainer;let c,_;if(s){const x=this.tbody.getBoundingClientRect(),L=s.getBoundingClientRect(),C=s===this.tbody?0:x.top-L.top+s.scrollTop;c=s.scrollTop-C,_=s.clientHeight}else{const L=this.tbody.getBoundingClientRect().top+window.scrollY;c=window.scrollY-L,_=window.innerHeight}const S=this._readGridLayout(),w=S.columns,r=S.rowGap,p=n+r,v=Math.ceil(e/w);let D=Math.max(0,Math.floor(c/p)-15);D=Math.min(D,v);const H=Math.ceil(_/p)+30,M=Math.min(D+H,v),F=Math.min(D*w,e),q=Math.min(M*w,e);if(F===this._vStart&&q===this._vEnd)return;this._vStart=F,this._vEnd=q;const k=D*p,I=(v-M)*p;if(this.isDataDriven){const x=document.createDocumentFragment();if(k>0){const C=document.createElement(this.isUl?"li":"div");C.className="ln-list__spacer",C.style.height=k+"px",x.appendChild(C)}for(let C=F;C<q;C++){const O=this._buildItem(t[C]);O&&x.appendChild(O)}if(I>0){const C=document.createElement(this.isUl?"li":"div");C.className="ln-list__spacer",C.style.height=I+"px",x.appendChild(C)}const L=g(this);this.tbody.textContent="",this.tbody.appendChild(x),A(L),this._selectable&&this._updateSelectAll()}else{let x="";k>0&&(x+=`<${this.isUl?"li":"div"} class="ln-list__spacer" style="height:${k}px;padding:0;border:none"></${this.isUl?"li":"div"}>`);for(let C=F;C<q;C++)x+=t[C].html;I>0&&(x+=`<${this.isUl?"li":"div"} class="ln-list__spacer" style="height:${I}px;padding:0;border:none"></${this.isUl?"li":"div"}>`);const L=g(this);this.tbody.innerHTML=x,A(L),this._selectable&&this._restoreSelection()}},f.prototype._buildPlaceholderItem=function(){const t=document.createElement(this.isUl?"li":"div");return t.className="ln-list__placeholder",t.setAttribute("aria-hidden","true"),t.style.height=this._itemHeight+"px",t},f.prototype._renderWindowed=function(){if(this.isLoaded&&this._cache.logicalTotal===0){this._disableVirtualScroll(),this._showEmptyState();return}this._virtual||this._enableVirtualScroll();const t=this._itemHeight;if(!t)return;const e=this._scrollContainer;let n,s;if(e){const L=this.tbody.getBoundingClientRect(),C=e.getBoundingClientRect(),O=e===this.tbody?0:L.top-C.top+e.scrollTop;n=e.scrollTop-O,s=e.clientHeight}else{const C=this.tbody.getBoundingClientRect().top+window.scrollY;n=window.scrollY-C,s=window.innerHeight}const c=this._readGridLayout(),_=c.columns,S=c.rowGap,w=t+S,r=this._cache.logicalTotal,p=Math.ceil(r/_);let v=Math.max(0,Math.floor(n/w)-15);v=Math.min(v,p);const D=Math.ceil(s/w)+30,H=Math.min(v+D,p),M=Math.min(v*_,r),F=Math.min(H*_,r),q=v*w,k=(p-H)*w,I=document.createDocumentFragment();if(q>0){const L=document.createElement(this.isUl?"li":"div");L.className="ln-list__spacer",L.style.height=q+"px",I.appendChild(L)}for(let L=M;L<F;L++)if(this._cache.has(L)){const C=this._buildItem(this._cache.get(L));C&&I.appendChild(C)}else I.appendChild(this._buildPlaceholderItem());if(k>0){const L=document.createElement(this.isUl?"li":"div");L.className="ln-list__spacer",L.style.height=k+"px",I.appendChild(L)}const x=g(this);this.tbody.textContent="",this.tbody.appendChild(I),A(x),this._vStart=M,this._vEnd=F,this._cache.ensure(M,F)},f.prototype._showEmptyState=function(){this.tbody.textContent="";let t=null;if(this.isDataDriven){const e=this._lastTotal!=null?this._lastTotal:this._data.length,n=this.visibleCount,s=this.currentSearch&&(n<e||n===0),c=s?this.name+"-empty-filtered":this.name+"-empty";if(t=G(this.dom,c,"ln-list"),!t){const _=this.dom.querySelector("template[data-ln-empty]");if(_){const S=s?"search":"initial",w=_.content.querySelector(`[data-ln-empty-when="${S}"]`)||_.content.firstElementChild;w&&(t=document.importNode(w,!0))}}}else{const e=this.dom.querySelector(`template[${o}]`);e&&(t=document.importNode(e.content,!0))}if(t)if(t.tagName==="LI"||t.tagName==="TR")this.tbody.appendChild(t);else{const e=document.createElement(this.isUl?"li":"div");e.appendChild(t),this.tbody.appendChild(e)}T(this.dom,"ln-list:empty",{term:this.isDataDriven?this.currentSearch:this._searchTerm,total:this.isDataDriven?this._lastTotal!=null?this._lastTotal:this._data.length:this._data.length})},f.prototype._buildItem=function(t){const e=G(this.dom,this.name+"-row","ln-list");if(!e)return null;const n=e.querySelector("[data-ln-item]")||e.firstElementChild;if(!n)return null;if(W(n,t),N(n,t),n._lnRecord=t,t.id!=null&&(n.setAttribute("data-ln-item-id",t.id),this._selectable&&this.selectedIds.has(String(t.id)))){n.classList.add("ln-item-selected");const s=n.querySelector("[data-ln-item-select]");s&&(s.checked=!0)}return n},f.prototype._enableSelection=function(){if(this._selectableActive)return;this._selectableActive=!0;const t=this;this._onSelectionChange=function(e){const n=e.target.closest("[data-ln-item-select]");if(!n)return;const s=n.closest("[data-ln-item]");if(!s)return;const c=s.getAttribute("data-ln-item-id");c!=null&&(n.checked?(t.selectedIds.add(String(c)),s.classList.add("ln-item-selected")):(t.selectedIds.delete(String(c)),s.classList.remove("ln-item-selected")),t._updateSelectAll(),t._updateFooter(),T(t.dom,"ln-list:select",{list:t.name,selectedIds:t.selectedIds,count:t.selectedIds.size}))},this.tbody.addEventListener("change",this._onSelectionChange),this._selectAllCheckbox=this.dom.querySelector("[data-ln-list-select-all]"),this._selectAllCheckbox&&(this._onSelectAll=function(){const e=t._selectAllCheckbox.checked,n=t.tbody.querySelectorAll("[data-ln-item]");for(let s=0;s<n.length;s++){const c=n[s],_=c.getAttribute("data-ln-item-id"),S=c.querySelector("[data-ln-item-select]");_!=null&&(e?(t.selectedIds.add(String(_)),c.classList.add("ln-item-selected")):(t.selectedIds.delete(String(_)),c.classList.remove("ln-item-selected")),S&&(S.checked=e))}T(t.dom,"ln-list:select-all",{list:t.name,selected:e}),T(t.dom,"ln-list:select",{list:t.name,selectedIds:t.selectedIds,count:t.selectedIds.size}),t._updateFooter()},this._selectAllCheckbox.addEventListener("change",this._onSelectAll))},f.prototype._updateSelectAll=function(){if(!this._selectAllCheckbox)return;const t=this.tbody.querySelectorAll("[data-ln-item]");let e=t.length>0;for(let n=0;n<t.length;n++){const s=t[n].getAttribute("data-ln-item-id");if(s!=null&&!this.selectedIds.has(String(s))){e=!1;break}}this._selectAllCheckbox.checked=e},f.prototype._restoreSelection=function(){if(!this.tbody)return;const t=this.tbody.querySelectorAll("[data-ln-item]");for(let e=0;e<t.length;e++){const n=t[e].getAttribute("data-ln-item-id"),s=n!=null&&this.selectedIds.has(String(n));t[e].classList.toggle("ln-item-selected",s);const c=t[e].querySelector("[data-ln-item-select]");c&&(c.checked=s)}this._updateSelectAll()},f.prototype._requestData=function(){if(this._windowed){this.dom.classList.add("ln-list--loading"),this._cache.invalidate({sort:this.currentSort,filters:this.currentFilters,search:this.currentSearch});return}J(this,"ln-list:request-data","list")},f.prototype._enterWindowedMode=function(){const t=this,e=this.dom,n=parseInt(e.getAttribute("data-ln-list-window"),10),s=parseInt(e.getAttribute("data-ln-list-window-page"),10),c=parseInt(e.getAttribute("data-ln-list-window-threshold"),10);this._onCacheChange=function(){!t._windowed||!t._cache||(t.totalCount=t._cache.grandTotal,t.visibleCount=t._cache.logicalTotal,t._lastTotal=t._cache.grandTotal,t.isLoaded=!0,t._vStart=-1,t._vEnd=-1,t._render(),t._updateFooter(),T(e,"ln-list:rendered",{list:t.name,total:t.totalCount,visible:t.visibleCount}))},this._renderBatch=ot(this._onCacheChange),this._cache=at({windowSize:n>0?n:1e3,pageSize:s>0?s:200,threshold:c>=0?c:25,fetchDebounce:120,requestPage:function(_,S,w){T(e,"ln-list:request-data",{list:t.name,sort:_.sort,filters:_.filters,search:_.search,offset:S,limit:w,queryGen:t._cache.queryGen})},onChange:this._renderBatch}),this._windowed=!0,this._selectable&&this._selectAllCheckbox&&this._selectAllCheckbox.classList.add("hidden")},f.prototype._kickWindowInitial=function(){if(this._data.length>0){const t=parseInt(this.dom.getAttribute("data-ln-list-count"),10),e=t>0?t:this._data.length;this._cache.ingest({data:this._data,offset:0,total:e,filtered:e})}else this.dom.classList.add("ln-list--loading"),this._cache.requestInitial({sort:this.currentSort,filters:this.currentFilters,search:this.currentSearch})},f.prototype._exitWindowedMode=function(){this._disableVirtualScroll(),this._cache&&this._cache.destroy(),this._cache=null,this._windowed=!1,this._renderBatch=null,this._onCacheChange=null,this._selectAllCheckbox&&this._selectAllCheckbox.classList.remove("hidden"),this._itemHeight=0,this._vStart=-1,this._vEnd=-1,this._data=[],this._filteredData=[],this.dom.classList.add("ln-list--loading"),this._requestData()},f.prototype._updateFooter=function(){let t=0,e=0;this.isDataDriven?(t=this._lastTotal!=null?this._lastTotal:this._data.length,e=this.visibleCount):(t=this._data.length,e=this._filteredData.length);const n=e<t;if(this._totalSpan&&(this._totalSpan.textContent=u(t,this.dom)),this._filteredSpan&&(this._filteredSpan.textContent=n?u(e,this.dom):""),this._filteredWrap&&this._filteredWrap.classList.toggle("hidden",!n),this._selectedSpan){const s=this.selectedIds?this.selectedIds.size:0;this._selectedSpan.textContent=s>0?u(s,this.dom):"",this._selectedWrap&&this._selectedWrap.classList.toggle("hidden",s===0)}},f.prototype.destroy=function(){this.dom[l]&&(this._disableVirtualScroll(),this.isDataDriven?(this._cache&&this._cache.destroy(),this.dom.removeEventListener("ln-list:set-data",this._onSetData),this.dom.removeEventListener("ln-list:set-loading",this._onSetLoading),this.dom.removeEventListener("ln-list:page-failed",this._onPageFailed),this.dom.removeEventListener("ln-list:request-revalidate",this._onRequestRevalidate),this.dom.removeEventListener("ln-sort:change",this._onSort),this.dom.removeEventListener("click",this._onClearAll),this.tbody&&(this.tbody.removeEventListener("click",this._onItemClick),this.tbody.removeEventListener("click",this._onItemAction)),this.dom.removeEventListener("ln-search:change",this._onSearchChange)):(this._emptyObserver&&(this._emptyObserver.disconnect(),this._emptyObserver=null),this.dom.removeEventListener("ln-search:change",this._onSearch)),this._onSelectionChange&&this.tbody&&this.tbody.removeEventListener("change",this._onSelectionChange),this._selectAllCheckbox&&this._onSelectAll&&this._selectAllCheckbox.removeEventListener("change",this._onSelectAll),this._onClear&&this.dom.removeEventListener("click",this._onClear),this._data=[],this._filteredData=[],delete this.dom[l])},nt(i,l,f,"ln-list",{extraAttributes:["data-ln-list-window","data-ln-list-window-page","data-ln-list-window-threshold","data-ln-list-count"],onAttributeChange:function(t,e){const n=t[l];if(!(!n||!n.isDataDriven)){if(e==="data-ln-list-window"){const s=t.hasAttribute("data-ln-list-window");if(s&&!n._windowed)n._enterWindowedMode(),n._kickWindowInitial();else if(!s&&n._windowed)n._exitWindowedMode();else if(s&&n._windowed){const c=parseInt(t.getAttribute("data-ln-list-window"),10);c>0&&n._cache.configure({windowSize:c})}return}if(!(!n._windowed||!n._cache)){if(e==="data-ln-list-window-page"){const s=parseInt(t.getAttribute("data-ln-list-window-page"),10);s>0&&n._cache.configure({pageSize:s})}else if(e==="data-ln-list-window-threshold"){const s=parseInt(t.getAttribute("data-ln-list-window-threshold"),10);s>=0&&n._cache.configure({threshold:s})}else if(e==="data-ln-list-count"){const s=parseInt(t.getAttribute("data-ln-list-count"),10);s>=0&&n._cache.setGrandTotal(s)}}}}})})()})();
@@ -0,0 +1,28 @@
1
+ // ── JS state: ln-list structural/state overrides ──
2
+
3
+ .ln-list--loading [data-ln-list-body] {
4
+ opacity: 0.5;
5
+ pointer-events: none;
6
+ }
7
+
8
+ // The virtual-scroll spacer is library-injected. In a grid list body it must
9
+ // span the full row so it occupies whole-row height, not a single track.
10
+ // Harmless in plain single-column list mode (1 / -1 spans the lone column).
11
+ .ln-list__spacer {
12
+ grid-column: 1 / -1;
13
+ }
14
+
15
+ // Windowed-virtualization placeholder item — static fill, no shimmer, parity
16
+ // with ln-table (window-cache.md §4). margin must stay zeroed: JS assigns
17
+ // height from the real item's outerHeight (offsetHeight + margin already
18
+ // folded in), so an inherited margin here would double-count and desync the
19
+ // spacer math. padding/border zeroed so the fill paints edge-to-edge; no
20
+ // grid-column override — each placeholder is one cell, not a collapsed
21
+ // row block like the spacer.
22
+ .ln-list__placeholder {
23
+ margin: 0 !important;
24
+ padding: 0 !important;
25
+ border: none !important;
26
+ list-style: none !important;
27
+ background: var(--bg-sunken);
28
+ }