@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.
Files changed (219) 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 +189 -99
  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 -55
  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 -0
  173. package/scss/components/_form.scss +7 -0
  174. package/scss/components/_ln-table.scss +14 -5
  175. package/scss/components/_sort.scss +10 -0
  176. package/scss/components/_table.scss +68 -1
  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 +48 -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 +47 -0
  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 +4 -1
  198. package/scss/config/mixins/_ln-table.scss +51 -93
  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 +232 -38
  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 +39 -0
  209. package/scss/ln-ashlar.scss +8 -2
  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 -1103
  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 -168
  218. package/scss/components/_data-table.scss +0 -83
  219. package/scss/config/mixins/_data-table.scss +0 -346
@@ -1 +1 @@
1
- (function(){"use strict";function b(a,t,o){a.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:o||{}}))}function c(a,t){if(!document.body){document.addEventListener("DOMContentLoaded",function(){c(a,t)}),console.warn("["+t+'] Script loaded before <body> — add "defer" to your <script> tag');return}a()}const f={};function p(a,t){f[a]=t}function m(a){return f[a]||{ingress:t=>t,egress:t=>t}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=p,window.lnCore.getDataMapper=m),(function(){const a="[data-ln-progress]",t="lnProgress";if(window[t]!==void 0)return;function o(e){u(e)}function u(e){const r=Array.from(e.querySelectorAll(a));for(const n of r)n[t]||(n[t]=new d(n));e.hasAttribute&&e.hasAttribute("data-ln-progress")&&!e[t]&&(e[t]=new d(e))}function d(e){return this.dom=e,this._attrObserver=null,this._parentObserver=null,l.call(this),g.call(this),v.call(this),this}d.prototype.destroy=function(){this.dom[t]&&(this._attrObserver&&this._attrObserver.disconnect(),this._parentObserver&&this._parentObserver.disconnect(),delete this.dom[t])};function h(){c(function(){new MutationObserver(function(r){for(const n of r)if(n.type==="childList")for(const s of n.addedNodes)s.nodeType===1&&u(s);else n.type==="attributes"&&u(n.target)}).observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-ln-progress"]})},"ln-progress")}h();function g(){const e=this,r=new MutationObserver(function(n){for(const s of n)(s.attributeName==="data-ln-progress"||s.attributeName==="data-ln-progress-max")&&l.call(e)});r.observe(this.dom,{attributes:!0,attributeFilter:["data-ln-progress","data-ln-progress-max"]}),this._attrObserver=r}function v(){const e=this,r=this.dom.parentElement;if(!r||!r.hasAttribute("data-ln-progress-max"))return;const n=new MutationObserver(function(s){for(const i of s)i.attributeName==="data-ln-progress-max"&&l.call(e)});n.observe(r,{attributes:!0,attributeFilter:["data-ln-progress-max"]}),this._parentObserver=n}function l(){const e=parseFloat(this.dom.getAttribute("data-ln-progress"))||0,r=this.dom.parentElement,s=(r&&r.hasAttribute("data-ln-progress-max")?parseFloat(r.getAttribute("data-ln-progress-max")):null)||parseFloat(this.dom.getAttribute("data-ln-progress-max"))||100;let i=s>0?e/s*100:0;i<0&&(i=0),i>100&&(i=100),this.dom.style.width=i+"%";const w=Math.max(0,Math.min(e,s));this.dom.setAttribute("role","progressbar"),this.dom.setAttribute("aria-valuemin","0"),this.dom.setAttribute("aria-valuemax",String(s)),this.dom.setAttribute("aria-valuenow",String(w)),b(this.dom,"ln-progress:change",{target:this.dom,value:e,max:s,percentage:i})}window[t]=o,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){o(document.body)}):o(document.body)})()})();
1
+ (function(){"use strict";if(typeof window<"u"){const t=console.warn;console.warn=function(...e){typeof e[0]=="string"&&(e[0].startsWith("[ln-")||e[0].startsWith("[lnCore"))&&!(document.documentElement.hasAttribute("data-ln-debug")||document.body&&document.body.hasAttribute("data-ln-debug"))||t.apply(console,e)}}const g={};function T(t,e){g[t]||(g[t]=document.querySelector('[data-ln-template="'+t+'"]'));const o=g[t];return o?o.content.cloneNode(!0):(console.warn("["+(e||"ln-core")+'] Template "'+t+'" not found'),null)}function q(t,e,o){t.dispatchEvent(new CustomEvent(e,{bubbles:!0,detail:o||{}}))}function v(t,e){if(!t||!e)return t;const o=t.querySelectorAll("[data-ln-field]");for(let n=0;n<o.length;n++){const r=o[n],i=r.getAttribute("data-ln-field");e[i]!=null&&(r.textContent=e[i])}const u=t.querySelectorAll("[data-ln-attr]");for(let n=0;n<u.length;n++){const r=u[n],i=r.getAttribute("data-ln-attr").split(",");for(let s=0;s<i.length;s++){const a=i[s].trim().split(":");if(a.length!==2)continue;const d=a[0].trim(),f=a[1].trim();e[f]!=null&&r.setAttribute(d,e[f])}}const c=t.querySelectorAll("[data-ln-show]");for(let n=0;n<c.length;n++){const r=c[n],i=r.getAttribute("data-ln-show");i in e&&r.classList.toggle("hidden",!e[i])}const l=t.querySelectorAll("[data-ln-class]");for(let n=0;n<l.length;n++){const r=l[n],i=r.getAttribute("data-ln-class").split(",");for(let s=0;s<i.length;s++){const a=i[s].trim().split(":");if(a.length!==2)continue;const d=a[0].trim(),f=a[1].trim();f in e&&r.classList.toggle(d,!!e[f])}}return t}function D(t,e){t.matches&&t.matches("[data-ln-form], [data-ln-fillable]")&&t.dispatchEvent(new CustomEvent("ln-fill",{detail:e??null,bubbles:!0}));const o=t.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let u=0;u<o.length;u++)o[u].dispatchEvent(new CustomEvent("ln-fill",{detail:e??null,bubbles:!0}));return t}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(t){if(!(!t.target.matches||!t.target.matches("[data-ln-fillable]")))if(t.detail)v(t.target,t.detail);else{const e=t.target.querySelectorAll("[data-ln-field]");for(let o=0;o<e.length;o++)e[o].textContent=""}})));function A(t,e){if(!t||!e)return t;const o=document.createTreeWalker(t,NodeFilter.SHOW_TEXT);for(;o.nextNode();){const l=o.currentNode;l.textContent.indexOf("{{")!==-1&&(l.textContent=l.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(n,r){return e[r]!==void 0?e[r]:""}))}const u=function(l,n){return e[n]!==void 0?e[n]:""},c=Array.from(t.querySelectorAll("*"));t.nodeType===1&&c.push(t);for(let l=0;l<c.length;l++){const n=c[l],r=n.attributes;for(let i=0;i<r.length;i++){const s=r[i];s.value.indexOf("{{")!==-1&&n.setAttribute(s.name,s.value.replace(/\{\{\s*(\w+)\s*\}\}/g,u))}}return t}function N(t,e,o,u,c,l){const n={};for(let i=0;i<t.children.length;i++){const s=t.children[i],a=s.getAttribute("data-ln-key");a&&(n[a]=s)}const r=document.createDocumentFragment();for(let i=0;i<e.length;i++){const s=e[i],a=String(u(s));let d=n[a];if(d)c(d,s,i);else{const f=T(o,l);if(!f||(A(f,s),d=f.firstElementChild,!d))continue;d.setAttribute("data-ln-key",a),c(d,s,i)}r.appendChild(d)}t.textContent="",t.appendChild(r)}function O(t,e){if(!document.body){document.addEventListener("DOMContentLoaded",function(){O(t,e)}),console.warn("["+e+'] Script loaded before <body> — add "defer" to your <script> tag');return}t()}function b(t,e,o,u){if(t.nodeType!==1)return;const l=e.indexOf("[")!==-1||e.indexOf(".")!==-1||e.indexOf("#")!==-1?e:"["+e+"]",n=Array.from(t.querySelectorAll(l));t.matches&&t.matches(l)&&n.push(t);for(const r of n)r[o]||(r[o]=new u(r))}function F(t,e,o,u,c={}){const l=c.extraAttributes||[],n=c.onAttributeChange||null,r=c.onInit||null;function i(s){const a=s||document.body;b(a,t,e,o),r&&r(a)}return O(function(){const s=new MutationObserver(function(d){for(let f=0;f<d.length;f++){const h=d[f];if(h.type==="childList"){for(let m=0;m<h.addedNodes.length;m++){const p=h.addedNodes[m];p.nodeType===1&&(b(p,t,e,o),r&&r(p))}for(let m=0;m<h.removedNodes.length;m++){const p=h.removedNodes[m];if(p.nodeType===1){const k=t.indexOf("[")!==-1||t.indexOf(".")!==-1||t.indexOf("#")!==-1?t:"["+t+"]",y=Array.from(p.querySelectorAll(k));p.matches&&p.matches(k)&&y.push(p);for(let C=0;C<y.length;C++){const M=y[C];if(!document.contains(M)){const x=M[e];x&&typeof x.destroy=="function"&&x.destroy()}}}}}else h.type==="attributes"&&(n&&h.target[e]?n(h.target,h.attributeName):(b(h.target,t,e,o),r&&r(h.target)))}});let a=[];if(t.indexOf("[")!==-1){const d=/\[([\w-]+)/g;let f;for(;(f=d.exec(t))!==null;)a.push(f[1])}else a.push(t);s.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:a.concat(l)})},u),window[e]=i,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){i(document.body)}):i(document.body),i}const L={};function j(t,e){L[t]=e}function W(t){return L[t]||{ingress:e=>e,egress:e=>e}}const _={};function S(t,e){if(!t||typeof e!="object")return;const o=t.toLowerCase().split("-")[0];_[o]=e}function B(t){if(!t)return null;const e=t.toLowerCase().split("-")[0];return _[e]||null}S("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=j,window.lnCore.getDataMapper=W,window.lnCore.registerLocaleFallback=S,window.lnCore.getLocaleFallback=B,window.lnCore.fillTemplate=A,window.lnCore.fill=v,window.lnCore.lnFill=D,window.lnCore.renderList=N);function E(t){return(t||"").replace(/^#/,"")}function w(t){const e=t===void 0?location.hash:t,o={},u=E(e);if(!u)return o;const c=u.split("&");for(let l=0;l<c.length;l++){const n=c[l];if(!n)continue;const r=n.indexOf(":"),i=r>-1?n.slice(0,r):n,s=r>-1?n.slice(r+1):"";if(i)try{o[i]=decodeURIComponent(s)}catch{o[i]=s}}return o}function I(t){if(!t)return null;const e=w();return t in e?e[t]:null}function K(t,e){if(!t)return;const o=w();e==null?delete o[t]:o[t]=String(e);const c=Object.keys(o).map(function(l){const n=o[l];return n===""?l:l+":"+encodeURIComponent(n)}).join("&");E(location.hash)!==c&&(location.hash=c)}function R(t){return t.button===1||t.ctrlKey||t.metaKey||t.shiftKey?!1:(t.preventDefault(),!0)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=w,window.lnCore.hashGet=I,window.lnCore.hashSet=K,window.lnCore.hashLinkClick=R),(function(){const t="[data-ln-progress]",e="lnProgress";if(window[e]!==void 0)return;function o(n){return this.dom=n,this._attrObserver=null,this._parentObserver=null,l.call(this),u.call(this),c.call(this),this}o.prototype.destroy=function(){this.dom[e]&&(this._attrObserver&&this._attrObserver.disconnect(),this._parentObserver&&this._parentObserver.disconnect(),delete this.dom[e])};function u(){const n=this,r=new MutationObserver(function(i){for(const s of i)(s.attributeName==="data-ln-progress"||s.attributeName==="data-ln-progress-max")&&l.call(n)});r.observe(this.dom,{attributes:!0,attributeFilter:["data-ln-progress","data-ln-progress-max"]}),this._attrObserver=r}function c(){const n=this,r=this.dom.parentElement;if(!r)return;const i=new MutationObserver(function(s){for(const a of s)a.attributeName==="data-ln-progress-max"&&l.call(n)});i.observe(r,{attributes:!0,attributeFilter:["data-ln-progress-max"]}),this._parentObserver=i}function l(){const n=parseFloat(this.dom.getAttribute("data-ln-progress"))||0,r=this.dom.parentElement,s=(r&&r.hasAttribute("data-ln-progress-max")?parseFloat(r.getAttribute("data-ln-progress-max")):null)||parseFloat(this.dom.getAttribute("data-ln-progress-max"))||100;let a=s>0?n/s*100:0;a<0&&(a=0),a>100&&(a=100),this.dom.style.width=a+"%";const d=Math.max(0,Math.min(n,s));this.dom.setAttribute("role","progressbar"),this.dom.setAttribute("aria-valuemin","0"),this.dom.setAttribute("aria-valuemax",String(s)),this.dom.setAttribute("aria-valuenow",String(d)),q(this.dom,"ln-progress:change",{target:this.dom,value:n,max:s,percentage:a})}F(t,e,o,"ln-progress")})()})();
@@ -1,150 +1,98 @@
1
- import { dispatch, guardBody } from '../../ln-core';
2
-
3
- (function () {
4
- const DOM_SELECTOR = '[data-ln-progress]';
5
- const DOM_ATTRIBUTE = 'lnProgress';
6
-
7
- if (window[DOM_ATTRIBUTE] !== undefined) return;
8
-
9
- function constructor(domRoot) {
10
- findElements(domRoot);
11
- }
12
-
13
- // Local findElements — intentional divergence from ln-core helper:
14
- // inlines selector + constructor (no ComponentClass parameter) and
15
- // includes a domRoot self-match branch so the childList re-init
16
- // path picks up the inserted root itself.
17
- function findElements(domRoot) {
18
- const items = Array.from(domRoot.querySelectorAll(DOM_SELECTOR));
19
-
20
- for (const item of items) {
21
- if (!item[DOM_ATTRIBUTE]) {
22
- item[DOM_ATTRIBUTE] = new _constructor(item);
23
- }
24
- }
25
-
26
- if (domRoot.hasAttribute && domRoot.hasAttribute('data-ln-progress') && !domRoot[DOM_ATTRIBUTE]) {
27
- domRoot[DOM_ATTRIBUTE] = new _constructor(domRoot);
28
- }
29
- }
30
-
31
- function _constructor(dom) {
32
- this.dom = dom;
33
- this._attrObserver = null;
34
- this._parentObserver = null;
35
- _render.call(this);
36
- _listenValues.call(this);
37
- _listenParent.call(this);
38
- return this;
39
- }
40
-
41
- _constructor.prototype.destroy = function () {
42
- if (!this.dom[DOM_ATTRIBUTE]) return;
43
- if (this._attrObserver) {
44
- this._attrObserver.disconnect();
45
- }
46
- if (this._parentObserver) {
47
- this._parentObserver.disconnect();
48
- }
49
- delete this.dom[DOM_ATTRIBUTE];
50
- };
51
-
52
- function _domObserver() {
53
- guardBody(function () {
54
- const observer = new MutationObserver(function (mutations) {
55
- for (const mutation of mutations) {
56
- if (mutation.type === "childList") {
57
- for (const item of mutation.addedNodes) {
58
- if (item.nodeType === 1) {
59
- findElements(item);
60
- }
61
- }
62
- } else if (mutation.type === 'attributes') {
63
- findElements(mutation.target);
64
- }
65
- }
66
- });
67
-
68
- observer.observe(document.body, {
69
- childList: true,
70
- subtree: true,
71
- attributes: true,
72
- attributeFilter: ['data-ln-progress']
73
- });
74
- }, 'ln-progress');
75
- }
76
-
77
- _domObserver();
78
-
79
- function _listenValues() {
80
- const self = this;
81
- const observer = new MutationObserver(function (mutations) {
82
- for (const mutation of mutations) {
83
- if (mutation.attributeName === 'data-ln-progress' || mutation.attributeName === 'data-ln-progress-max') {
84
- _render.call(self);
85
- }
86
- }
87
- });
88
-
89
- observer.observe(this.dom, {
90
- attributes: true,
91
- attributeFilter: ['data-ln-progress', 'data-ln-progress-max']
92
- });
93
-
94
- this._attrObserver = observer;
95
- }
96
-
97
- function _listenParent() {
98
- const self = this;
99
- const parent = this.dom.parentElement;
100
- if (!parent || !parent.hasAttribute('data-ln-progress-max')) return;
101
-
102
- const observer = new MutationObserver(function (mutations) {
103
- for (const mutation of mutations) {
104
- if (mutation.attributeName === 'data-ln-progress-max') {
105
- _render.call(self);
106
- }
107
- }
108
- });
109
-
110
- observer.observe(parent, {
111
- attributes: true,
112
- attributeFilter: ['data-ln-progress-max']
113
- });
114
-
115
- this._parentObserver = observer;
116
- }
117
-
118
- function _render() {
119
- const value = parseFloat(this.dom.getAttribute('data-ln-progress')) || 0;
120
- const parent = this.dom.parentElement;
121
- const parentMax = parent && parent.hasAttribute('data-ln-progress-max')
122
- ? parseFloat(parent.getAttribute('data-ln-progress-max'))
123
- : null;
124
- const max = parentMax || parseFloat(this.dom.getAttribute('data-ln-progress-max')) || 100;
125
- let percentage = (max > 0) ? (value / max) * 100 : 0;
126
-
127
- if (percentage < 0) percentage = 0;
128
- if (percentage > 100) percentage = 100;
129
-
130
- this.dom.style.width = percentage + '%';
131
-
132
- const clampedValue = Math.max(0, Math.min(value, max));
133
- this.dom.setAttribute('role', 'progressbar');
134
- this.dom.setAttribute('aria-valuemin', '0');
135
- this.dom.setAttribute('aria-valuemax', String(max));
136
- this.dom.setAttribute('aria-valuenow', String(clampedValue));
137
-
138
- dispatch(this.dom, 'ln-progress:change', { target: this.dom, value: value, max: max, percentage: percentage });
139
- }
140
-
141
- window[DOM_ATTRIBUTE] = constructor;
142
-
143
- if (document.readyState === 'loading') {
144
- document.addEventListener('DOMContentLoaded', function () {
145
- constructor(document.body);
146
- });
147
- } else {
148
- constructor(document.body);
149
- }
150
- })();
1
+ import { dispatch, registerComponent } from '../../ln-core';
2
+
3
+ (function () {
4
+ const DOM_SELECTOR = '[data-ln-progress]';
5
+ const DOM_ATTRIBUTE = 'lnProgress';
6
+
7
+ if (window[DOM_ATTRIBUTE] !== undefined) return;
8
+
9
+ function _constructor(dom) {
10
+ this.dom = dom;
11
+ this._attrObserver = null;
12
+ this._parentObserver = null;
13
+ _render.call(this);
14
+ _listenValues.call(this);
15
+ _listenParent.call(this);
16
+ return this;
17
+ }
18
+
19
+ _constructor.prototype.destroy = function () {
20
+ if (!this.dom[DOM_ATTRIBUTE]) return;
21
+ if (this._attrObserver) {
22
+ this._attrObserver.disconnect();
23
+ }
24
+ if (this._parentObserver) {
25
+ this._parentObserver.disconnect();
26
+ }
27
+ delete this.dom[DOM_ATTRIBUTE];
28
+ };
29
+
30
+ function _listenValues() {
31
+ const self = this;
32
+ const observer = new MutationObserver(function (mutations) {
33
+ for (const mutation of mutations) {
34
+ if (mutation.attributeName === 'data-ln-progress' || mutation.attributeName === 'data-ln-progress-max') {
35
+ _render.call(self);
36
+ }
37
+ }
38
+ });
39
+
40
+ observer.observe(this.dom, {
41
+ attributes: true,
42
+ attributeFilter: ['data-ln-progress', 'data-ln-progress-max']
43
+ });
44
+
45
+ this._attrObserver = observer;
46
+ }
47
+
48
+ function _listenParent() {
49
+ const self = this;
50
+ const parent = this.dom.parentElement;
51
+ if (!parent) return;
52
+
53
+ const observer = new MutationObserver(function (mutations) {
54
+ for (const mutation of mutations) {
55
+ if (mutation.attributeName === 'data-ln-progress-max') {
56
+ _render.call(self);
57
+ }
58
+ }
59
+ });
60
+
61
+ observer.observe(parent, {
62
+ attributes: true,
63
+ attributeFilter: ['data-ln-progress-max']
64
+ });
65
+
66
+ this._parentObserver = observer;
67
+ }
68
+
69
+ function _render() {
70
+ const value = parseFloat(this.dom.getAttribute('data-ln-progress')) || 0;
71
+ const parent = this.dom.parentElement;
72
+ const parentMax = parent && parent.hasAttribute('data-ln-progress-max')
73
+ ? parseFloat(parent.getAttribute('data-ln-progress-max'))
74
+ : null;
75
+ const max = parentMax || parseFloat(this.dom.getAttribute('data-ln-progress-max')) || 100;
76
+ let percentage = (max > 0) ? (value / max) * 100 : 0;
77
+
78
+ if (percentage < 0) percentage = 0;
79
+ if (percentage > 100) percentage = 100;
80
+
81
+ this.dom.style.width = percentage + '%';
82
+
83
+ const clampedValue = Math.max(0, Math.min(value, max));
84
+ this.dom.setAttribute('role', 'progressbar');
85
+ this.dom.setAttribute('aria-valuemin', '0');
86
+ this.dom.setAttribute('aria-valuemax', String(max));
87
+ this.dom.setAttribute('aria-valuenow', String(clampedValue));
88
+
89
+ dispatch(this.dom, 'ln-progress:change', { target: this.dom, value: value, max: max, percentage: percentage });
90
+ }
91
+
92
+ registerComponent(
93
+ DOM_SELECTOR,
94
+ DOM_ATTRIBUTE,
95
+ _constructor,
96
+ 'ln-progress'
97
+ );
98
+ })();