@relax.js/core 1.0.4 → 1.0.6
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/dist/DependencyInjection.d.ts +3 -3
- package/dist/collections/LinkedList.d.ts +9 -8
- package/dist/collections/index.js +1 -1
- package/dist/collections/index.js.map +3 -3
- package/dist/collections/index.mjs +1 -1
- package/dist/collections/index.mjs.map +3 -3
- package/dist/di/index.js +1 -1
- package/dist/di/index.js.map +2 -2
- package/dist/di/index.mjs +1 -1
- package/dist/di/index.mjs.map +2 -2
- package/dist/elements/index.js +1 -1
- package/dist/elements/index.js.map +1 -1
- package/dist/forms/FormValidator.d.ts +2 -2
- package/dist/forms/ValidationRules.d.ts +2 -6
- package/dist/forms/index.js +1 -1
- package/dist/forms/index.js.map +3 -3
- package/dist/forms/index.mjs +1 -1
- package/dist/forms/index.mjs.map +3 -3
- package/dist/forms/setFormData.d.ts +52 -1
- package/dist/html/index.js +1 -1
- package/dist/html/index.js.map +3 -3
- package/dist/html/index.mjs +1 -1
- package/dist/html/index.mjs.map +3 -3
- package/dist/http/ServerSentEvents.d.ts +1 -1
- package/dist/http/SimpleWebSocket.d.ts +1 -1
- package/dist/http/index.js +1 -1
- package/dist/http/index.js.map +3 -3
- package/dist/http/index.mjs +1 -1
- package/dist/http/index.mjs.map +3 -3
- package/dist/i18n/icu.d.ts +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/index.js.map +2 -2
- package/dist/i18n/index.mjs +1 -1
- package/dist/i18n/index.mjs.map +2 -2
- package/dist/index.js +3 -3
- package/dist/index.js.map +3 -3
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +3 -3
- package/dist/routing/NavigateRouteEvent.d.ts +4 -4
- package/dist/routing/index.js +2 -2
- package/dist/routing/index.js.map +3 -3
- package/dist/routing/index.mjs +3 -3
- package/dist/routing/index.mjs.map +3 -3
- package/dist/routing/navigation.d.ts +1 -1
- package/dist/templates/NodeTemplate.d.ts +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +3 -3
- package/dist/utils/index.mjs +1 -1
- package/dist/utils/index.mjs.map +3 -3
- package/docs/GettingStarted.md +7 -0
- package/docs/api.json +34 -12
- package/docs/forms/reading-writing.md +137 -1
- package/docs/setup/bootstrapping.md +154 -0
- package/docs/setup/build-and-deploy.md +183 -0
- package/docs/setup/project-structure.md +170 -0
- package/docs/setup/vite.md +175 -0
- package/package.json +3 -2
- package/docs/api/.nojekyll +0 -1
- package/docs/api/assets/hierarchy.js +0 -1
- package/docs/api/assets/highlight.css +0 -120
- package/docs/api/assets/icons.js +0 -18
- package/docs/api/assets/icons.svg +0 -1
- package/docs/api/assets/main.js +0 -60
- package/docs/api/assets/navigation.js +0 -1
- package/docs/api/assets/search.js +0 -1
- package/docs/api/assets/style.css +0 -1633
- package/docs/api/classes/http.WebSocketClient.html +0 -26
- package/docs/api/classes/i18n.LocaleChangeEvent.html +0 -66
- package/docs/api/classes/index.Blueprint.html +0 -3
- package/docs/api/classes/index.BoundNode.html +0 -3
- package/docs/api/classes/index.DigitsValidation.html +0 -10
- package/docs/api/classes/index.FormValidator.html +0 -32
- package/docs/api/classes/index.HttpError.html +0 -13
- package/docs/api/classes/index.LinkedList.html +0 -26
- package/docs/api/classes/index.NavigateRouteEvent.html +0 -76
- package/docs/api/classes/index.Node.html +0 -15
- package/docs/api/classes/index.PageSelectedEvent.html +0 -61
- package/docs/api/classes/index.Pager.html +0 -4
- package/docs/api/classes/index.RangeValidation.html +0 -15
- package/docs/api/classes/index.RelaxError.html +0 -17
- package/docs/api/classes/index.RequiredValidation.html +0 -10
- package/docs/api/classes/index.RouteError.html +0 -11
- package/docs/api/classes/index.RouteGuardError.html +0 -12
- package/docs/api/classes/index.RouteLink.html +0 -779
- package/docs/api/classes/index.RouteTarget.html +0 -788
- package/docs/api/classes/index.SSEClient.html +0 -13
- package/docs/api/classes/index.SSEDataEvent.html +0 -63
- package/docs/api/classes/index.ServiceCollection.html +0 -28
- package/docs/api/classes/index.ServiceContainer.html +0 -24
- package/docs/api/classes/index.SortChangeEvent.html +0 -61
- package/docs/api/classes/index.TableRenderer.html +0 -5
- package/docs/api/classes/index.TableSorter.html +0 -4
- package/docs/api/enums/index.GuardResult.html +0 -9
- package/docs/api/functions/elements.formError.html +0 -6
- package/docs/api/functions/elements.selectOne.html +0 -6
- package/docs/api/functions/i18n.getCurrentLocale.html +0 -3
- package/docs/api/functions/i18n.loadNamespace.html +0 -7
- package/docs/api/functions/i18n.loadNamespaces.html +0 -6
- package/docs/api/functions/i18n.onMissingTranslation.html +0 -7
- package/docs/api/functions/i18n.setLocale.html +0 -7
- package/docs/api/functions/i18n.setMessageFormatter.html +0 -7
- package/docs/api/functions/i18n.t.html +0 -9
- package/docs/api/functions/index.BooleanConverter.html +0 -6
- package/docs/api/functions/index.ContainerService.html +0 -13
- package/docs/api/functions/index.DateConverter.html +0 -11
- package/docs/api/functions/index.Inject.html +0 -16
- package/docs/api/functions/index.NumberConverter.html +0 -5
- package/docs/api/functions/index.RegisterValidator.html +0 -7
- package/docs/api/functions/index.applyPipes.html +0 -17
- package/docs/api/functions/index.asyncHandler.html +0 -11
- package/docs/api/functions/index.capitalizePipe.html +0 -4
- package/docs/api/functions/index.clearPendingNavigations.html +0 -1
- package/docs/api/functions/index.compileTemplate.html +0 -26
- package/docs/api/functions/index.configure.html +0 -5
- package/docs/api/functions/index.createBluePrint.html +0 -1
- package/docs/api/functions/index.createConverterFromDataType.html +0 -4
- package/docs/api/functions/index.createConverterFromInputType.html +0 -5
- package/docs/api/functions/index.createPipeRegistry.html +0 -12
- package/docs/api/functions/index.currencyPipe.html +0 -9
- package/docs/api/functions/index.datePipe.html +0 -9
- package/docs/api/functions/index.daysAgoPipe.html +0 -8
- package/docs/api/functions/index.defaultPipe.html +0 -5
- package/docs/api/functions/index.defineRoutes.html +0 -8
- package/docs/api/functions/index.del.html +0 -8
- package/docs/api/functions/index.findRouteByName.html +0 -5
- package/docs/api/functions/index.findRouteByUrl.html +0 -4
- package/docs/api/functions/index.firstPipe.html +0 -4
- package/docs/api/functions/index.generateSequentialId.html +0 -21
- package/docs/api/functions/index.get.html +0 -9
- package/docs/api/functions/index.getDataConverter.html +0 -11
- package/docs/api/functions/index.getParentComponent.html +0 -18
- package/docs/api/functions/index.getValidator.html +0 -4
- package/docs/api/functions/index.html.html +0 -19
- package/docs/api/functions/index.joinPipe.html +0 -5
- package/docs/api/functions/index.keysPipe.html +0 -4
- package/docs/api/functions/index.lastPipe.html +0 -4
- package/docs/api/functions/index.lowercasePipe.html +0 -4
- package/docs/api/functions/index.mapFormToClass.html +0 -17
- package/docs/api/functions/index.matchRoute.html +0 -5
- package/docs/api/functions/index.navigate.html +0 -8
- package/docs/api/functions/index.onError.html +0 -8
- package/docs/api/functions/index.piecesPipe.html +0 -8
- package/docs/api/functions/index.post.html +0 -9
- package/docs/api/functions/index.printRoutes.html +0 -2
- package/docs/api/functions/index.put.html +0 -9
- package/docs/api/functions/index.readData.html +0 -17
- package/docs/api/functions/index.registerRouteTarget.html +0 -9
- package/docs/api/functions/index.reportError.html +0 -10
- package/docs/api/functions/index.request.html +0 -8
- package/docs/api/functions/index.resolveValue.html +0 -18
- package/docs/api/functions/index.setFetch.html +0 -6
- package/docs/api/functions/index.setFormData.html +0 -17
- package/docs/api/functions/index.shortenPipe.html +0 -5
- package/docs/api/functions/index.startRouting.html +0 -6
- package/docs/api/functions/index.ternaryPipe.html +0 -6
- package/docs/api/functions/index.trimPipe.html +0 -4
- package/docs/api/functions/index.unregisterRouteTarget.html +0 -3
- package/docs/api/functions/index.uppercasePipe.html +0 -4
- package/docs/api/hierarchy.html +0 -1
- package/docs/api/index.html +0 -323
- package/docs/api/interfaces/http.SimpleDataEvent.html +0 -3
- package/docs/api/interfaces/http.WebSocketAbstraction.html +0 -9
- package/docs/api/interfaces/http.WebSocketCodec.html +0 -4
- package/docs/api/interfaces/http.WebSocketOptions.html +0 -20
- package/docs/api/interfaces/index.CompiledTemplate.html +0 -10
- package/docs/api/interfaces/index.DataLoader.html +0 -19
- package/docs/api/interfaces/index.EngineConfig.html +0 -11
- package/docs/api/interfaces/index.ErrorContext.html +0 -4
- package/docs/api/interfaces/index.FormReaderOptions.html +0 -8
- package/docs/api/interfaces/index.HttpOptions.html +0 -16
- package/docs/api/interfaces/index.HttpResponse.html +0 -17
- package/docs/api/interfaces/index.LoadRoute.html +0 -7
- package/docs/api/interfaces/index.NavigateOptions.html +0 -7
- package/docs/api/interfaces/index.PipeRegistry.html +0 -12
- package/docs/api/interfaces/index.RegistrationOptions.html +0 -22
- package/docs/api/interfaces/index.RenderTemplate.html +0 -7
- package/docs/api/interfaces/index.RequestOptions.html +0 -11
- package/docs/api/interfaces/index.Routable.html +0 -10
- package/docs/api/interfaces/index.Route.html +0 -13
- package/docs/api/interfaces/index.RouteGuard.html +0 -2
- package/docs/api/interfaces/index.RouteValue.html +0 -6
- package/docs/api/interfaces/index.SSEOptions.html +0 -24
- package/docs/api/interfaces/index.ValidationContext.html +0 -8
- package/docs/api/interfaces/index.ValidatorOptions.html +0 -14
- package/docs/api/media/Architecture.md +0 -333
- package/docs/api/media/DependencyInjection.md +0 -277
- package/docs/api/media/GettingStarted.md +0 -231
- package/docs/api/media/HttpClient.md +0 -459
- package/docs/api/media/Pipes.md +0 -211
- package/docs/api/media/Routing.md +0 -332
- package/docs/api/media/WhyRelaxjs.md +0 -336
- package/docs/api/media/forms.md +0 -99
- package/docs/api/media/html.md +0 -175
- package/docs/api/media/i18n.md +0 -354
- package/docs/api/media/utilities.md +0 -143
- package/docs/api/media/validation.md +0 -351
- package/docs/api/modules/collections_Index.html +0 -1
- package/docs/api/modules/di.html +0 -1
- package/docs/api/modules/elements.html +0 -1
- package/docs/api/modules/forms.html +0 -1
- package/docs/api/modules/html.html +0 -1
- package/docs/api/modules/http.html +0 -1
- package/docs/api/modules/i18n.html +0 -1
- package/docs/api/modules/index.html +0 -1
- package/docs/api/modules/routing.html +0 -1
- package/docs/api/modules/utils.html +0 -1
- package/docs/api/modules.html +0 -1
- package/docs/api/types/http.WebSocketFactory.html +0 -2
- package/docs/api/types/i18n.MessageFormatter.html +0 -3
- package/docs/api/types/i18n.MissingTranslationHandler.html +0 -1
- package/docs/api/types/index.Constructor.html +0 -7
- package/docs/api/types/index.ConverterFunc.html +0 -2
- package/docs/api/types/index.DataType.html +0 -2
- package/docs/api/types/index.InputType.html +0 -2
- package/docs/api/types/index.PipeFunction.html +0 -6
- package/docs/api/types/index.RouteData.html +0 -1
- package/docs/api/types/index.RouteMatchResult.html +0 -9
- package/docs/api/types/index.RouteParamType.html +0 -1
- package/docs/api/types/index.RouteSegmentType.html +0 -2
- package/docs/api/types/index.SSEEventFactory.html +0 -5
- package/docs/api/types/index.ServiceScope.html +0 -10
- package/docs/api/types/index.SortColumn.html +0 -3
- package/docs/api/variables/i18n.formatICU.html +0 -3
- package/docs/api/variables/index.container.html +0 -6
- package/docs/api/variables/index.defaultPipes.html +0 -6
- package/docs/api/variables/index.internalRoutes.html +0 -1
- package/docs/api/variables/index.serviceCollection.html +0 -6
package/dist/html/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var ie=Object.create;var _=Object.defineProperty;var ae=Object.getOwnPropertyDescriptor;var le=Object.getOwnPropertyNames;var ce=Object.getPrototypeOf,ue=Object.prototype.hasOwnProperty;var z=t=>r=>{var e=t[r];if(e)return e();throw new Error("Module not found in bundle: "+r)};var C=(t,r)=>()=>(r||t((r={exports:{}}).exports,r),r.exports);var pe=(t,r,e,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of le(r))!ue.call(t,n)&&n!==e&&_(t,n,{get:()=>r[n],enumerable:!(o=ae(r,n))||o.enumerable});return t};var b=(t,r,e)=>(e=t!=null?ie(ce(t)):{},pe(r||!t||!t.__esModule?_(e,"default",{value:t,enumerable:!0}):e,t));var W=C((lt,fe)=>{fe.exports={greeting:"Hello, {name}!",items:"{count, plural, one {# item} other {# items}}"}});var U=C((ct,ge)=>{ge.exports={today:"today",yesterday:"yesterday",daysAgo:"{count, plural, one {# day ago} other {# days ago}}",pieces:"{count, plural, =0 {none} one {one} other {# pcs}}"}});var G=C((ut,he)=>{he.exports={required:"This field is required.",range:"Number must be between {min} and {max}, was {actual}.",digits:"Please enter only digits."}});var Z=C((pt,ye)=>{ye.exports={greeting:"Hej, {name}!",items:"{count, plural, one {# sak} other {# saker}}"}});var J=C((dt,xe)=>{xe.exports={today:"idag",yesterday:"ig\xE5r",daysAgo:"{count, plural, one {# dag sedan} other {# dagar sedan}}",pieces:"{count, plural, =0 {inga} one {en} other {# st}}"}});var X=C((mt,Ee)=>{Ee.exports={required:"Detta f\xE4lt \xE4r obligatoriskt.",range:"Talet m\xE5ste vara mellan {min} och {max}, var {actual}.",digits:"Ange endast siffror."}});var R=new Map;function de(t){return R.has(t)||R.set(t,new Intl.PluralRules(t)),R.get(t)}function j(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function me(t,r,e="en"){return t.replace(/\{(\w+)(?:, (plural|select),((?:[^{}]*\{[^{}]*\})+))?\}/g,(o,n,s,a)=>{let i=r[n];if(s==="plural"){let l=new RegExp(`=${j(String(i))}\\s*\\{([^{}]*)\\}`).exec(a);if(l)return l[1].replace(`{${n}}`,String(i)).replace("#",String(i));let p=de(e).select(i),u=new RegExp(`${p}\\s*\\{([^{}]*)\\}`).exec(a)||new RegExp("other\\s*\\{([^{}]*)\\}").exec(a);return u?u[1].replace(`{${n}}`,String(i)).replace("#",String(i)):String(i)}if(s==="select"){let l=j(String(i)),c=new RegExp(`\\b${l}\\s*\\{([^{}]*)\\}`).exec(a)||new RegExp("\\bother\\s*\\{([^{}]*)\\}").exec(a);return c?c[1]:String(i)}return i!==void 0?String(i):`{${n}}`})}var q=me;var ht=z({"./locales/en/r-common.json":()=>Promise.resolve().then(()=>b(W())),"./locales/en/r-pipes.json":()=>Promise.resolve().then(()=>b(U())),"./locales/en/r-validation.json":()=>Promise.resolve().then(()=>b(G())),"./locales/sv/r-common.json":()=>Promise.resolve().then(()=>b(Z())),"./locales/sv/r-pipes.json":()=>Promise.resolve().then(()=>b(J())),"./locales/sv/r-validation.json":()=>Promise.resolve().then(()=>b(X()))});var Te="en",A=Te;var ve={},Q=null;function w(t,r){let[e,o]=t.includes(":")?t.split(":"):["r-common",t],n=ve[e]?.[o];if(!n)return Q&&Q(o,e,A),t;try{return q(n,r,A)}catch{return t}}function S(){return A}function Ce(t){return String(t).toUpperCase()}function be(t){return String(t).trimEnd().trimStart()}function we(t){return String(t).toLowerCase()}function Ne(t){let r=String(t);return r.charAt(0).toUpperCase()+r.slice(1)}function Me(t,r){let e=String(t),o=parseInt(r,10);return e.length>o?e.substring(0,o-3)+"...":e}function Pe(t,r="USD"){let e=S();return new Intl.NumberFormat(e,{style:"currency",currency:r}).format(t)}function ke(t,r){let e=new Date(t),o=S();return r==="short"?e.toLocaleDateString(o):r==="long"?e.toLocaleDateString(o,{weekday:"long",year:"numeric",month:"long",day:"numeric"}):e.toISOString()}function Le(t){if(!t)return"n/a";let r=new Date(t),e=new Date;r.setHours(0,0,0,0),e.setHours(0,0,0,0);let o=e.getTime()-r.getTime(),n=Math.round(o/(1e3*60*60*24));return n===0?w("r-pipes:today"):n===1?w("r-pipes:yesterday"):w("r-pipes:daysAgo",{count:n})}function Re(t){if(t==null)return"n/a";let r=Number(t);return w("r-pipes:pieces",{count:r})}function Ae(t,r=","){return Array.isArray(t)?t.join(r):t}function Se(t){return!Array.isArray(t)||t.length===0?"":t[0]}function $e(t){return!Array.isArray(t)||t.length===0?"":t[t.length-1]}function He(t){return typeof t!="object"||t===null?[]:Object.keys(t)}function Fe(t,r){return t||r}function Ie(t,r,e){return t?r:e}function Be(){let t=new Map;return t.set("uppercase",Ce),t.set("lowercase",we),t.set("capitalize",Ne),t.set("trim",be),t.set("shorten",Me),t.set("currency",Pe),t.set("date",ke),t.set("daysAgo",Le),t.set("pieces",Re),t.set("join",Ae),t.set("first",Se),t.set("last",$e),t.set("keys",He),t.set("default",Fe),t.set("ternary",Ie),{lookup(r){return t.get(r)},get(r){var e=t.get(r);if(!e)throw Error("Pipe '"+r+"' not found.");return e},has(r){return t.has(r)}}}var v=Be();function Y(t,r,e=v){return r.reduce((o,n)=>{let[s,...a]=n.split(":").map(i=>i.trim());if(!e.has(s))return`[Pipe ${s} not found]`;try{return e.get(s)(o,...a)}catch(i){return`[Pipe ${s}, value: ${t}, error: ${i}]`}},t)}var De=v;function Oe(t,...r){let e=document.createElement("template"),o=Ve(t);e.innerHTML=o;let n=[],s=document.createTreeWalker(e.content,NodeFilter.SHOW_ALL),a;for(;a=s.nextNode();)if(a.nodeType===Node.ELEMENT_NODE){let i=a;_e(i,r,n),customElements.get(i.tagName.toLowerCase())&&customElements.upgrade(i)}else if(a.nodeType===Node.TEXT_NODE){let i=a,l=i.textContent,c=K(l,r);if(c)if(/€€\d+€€/.test(l)){let u=null,d=null,m=[];n.push({originalValue:l,setter(f){var h=c(f);u||(u=document.createComment(""),d=document.createComment(""),i.parentNode?.replaceChild(d,i),d.parentNode?.insertBefore(u,d)),m.forEach(y=>y.parentNode?.removeChild(y)),m=[];let g=document.createElement("template");g.innerHTML=h;let x=Array.from(g.content.childNodes),T=d.parentNode;x.forEach(y=>{T.insertBefore(y,d),m.push(y)})}})}else n.push({originalValue:l,setter(u){var d=c(u);i.textContent=d}})}return function(l){return n.forEach(c=>{c.setter(l)}),{fragment:e.content,update(c){n.forEach(p=>{p.setter(c)})}}}}function Ve(t){return t.raw.map((r,e)=>e<t.raw.length-1?`${r}\u20AC\u20AC${e}\u20AC\u20AC`:r).join("")}function _e(t,r,e){let o=[];for(let a of Array.from(t.attributes)){var n=a.value;if(n=="")continue;let i=/€€(\d+)€€/,l=n.match(i);if(l){let c=parseInt(l[1],10),p=r[c];if(typeof p=="function"){o.push({setter(u){let d=p.bind(u);t.removeAttribute(a.name),t[a.name]=d}});continue}}var s=K(n,r);s!=null&&o.push({originalValue:n,setter(c){let p=s(c)??n;a.name in t?t[a.name]=p:a.value=p}})}o.length>0&&e.push({originalValue:t.tagName,setter(a){o.forEach(i=>i.setter(a))}})}function ze(t,r){return t.split(",").map(e=>{if(e=e.trim(),e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"))return e.slice(1,-1);if(!isNaN(Number(e)))return Number(e);if(e.includes(".")){let o=e.split("."),n=r;for(let s of o){if(n==null)return;n=n[s]}return n}return r[e]})}function K(t,r){let e=/€€(\d+)€€|{{\s*([^|]+?)(?:\|([\w|]+))?\s*}}/g,o=0,n,s=[];for(;(n=e.exec(t))!==null;){var a=t.slice(o,n.index);if(a.length>0&&s.push(l=>a),n[1]){let l=parseInt(n[1],10),c=r[l];if(!c)continue;if(typeof c=="function"){let p=c;s.push(u=>{var d=p.apply(u);return d})}else c&&c.length>0&&s.push(p=>c)}else if(n[2]){let l=n[2].trim(),c=n[3]?n[3].trim():null,p=n[4]?n[4].split("|").map(u=>u.trim()):[];s.push(u=>{var d=u[l];if(typeof d=="function")if(c){let m=ze(c,u);d=d.apply(u,m)}else d=d.call(u);return p.forEach(m=>{d=De[m](d)}),d})}o=e.lastIndex}if(s.length==0)return null;var i=t.slice(o);return i.length>0&&s.push(l=>i),l=>{var c="";return s.forEach(p=>{var u=p(l);c+=u}),c}}function ee(t){let r=t.split("|").map(s=>s.trim()),e=r[0],o=r.slice(1),n=e.match(/^(\w+)\s*\((.*)\)$/);if(n){let[,s,a]=n,i=a?a.split(",").map(l=>l.trim()):[];return{type:"function",fnName:s,fnArgs:i,pipes:o}}return{type:"path",path:e,pipes:o}}function N(t,r){let o=r.replace(/\[(\d+)\]/g,".$1").split("."),n=t;for(let s of o)if(n&&typeof n=="object"&&s in n)n=n[s];else return;return n}function E(t,r,e,o=!1){let n=`[template error] ${r} (at ${e})`;if(t.onError&&t.onError(n),t.strict||o)throw new Error(n)}function je(t){return function(e,o,n=""){try{let s=N(e,o);return s===void 0?(E(t,`Cannot resolve "${o}"`,n),""):s===null?"":Array.isArray(s)?s.length>0?JSON.stringify(s):"":typeof s=="object"?JSON.stringify(s):s}catch(s){let a=s instanceof Error?s.message:String(s);return E(t,`Exception resolving "${o}": ${a}`,n,!0),""}}}function te(t,r,e,o,n){let s,a=o.pipeRegistry??v;if(t.type==="function"){let i=e?.[t.fnName];if(typeof i!="function")return E(o,`Function "${t.fnName}" not found`,n),"";let l=(t.fnArgs??[]).map(c=>c.startsWith('"')&&c.endsWith('"')||c.startsWith("'")&&c.endsWith("'")?c.slice(1,-1):isNaN(Number(c))?N(r,c):Number(c));try{s=i(...l)}catch(c){let p=c instanceof Error?c.message:String(c);return E(o,`Error calling "${t.fnName}": ${p}`,n),""}}else{let i=N(r,t.path);if(i===void 0)return E(o,`Cannot resolve "${t.path}"`,n),"";i===null?s="":typeof i=="object"?s=JSON.stringify(i):s=i}return t.pipes.length>0&&(s=Y(s,t.pipes,a)),s}var $=new Map;function qe(t,r,e){if(t.nodeType!==Node.TEXT_NODE||!t.textContent?.includes("{{"))return;let o=t.textContent;if(!$.has(o)){let i=o.split(/(\{\{.*?\}\})/).map(l=>{if(l.startsWith("{{")){let c=l.slice(2,-2).trim();return{parsed:ee(c),literal:""}}else return{parsed:null,literal:l}});$.set(o,i)}let n=$.get(o),s=`TextNode: "${o}"`;return(a,i)=>{let l=n.map(({parsed:c,literal:p})=>c?String(te(c,a,i,e,s)):p).join("");t.textContent=l}}function We(t,r,e){if(t.nodeType!==Node.ELEMENT_NODE)return;let o=t,n=[],s=Array.from(o.attributes);for(let a of s){let i=a.value.match(/\{\{(.+?)\}\}/);if(i){let l=i[1].trim(),c=ee(l),p=a.name,u=`Attribute: ${p} on <${o.tagName.toLowerCase()}>`;n.push((d,m)=>{let f=te(c,d,m,e,u);o.setAttribute(p,String(f))})}}if(n.length>0)return(a,i)=>n.forEach(l=>l(a,i))}function ne(t,r,e,o,n){if(t.nodeType!==Node.ELEMENT_NODE||!t.hasAttribute(o))return;let s=t,a=s.getAttribute(o),i=s.cloneNode(!0),l=document.createComment(`${o}: ${a}`),c=s.parentNode;c.insertBefore(l,s),s.remove();let p=null,u=null,d=null,m=null;return(f,h)=>{let g=r(f,a,`${o}="${a}"`),x=n(g);if(x&&!p){if(d&&m)p=d,u=m,d=null,m=null;else{let T=i.cloneNode(!0);T.removeAttribute(o),p=T,u=H(T,e)}u(f,h),c.insertBefore(p,l.nextSibling)}else x&&u&&u(f,h);!x&&p&&(p.remove(),d=p,m=u,p=null,u=null)}}function Ue(t,r,e){return ne(t,r,e,"if",o=>!!o)}function Ge(t,r,e){return ne(t,r,e,"unless",o=>!o)}function Ze(t,r,e){if(t.nodeType!==Node.ELEMENT_NODE||!t.hasAttribute("loop"))return;let o=t,n=o.getAttribute("loop"),s=n.match(/(\w+)\s+in\s+(.+)/);if(!s){E(e,`Invalid loop syntax: "${n}"`,`Element: <${o.tagName.toLowerCase()}>`);return}let[,a,i]=s,l=o.cloneNode(!0);l.removeAttribute("loop");let c=o.parentNode,p=document.createComment(`loop: ${n}`);c.insertBefore(p,o),o.remove();let u=[];return(d,m)=>{let f=N(d,i);if(f===void 0){E(e,`Cannot resolve "${i}"`,`Loop source: "${n}"`);return}if(!Array.isArray(f)){E(e,`"${i}" is not an array in loop: "${n}"`,`Element: <${l.tagName.toLowerCase()}>`);return}let h=Math.min(u.length,f.length);for(let g=0;g<h;g++)u[g].renderer({...d,[a]:f[g]},m);for(let g=u.length-1;g>=f.length;g--)u[g].element.remove();if(f.length>h){let g=document.createDocumentFragment(),x=[];for(let y=h;y<f.length;y++){let L=l.cloneNode(!0),V=H(L,e);V({...d,[a]:f[y]},m),g.appendChild(L),x.push({element:L,renderer:V})}let T=h>0?u[h-1].element:p;c.insertBefore(g,T.nextSibling),u=u.slice(0,h).concat(x)}else u.length=f.length}}var Je=[Ze,Ue,Ge],Xe=[qe,We];function H(t,r){let e=[],o=je(r);function n(i){for(let l of Je){let c=l(i,o,r);if(c){e.push(c);return}}for(let l of Xe){let c=l(i,o,r);c&&e.push(c)}for(let l of Array.from(i.childNodes))n(l)}n(t);let s=null,a;return(i,l)=>{(s!==i||a!==l)&&(e.forEach(c=>c(i,l)),s=i,a=l)}}function Qe(t,r={strict:!1}){let n=new DOMParser().parseFromString(`<template><div>${t}</div></template>`,"text/html").querySelector("template").content.firstElementChild,s=H(n,r);return{content:n,render:s}}function Ye(t,r={}){let{delimiter:e=".",escapeChar:o="\\"}=r;if(!t||typeof t!="string")throw new Error("Notation must be a non-empty string");let n=[],s="",a=0,i=!1,l="";for(;a<t.length;){let c=t[a],p=t.substring(a,e.length+a),u=t[a+1],d=t.substring(a+1,e.length+a+1);if(c===o&&(d===e||u==="["||u==="]"))i?l+=u:s+=u,a+=2;else if(c==="["&&!i)s&&(n.push({type:"property",key:s}),s=""),i=!0,l="",a++;else if(c==="]"&&i){if(!/^\d+$/.test(l.trim()))throw new Error(`Invalid array index: [${l}]. Only numeric indices are supported.`);n.push({type:"index",key:l.trim()}),i=!1,l="",a++}else p===e&&!i?(s&&(n.push({type:"property",key:s}),s=""),a+=e.length):i?(l+=c,a++):(s+=c,a++)}if(i)throw new Error("Unclosed bracket in notation");if(s&&n.push({type:"property",key:s}),n.length===0)throw new Error("Invalid notation: must contain at least one property or index");return n}function Ke(t){return r=>{let e=r;for(let o of t){if(e==null)return;if(o.type==="property"){if(typeof e!="object")return;e=e[o.key]}else if(o.type==="index"){if(!Array.isArray(e))return;let n=parseInt(o.key,10);if(n<0||n>=e.length)return;e=e[n]}}return e}}function M(t,r={}){let e=Ye(t,r);return Ke(e)}function oe(t){let r=[],e=0;for(;e<t.length;){let o=t[e];if(/\s/.test(o)){e++;continue}if(o==="|"){for(e++;e<t.length&&/\s/.test(t[e]);)e++;let n="";for(;e<t.length&&!/[\s\(\)\[\]\{\}\|\+\-\*\/\=\;\,\.]/.test(t[e]);)n+=t[e],e++;r.push({type:3,value:n});continue}if(o==='"'||o==="'"){let n=o,s=n;for(e++;e<t.length&&t[e]!==n;)t[e]==="\\"&&e+1<t.length&&t[e+1]===n?(s+="\\"+n,e+=2):(s+=t[e],e++);e<t.length&&(s+=n,e++),r.push({type:0,value:s});continue}if(/[0-9]/.test(o)){let n="",s=!1;for(;e<t.length&&(/[0-9]/.test(t[e])||t[e]==="."&&!s);)t[e]==="."&&(s=!0),n+=t[e],e++;r.push({type:0,value:n});continue}if(/[a-zA-Z_$]/.test(o)){let n="",s=!1;for(;e<t.length;)if(/[a-zA-Z0-9_$.]/.test(t[e]))n+=t[e],e++;else if(t[e]==="["){let c=1;for(n+=t[e++];e<t.length&&c>0;)t[e]==="["&&c++,t[e]==="]"&&c--,n+=t[e++]}else break;let a=0;for(;e<t.length&&/\s/.test(t[e]);)a++,e++;if(e<t.length&&t[e]==="("){s=!0,n+="(",e++;let c=1;for(;e<t.length&&c>0;)t[e]==="("&&c++,t[e]===")"&&c--,n+=t[e++]}else e-=a;let i=r[r.length-1],l=t[e-n.length-1]==="."&&i?.type===0;r.push({type:s||l?1:2,value:n});continue}e++}return r}function P(t){let r=[],e=t.indexOf("("),o=t.lastIndexOf(")");if(e===-1||o===-1||o<=e)throw new Error("Invalid function call syntax");let n=t.slice(e+1,o),s=0;for(;s<n.length;){let a=n[s];if(/\s/.test(a)){s++;continue}if(a==='"'||a==="'"){let i=a,l="";for(s++;s<n.length&&n[s]!==i;)n[s]==="\\"?(s++,s<n.length&&(l+=n[s])):l+=n[s],s++;if(s>=n.length)throw new Error("Unterminated string in arguments");s++,r.push({type:"string",value:l});continue}if(/[0-9]/.test(a)){let i="";for(;s<n.length&&/[0-9.]/.test(n[s]);)i+=n[s],s++;r.push({type:"number",value:parseFloat(i)});continue}if(/[a-zA-Z_]/.test(a)){let i="";for(;s<n.length&&/[a-zA-Z0-9_\.]/.test(n[s]);)i+=n[s],s++;r.push({type:"identifier",value:i});continue}if(a===","){s++;continue}throw new Error(`Unexpected character in arguments: ${a}`)}return r}function se(t){let r=[],e=0;for(;e<t.length;){let o=t.indexOf("{{",e);if(o===-1){r.push(re(t.slice(e)));break}o>e&&r.push(re(t.slice(e,o)));let{value:n,endIndex:s,balanced:a}=tt(t,o);if(!a)throw new Error(`Unclosed mustache tag starting at index ${o}, template: ${t}`);r.push(et(n)),e=s}return r}function re(t){return{type:"string",value:t}}function et(t){return{type:"mustache",value:t}}function tt(t,r){let e="{{",o="}}",n=r+e.length,s=1;for(;n<t.length&&s>0;)t.slice(n,n+e.length)===e?(s++,n+=e.length):t.slice(n,n+o.length)===o?(s--,n+=o.length):n++;let a=s===0,i=a?n:t.length;return{value:t.slice(r,i),endIndex:i,balanced:a}}function F(t,r){let e=se(t).map(o=>o.type==="string"?(n,s)=>o.value:nt(o,r));return(o,n)=>e.map(s=>s(o,n)).join("")}function nt(t,r){let e=oe(t.value),o=rt(e,t.value,r?.pipeRegistry);return ot(o)}function rt(t,r,e){let o=null;e||(e=v);for(let n of t)switch(n.type){case 0:throw Error(`Constants not supported: ${n.value}`);case 2:{o={source:M(n.value),pipes:[]};break}case 1:{o={source:st(n.value),pipes:[]};break}case 3:{if(!o)throw Error(`Pipe '${n.value}' has no input expression in: ${r}`);if(!n.value||n.value==="")throw Error("Pipe symbol was provided, but no pipes. Template: "+r);let[s,...a]=n.value.split(":").map(l=>l.trim()),i=e.lookup(s);if(!i)throw Error(`Pipe not found: ${s}`);o.pipes.push(l=>i(l,a));break}}if(!o)throw Error(`Invalid expression: ${r}`);return o}function ot(t){return(r,e)=>{let o=t.source(r,e),n=t.pipes.reduce((s,a)=>a(s),o);return n!=null?n.toString():""}}function st(t){let r=t.indexOf("(");if(r===-1)throw Error(`Invalid function: ${t}`);let o=P(t).map(a=>{if(a.type==="number"||a.type==="string")return()=>a.value;if(a.type==="identifier")return i=>M(a.value)(i);throw Error(`Unsupported argument type: ${a.type}`)}),n=t.substring(0,r),s=M(n);return(a,i)=>{if(!i)throw Error(`Component context is required for calling '${n}'`);let l=s(i);if(typeof l!="function")throw Error(`Resolved '${n}' is not a function`);let c=o.map(p=>p(a));return l.apply(i,c)}}var I=class{constructor(r,e,o,n){this.root=r;this.bindings=e;this.clickBindings=o;this.component=n}render(r){for(let e of this.bindings)e.type==="text"?e.func(r,e.node):e.func(r,e.element);for(let e of this.clickBindings){let o=this.getNodeAtPath(this.root,e.path),n=this.component?.[e.methodName];o instanceof HTMLElement&&typeof n=="function"&&(o.onclick=s=>{let a=e.argTokens.map(i=>{if(i.type==="number"||i.type==="string")return i.value;if(i.type==="identifier")return i.value==="event"?s:i.value.split(".").reduce((c,p)=>c?.[p],r)});n.apply(this.component,a)})}return this.root}getNodeAtPath(r,e){return e.reduce((o,n)=>o.childNodes[n],r)}};function _t(t){var r=new B(t);return r}var B=class{constructor(r){if(typeof r=="string"){let o=r.trim();if(o.startsWith("<template")){let n=document.createElement("div");n.innerHTML=o;let s=n.querySelector("template");if(!s)throw new Error("Could not find <template> in input string");this.template=s}else this.template=document.createElement("template"),this.template.innerHTML=o}else this.template=r;let e=this.getRootElement();this.bindings=this.collectBindings(e),this.clickBindings=this.collectClickBindings(e)}createInstance(r){let e=this.getRootElement().cloneNode(!0),o=this.bindings.map(n=>{let s=this.getNodeAtPath(e,n.path);return n.type==="text"?{type:"text",node:s,func:(a,i)=>n.func(a,r,i)}:{type:"attribute",element:s,name:n.name,func:(a,i)=>n.func(a,r,i)}});return new I(e,o,this.clickBindings,r)}getRootElement(){let r=Array.from(this.template.content.childNodes).find(e=>e.nodeType===Node.ELEMENT_NODE);if(!(r instanceof HTMLElement))throw new Error("Template must contain a single root element");return r}collectBindings(r){let e=[],o=(n,s=[])=>{if(n.nodeType===Node.TEXT_NODE&&n.textContent&&n.textContent.match(/\{\{\s*(.*?)\s*\}\}/g)){let a=F(n.textContent);e.push({type:"text",path:[...s],func:(i,l,c)=>{c.textContent=a(i,l)}})}if(n.nodeType===Node.ELEMENT_NODE){let a=n;if(a.tagName==="TEMPLATE")return;for(let i=0;i<a.attributes.length;i++){let l=a.attributes[i];if(l.value.match(/\{\{\s*(.*?)\s*\}\}/g)){let c=F(l.value);e.push({type:"attribute",path:[...s],name:l.name,func:(p,u,d)=>{d.setAttribute(l.name,c(p,u))}})}}Array.from(n.childNodes).forEach((i,l)=>{o(i,[...s,l])})}};return o(r),e}collectClickBindings(r){let e=[],o=(n,s=[])=>{if(n.nodeType===Node.ELEMENT_NODE){let i=n.getAttribute("click");if(i?.trim()){let l=i.trim(),c=l.match(/^([a-zA-Z_$][\w$]*)\s*\((.*)\)$/);if(c){let p=c[1],u=P(l);e.push({path:[...s],methodName:p,argTokens:u})}else e.push({path:[...s],methodName:l,argTokens:[]})}Array.from(n.childNodes).forEach((l,c)=>{o(l,[...s,c])})}};return o(r),e}getNodeAtPath(r,e){return e.reduce((o,n)=>o.childNodes[n],r)}};var D=class{constructor(r,e,o,n){this.dataMap=new Map;this.rowMap=new Map;this.table=r,this.template=e,this.IdColumn=o,this.component=n}render(r){this.clearRows();for(let e of r)this.renderRow(e)}clearRows(){this.table.tBodies[0].innerHTML="",this.dataMap.clear(),this.rowMap.clear()}renderRow(r){let e=r[this.IdColumn];if(e==null)throw new Error(`Missing IdColumn '${this.IdColumn}' in data`);let o=this.template.content.firstElementChild?.cloneNode(!0);if(!o)throw new Error("Template must have a <tr> as its first child");this.populateRow(o,r),this.attachEventHandlers(o,r),this.table.tBodies[0].appendChild(o),this.dataMap.set(e,r),this.rowMap.set(e,o)}populateRow(r,e){r.querySelectorAll("[data-field]").forEach(n=>{let s=n.dataset.field;s&&s in e&&(n.textContent=String(e[s]))})}attachEventHandlers(r,e){r.querySelectorAll("[onclick]").forEach(n=>{let s=n,a=s.getAttribute("onclick");if(!a)return;let i=a.match(/^(\w+)(\(([^)]*)\))?$/);if(!i)return;let[,l,,c]=i,p=c?c.split(",").map(u=>u.trim().replace(/^['"]|['"]$/g,"")):[];typeof this.component[l]=="function"&&(s.removeAttribute("onclick"),s.addEventListener("click",u=>{this.component[l](...p,e,u)}))})}update(r){let e=r[this.IdColumn];if(e==null)throw new Error(`Missing IdColumn '${this.IdColumn}' in update data`);let o=this.rowMap.get(e);o?(this.populateRow(o,r),this.attachEventHandlers(o,r),this.dataMap.set(e,r)):this.renderRow(r)}},k=class extends CustomEvent{constructor(r){super("sortchange",{detail:r,bubbles:!0,composed:!0})}},O=class{constructor(r,e){this.sortColumns=[];this.table=r,this.component=e,this.setupListeners()}setupListeners(){this.table.tHead?.querySelectorAll("th[name]")?.forEach(e=>{e.addEventListener("click",()=>{let o=e.getAttribute("name");this.toggle(o),this.updateSortIndicators(),this.emit()})})}toggle(r){let e=this.sortColumns.findIndex(o=>o.column===r);e===-1?this.sortColumns.push({column:r,direction:"asc"}):this.sortColumns[e].direction==="asc"?this.sortColumns[e].direction="desc":this.sortColumns.splice(e,1)}emit(){let r=new k(this.sortColumns);this.component.dispatchEvent(r)}updateSortIndicators(){this.table.tHead?.querySelectorAll("th[name]")?.forEach(e=>{let o=e.querySelector(".sort-indicator");o&&e.removeChild(o);let n=e.getAttribute("name"),s=this.sortColumns.find(a=>a.column===n);if(s){let a=document.createElement("span");a.className="sort-indicator",a.textContent=s.direction==="asc"?"\u2191":"\u2193",a.style.float="right",a.style.marginLeft="5px",e.appendChild(a)}e.style.position||(e.style.position="relative")})}getSortColumns(){return[...this.sortColumns]}clear(){this.sortColumns=[],this.updateSortIndicators(),this.emit()}};export{B as Blueprint,I as BoundNode,k as SortChangeEvent,D as TableRenderer,O as TableSorter,Qe as compileTemplate,_t as createBluePrint,Oe as html};
|
|
1
|
+
var ie=Object.create;var _=Object.defineProperty;var ae=Object.getOwnPropertyDescriptor;var le=Object.getOwnPropertyNames;var ce=Object.getPrototypeOf,ue=Object.prototype.hasOwnProperty;var z=e=>r=>{var t=e[r];if(t)return t();throw new Error("Module not found in bundle: "+r)};var C=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports);var pe=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of le(r))!ue.call(e,n)&&n!==t&&_(e,n,{get:()=>r[n],enumerable:!(o=ae(r,n))||o.enumerable});return e};var b=(e,r,t)=>(t=e!=null?ie(ce(e)):{},pe(r||!e||!e.__esModule?_(t,"default",{value:e,enumerable:!0}):t,e));var W=C((lt,fe)=>{fe.exports={greeting:"Hello, {name}!",items:"{count, plural, one {# item} other {# items}}"}});var U=C((ct,ge)=>{ge.exports={today:"today",yesterday:"yesterday",daysAgo:"{count, plural, one {# day ago} other {# days ago}}",pieces:"{count, plural, =0 {none} one {one} other {# pcs}}"}});var G=C((ut,he)=>{he.exports={required:"This field is required.",range:"Number must be between {min} and {max}, was {actual}.",digits:"Please enter only digits."}});var Z=C((pt,ye)=>{ye.exports={greeting:"Hej, {name}!",items:"{count, plural, one {# sak} other {# saker}}"}});var J=C((dt,xe)=>{xe.exports={today:"idag",yesterday:"ig\xE5r",daysAgo:"{count, plural, one {# dag sedan} other {# dagar sedan}}",pieces:"{count, plural, =0 {inga} one {en} other {# st}}"}});var X=C((mt,Ee)=>{Ee.exports={required:"Detta f\xE4lt \xE4r obligatoriskt.",range:"Talet m\xE5ste vara mellan {min} och {max}, var {actual}.",digits:"Ange endast siffror."}});var R=new Map;function de(e){return R.has(e)||R.set(e,new Intl.PluralRules(e)),R.get(e)}function j(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function me(e,r,t="en"){return e.replace(/\{(\w+)(?:, (plural|select),((?:[^{}]*\{[^{}]*\})+))?\}/g,(o,n,s,a)=>{let i=r?.[n];if(s==="plural"){let l=new RegExp(`=${j(String(i))}\\s*\\{([^{}]*)\\}`).exec(a);if(l)return l[1].replace(`{${n}}`,String(i)).replace("#",String(i));let p=de(t).select(i),u=new RegExp(`${p}\\s*\\{([^{}]*)\\}`).exec(a)||new RegExp("other\\s*\\{([^{}]*)\\}").exec(a);return u?u[1].replace(`{${n}}`,String(i)).replace("#",String(i)):String(i)}if(s==="select"){let l=j(String(i)),c=new RegExp(`\\b${l}\\s*\\{([^{}]*)\\}`).exec(a)||new RegExp("\\bother\\s*\\{([^{}]*)\\}").exec(a);return c?c[1]:String(i)}return i!==void 0?String(i):`{${n}}`})}var q=me;var ht=z({"./locales/en/r-common.json":()=>Promise.resolve().then(()=>b(W())),"./locales/en/r-pipes.json":()=>Promise.resolve().then(()=>b(U())),"./locales/en/r-validation.json":()=>Promise.resolve().then(()=>b(G())),"./locales/sv/r-common.json":()=>Promise.resolve().then(()=>b(Z())),"./locales/sv/r-pipes.json":()=>Promise.resolve().then(()=>b(J())),"./locales/sv/r-validation.json":()=>Promise.resolve().then(()=>b(X()))});var Te="en",A=Te;var ve={},Q=null;function w(e,r){let[t,o]=e.includes(":")?e.split(":"):["r-common",e],n=ve[t]?.[o];if(!n)return Q&&Q(o,t,A),e;try{return q(n,r,A)}catch{return e}}function S(){return A}function Ce(e){return String(e).toUpperCase()}function be(e){return String(e).trimEnd().trimStart()}function we(e){return String(e).toLowerCase()}function Ne(e){let r=String(e);return r.charAt(0).toUpperCase()+r.slice(1)}function Me(e,r){let t=String(e),o=parseInt(r,10);return t.length>o?t.substring(0,o-3)+"...":t}function Pe(e,r="USD"){let t=S();return new Intl.NumberFormat(t,{style:"currency",currency:r}).format(e)}function ke(e,r){let t=new Date(e),o=S();return r==="short"?t.toLocaleDateString(o):r==="long"?t.toLocaleDateString(o,{weekday:"long",year:"numeric",month:"long",day:"numeric"}):t.toISOString()}function Le(e){if(!e)return"n/a";let r=new Date(e),t=new Date;r.setHours(0,0,0,0),t.setHours(0,0,0,0);let o=t.getTime()-r.getTime(),n=Math.round(o/(1e3*60*60*24));return n===0?w("r-pipes:today"):n===1?w("r-pipes:yesterday"):w("r-pipes:daysAgo",{count:n})}function Re(e){if(e==null)return"n/a";let r=Number(e);return w("r-pipes:pieces",{count:r})}function Ae(e,r=","){return Array.isArray(e)?e.join(r):e}function Se(e){return!Array.isArray(e)||e.length===0?"":e[0]}function $e(e){return!Array.isArray(e)||e.length===0?"":e[e.length-1]}function He(e){return typeof e!="object"||e===null?[]:Object.keys(e)}function Fe(e,r){return e||r}function Ie(e,r,t){return e?r:t}function Be(){let e=new Map;return e.set("uppercase",Ce),e.set("lowercase",we),e.set("capitalize",Ne),e.set("trim",be),e.set("shorten",Me),e.set("currency",Pe),e.set("date",ke),e.set("daysAgo",Le),e.set("pieces",Re),e.set("join",Ae),e.set("first",Se),e.set("last",$e),e.set("keys",He),e.set("default",Fe),e.set("ternary",Ie),{lookup(r){return e.get(r)??null},get(r){var t=e.get(r);if(!t)throw Error("Pipe '"+r+"' not found.");return t},has(r){return e.has(r)}}}var v=Be();function Y(e,r,t=v){return r.reduce((o,n)=>{let[s,...a]=n.split(":").map(i=>i.trim());if(!t.has(s))return`[Pipe ${s} not found]`;try{return t.get(s)(o,...a)}catch(i){return`[Pipe ${s}, value: ${e}, error: ${i}]`}},e)}var De=v;function Oe(e,...r){let t=document.createElement("template"),o=Ve(e);t.innerHTML=o;let n=[],s=document.createTreeWalker(t.content,NodeFilter.SHOW_ALL),a;for(;a=s.nextNode();)if(a.nodeType===Node.ELEMENT_NODE){let i=a;_e(i,r,n),customElements.get(i.tagName.toLowerCase())&&customElements.upgrade(i)}else if(a.nodeType===Node.TEXT_NODE){let i=a,l=i.textContent,c=K(l,r);if(c)if(/€€\d+€€/.test(l)){let u=null,d=null,m=[];n.push({originalValue:l,setter(f){var h=c(f);u||(u=document.createComment(""),d=document.createComment(""),i.parentNode?.replaceChild(d,i),d.parentNode?.insertBefore(u,d)),m.forEach(y=>y.parentNode?.removeChild(y)),m=[];let g=document.createElement("template");g.innerHTML=h;let x=Array.from(g.content.childNodes),T=d.parentNode;x.forEach(y=>{T.insertBefore(y,d),m.push(y)})}})}else n.push({originalValue:l,setter(u){var d=c(u);i.textContent=d}})}return function(l){return n.forEach(c=>{c.setter(l)}),{fragment:t.content,update(c){n.forEach(p=>{p.setter(c)})}}}}function Ve(e){return e.raw.map((r,t)=>t<e.raw.length-1?`${r}\u20AC\u20AC${t}\u20AC\u20AC`:r).join("")}function _e(e,r,t){let o=[];for(let a of Array.from(e.attributes)){var n=a.value;if(n=="")continue;let i=/€€(\d+)€€/,l=n.match(i);if(l){let c=parseInt(l[1],10),p=r[c];if(typeof p=="function"){o.push({setter(u){let d=p.bind(u);e.removeAttribute(a.name),e[a.name]=d}});continue}}var s=K(n,r);s!=null&&o.push({originalValue:n,setter(c){let p=s(c)??n;a.name in e?e[a.name]=p:a.value=p}})}o.length>0&&t.push({originalValue:e.tagName,setter(a){o.forEach(i=>i.setter(a))}})}function ze(e,r){return e.split(",").map(t=>{if(t=t.trim(),t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"))return t.slice(1,-1);if(!isNaN(Number(t)))return Number(t);if(t.includes(".")){let o=t.split("."),n=r;for(let s of o){if(n==null)return;n=n[s]}return n}return r[t]})}function K(e,r){let t=/€€(\d+)€€|{{\s*([^|]+?)(?:\|([\w|]+))?\s*}}/g,o=0,n,s=[];for(;(n=t.exec(e))!==null;){var a=e.slice(o,n.index);if(a.length>0&&s.push(l=>a),n[1]){let l=parseInt(n[1],10),c=r[l];if(!c)continue;if(typeof c=="function"){let p=c;s.push(u=>{var d=p.apply(u);return d})}else c&&c.length>0&&s.push(p=>c)}else if(n[2]){let l=n[2].trim(),c=n[3]?n[3].trim():null,p=n[4]?n[4].split("|").map(u=>u.trim()):[];s.push(u=>{var d=u[l];if(typeof d=="function")if(c){let m=ze(c,u);d=d.apply(u,m)}else d=d.call(u);return p.forEach(m=>{d=De.get(m)(d)}),d})}o=t.lastIndex}if(s.length==0)return null;var i=e.slice(o);return i.length>0&&s.push(l=>i),l=>{var c="";return s.forEach(p=>{var u=p(l);c+=u}),c}}function ee(e){let r=e.split("|").map(s=>s.trim()),t=r[0],o=r.slice(1),n=t.match(/^(\w+)\s*\((.*)\)$/);if(n){let[,s,a]=n,i=a?a.split(",").map(l=>l.trim()):[];return{type:"function",fnName:s,fnArgs:i,pipes:o}}return{type:"path",path:t,pipes:o}}function N(e,r){let o=r.replace(/\[(\d+)\]/g,".$1").split("."),n=e;for(let s of o)if(n&&typeof n=="object"&&s in n)n=n[s];else return;return n}function E(e,r,t,o=!1){let n=`[template error] ${r} (at ${t})`;if(e.onError&&e.onError(n),e.strict||o)throw new Error(n)}function je(e){return function(t,o,n=""){try{let s=N(t,o);return s===void 0?(E(e,`Cannot resolve "${o}"`,n),""):s===null?"":Array.isArray(s)?s.length>0?JSON.stringify(s):"":typeof s=="object"?JSON.stringify(s):s}catch(s){let a=s instanceof Error?s.message:String(s);return E(e,`Exception resolving "${o}": ${a}`,n,!0),""}}}function te(e,r,t,o,n){let s,a=o.pipeRegistry??v;if(e.type==="function"){let i=t?.[e.fnName];if(typeof i!="function")return E(o,`Function "${e.fnName}" not found`,n),"";let l=(e.fnArgs??[]).map(c=>c.startsWith('"')&&c.endsWith('"')||c.startsWith("'")&&c.endsWith("'")?c.slice(1,-1):isNaN(Number(c))?N(r,c):Number(c));try{s=i(...l)}catch(c){let p=c instanceof Error?c.message:String(c);return E(o,`Error calling "${e.fnName}": ${p}`,n),""}}else{let i=N(r,e.path);if(i===void 0)return E(o,`Cannot resolve "${e.path}"`,n),"";i===null?s="":typeof i=="object"?s=JSON.stringify(i):s=i}return e.pipes.length>0&&(s=Y(s,e.pipes,a)),s}var $=new Map;function qe(e,r,t){if(e.nodeType!==Node.TEXT_NODE||!e.textContent?.includes("{{"))return;let o=e.textContent;if(!$.has(o)){let i=o.split(/(\{\{.*?\}\})/).map(l=>{if(l.startsWith("{{")){let c=l.slice(2,-2).trim();return{parsed:ee(c),literal:""}}else return{parsed:null,literal:l}});$.set(o,i)}let n=$.get(o),s=`TextNode: "${o}"`;return(a,i)=>{let l=n.map(({parsed:c,literal:p})=>c?String(te(c,a,i,t,s)):p).join("");e.textContent=l}}function We(e,r,t){if(e.nodeType!==Node.ELEMENT_NODE)return;let o=e,n=[],s=Array.from(o.attributes);for(let a of s){let i=a.value.match(/\{\{(.+?)\}\}/);if(i){let l=i[1].trim(),c=ee(l),p=a.name,u=`Attribute: ${p} on <${o.tagName.toLowerCase()}>`;n.push((d,m)=>{let f=te(c,d,m,t,u);o.setAttribute(p,String(f))})}}if(n.length>0)return(a,i)=>n.forEach(l=>l(a,i))}function ne(e,r,t,o,n){if(e.nodeType!==Node.ELEMENT_NODE||!e.hasAttribute(o))return;let s=e,a=s.getAttribute(o),i=s.cloneNode(!0),l=document.createComment(`${o}: ${a}`),c=s.parentNode;c.insertBefore(l,s),s.remove();let p=null,u=null,d=null,m=null;return(f,h)=>{let g=r(f,a,`${o}="${a}"`),x=n(g);if(x&&!p){if(d&&m)p=d,u=m,d=null,m=null;else{let T=i.cloneNode(!0);T.removeAttribute(o),p=T,u=H(T,t)}u(f,h),c.insertBefore(p,l.nextSibling)}else x&&u&&u(f,h);!x&&p&&(p.remove(),d=p,m=u,p=null,u=null)}}function Ue(e,r,t){return ne(e,r,t,"if",o=>!!o)}function Ge(e,r,t){return ne(e,r,t,"unless",o=>!o)}function Ze(e,r,t){if(e.nodeType!==Node.ELEMENT_NODE||!e.hasAttribute("loop"))return;let o=e,n=o.getAttribute("loop"),s=n.match(/(\w+)\s+in\s+(.+)/);if(!s){E(t,`Invalid loop syntax: "${n}"`,`Element: <${o.tagName.toLowerCase()}>`);return}let[,a,i]=s,l=o.cloneNode(!0);l.removeAttribute("loop");let c=o.parentNode,p=document.createComment(`loop: ${n}`);c.insertBefore(p,o),o.remove();let u=[];return(d,m)=>{let f=N(d,i);if(f===void 0){E(t,`Cannot resolve "${i}"`,`Loop source: "${n}"`);return}if(!Array.isArray(f)){E(t,`"${i}" is not an array in loop: "${n}"`,`Element: <${l.tagName.toLowerCase()}>`);return}let h=Math.min(u.length,f.length);for(let g=0;g<h;g++)u[g].renderer({...d,[a]:f[g]},m);for(let g=u.length-1;g>=f.length;g--)u[g].element.remove();if(f.length>h){let g=document.createDocumentFragment(),x=[];for(let y=h;y<f.length;y++){let L=l.cloneNode(!0),V=H(L,t);V({...d,[a]:f[y]},m),g.appendChild(L),x.push({element:L,renderer:V})}let T=h>0?u[h-1].element:p;c.insertBefore(g,T.nextSibling),u=u.slice(0,h).concat(x)}else u.length=f.length}}var Je=[Ze,Ue,Ge],Xe=[qe,We];function H(e,r){let t=[],o=je(r);function n(i){for(let l of Je){let c=l(i,o,r);if(c){t.push(c);return}}for(let l of Xe){let c=l(i,o,r);c&&t.push(c)}for(let l of Array.from(i.childNodes))n(l)}n(e);let s=null,a;return(i,l)=>{(s!==i||a!==l)&&(t.forEach(c=>c(i,l)),s=i,a=l)}}function Qe(e,r={strict:!1}){let n=new DOMParser().parseFromString(`<template><div>${e}</div></template>`,"text/html").querySelector("template").content.firstElementChild,s=H(n,r);return{content:n,render:s}}function Ye(e,r={}){let{delimiter:t=".",escapeChar:o="\\"}=r;if(!e||typeof e!="string")throw new Error("Notation must be a non-empty string");let n=[],s="",a=0,i=!1,l="";for(;a<e.length;){let c=e[a],p=e.substring(a,t.length+a),u=e[a+1],d=e.substring(a+1,t.length+a+1);if(c===o&&(d===t||u==="["||u==="]"))i?l+=u:s+=u,a+=2;else if(c==="["&&!i)s&&(n.push({type:"property",key:s}),s=""),i=!0,l="",a++;else if(c==="]"&&i){if(!/^\d+$/.test(l.trim()))throw new Error(`Invalid array index: [${l}]. Only numeric indices are supported.`);n.push({type:"index",key:l.trim()}),i=!1,l="",a++}else p===t&&!i?(s&&(n.push({type:"property",key:s}),s=""),a+=t.length):i?(l+=c,a++):(s+=c,a++)}if(i)throw new Error("Unclosed bracket in notation");if(s&&n.push({type:"property",key:s}),n.length===0)throw new Error("Invalid notation: must contain at least one property or index");return n}function Ke(e){return r=>{let t=r;for(let o of e){if(t==null)return;if(o.type==="property"){if(typeof t!="object")return;t=t[o.key]}else if(o.type==="index"){if(!Array.isArray(t))return;let n=parseInt(o.key,10);if(n<0||n>=t.length)return;t=t[n]}}return t}}function M(e,r={}){let t=Ye(e,r);return Ke(t)}function oe(e){let r=[],t=0;for(;t<e.length;){let o=e[t];if(/\s/.test(o)){t++;continue}if(o==="|"){for(t++;t<e.length&&/\s/.test(e[t]);)t++;let n="";for(;t<e.length&&!/[\s\(\)\[\]\{\}\|\+\-\*\/\=\;\,\.]/.test(e[t]);)n+=e[t],t++;r.push({type:3,value:n});continue}if(o==='"'||o==="'"){let n=o,s=n;for(t++;t<e.length&&e[t]!==n;)e[t]==="\\"&&t+1<e.length&&e[t+1]===n?(s+="\\"+n,t+=2):(s+=e[t],t++);t<e.length&&(s+=n,t++),r.push({type:0,value:s});continue}if(/[0-9]/.test(o)){let n="",s=!1;for(;t<e.length&&(/[0-9]/.test(e[t])||e[t]==="."&&!s);)e[t]==="."&&(s=!0),n+=e[t],t++;r.push({type:0,value:n});continue}if(/[a-zA-Z_$]/.test(o)){let n="",s=!1;for(;t<e.length;)if(/[a-zA-Z0-9_$.]/.test(e[t]))n+=e[t],t++;else if(e[t]==="["){let c=1;for(n+=e[t++];t<e.length&&c>0;)e[t]==="["&&c++,e[t]==="]"&&c--,n+=e[t++]}else break;let a=0;for(;t<e.length&&/\s/.test(e[t]);)a++,t++;if(t<e.length&&e[t]==="("){s=!0,n+="(",t++;let c=1;for(;t<e.length&&c>0;)e[t]==="("&&c++,e[t]===")"&&c--,n+=e[t++]}else t-=a;let i=r[r.length-1],l=e[t-n.length-1]==="."&&i?.type===0;r.push({type:s||l?1:2,value:n});continue}t++}return r}function P(e){let r=[],t=e.indexOf("("),o=e.lastIndexOf(")");if(t===-1||o===-1||o<=t)throw new Error("Invalid function call syntax");let n=e.slice(t+1,o),s=0;for(;s<n.length;){let a=n[s];if(/\s/.test(a)){s++;continue}if(a==='"'||a==="'"){let i=a,l="";for(s++;s<n.length&&n[s]!==i;)n[s]==="\\"?(s++,s<n.length&&(l+=n[s])):l+=n[s],s++;if(s>=n.length)throw new Error("Unterminated string in arguments");s++,r.push({type:"string",value:l});continue}if(/[0-9]/.test(a)){let i="";for(;s<n.length&&/[0-9.]/.test(n[s]);)i+=n[s],s++;r.push({type:"number",value:parseFloat(i)});continue}if(/[a-zA-Z_]/.test(a)){let i="";for(;s<n.length&&/[a-zA-Z0-9_\.]/.test(n[s]);)i+=n[s],s++;r.push({type:"identifier",value:i});continue}if(a===","){s++;continue}throw new Error(`Unexpected character in arguments: ${a}`)}return r}function se(e){let r=[],t=0;for(;t<e.length;){let o=e.indexOf("{{",t);if(o===-1){r.push(re(e.slice(t)));break}o>t&&r.push(re(e.slice(t,o)));let{value:n,endIndex:s,balanced:a}=tt(e,o);if(!a)throw new Error(`Unclosed mustache tag starting at index ${o}, template: ${e}`);r.push(et(n)),t=s}return r}function re(e){return{type:"string",value:e}}function et(e){return{type:"mustache",value:e}}function tt(e,r){let t="{{",o="}}",n=r+t.length,s=1;for(;n<e.length&&s>0;)e.slice(n,n+t.length)===t?(s++,n+=t.length):e.slice(n,n+o.length)===o?(s--,n+=o.length):n++;let a=s===0,i=a?n:e.length;return{value:e.slice(r,i),endIndex:i,balanced:a}}function F(e,r){let t=se(e).map(o=>o.type==="string"?(n,s)=>o.value:nt(o,r));return(o,n)=>t.map(s=>s(o,n)).join("")}function nt(e,r){let t=oe(e.value),o=rt(t,e.value,r?.pipeRegistry);return ot(o)}function rt(e,r,t){let o=null;t||(t=v);for(let n of e)switch(n.type){case 0:throw Error(`Constants not supported: ${n.value}`);case 2:{o={source:M(n.value),pipes:[]};break}case 1:{o={source:st(n.value),pipes:[]};break}case 3:{if(!o)throw Error(`Pipe '${n.value}' has no input expression in: ${r}`);if(!n.value||n.value==="")throw Error("Pipe symbol was provided, but no pipes. Template: "+r);let[s,...a]=n.value.split(":").map(l=>l.trim()),i=t.lookup(s);if(!i)throw Error(`Pipe not found: ${s}`);o.pipes.push(l=>i(l,a));break}}if(!o)throw Error(`Invalid expression: ${r}`);return o}function ot(e){return(r,t)=>{let o=e.source(r,t),n=e.pipes.reduce((s,a)=>a(s),o);return n!=null?n.toString():""}}function st(e){let r=e.indexOf("(");if(r===-1)throw Error(`Invalid function: ${e}`);let o=P(e).map(a=>{if(a.type==="number"||a.type==="string")return()=>a.value;if(a.type==="identifier")return i=>M(a.value)(i);throw Error(`Unsupported argument type: ${a.type}`)}),n=e.substring(0,r),s=M(n);return(a,i)=>{if(!i)throw Error(`Component context is required for calling '${n}'`);let l=s(i);if(typeof l!="function")throw Error(`Resolved '${n}' is not a function`);let c=o.map(p=>p(a));return l.apply(i,c)}}var I=class{constructor(r,t,o,n){this.root=r;this.bindings=t;this.clickBindings=o;this.component=n}render(r){for(let t of this.bindings)t.type==="text"?t.func(r,t.node):t.func(r,t.element);for(let t of this.clickBindings){let o=this.getNodeAtPath(this.root,t.path),n=this.component?.[t.methodName];o instanceof HTMLElement&&typeof n=="function"&&(o.onclick=s=>{let a=t.argTokens.map(i=>{if(i.type==="number"||i.type==="string")return i.value;if(i.type==="identifier")return i.value==="event"?s:i.value.split(".").reduce((c,p)=>c?.[p],r)});n.apply(this.component,a)})}return this.root}getNodeAtPath(r,t){return t.reduce((o,n)=>o.childNodes[n],r)}};function _t(e){var r=new B(e);return r}var B=class{constructor(r){if(typeof r=="string"){let o=r.trim();if(o.startsWith("<template")){let n=document.createElement("div");n.innerHTML=o;let s=n.querySelector("template");if(!s)throw new Error("Could not find <template> in input string");this.template=s}else this.template=document.createElement("template"),this.template.innerHTML=o}else this.template=r;let t=this.getRootElement();this.bindings=this.collectBindings(t),this.clickBindings=this.collectClickBindings(t)}createInstance(r){let t=this.getRootElement().cloneNode(!0),o=r??{},n=this.bindings.map(s=>{let a=this.getNodeAtPath(t,s.path);return s.type==="text"?{type:"text",node:a,func:(i,l)=>s.func(i,o,l)}:{type:"attribute",element:a,name:s.name,func:(i,l)=>s.func(i,o,l)}});return new I(t,n,this.clickBindings,r)}getRootElement(){let r=Array.from(this.template.content.childNodes).find(t=>t.nodeType===Node.ELEMENT_NODE);if(!(r instanceof HTMLElement))throw new Error("Template must contain a single root element");return r}collectBindings(r){let t=[],o=(n,s=[])=>{if(n.nodeType===Node.TEXT_NODE&&n.textContent&&n.textContent.match(/\{\{\s*(.*?)\s*\}\}/g)){let a=F(n.textContent);t.push({type:"text",path:[...s],func:(i,l,c)=>{c.textContent=a(i,l)}})}if(n.nodeType===Node.ELEMENT_NODE){let a=n;if(a.tagName==="TEMPLATE")return;for(let i=0;i<a.attributes.length;i++){let l=a.attributes[i];if(l.value.match(/\{\{\s*(.*?)\s*\}\}/g)){let c=F(l.value);t.push({type:"attribute",path:[...s],name:l.name,func:(p,u,d)=>{d.setAttribute(l.name,c(p,u))}})}}Array.from(n.childNodes).forEach((i,l)=>{o(i,[...s,l])})}};return o(r),t}collectClickBindings(r){let t=[],o=(n,s=[])=>{if(n.nodeType===Node.ELEMENT_NODE){let i=n.getAttribute("click");if(i?.trim()){let l=i.trim(),c=l.match(/^([a-zA-Z_$][\w$]*)\s*\((.*)\)$/);if(c){let p=c[1],u=P(l);t.push({path:[...s],methodName:p,argTokens:u})}else t.push({path:[...s],methodName:l,argTokens:[]})}Array.from(n.childNodes).forEach((l,c)=>{o(l,[...s,c])})}};return o(r),t}getNodeAtPath(r,t){return t.reduce((o,n)=>o.childNodes[n],r)}};var D=class{constructor(r,t,o,n){this.dataMap=new Map;this.rowMap=new Map;this.table=r,this.template=t,this.IdColumn=o,this.component=n}render(r){this.clearRows();for(let t of r)this.renderRow(t)}clearRows(){this.table.tBodies[0].innerHTML="",this.dataMap.clear(),this.rowMap.clear()}renderRow(r){let t=r[this.IdColumn];if(t==null)throw new Error(`Missing IdColumn '${this.IdColumn}' in data`);let o=this.template.content.firstElementChild?.cloneNode(!0);if(!o)throw new Error("Template must have a <tr> as its first child");this.populateRow(o,r),this.attachEventHandlers(o,r),this.table.tBodies[0].appendChild(o),this.dataMap.set(t,r),this.rowMap.set(t,o)}populateRow(r,t){r.querySelectorAll("[data-field]").forEach(n=>{let s=n.dataset.field;s&&s in t&&(n.textContent=String(t[s]))})}attachEventHandlers(r,t){r.querySelectorAll("[onclick]").forEach(n=>{let s=n,a=s.getAttribute("onclick");if(!a)return;let i=a.match(/^(\w+)(\(([^)]*)\))?$/);if(!i)return;let[,l,,c]=i,p=c?c.split(",").map(u=>u.trim().replace(/^['"]|['"]$/g,"")):[];typeof this.component[l]=="function"&&(s.removeAttribute("onclick"),s.addEventListener("click",u=>{this.component[l](...p,t,u)}))})}update(r){let t=r[this.IdColumn];if(t==null)throw new Error(`Missing IdColumn '${this.IdColumn}' in update data`);let o=this.rowMap.get(t);o?(this.populateRow(o,r),this.attachEventHandlers(o,r),this.dataMap.set(t,r)):this.renderRow(r)}},k=class extends CustomEvent{constructor(r){super("sortchange",{detail:r,bubbles:!0,composed:!0})}},O=class{constructor(r,t){this.sortColumns=[];this.table=r,this.component=t,this.setupListeners()}setupListeners(){this.table.tHead?.querySelectorAll("th[name]")?.forEach(t=>{t.addEventListener("click",()=>{let o=t.getAttribute("name");this.toggle(o),this.updateSortIndicators(),this.emit()})})}toggle(r){let t=this.sortColumns.findIndex(o=>o.column===r);t===-1?this.sortColumns.push({column:r,direction:"asc"}):this.sortColumns[t].direction==="asc"?this.sortColumns[t].direction="desc":this.sortColumns.splice(t,1)}emit(){let r=new k(this.sortColumns);this.component.dispatchEvent(r)}updateSortIndicators(){this.table.tHead?.querySelectorAll("th[name]")?.forEach(t=>{let o=t,n=o.querySelector(".sort-indicator");n&&o.removeChild(n);let s=o.getAttribute("name"),a=this.sortColumns.find(i=>i.column===s);if(a){let i=document.createElement("span");i.className="sort-indicator",i.textContent=a.direction==="asc"?"\u2191":"\u2193",i.style.float="right",i.style.marginLeft="5px",o.appendChild(i)}o.style.position||(o.style.position="relative")})}getSortColumns(){return[...this.sortColumns]}clear(){this.sortColumns=[],this.updateSortIndicators(),this.emit()}};export{B as Blueprint,I as BoundNode,k as SortChangeEvent,D as TableRenderer,O as TableSorter,Qe as compileTemplate,_t as createBluePrint,Oe as html};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|