@supersoniks/concorde 4.9.4 → 4.9.5
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/ai/README.md +4 -3
- package/build-infos.json +1 -1
- package/concorde-core.bundle.js +1 -1
- package/concorde-core.es.js +1 -1
- package/dist/concorde-core.bundle.js +1 -1
- package/dist/concorde-core.es.js +1 -1
- package/package.json +1 -1
- package/scripts/ai-init.mjs +50 -16
- package/scripts/ai-init.test.mjs +53 -0
- package/src/docs/_getting-started/ai-agents.md +3 -3
package/ai/README.md
CHANGED
|
@@ -10,7 +10,7 @@ node node_modules/@supersoniks/concorde/scripts/ai-init.mjs
|
|
|
10
10
|
|
|
11
11
|
Options :
|
|
12
12
|
|
|
13
|
-
- `--overlay <dir>` — couche
|
|
13
|
+
- `--overlay <dir>` — couche projet ; lit `AGENTS.concorde.md` (legacy : `AGENTS.overlay.md`, `AGENTS.starter.md`)
|
|
14
14
|
- `--skip-agents` — n’écrit jamais `AGENTS.md` (skills / rules seulement)
|
|
15
15
|
- `--merge-agents` — opt-in : conserve le préambule projet et ajoute / rafraîchit le bloc Concorde
|
|
16
16
|
- `--force-agents` — opt-in : **remplace** tout `AGENTS.md` (destructif)
|
|
@@ -33,12 +33,13 @@ Depuis le dépôt Concorde (dev) : `yarn ai-init`
|
|
|
33
33
|
[optional project preamble — short, project-only]
|
|
34
34
|
<!-- concorde-ai -->
|
|
35
35
|
<package ai/AGENTS.md>
|
|
36
|
-
[--- + overlay AGENTS.
|
|
36
|
+
[--- + overlay AGENTS.concorde.md]
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
- Tout **après** `<!-- concorde-ai -->` est **régénéré** à chaque run (pas d’empilement).
|
|
40
|
-
- Ne pas recopier le guide Concorde dans le préambule : notes projet → `overlay/AGENTS.
|
|
40
|
+
- Ne pas recopier le guide Concorde dans le préambule : notes projet → `overlay/AGENTS.concorde.md`.
|
|
41
41
|
- Si le préambule duplique `ai/AGENTS.md`, `ai-init` le **allège / drop** et affiche un warning.
|
|
42
|
+
- Legacy : `AGENTS.overlay.md` / `AGENTS.starter.md` encore lus si `AGENTS.concorde.md` est absent (warning de dépréciation).
|
|
42
43
|
|
|
43
44
|
## Contenu
|
|
44
45
|
|
package/build-infos.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"date":
|
|
1
|
+
{"date":1785410199}
|
package/concorde-core.bundle.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(Z){typeof define=="function"&&define.amd?define(Z):Z()})((function(){"use strict";var M,tt;let Z=class Ft{static getLanguage(){const t=document.documentElement.lang;return localStorage.getItem("SonicSelectedLanguage")||t}static getCookies(){return document.cookie.split(";").reduce((t,i)=>{const r=i.indexOf("=");return t[i.substring(0,r).trim()]=i.substring(r+1),t},{})}static everyAncestors(t,i){for(;t;){if(!i(t))return;t=t.parentNode||t.host}}static getScrollableAncestor(t){for(;t;){const i=t;if(i.nodeType===1){const r=window.getComputedStyle(i);if(r?.overflowY==="auto"||r?.overflowY==="scroll"||r?.overflowY==="hidden"||r?.overflowX==="auto"||r?.overflowX==="scroll"||r?.overflowX==="hidden")return t}t=t.parentNode||t.host}return null}static scopeAttributeNames(t){const i=t.toLowerCase();return i===t?[t]:[t,i]}static readScopeAttributeOnElement(t,i){for(const r of Ft.scopeAttributeNames(i))if(t.hasAttribute(r))return t.getAttribute(r)??"";return null}static getAncestorAttributeValue(t,i){if(!t)return null;let r=t;for(;r;){if(r instanceof HTMLElement){const o=Ft.readScopeAttributeOnElement(r,i);if(o!=null)return o}const e=r.parentNode||r.host;if(!e)break;r=e}return null}static getApiConfiguration(t){const i=Ft.getAncestorAttributeValue(t,"token"),r=Ft.getAncestorAttributeValue(t,"addHTTPResponse")!=null,e=Ft.getAncestorAttributeValue(t,"serviceURL");let o=null,n=null;const l=Ft.getAncestorAttributeValue(t,"tokenProvider"),c=Ft.getAncestorAttributeValue(t,"eventsApiToken");i||(o=Ft.getAncestorAttributeValue(t,"userName"),n=Ft.getAncestorAttributeValue(t,"password"));const h=Ft.getAncestorAttributeValue(t,"credentials")||void 0,u=t.getAttribute("cache"),d=t.hasAttribute("blockUntilDone"),p=t.hasAttribute("keepAlive");return{serviceURL:e,token:i,userName:o,password:n,authToken:c,tokenProvider:l,addHTTPResponse:r,credentials:h,cache:u,blockUntilDone:d,keepAlive:p}}static getClosestElement(t,i){for(;!(t.nodeName&&t.nodeName.toLowerCase()===i)&&(t.parentNode||t.host);)t=t.parentNode||t.host;return t.nodeName?t:null}static getClosestForm(t){return Ft.getClosestElement(t,"form")}static getAncestorsByTagNames(t,i){const r=new Set(i.map(n=>n.toLowerCase())),e=[];let o=t.parentNode||t.host;for(;o;)o instanceof Element&&r.has(o.tagName.toLowerCase())&&e.push(o),o=o.parentNode||o.host;return e}static getAncestorsBySelectors(t,i){const r=[];let e=t.parentNode||t.host;for(;e;){if(e instanceof Element)for(const o of i)try{if(e.matches(o)){r.push(e);break}}catch{}e=e.parentNode||e.host}return r}static async loadJS(t){return new Promise(async r=>{const e=document.createElement("script");e.src=t,e.onload=()=>r(!0),e.onerror=()=>r(!0),document.head.appendChild(e)})}static async loadCSS(t){return new Promise(async r=>{const e=document.createElement("link");e.type="text/css",e.rel="stylesheet",e.href=t,e.onload=()=>r(!0),e.onerror=()=>r(!0),document.head.appendChild(e)})}};const bi=s=>{const t=document.documentElement,i=new MutationObserver(e=>{for(let o of e)o.type==="attributes"&&o.attributeName==="lang"&&s()}),r={attributes:!0,attributeFilter:["lang"]};i.observe(t,r)};let Os=class{static ucFirst(t){return typeof t!="string"?t:t.charAt(0).toUpperCase()+t.substring(1)}static minutesDuration(t,i="",r="long"){i||(i=Z.getLanguage());const e=(h,u)=>[Math.floor(h/u),h%u];function o(h,u,d){return new Intl.NumberFormat(h,{style:"unit",unit:u,unitDisplay:d}).format}const[n,l]=e(t,60),c=[];return n&&c.push(o(i,"hour",r)(n)),l&&c.push(o(i,"minute",r)(l)),new Intl.ListFormat(i,{style:"long",type:"conjunction"}).format(c)}static js(t){try{return Function("return "+t)()}catch{return""}}};class _r{constructor(t){this.path=t}toString(){return this.path}}function wr(s){return new Proxy(s,{get(t,i){if(i==="path")return t.path;if(i==="toString")return t.toString.bind(t);if(i===Symbol.toStringTag)return"DataProviderKey";if(typeof i=="symbol")return t[i];const r=t.path?`${t.path}.${String(i)}`:String(i);return wr(new _r(r))}})}const Jo=/\$\{|\{\$/;function tn(s){return Jo.test(s)}function mi(s){const t=typeof s=="string"?s:s.path;if(tn(t))throw new Error("Static publisher path required for get/set/dp. Use @subscribe, @publish, or @handle for dynamic DataProviderKey paths.");return t}const es=function(s){return this instanceof es?wr(new _r(s)):new es(s)};let nt=class oe{static shallowEqual(t,i,r=!0){const e=Object.keys(t),o=Object.keys(i);if(e.length!==o.length&&r)return!1;for(const n of e){const l=t[n],c=i[n];if(r?l!==c:l!=c)return!1}return!0}static deepEqual(t,i,r=!0){const e=Object.keys(t),o=Object.keys(i);if(e.length!==o.length&&r)return!1;for(const n of e){const l=t[n],c=i[n],h=oe.isObject(l)&&oe.isObject(c),u=r?l!==c:l!=c;if(h&&!oe.deepEqual(l,c)||!h&&u)return!1}return!0}static isObject(t){return t!=null&&typeof t=="object"}static isUndefindOrNull(t){return t==null}static isEmpty(t){return oe.isUndefindOrNull(t)?!0:Object.keys(t).length===0}static traverse(t,i,r=!1){for(const e of i){const o=t[e];if(o===void 0)return;r&&oe.isObject(o)?t=Object.assign(Array.isArray(o)?[]:{},t,o):t=t[e]}return t}static traverseDotNotation(t,i,r=!1){return oe.traverse(t,i.split("."),r)}static getURLSearchArray(t,i=""){let r=[];for(let e in t){const o=t[e];i&&(e=i+"["+e+"]"),oe.isObject(o)?r=[...r,...this.getURLSearchArray(o,e)]:r.push(`${e}=${o}`)}return r}static getURLSearchString(t){return oe.getURLSearchArray(t,"").join("&")}};const yt=nt.traverseDotNotation;let en=class{static async queueTaskPromise(){return new Promise(t=>{window.queueMicrotask(()=>t(null))})}static async delayPromise(t){return new Promise(i=>{setTimeout(i,t)})}},xr="sonic";typeof __SONIC_PREFIX__<"u"&&(xr=__SONIC_PREFIX__);let Pr=xr.replace(/-([a-z])/g,s=>s[1].toUpperCase());const Es=Pr.charAt(0).toUpperCase()+Pr.slice(1),sn=new Set(["localStorageMode","expirationDelayMs","invalidateOnPageShow"]);function Cr(s){return s==null||typeof s!="object"||Array.isArray(s)?!1:Object.keys(s).some(t=>sn.has(t))}function Ls(s){return Object.prototype.hasOwnProperty.call(s,"__value")}function ne(s){return typeof s=="object"&&s!==null}let ze="sonic";typeof __SONIC_PREFIX__>"u"&&(ze="sonic");const gi=ze=="sonic"?"publisher-proxies-data":ze+"-publisher-proxies-data",xe=class xe{constructor(t,i,r){for(this._proxies_=new Map,this._is_savable_=!1,this._expiration_delay_=1e3*60*60*12,this._invalidate_on_page_show_=!1,this._invalidateListeners_=new Set,this._formInvalidateListeners_=new Set,this._assignListeners_=new Set,this._mutationListeners_=new Set,this._fillListeners_=new Set,this._templateFillListeners_=new Set,this._lockInternalMutationPublishing_=!1,this._instanceCounter_=0,this._assignmentId_=0,this._value_=t,this.parent=i||null,this._parentKey_=r,this.root=this,this._instanceCounter_=0;this.root.parent;)this.root=this.root.parent}delete(){for(const t in this._proxies_.keys())t!="_parent_"&&this._proxies_.get(t)?.delete();this._invalidateListeners_.clear(),this._formInvalidateListeners_.clear(),this._assignListeners_.clear(),this._mutationListeners_.clear(),this._fillListeners_.clear(),this._templateFillListeners_.clear(),this._proxies_.clear(),xe.instances.delete(this._instanceCounter_)}hasListener(){return this._templateFillListeners_.size>0||this._assignListeners_.size>0||this._invalidateListeners_.size>0||this._formInvalidateListeners_.size>0||this._mutationListeners_.size>0||this._fillListeners_.size>0}_publishInternalMutation_(t=!1){if(this._mutationListeners_.forEach(i=>i()),this._is_savable_&&!E.changed){E.changed=!0,E.saveId++;const i=E.saveId;setTimeout(()=>E.getInstance().saveToLocalStorage(i),1e3)}t||this.parent&&this.parent._publishInternalMutation_()}async _publishAssignement_(t=!1){if(this._assignmentId_++,this._assignmentId_!==this._assignmentId_)return;const r=this.get();this._assignListeners_.forEach(e=>{e(r)}),this._publishInternalMutation_(t)}_publishInvalidation_(){this._invalidateListeners_.forEach(t=>t())}_publishFormInvalidation_(){this._formInvalidateListeners_.forEach(t=>t())}_publishDynamicFilling_(t,i){this._fillListeners_.forEach(r=>{r[t]!==i&&(r[t]=i)}),this._publishTemplateFilling_(t,i)}_publishTemplateFilling_(t,i){this._templateFillListeners_.forEach(r=>{const e=Object.getOwnPropertyDescriptor(r,t);e&&!e.set&&!e.writable||(r.propertyMap&&r.propertyMap[t]&&(t=r.propertyMap[t]),typeof r[t]<"u"&&r[t]!==i&&(r[t]=i))})}onAssign(t,i=!0){typeof t=="function"&&(this._assignListeners_.has(t)||(this._assignListeners_.add(t),i&&t(this.get())))}offAssign(t){this._assignListeners_.delete(t)}onInvalidate(t){typeof t=="function"&&this._invalidateListeners_.add(t)}offInvalidate(t){typeof t=="function"&&this._invalidateListeners_.delete(t)}invalidate(){this._publishInvalidation_()}onFormInvalidate(t){typeof t=="function"&&this._formInvalidateListeners_.add(t)}offFormInvalidate(t){typeof t=="function"&&this._formInvalidateListeners_.delete(t)}invalidateForm(){this._publishFormInvalidation_()}onInternalMutation(t){typeof t=="function"&&(this._mutationListeners_.add(t),t())}offInternalMutation(t){typeof t=="function"&&this._mutationListeners_.delete(t)}startTemplateFilling(t){if(this._templateFillListeners_.add(t),typeof this._value_=="object")for(const i in this._value_){let r=i;const e=this._value_[i];t.propertyMap&&t.propertyMap[i]&&(r=t.propertyMap[i]),typeof t[i]<"u"&&t[i]!==e&&(t[r]=e)}}stopTemplateFilling(t){this._templateFillListeners_.delete(t)}startDynamicFilling(t){this._fillListeners_.add(t);for(const i in this._value_){const r=this._value_[i];t[i]!==r&&(t[i]=r)}}stopDynamicFilling(t){this._fillListeners_.delete(t)}set(t,i=!1){if(this._value_===t||ne(this._value_)&&ne(t)&&t&&Ls(this._value_)&&Ls(t)&&this._value_.__value===t.__value||!ne(t)&&t===this._value_.__value)return!0;this._value_=ne(t)?t:{__value:t},this._cachedGet_=void 0;const r=Ls(this._value_);if(this._parentKey_&&this.parent){const e=Ls(this._value_)?this._value_.__value:this._value_;if(this.parent?.get()==null&&this.parent?.get()==null)if(isNaN(Number(this._parentKey_)))this.parent.set({[this._parentKey_]:e});else{const o=[];o[Number(this._parentKey_)]=e,this.parent.set(o)}else this.parent._value_[this._parentKey_]=e}if(r)return this._proxies_.forEach((e,o)=>{o!="_parent_"&&(e.set(null),this._publishDynamicFilling_(o,null))}),this._publishAssignement_(i),this.parent&&this._parentKey_&&this.parent._publishDynamicFilling_(this._parentKey_,this._value_.__value),!0;for(const e in this._value_)this._value_[e]===void 0&&delete this._value_[e];if(this._proxies_.forEach((e,o)=>{const n=this._value_[o];o!="_parent_"&&n===void 0&&n!==null&&isNaN(Number(o))&&(e.set(null),this._publishDynamicFilling_(o,null))}),this._publishAssignement_(),this.parent&&this._parentKey_&&this.parent._publishDynamicFilling_(this._parentKey_,this._value_),ne(this._value_))for(const e in this._value_){const o=t[e],l=ne(o)?o:{__value:o};if(!this._proxies_.has(e)){this._publishDynamicFilling_(e,o);continue}this._proxies_.get(e)?.set(l,!0),this._publishDynamicFilling_(e,o)}return!0}get(){if(rn(this),this._cachedGet_!==void 0)return this._cachedGet_;if(Object.prototype.hasOwnProperty.call(this._value_,"__value")){const t=this._value_.__value;return this._cachedGet_=t??null}return this._cachedGet_=this._value_!=null?this._value_:null}get $tag(){return this._instanceCounter_||(xe.instancesCounter++,this._instanceCounter_=xe.instancesCounter),xe.instances.set(this._instanceCounter_,this),"<"+ze+'-publisher-proxy publisher="'+this._instanceCounter_+'"></'+ze+"-publisher-proxy>"}};xe.instances=new Map,xe.instancesCounter=0;let ss=xe;const Ts=[];function rn(s){Ts.length>0&&Ts[0].add(s)}function Sr(){Ts.unshift(new Set)}function $r(){return Ts.shift()}const F=class F{constructor(){if(this.enabledLocaStorageProxies=[],this.publishers=new Map,this.localStorageData={},this.isLocalStrorageReady=null,this.initialisedData=[],F.instance!=null)throw"Singleton / use getInstance";F.instance=this,this.isLocalStrorageReady=this.cleanStorageData(),F.initPageShowHandler()}static initPageShowHandler(){F.pageShowHandlerInitialized||(F.pageShowHandlerInitialized=!0,window.addEventListener("pageshow",t=>{t.persisted&&F.getInstance().invalidateAll()}))}invalidateAll(){this.publishers.forEach(t=>{t._invalidate_on_page_show_&&t.invalidate()})}async cleanStorageData(){return new Promise(t=>{(async()=>{try{let r=localStorage.getItem(gi),e=null;if(r&&(e=await this.decompress(r,"gzip")),e)try{this.localStorageData=JSON.parse(e)}catch{this.localStorageData={}}else r=await this.compress("{}","gzip"),localStorage.setItem(gi,r),this.localStorageData={};const o=1e3*60*60*12;for(const n in this.localStorageData){const l=this.localStorageData[n],c=new Date().getTime()-(l.expirationDelayMs||o);l.lastModifiationMS<c&&delete this.localStorageData[n]}t(!0)}catch{window.requestAnimationFrame(()=>{t(!1)}),console.warn("no publisher cache in this browser")}})()})}static getInstance(t){if(t){const i=F.instances.get(t);return i||(console.warn("No PublisherManager instance registered with id:",t,"creating new one"),new F)}return F.instance==null?new F:F.instance}static get(t,i){return F.getInstance().get(t,i)}async setLocalData(t,i){await this.isLocalStrorageReady,t.set(this.localStorageData[i+"¤lang_"+Z.getLanguage()]?.data||t.get())}get(t,i){const r=i?.localStorageMode==="enabled",e=i?.invalidateOnPageShow===!0;if(!this.publishers.has(t)){const l=vi({});this.set(t,l)}const o=this.publishers.get(t);return r&&this.initialisedData.indexOf(t)===-1&&(i?.expirationDelayMs&&(o._expiration_delay_=i.expirationDelayMs),o._is_savable_=!0,this.initialisedData.push(t),this.setLocalData(o,t)),e&&(o._invalidate_on_page_show_=e),this.publishers.get(t)}set(t,i){this.publishers.set(t,i)}delete(t){return this.publishers.has(t)?(this.publishers.delete(t),!0):!1}async saveToLocalStorage(t=0){if(!(t!==F.saveId&&t%10!=0))try{if(!F.changed||F.saving)return;F.saving=!0,F.changed=!1;const i=Array.from(this.publishers.keys());let r=!1;for(const e of i){const o=this.publishers.get(e);if(!o?._is_savable_)continue;const n=o?.get();n&&(this.localStorageData[e+"¤lang_"+Z.getLanguage()]={lastModifiationMS:new Date().getTime(),expirationDelayMs:o._expiration_delay_,data:n},r=!0)}if(r){const e=await this.compress(JSON.stringify(this.localStorageData),"gzip");localStorage.setItem(gi,e)}if(F.saving=!1,F.changed){F.saveId++;const e=F.saveId;setTimeout(()=>this.saveToLocalStorage(e),1e3)}}catch{F.saving=!1}}async compress(t,i){const r=new TextEncoder().encode(t),e=window,o=new e.CompressionStream(i),n=o.writable.getWriter();n.write(r),n.close();const l=await new Response(o.readable).arrayBuffer(),c=new Uint8Array(l);let h="";for(let u=0;u<c.length;u++)h+=String.fromCharCode(c[u]);return btoa(h)}async decompress(t,i){const r=atob(t),o=Uint8Array.from(r,u=>u.charCodeAt(0)).buffer,n=window,l=new n.DecompressionStream(i),c=l.writable.getWriter();c.write(o),c.close();const h=await new Response(l.readable).arrayBuffer();return new TextDecoder().decode(h)}};F.buildDate="Thu Jul 30 2026 10:31:44 GMT+0200 (Central European Summer Time)",F.changed=!1,F.saving=!1,F.saveId=0,F.instance=null,F.instances=new Map,F.pageShowHandlerInitialized=!1;let E=F;if(typeof window<"u"){const s=window;s[Es+"PublisherManager"]=s[Es+"PublisherManager"]||E}const on=new Set(["invalidate","onInvalidate","offInvalidate","invalidateForm","onFormInvalidate","offFormInvalidate","onAssign","offAssign","startDynamicFilling","stopDynamicFilling","startTemplateFilling","stopTemplateFilling","onInternalMutation","offInternalMutation","set","get","$tag","_cachedGet_","_templateFillListeners_","_fillListeners_","_assignListeners_","_invalidateListeners_","_formInvalidateListeners_","_publishInternalMutation_","hasListener","delete","_mutationListeners_","_publishDynamicFilling_","_publishInvalidation_","_publishFormInvalidation_","_publishTemplateFilling_","_publishAssignement_","_proxies_","parent","_parentKey_","_value_","_is_savable_","_expiration_delay_","_lockInternalMutationPublishing_","_instanceCounter_","_assignmentId_","_invalidate_on_page_show_"]);function nn(s,t){return{get:function(i,r){if(typeof r=="string"&&on.has(r))return s[r];if(r==Symbol.toPrimitive)return()=>t().get();if(!s._proxies_.has(r)){const e=s._value_[r],o=vi(ne(e)?e:{__value:e},s,r);o._proxies_.set("_parent_",t()),s._proxies_.set(r,o)}return s._proxies_.get(r)},set:function(i,r,e){if(r=="_value_")return s._value_=e,!0;if(r=="_cachedGet_")return s._cachedGet_=e,!0;if(r=="_assignmentId_")return s._assignmentId_=e,!0;if(r=="_is_savable_")return s._is_savable_=e,!0;if(r=="_expiration_delay_")return s._expiration_delay_=e,!0;if(r=="_invalidate_on_page_show_")return s._invalidate_on_page_show_=e,!0;if(r=="_instanceCounter_")return s._instanceCounter_=e,!0;if(!s._proxies_.has(r)){const n=vi({},s,r);n._proxies_.set("_parent_",t()),s._proxies_.set(r,n)}return s._value_[r]!==e&&(s._value_[r]=e,s._publishDynamicFilling_(r,e),s._proxies_.get(r)?.set(ne(e)?e:{__value:e})),!0},deleteProperty:function(i,r){return s._publishDynamicFilling_(r,null),s._proxies_.get(r)?.set(null),delete s._value_[r]},has:function(i,r){return r in s._value_&&r!="_lockInternalMutationPublishing_"},defineProperty:function(i,r,e){return e&&"value"in e&&(s._value_[r]=e.value),!0},getOwnPropertyDescriptor:function(i,r){return{enumerable:!0,configurable:!0}},ownKeys:function(i){return s._value_.__value?Object.keys(s._value_.__value):Object.keys(s._value_)}}}function vi(s,t=null,i){const r=new ss(s,t,i);let e=null;const o=nn(r,()=>e);return e=new Proxy(r,o),e}class an extends HTMLElement{constructor(){super(),this.publisherId="",this.onAssign=t=>{this.innerHTML=t.toString()}}connectedCallback(){this.publisherId=this.getAttribute("publisher")||"",this.publisher=ss.instances.get(parseInt(this.publisherId)),this.publisher?.onAssign(this.onAssign)}disconnectedCallback(){this.publisher?.offAssign(this.onAssign)}}try{customElements.define(ze+"-publisher-proxy",an)}catch{}const Is=(s,t)=>{if(typeof s=="function"){const i=s;return Sr(),i(),$r()}if(typeof s=="string"){const i=s.split("."),r=i.shift()||"";let e=E.get(r,t);e=nt.traverse(e,i);const o=new Set;return o.add(e),o}return new Set([s])};function ln(s){const t=mi(s);return Is(t).values().next().value?.get()}function Ms(s,t,i){const r=mi(s);return Is(r,i).values().next().value}function cn(s,t){return Cr(t)?Ms(s,void 0,t):Ms(s)}function Ns(s,t){return Cr(t)?Ms(s,void 0,t):Ms(s)}function hn(s,t){const i=mi(s);Is(i).values().next().value?.set(t)}let Fs=(M=class{static disable(){this.enabled&&(this.enabled=!1,Array.from(M.observedElements.keys()).forEach(t=>M.unObserve(t)))}static observe(t){if(!t||!M.enabled||M.observedElements.has(t))return;const i=new MutationObserver(M.onMutation),r={};r.childList=!0,r.subtree=!0,r.attributes=!0,r.attributeFilter=["data-bind"],i.observe(t,r),t.querySelectorAll("[data-bind]").forEach(e=>M.addPublisherListeners(e)),M.observedElements.set(t,i)}static unObserve(t){if(!t)return;const i=this.observedElements.get(t);i&&(i.disconnect(),t.querySelectorAll("[data-bind]").forEach(r=>M.removePublisherListeners(r)))}static onAdded(t){t.hasAttribute&&t.hasAttribute("data-bind")&&M.addPublisherListeners(t),t.querySelectorAll?t.querySelectorAll("[data-bind]").forEach(i=>M.addPublisherListeners(i)):t.childNodes.forEach(i=>M.onAdded(i))}static onRemoved(t){t.hasAttribute&&t.hasAttribute("data-bind")&&M.removePublisherListeners(t),t.querySelectorAll?t.querySelectorAll("[data-bind]").forEach(i=>M.removePublisherListeners(i)):t.childNodes.forEach(i=>M.onRemoved(i))}static onMutation(t){for(const i of t)switch(i.type){case"attributes":M.addPublisherListeners(i.target);break;case"childList":i.addedNodes.forEach(r=>{M.onAdded(r)}),i.removedNodes.forEach(r=>{M.onRemoved(r)});break}}static removePublisherListeners(t){const i=M.publisherListeners.get(t);i&&(M.publisherListeners.delete(t),i.forEach(r=>{r.publisher?.offAssign(r.onAssign)}))}static getVariablesDescriptor(t){let i=t.match(/(\$(?:\w+\\?\.?)+)/g);return i?i=i.map(r=>r.replace("$","")):i=[t],i=i.filter(r=>r.length>0),{expression:t.replace("\\",""),variables:i.map(r=>r.split(/\b\.\b/).map(e=>e.replace("\\","")))}}static getDataBindItems(t){return"attributes"in t?Array.from(t.attributes).filter(i=>i.name.indexOf("::")==0).map(i=>({propertyToUpdate:i.name.substring(2).replace(/-((html)|\w)/g,e=>e.substring(1).toUpperCase()),bindedVariablesDescriptor:M.getVariablesDescriptor(i.value)})):[]}static getSubPublisher(t,i){if(!i)return t;for(const r of i)if(r!="_self_"){if(!t)return null;t=t[r]}return t}static addPublisherListeners(t){M.removePublisherListeners(t);const i=Z.getAncestorAttributeValue(t.parentNode||t.host||t,"dataProvider");if(!i)return;const r=E.getInstance().get(i),e=M.getDataBindItems(t),o=[];e.forEach(n=>{const l=n.bindedVariablesDescriptor,c=n.propertyToUpdate;for(const h of l.variables){const u=h;let d=r;d=M.getSubPublisher(r,u);const p=t,w={publisher:d,onAssign:()=>{const v=l.variables.map(D=>M.getSubPublisher(r,D)?.get());let m=l.expression,y=!1;if(v.length==1&&l.variables[0].join(".")==m.substring(1)){let D=v[0];D===null&&(D=""),p[c]=D;return}for(let D=0;D<v.length;D++){let f=v[D];const b=l.variables[D];f===null&&(y=!0,f=void 0),m=m.replace("$"+b.join("."),f)}if(m.indexOf("|")!=-1){const D=m.indexOf("|");if(D==0)m=Os.js(m.substring(1));else{const f=m.substring(0,D),b=m.substring(D+1),x=Os[f];m=y?"":x?x(b):m}}else m=y?"":m;p[c]=m}};d?.onAssign(w.onAssign),o.push(w)}}),M.publisherListeners.set(t,o)}},M.observedElements=new Map,M.enabled=!0,M.publisherListeners=new Map,M);Fs.observe(document.documentElement),window.SonicDataBindObserver||(window.SonicDataBindObserver=Fs);/**
|
|
1
|
+
(function(Z){typeof define=="function"&&define.amd?define(Z):Z()})((function(){"use strict";var M,tt;let Z=class Ft{static getLanguage(){const t=document.documentElement.lang;return localStorage.getItem("SonicSelectedLanguage")||t}static getCookies(){return document.cookie.split(";").reduce((t,i)=>{const r=i.indexOf("=");return t[i.substring(0,r).trim()]=i.substring(r+1),t},{})}static everyAncestors(t,i){for(;t;){if(!i(t))return;t=t.parentNode||t.host}}static getScrollableAncestor(t){for(;t;){const i=t;if(i.nodeType===1){const r=window.getComputedStyle(i);if(r?.overflowY==="auto"||r?.overflowY==="scroll"||r?.overflowY==="hidden"||r?.overflowX==="auto"||r?.overflowX==="scroll"||r?.overflowX==="hidden")return t}t=t.parentNode||t.host}return null}static scopeAttributeNames(t){const i=t.toLowerCase();return i===t?[t]:[t,i]}static readScopeAttributeOnElement(t,i){for(const r of Ft.scopeAttributeNames(i))if(t.hasAttribute(r))return t.getAttribute(r)??"";return null}static getAncestorAttributeValue(t,i){if(!t)return null;let r=t;for(;r;){if(r instanceof HTMLElement){const o=Ft.readScopeAttributeOnElement(r,i);if(o!=null)return o}const e=r.parentNode||r.host;if(!e)break;r=e}return null}static getApiConfiguration(t){const i=Ft.getAncestorAttributeValue(t,"token"),r=Ft.getAncestorAttributeValue(t,"addHTTPResponse")!=null,e=Ft.getAncestorAttributeValue(t,"serviceURL");let o=null,n=null;const l=Ft.getAncestorAttributeValue(t,"tokenProvider"),c=Ft.getAncestorAttributeValue(t,"eventsApiToken");i||(o=Ft.getAncestorAttributeValue(t,"userName"),n=Ft.getAncestorAttributeValue(t,"password"));const h=Ft.getAncestorAttributeValue(t,"credentials")||void 0,u=t.getAttribute("cache"),d=t.hasAttribute("blockUntilDone"),p=t.hasAttribute("keepAlive");return{serviceURL:e,token:i,userName:o,password:n,authToken:c,tokenProvider:l,addHTTPResponse:r,credentials:h,cache:u,blockUntilDone:d,keepAlive:p}}static getClosestElement(t,i){for(;!(t.nodeName&&t.nodeName.toLowerCase()===i)&&(t.parentNode||t.host);)t=t.parentNode||t.host;return t.nodeName?t:null}static getClosestForm(t){return Ft.getClosestElement(t,"form")}static getAncestorsByTagNames(t,i){const r=new Set(i.map(n=>n.toLowerCase())),e=[];let o=t.parentNode||t.host;for(;o;)o instanceof Element&&r.has(o.tagName.toLowerCase())&&e.push(o),o=o.parentNode||o.host;return e}static getAncestorsBySelectors(t,i){const r=[];let e=t.parentNode||t.host;for(;e;){if(e instanceof Element)for(const o of i)try{if(e.matches(o)){r.push(e);break}}catch{}e=e.parentNode||e.host}return r}static async loadJS(t){return new Promise(async r=>{const e=document.createElement("script");e.src=t,e.onload=()=>r(!0),e.onerror=()=>r(!0),document.head.appendChild(e)})}static async loadCSS(t){return new Promise(async r=>{const e=document.createElement("link");e.type="text/css",e.rel="stylesheet",e.href=t,e.onload=()=>r(!0),e.onerror=()=>r(!0),document.head.appendChild(e)})}};const bi=s=>{const t=document.documentElement,i=new MutationObserver(e=>{for(let o of e)o.type==="attributes"&&o.attributeName==="lang"&&s()}),r={attributes:!0,attributeFilter:["lang"]};i.observe(t,r)};let Os=class{static ucFirst(t){return typeof t!="string"?t:t.charAt(0).toUpperCase()+t.substring(1)}static minutesDuration(t,i="",r="long"){i||(i=Z.getLanguage());const e=(h,u)=>[Math.floor(h/u),h%u];function o(h,u,d){return new Intl.NumberFormat(h,{style:"unit",unit:u,unitDisplay:d}).format}const[n,l]=e(t,60),c=[];return n&&c.push(o(i,"hour",r)(n)),l&&c.push(o(i,"minute",r)(l)),new Intl.ListFormat(i,{style:"long",type:"conjunction"}).format(c)}static js(t){try{return Function("return "+t)()}catch{return""}}};class _r{constructor(t){this.path=t}toString(){return this.path}}function wr(s){return new Proxy(s,{get(t,i){if(i==="path")return t.path;if(i==="toString")return t.toString.bind(t);if(i===Symbol.toStringTag)return"DataProviderKey";if(typeof i=="symbol")return t[i];const r=t.path?`${t.path}.${String(i)}`:String(i);return wr(new _r(r))}})}const Jo=/\$\{|\{\$/;function tn(s){return Jo.test(s)}function mi(s){const t=typeof s=="string"?s:s.path;if(tn(t))throw new Error("Static publisher path required for get/set/dp. Use @subscribe, @publish, or @handle for dynamic DataProviderKey paths.");return t}const es=function(s){return this instanceof es?wr(new _r(s)):new es(s)};let nt=class oe{static shallowEqual(t,i,r=!0){const e=Object.keys(t),o=Object.keys(i);if(e.length!==o.length&&r)return!1;for(const n of e){const l=t[n],c=i[n];if(r?l!==c:l!=c)return!1}return!0}static deepEqual(t,i,r=!0){const e=Object.keys(t),o=Object.keys(i);if(e.length!==o.length&&r)return!1;for(const n of e){const l=t[n],c=i[n],h=oe.isObject(l)&&oe.isObject(c),u=r?l!==c:l!=c;if(h&&!oe.deepEqual(l,c)||!h&&u)return!1}return!0}static isObject(t){return t!=null&&typeof t=="object"}static isUndefindOrNull(t){return t==null}static isEmpty(t){return oe.isUndefindOrNull(t)?!0:Object.keys(t).length===0}static traverse(t,i,r=!1){for(const e of i){const o=t[e];if(o===void 0)return;r&&oe.isObject(o)?t=Object.assign(Array.isArray(o)?[]:{},t,o):t=t[e]}return t}static traverseDotNotation(t,i,r=!1){return oe.traverse(t,i.split("."),r)}static getURLSearchArray(t,i=""){let r=[];for(let e in t){const o=t[e];i&&(e=i+"["+e+"]"),oe.isObject(o)?r=[...r,...this.getURLSearchArray(o,e)]:r.push(`${e}=${o}`)}return r}static getURLSearchString(t){return oe.getURLSearchArray(t,"").join("&")}};const yt=nt.traverseDotNotation;let en=class{static async queueTaskPromise(){return new Promise(t=>{window.queueMicrotask(()=>t(null))})}static async delayPromise(t){return new Promise(i=>{setTimeout(i,t)})}},xr="sonic";typeof __SONIC_PREFIX__<"u"&&(xr=__SONIC_PREFIX__);let Pr=xr.replace(/-([a-z])/g,s=>s[1].toUpperCase());const Es=Pr.charAt(0).toUpperCase()+Pr.slice(1),sn=new Set(["localStorageMode","expirationDelayMs","invalidateOnPageShow"]);function Cr(s){return s==null||typeof s!="object"||Array.isArray(s)?!1:Object.keys(s).some(t=>sn.has(t))}function Ls(s){return Object.prototype.hasOwnProperty.call(s,"__value")}function ne(s){return typeof s=="object"&&s!==null}let ze="sonic";typeof __SONIC_PREFIX__>"u"&&(ze="sonic");const gi=ze=="sonic"?"publisher-proxies-data":ze+"-publisher-proxies-data",xe=class xe{constructor(t,i,r){for(this._proxies_=new Map,this._is_savable_=!1,this._expiration_delay_=1e3*60*60*12,this._invalidate_on_page_show_=!1,this._invalidateListeners_=new Set,this._formInvalidateListeners_=new Set,this._assignListeners_=new Set,this._mutationListeners_=new Set,this._fillListeners_=new Set,this._templateFillListeners_=new Set,this._lockInternalMutationPublishing_=!1,this._instanceCounter_=0,this._assignmentId_=0,this._value_=t,this.parent=i||null,this._parentKey_=r,this.root=this,this._instanceCounter_=0;this.root.parent;)this.root=this.root.parent}delete(){for(const t in this._proxies_.keys())t!="_parent_"&&this._proxies_.get(t)?.delete();this._invalidateListeners_.clear(),this._formInvalidateListeners_.clear(),this._assignListeners_.clear(),this._mutationListeners_.clear(),this._fillListeners_.clear(),this._templateFillListeners_.clear(),this._proxies_.clear(),xe.instances.delete(this._instanceCounter_)}hasListener(){return this._templateFillListeners_.size>0||this._assignListeners_.size>0||this._invalidateListeners_.size>0||this._formInvalidateListeners_.size>0||this._mutationListeners_.size>0||this._fillListeners_.size>0}_publishInternalMutation_(t=!1){if(this._mutationListeners_.forEach(i=>i()),this._is_savable_&&!E.changed){E.changed=!0,E.saveId++;const i=E.saveId;setTimeout(()=>E.getInstance().saveToLocalStorage(i),1e3)}t||this.parent&&this.parent._publishInternalMutation_()}async _publishAssignement_(t=!1){if(this._assignmentId_++,this._assignmentId_!==this._assignmentId_)return;const r=this.get();this._assignListeners_.forEach(e=>{e(r)}),this._publishInternalMutation_(t)}_publishInvalidation_(){this._invalidateListeners_.forEach(t=>t())}_publishFormInvalidation_(){this._formInvalidateListeners_.forEach(t=>t())}_publishDynamicFilling_(t,i){this._fillListeners_.forEach(r=>{r[t]!==i&&(r[t]=i)}),this._publishTemplateFilling_(t,i)}_publishTemplateFilling_(t,i){this._templateFillListeners_.forEach(r=>{const e=Object.getOwnPropertyDescriptor(r,t);e&&!e.set&&!e.writable||(r.propertyMap&&r.propertyMap[t]&&(t=r.propertyMap[t]),typeof r[t]<"u"&&r[t]!==i&&(r[t]=i))})}onAssign(t,i=!0){typeof t=="function"&&(this._assignListeners_.has(t)||(this._assignListeners_.add(t),i&&t(this.get())))}offAssign(t){this._assignListeners_.delete(t)}onInvalidate(t){typeof t=="function"&&this._invalidateListeners_.add(t)}offInvalidate(t){typeof t=="function"&&this._invalidateListeners_.delete(t)}invalidate(){this._publishInvalidation_()}onFormInvalidate(t){typeof t=="function"&&this._formInvalidateListeners_.add(t)}offFormInvalidate(t){typeof t=="function"&&this._formInvalidateListeners_.delete(t)}invalidateForm(){this._publishFormInvalidation_()}onInternalMutation(t){typeof t=="function"&&(this._mutationListeners_.add(t),t())}offInternalMutation(t){typeof t=="function"&&this._mutationListeners_.delete(t)}startTemplateFilling(t){if(this._templateFillListeners_.add(t),typeof this._value_=="object")for(const i in this._value_){let r=i;const e=this._value_[i];t.propertyMap&&t.propertyMap[i]&&(r=t.propertyMap[i]),typeof t[i]<"u"&&t[i]!==e&&(t[r]=e)}}stopTemplateFilling(t){this._templateFillListeners_.delete(t)}startDynamicFilling(t){this._fillListeners_.add(t);for(const i in this._value_){const r=this._value_[i];t[i]!==r&&(t[i]=r)}}stopDynamicFilling(t){this._fillListeners_.delete(t)}set(t,i=!1){if(this._value_===t||ne(this._value_)&&ne(t)&&t&&Ls(this._value_)&&Ls(t)&&this._value_.__value===t.__value||!ne(t)&&t===this._value_.__value)return!0;this._value_=ne(t)?t:{__value:t},this._cachedGet_=void 0;const r=Ls(this._value_);if(this._parentKey_&&this.parent){const e=Ls(this._value_)?this._value_.__value:this._value_;if(this.parent?.get()==null&&this.parent?.get()==null)if(isNaN(Number(this._parentKey_)))this.parent.set({[this._parentKey_]:e});else{const o=[];o[Number(this._parentKey_)]=e,this.parent.set(o)}else this.parent._value_[this._parentKey_]=e}if(r)return this._proxies_.forEach((e,o)=>{o!="_parent_"&&(e.set(null),this._publishDynamicFilling_(o,null))}),this._publishAssignement_(i),this.parent&&this._parentKey_&&this.parent._publishDynamicFilling_(this._parentKey_,this._value_.__value),!0;for(const e in this._value_)this._value_[e]===void 0&&delete this._value_[e];if(this._proxies_.forEach((e,o)=>{const n=this._value_[o];o!="_parent_"&&n===void 0&&n!==null&&isNaN(Number(o))&&(e.set(null),this._publishDynamicFilling_(o,null))}),this._publishAssignement_(),this.parent&&this._parentKey_&&this.parent._publishDynamicFilling_(this._parentKey_,this._value_),ne(this._value_))for(const e in this._value_){const o=t[e],l=ne(o)?o:{__value:o};if(!this._proxies_.has(e)){this._publishDynamicFilling_(e,o);continue}this._proxies_.get(e)?.set(l,!0),this._publishDynamicFilling_(e,o)}return!0}get(){if(rn(this),this._cachedGet_!==void 0)return this._cachedGet_;if(Object.prototype.hasOwnProperty.call(this._value_,"__value")){const t=this._value_.__value;return this._cachedGet_=t??null}return this._cachedGet_=this._value_!=null?this._value_:null}get $tag(){return this._instanceCounter_||(xe.instancesCounter++,this._instanceCounter_=xe.instancesCounter),xe.instances.set(this._instanceCounter_,this),"<"+ze+'-publisher-proxy publisher="'+this._instanceCounter_+'"></'+ze+"-publisher-proxy>"}};xe.instances=new Map,xe.instancesCounter=0;let ss=xe;const Ts=[];function rn(s){Ts.length>0&&Ts[0].add(s)}function Sr(){Ts.unshift(new Set)}function $r(){return Ts.shift()}const F=class F{constructor(){if(this.enabledLocaStorageProxies=[],this.publishers=new Map,this.localStorageData={},this.isLocalStrorageReady=null,this.initialisedData=[],F.instance!=null)throw"Singleton / use getInstance";F.instance=this,this.isLocalStrorageReady=this.cleanStorageData(),F.initPageShowHandler()}static initPageShowHandler(){F.pageShowHandlerInitialized||(F.pageShowHandlerInitialized=!0,window.addEventListener("pageshow",t=>{t.persisted&&F.getInstance().invalidateAll()}))}invalidateAll(){this.publishers.forEach(t=>{t._invalidate_on_page_show_&&t.invalidate()})}async cleanStorageData(){return new Promise(t=>{(async()=>{try{let r=localStorage.getItem(gi),e=null;if(r&&(e=await this.decompress(r,"gzip")),e)try{this.localStorageData=JSON.parse(e)}catch{this.localStorageData={}}else r=await this.compress("{}","gzip"),localStorage.setItem(gi,r),this.localStorageData={};const o=1e3*60*60*12;for(const n in this.localStorageData){const l=this.localStorageData[n],c=new Date().getTime()-(l.expirationDelayMs||o);l.lastModifiationMS<c&&delete this.localStorageData[n]}t(!0)}catch{window.requestAnimationFrame(()=>{t(!1)}),console.warn("no publisher cache in this browser")}})()})}static getInstance(t){if(t){const i=F.instances.get(t);return i||(console.warn("No PublisherManager instance registered with id:",t,"creating new one"),new F)}return F.instance==null?new F:F.instance}static get(t,i){return F.getInstance().get(t,i)}async setLocalData(t,i){await this.isLocalStrorageReady,t.set(this.localStorageData[i+"¤lang_"+Z.getLanguage()]?.data||t.get())}get(t,i){const r=i?.localStorageMode==="enabled",e=i?.invalidateOnPageShow===!0;if(!this.publishers.has(t)){const l=vi({});this.set(t,l)}const o=this.publishers.get(t);return r&&this.initialisedData.indexOf(t)===-1&&(i?.expirationDelayMs&&(o._expiration_delay_=i.expirationDelayMs),o._is_savable_=!0,this.initialisedData.push(t),this.setLocalData(o,t)),e&&(o._invalidate_on_page_show_=e),this.publishers.get(t)}set(t,i){this.publishers.set(t,i)}delete(t){return this.publishers.has(t)?(this.publishers.delete(t),!0):!1}async saveToLocalStorage(t=0){if(!(t!==F.saveId&&t%10!=0))try{if(!F.changed||F.saving)return;F.saving=!0,F.changed=!1;const i=Array.from(this.publishers.keys());let r=!1;for(const e of i){const o=this.publishers.get(e);if(!o?._is_savable_)continue;const n=o?.get();n&&(this.localStorageData[e+"¤lang_"+Z.getLanguage()]={lastModifiationMS:new Date().getTime(),expirationDelayMs:o._expiration_delay_,data:n},r=!0)}if(r){const e=await this.compress(JSON.stringify(this.localStorageData),"gzip");localStorage.setItem(gi,e)}if(F.saving=!1,F.changed){F.saveId++;const e=F.saveId;setTimeout(()=>this.saveToLocalStorage(e),1e3)}}catch{F.saving=!1}}async compress(t,i){const r=new TextEncoder().encode(t),e=window,o=new e.CompressionStream(i),n=o.writable.getWriter();n.write(r),n.close();const l=await new Response(o.readable).arrayBuffer(),c=new Uint8Array(l);let h="";for(let u=0;u<c.length;u++)h+=String.fromCharCode(c[u]);return btoa(h)}async decompress(t,i){const r=atob(t),o=Uint8Array.from(r,u=>u.charCodeAt(0)).buffer,n=window,l=new n.DecompressionStream(i),c=l.writable.getWriter();c.write(o),c.close();const h=await new Response(l.readable).arrayBuffer();return new TextDecoder().decode(h)}};F.buildDate="Thu Jul 30 2026 13:16:38 GMT+0200 (Central European Summer Time)",F.changed=!1,F.saving=!1,F.saveId=0,F.instance=null,F.instances=new Map,F.pageShowHandlerInitialized=!1;let E=F;if(typeof window<"u"){const s=window;s[Es+"PublisherManager"]=s[Es+"PublisherManager"]||E}const on=new Set(["invalidate","onInvalidate","offInvalidate","invalidateForm","onFormInvalidate","offFormInvalidate","onAssign","offAssign","startDynamicFilling","stopDynamicFilling","startTemplateFilling","stopTemplateFilling","onInternalMutation","offInternalMutation","set","get","$tag","_cachedGet_","_templateFillListeners_","_fillListeners_","_assignListeners_","_invalidateListeners_","_formInvalidateListeners_","_publishInternalMutation_","hasListener","delete","_mutationListeners_","_publishDynamicFilling_","_publishInvalidation_","_publishFormInvalidation_","_publishTemplateFilling_","_publishAssignement_","_proxies_","parent","_parentKey_","_value_","_is_savable_","_expiration_delay_","_lockInternalMutationPublishing_","_instanceCounter_","_assignmentId_","_invalidate_on_page_show_"]);function nn(s,t){return{get:function(i,r){if(typeof r=="string"&&on.has(r))return s[r];if(r==Symbol.toPrimitive)return()=>t().get();if(!s._proxies_.has(r)){const e=s._value_[r],o=vi(ne(e)?e:{__value:e},s,r);o._proxies_.set("_parent_",t()),s._proxies_.set(r,o)}return s._proxies_.get(r)},set:function(i,r,e){if(r=="_value_")return s._value_=e,!0;if(r=="_cachedGet_")return s._cachedGet_=e,!0;if(r=="_assignmentId_")return s._assignmentId_=e,!0;if(r=="_is_savable_")return s._is_savable_=e,!0;if(r=="_expiration_delay_")return s._expiration_delay_=e,!0;if(r=="_invalidate_on_page_show_")return s._invalidate_on_page_show_=e,!0;if(r=="_instanceCounter_")return s._instanceCounter_=e,!0;if(!s._proxies_.has(r)){const n=vi({},s,r);n._proxies_.set("_parent_",t()),s._proxies_.set(r,n)}return s._value_[r]!==e&&(s._value_[r]=e,s._publishDynamicFilling_(r,e),s._proxies_.get(r)?.set(ne(e)?e:{__value:e})),!0},deleteProperty:function(i,r){return s._publishDynamicFilling_(r,null),s._proxies_.get(r)?.set(null),delete s._value_[r]},has:function(i,r){return r in s._value_&&r!="_lockInternalMutationPublishing_"},defineProperty:function(i,r,e){return e&&"value"in e&&(s._value_[r]=e.value),!0},getOwnPropertyDescriptor:function(i,r){return{enumerable:!0,configurable:!0}},ownKeys:function(i){return s._value_.__value?Object.keys(s._value_.__value):Object.keys(s._value_)}}}function vi(s,t=null,i){const r=new ss(s,t,i);let e=null;const o=nn(r,()=>e);return e=new Proxy(r,o),e}class an extends HTMLElement{constructor(){super(),this.publisherId="",this.onAssign=t=>{this.innerHTML=t.toString()}}connectedCallback(){this.publisherId=this.getAttribute("publisher")||"",this.publisher=ss.instances.get(parseInt(this.publisherId)),this.publisher?.onAssign(this.onAssign)}disconnectedCallback(){this.publisher?.offAssign(this.onAssign)}}try{customElements.define(ze+"-publisher-proxy",an)}catch{}const Is=(s,t)=>{if(typeof s=="function"){const i=s;return Sr(),i(),$r()}if(typeof s=="string"){const i=s.split("."),r=i.shift()||"";let e=E.get(r,t);e=nt.traverse(e,i);const o=new Set;return o.add(e),o}return new Set([s])};function ln(s){const t=mi(s);return Is(t).values().next().value?.get()}function Ms(s,t,i){const r=mi(s);return Is(r,i).values().next().value}function cn(s,t){return Cr(t)?Ms(s,void 0,t):Ms(s)}function Ns(s,t){return Cr(t)?Ms(s,void 0,t):Ms(s)}function hn(s,t){const i=mi(s);Is(i).values().next().value?.set(t)}let Fs=(M=class{static disable(){this.enabled&&(this.enabled=!1,Array.from(M.observedElements.keys()).forEach(t=>M.unObserve(t)))}static observe(t){if(!t||!M.enabled||M.observedElements.has(t))return;const i=new MutationObserver(M.onMutation),r={};r.childList=!0,r.subtree=!0,r.attributes=!0,r.attributeFilter=["data-bind"],i.observe(t,r),t.querySelectorAll("[data-bind]").forEach(e=>M.addPublisherListeners(e)),M.observedElements.set(t,i)}static unObserve(t){if(!t)return;const i=this.observedElements.get(t);i&&(i.disconnect(),t.querySelectorAll("[data-bind]").forEach(r=>M.removePublisherListeners(r)))}static onAdded(t){t.hasAttribute&&t.hasAttribute("data-bind")&&M.addPublisherListeners(t),t.querySelectorAll?t.querySelectorAll("[data-bind]").forEach(i=>M.addPublisherListeners(i)):t.childNodes.forEach(i=>M.onAdded(i))}static onRemoved(t){t.hasAttribute&&t.hasAttribute("data-bind")&&M.removePublisherListeners(t),t.querySelectorAll?t.querySelectorAll("[data-bind]").forEach(i=>M.removePublisherListeners(i)):t.childNodes.forEach(i=>M.onRemoved(i))}static onMutation(t){for(const i of t)switch(i.type){case"attributes":M.addPublisherListeners(i.target);break;case"childList":i.addedNodes.forEach(r=>{M.onAdded(r)}),i.removedNodes.forEach(r=>{M.onRemoved(r)});break}}static removePublisherListeners(t){const i=M.publisherListeners.get(t);i&&(M.publisherListeners.delete(t),i.forEach(r=>{r.publisher?.offAssign(r.onAssign)}))}static getVariablesDescriptor(t){let i=t.match(/(\$(?:\w+\\?\.?)+)/g);return i?i=i.map(r=>r.replace("$","")):i=[t],i=i.filter(r=>r.length>0),{expression:t.replace("\\",""),variables:i.map(r=>r.split(/\b\.\b/).map(e=>e.replace("\\","")))}}static getDataBindItems(t){return"attributes"in t?Array.from(t.attributes).filter(i=>i.name.indexOf("::")==0).map(i=>({propertyToUpdate:i.name.substring(2).replace(/-((html)|\w)/g,e=>e.substring(1).toUpperCase()),bindedVariablesDescriptor:M.getVariablesDescriptor(i.value)})):[]}static getSubPublisher(t,i){if(!i)return t;for(const r of i)if(r!="_self_"){if(!t)return null;t=t[r]}return t}static addPublisherListeners(t){M.removePublisherListeners(t);const i=Z.getAncestorAttributeValue(t.parentNode||t.host||t,"dataProvider");if(!i)return;const r=E.getInstance().get(i),e=M.getDataBindItems(t),o=[];e.forEach(n=>{const l=n.bindedVariablesDescriptor,c=n.propertyToUpdate;for(const h of l.variables){const u=h;let d=r;d=M.getSubPublisher(r,u);const p=t,w={publisher:d,onAssign:()=>{const v=l.variables.map(D=>M.getSubPublisher(r,D)?.get());let m=l.expression,y=!1;if(v.length==1&&l.variables[0].join(".")==m.substring(1)){let D=v[0];D===null&&(D=""),p[c]=D;return}for(let D=0;D<v.length;D++){let f=v[D];const b=l.variables[D];f===null&&(y=!0,f=void 0),m=m.replace("$"+b.join("."),f)}if(m.indexOf("|")!=-1){const D=m.indexOf("|");if(D==0)m=Os.js(m.substring(1));else{const f=m.substring(0,D),b=m.substring(D+1),x=Os[f];m=y?"":x?x(b):m}}else m=y?"":m;p[c]=m}};d?.onAssign(w.onAssign),o.push(w)}}),M.publisherListeners.set(t,o)}},M.observedElements=new Map,M.enabled=!0,M.publisherListeners=new Map,M);Fs.observe(document.documentElement),window.SonicDataBindObserver||(window.SonicDataBindObserver=Fs);/**
|
|
2
2
|
* @license
|
|
3
3
|
* Copyright 2017 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: BSD-3-Clause
|
package/concorde-core.es.js
CHANGED
|
@@ -742,7 +742,7 @@ const j = class j {
|
|
|
742
742
|
return new TextDecoder().decode(h);
|
|
743
743
|
}
|
|
744
744
|
};
|
|
745
|
-
j.buildDate = "Thu Jul 30 2026
|
|
745
|
+
j.buildDate = "Thu Jul 30 2026 13:16:38 GMT+0200 (Central European Summer Time)", j.changed = !1, j.saving = !1, j.saveId = 0, j.instance = null, j.instances = /* @__PURE__ */ new Map(), j.pageShowHandlerInitialized = !1;
|
|
746
746
|
let E = j;
|
|
747
747
|
if (typeof window < "u") {
|
|
748
748
|
const s = window;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(Z){typeof define=="function"&&define.amd?define(Z):Z()})((function(){"use strict";var M,tt;let Z=class Ft{static getLanguage(){const t=document.documentElement.lang;return localStorage.getItem("SonicSelectedLanguage")||t}static getCookies(){return document.cookie.split(";").reduce((t,i)=>{const r=i.indexOf("=");return t[i.substring(0,r).trim()]=i.substring(r+1),t},{})}static everyAncestors(t,i){for(;t;){if(!i(t))return;t=t.parentNode||t.host}}static getScrollableAncestor(t){for(;t;){const i=t;if(i.nodeType===1){const r=window.getComputedStyle(i);if(r?.overflowY==="auto"||r?.overflowY==="scroll"||r?.overflowY==="hidden"||r?.overflowX==="auto"||r?.overflowX==="scroll"||r?.overflowX==="hidden")return t}t=t.parentNode||t.host}return null}static scopeAttributeNames(t){const i=t.toLowerCase();return i===t?[t]:[t,i]}static readScopeAttributeOnElement(t,i){for(const r of Ft.scopeAttributeNames(i))if(t.hasAttribute(r))return t.getAttribute(r)??"";return null}static getAncestorAttributeValue(t,i){if(!t)return null;let r=t;for(;r;){if(r instanceof HTMLElement){const o=Ft.readScopeAttributeOnElement(r,i);if(o!=null)return o}const e=r.parentNode||r.host;if(!e)break;r=e}return null}static getApiConfiguration(t){const i=Ft.getAncestorAttributeValue(t,"token"),r=Ft.getAncestorAttributeValue(t,"addHTTPResponse")!=null,e=Ft.getAncestorAttributeValue(t,"serviceURL");let o=null,n=null;const l=Ft.getAncestorAttributeValue(t,"tokenProvider"),c=Ft.getAncestorAttributeValue(t,"eventsApiToken");i||(o=Ft.getAncestorAttributeValue(t,"userName"),n=Ft.getAncestorAttributeValue(t,"password"));const h=Ft.getAncestorAttributeValue(t,"credentials")||void 0,u=t.getAttribute("cache"),d=t.hasAttribute("blockUntilDone"),p=t.hasAttribute("keepAlive");return{serviceURL:e,token:i,userName:o,password:n,authToken:c,tokenProvider:l,addHTTPResponse:r,credentials:h,cache:u,blockUntilDone:d,keepAlive:p}}static getClosestElement(t,i){for(;!(t.nodeName&&t.nodeName.toLowerCase()===i)&&(t.parentNode||t.host);)t=t.parentNode||t.host;return t.nodeName?t:null}static getClosestForm(t){return Ft.getClosestElement(t,"form")}static getAncestorsByTagNames(t,i){const r=new Set(i.map(n=>n.toLowerCase())),e=[];let o=t.parentNode||t.host;for(;o;)o instanceof Element&&r.has(o.tagName.toLowerCase())&&e.push(o),o=o.parentNode||o.host;return e}static getAncestorsBySelectors(t,i){const r=[];let e=t.parentNode||t.host;for(;e;){if(e instanceof Element)for(const o of i)try{if(e.matches(o)){r.push(e);break}}catch{}e=e.parentNode||e.host}return r}static async loadJS(t){return new Promise(async r=>{const e=document.createElement("script");e.src=t,e.onload=()=>r(!0),e.onerror=()=>r(!0),document.head.appendChild(e)})}static async loadCSS(t){return new Promise(async r=>{const e=document.createElement("link");e.type="text/css",e.rel="stylesheet",e.href=t,e.onload=()=>r(!0),e.onerror=()=>r(!0),document.head.appendChild(e)})}};const bi=s=>{const t=document.documentElement,i=new MutationObserver(e=>{for(let o of e)o.type==="attributes"&&o.attributeName==="lang"&&s()}),r={attributes:!0,attributeFilter:["lang"]};i.observe(t,r)};let Os=class{static ucFirst(t){return typeof t!="string"?t:t.charAt(0).toUpperCase()+t.substring(1)}static minutesDuration(t,i="",r="long"){i||(i=Z.getLanguage());const e=(h,u)=>[Math.floor(h/u),h%u];function o(h,u,d){return new Intl.NumberFormat(h,{style:"unit",unit:u,unitDisplay:d}).format}const[n,l]=e(t,60),c=[];return n&&c.push(o(i,"hour",r)(n)),l&&c.push(o(i,"minute",r)(l)),new Intl.ListFormat(i,{style:"long",type:"conjunction"}).format(c)}static js(t){try{return Function("return "+t)()}catch{return""}}};class _r{constructor(t){this.path=t}toString(){return this.path}}function wr(s){return new Proxy(s,{get(t,i){if(i==="path")return t.path;if(i==="toString")return t.toString.bind(t);if(i===Symbol.toStringTag)return"DataProviderKey";if(typeof i=="symbol")return t[i];const r=t.path?`${t.path}.${String(i)}`:String(i);return wr(new _r(r))}})}const Jo=/\$\{|\{\$/;function tn(s){return Jo.test(s)}function mi(s){const t=typeof s=="string"?s:s.path;if(tn(t))throw new Error("Static publisher path required for get/set/dp. Use @subscribe, @publish, or @handle for dynamic DataProviderKey paths.");return t}const es=function(s){return this instanceof es?wr(new _r(s)):new es(s)};let nt=class oe{static shallowEqual(t,i,r=!0){const e=Object.keys(t),o=Object.keys(i);if(e.length!==o.length&&r)return!1;for(const n of e){const l=t[n],c=i[n];if(r?l!==c:l!=c)return!1}return!0}static deepEqual(t,i,r=!0){const e=Object.keys(t),o=Object.keys(i);if(e.length!==o.length&&r)return!1;for(const n of e){const l=t[n],c=i[n],h=oe.isObject(l)&&oe.isObject(c),u=r?l!==c:l!=c;if(h&&!oe.deepEqual(l,c)||!h&&u)return!1}return!0}static isObject(t){return t!=null&&typeof t=="object"}static isUndefindOrNull(t){return t==null}static isEmpty(t){return oe.isUndefindOrNull(t)?!0:Object.keys(t).length===0}static traverse(t,i,r=!1){for(const e of i){const o=t[e];if(o===void 0)return;r&&oe.isObject(o)?t=Object.assign(Array.isArray(o)?[]:{},t,o):t=t[e]}return t}static traverseDotNotation(t,i,r=!1){return oe.traverse(t,i.split("."),r)}static getURLSearchArray(t,i=""){let r=[];for(let e in t){const o=t[e];i&&(e=i+"["+e+"]"),oe.isObject(o)?r=[...r,...this.getURLSearchArray(o,e)]:r.push(`${e}=${o}`)}return r}static getURLSearchString(t){return oe.getURLSearchArray(t,"").join("&")}};const yt=nt.traverseDotNotation;let en=class{static async queueTaskPromise(){return new Promise(t=>{window.queueMicrotask(()=>t(null))})}static async delayPromise(t){return new Promise(i=>{setTimeout(i,t)})}},xr="sonic";typeof __SONIC_PREFIX__<"u"&&(xr=__SONIC_PREFIX__);let Pr=xr.replace(/-([a-z])/g,s=>s[1].toUpperCase());const Es=Pr.charAt(0).toUpperCase()+Pr.slice(1),sn=new Set(["localStorageMode","expirationDelayMs","invalidateOnPageShow"]);function Cr(s){return s==null||typeof s!="object"||Array.isArray(s)?!1:Object.keys(s).some(t=>sn.has(t))}function Ls(s){return Object.prototype.hasOwnProperty.call(s,"__value")}function ne(s){return typeof s=="object"&&s!==null}let ze="sonic";typeof __SONIC_PREFIX__>"u"&&(ze="sonic");const gi=ze=="sonic"?"publisher-proxies-data":ze+"-publisher-proxies-data",xe=class xe{constructor(t,i,r){for(this._proxies_=new Map,this._is_savable_=!1,this._expiration_delay_=1e3*60*60*12,this._invalidate_on_page_show_=!1,this._invalidateListeners_=new Set,this._formInvalidateListeners_=new Set,this._assignListeners_=new Set,this._mutationListeners_=new Set,this._fillListeners_=new Set,this._templateFillListeners_=new Set,this._lockInternalMutationPublishing_=!1,this._instanceCounter_=0,this._assignmentId_=0,this._value_=t,this.parent=i||null,this._parentKey_=r,this.root=this,this._instanceCounter_=0;this.root.parent;)this.root=this.root.parent}delete(){for(const t in this._proxies_.keys())t!="_parent_"&&this._proxies_.get(t)?.delete();this._invalidateListeners_.clear(),this._formInvalidateListeners_.clear(),this._assignListeners_.clear(),this._mutationListeners_.clear(),this._fillListeners_.clear(),this._templateFillListeners_.clear(),this._proxies_.clear(),xe.instances.delete(this._instanceCounter_)}hasListener(){return this._templateFillListeners_.size>0||this._assignListeners_.size>0||this._invalidateListeners_.size>0||this._formInvalidateListeners_.size>0||this._mutationListeners_.size>0||this._fillListeners_.size>0}_publishInternalMutation_(t=!1){if(this._mutationListeners_.forEach(i=>i()),this._is_savable_&&!E.changed){E.changed=!0,E.saveId++;const i=E.saveId;setTimeout(()=>E.getInstance().saveToLocalStorage(i),1e3)}t||this.parent&&this.parent._publishInternalMutation_()}async _publishAssignement_(t=!1){if(this._assignmentId_++,this._assignmentId_!==this._assignmentId_)return;const r=this.get();this._assignListeners_.forEach(e=>{e(r)}),this._publishInternalMutation_(t)}_publishInvalidation_(){this._invalidateListeners_.forEach(t=>t())}_publishFormInvalidation_(){this._formInvalidateListeners_.forEach(t=>t())}_publishDynamicFilling_(t,i){this._fillListeners_.forEach(r=>{r[t]!==i&&(r[t]=i)}),this._publishTemplateFilling_(t,i)}_publishTemplateFilling_(t,i){this._templateFillListeners_.forEach(r=>{const e=Object.getOwnPropertyDescriptor(r,t);e&&!e.set&&!e.writable||(r.propertyMap&&r.propertyMap[t]&&(t=r.propertyMap[t]),typeof r[t]<"u"&&r[t]!==i&&(r[t]=i))})}onAssign(t,i=!0){typeof t=="function"&&(this._assignListeners_.has(t)||(this._assignListeners_.add(t),i&&t(this.get())))}offAssign(t){this._assignListeners_.delete(t)}onInvalidate(t){typeof t=="function"&&this._invalidateListeners_.add(t)}offInvalidate(t){typeof t=="function"&&this._invalidateListeners_.delete(t)}invalidate(){this._publishInvalidation_()}onFormInvalidate(t){typeof t=="function"&&this._formInvalidateListeners_.add(t)}offFormInvalidate(t){typeof t=="function"&&this._formInvalidateListeners_.delete(t)}invalidateForm(){this._publishFormInvalidation_()}onInternalMutation(t){typeof t=="function"&&(this._mutationListeners_.add(t),t())}offInternalMutation(t){typeof t=="function"&&this._mutationListeners_.delete(t)}startTemplateFilling(t){if(this._templateFillListeners_.add(t),typeof this._value_=="object")for(const i in this._value_){let r=i;const e=this._value_[i];t.propertyMap&&t.propertyMap[i]&&(r=t.propertyMap[i]),typeof t[i]<"u"&&t[i]!==e&&(t[r]=e)}}stopTemplateFilling(t){this._templateFillListeners_.delete(t)}startDynamicFilling(t){this._fillListeners_.add(t);for(const i in this._value_){const r=this._value_[i];t[i]!==r&&(t[i]=r)}}stopDynamicFilling(t){this._fillListeners_.delete(t)}set(t,i=!1){if(this._value_===t||ne(this._value_)&&ne(t)&&t&&Ls(this._value_)&&Ls(t)&&this._value_.__value===t.__value||!ne(t)&&t===this._value_.__value)return!0;this._value_=ne(t)?t:{__value:t},this._cachedGet_=void 0;const r=Ls(this._value_);if(this._parentKey_&&this.parent){const e=Ls(this._value_)?this._value_.__value:this._value_;if(this.parent?.get()==null&&this.parent?.get()==null)if(isNaN(Number(this._parentKey_)))this.parent.set({[this._parentKey_]:e});else{const o=[];o[Number(this._parentKey_)]=e,this.parent.set(o)}else this.parent._value_[this._parentKey_]=e}if(r)return this._proxies_.forEach((e,o)=>{o!="_parent_"&&(e.set(null),this._publishDynamicFilling_(o,null))}),this._publishAssignement_(i),this.parent&&this._parentKey_&&this.parent._publishDynamicFilling_(this._parentKey_,this._value_.__value),!0;for(const e in this._value_)this._value_[e]===void 0&&delete this._value_[e];if(this._proxies_.forEach((e,o)=>{const n=this._value_[o];o!="_parent_"&&n===void 0&&n!==null&&isNaN(Number(o))&&(e.set(null),this._publishDynamicFilling_(o,null))}),this._publishAssignement_(),this.parent&&this._parentKey_&&this.parent._publishDynamicFilling_(this._parentKey_,this._value_),ne(this._value_))for(const e in this._value_){const o=t[e],l=ne(o)?o:{__value:o};if(!this._proxies_.has(e)){this._publishDynamicFilling_(e,o);continue}this._proxies_.get(e)?.set(l,!0),this._publishDynamicFilling_(e,o)}return!0}get(){if(rn(this),this._cachedGet_!==void 0)return this._cachedGet_;if(Object.prototype.hasOwnProperty.call(this._value_,"__value")){const t=this._value_.__value;return this._cachedGet_=t??null}return this._cachedGet_=this._value_!=null?this._value_:null}get $tag(){return this._instanceCounter_||(xe.instancesCounter++,this._instanceCounter_=xe.instancesCounter),xe.instances.set(this._instanceCounter_,this),"<"+ze+'-publisher-proxy publisher="'+this._instanceCounter_+'"></'+ze+"-publisher-proxy>"}};xe.instances=new Map,xe.instancesCounter=0;let ss=xe;const Ts=[];function rn(s){Ts.length>0&&Ts[0].add(s)}function Sr(){Ts.unshift(new Set)}function $r(){return Ts.shift()}const F=class F{constructor(){if(this.enabledLocaStorageProxies=[],this.publishers=new Map,this.localStorageData={},this.isLocalStrorageReady=null,this.initialisedData=[],F.instance!=null)throw"Singleton / use getInstance";F.instance=this,this.isLocalStrorageReady=this.cleanStorageData(),F.initPageShowHandler()}static initPageShowHandler(){F.pageShowHandlerInitialized||(F.pageShowHandlerInitialized=!0,window.addEventListener("pageshow",t=>{t.persisted&&F.getInstance().invalidateAll()}))}invalidateAll(){this.publishers.forEach(t=>{t._invalidate_on_page_show_&&t.invalidate()})}async cleanStorageData(){return new Promise(t=>{(async()=>{try{let r=localStorage.getItem(gi),e=null;if(r&&(e=await this.decompress(r,"gzip")),e)try{this.localStorageData=JSON.parse(e)}catch{this.localStorageData={}}else r=await this.compress("{}","gzip"),localStorage.setItem(gi,r),this.localStorageData={};const o=1e3*60*60*12;for(const n in this.localStorageData){const l=this.localStorageData[n],c=new Date().getTime()-(l.expirationDelayMs||o);l.lastModifiationMS<c&&delete this.localStorageData[n]}t(!0)}catch{window.requestAnimationFrame(()=>{t(!1)}),console.warn("no publisher cache in this browser")}})()})}static getInstance(t){if(t){const i=F.instances.get(t);return i||(console.warn("No PublisherManager instance registered with id:",t,"creating new one"),new F)}return F.instance==null?new F:F.instance}static get(t,i){return F.getInstance().get(t,i)}async setLocalData(t,i){await this.isLocalStrorageReady,t.set(this.localStorageData[i+"¤lang_"+Z.getLanguage()]?.data||t.get())}get(t,i){const r=i?.localStorageMode==="enabled",e=i?.invalidateOnPageShow===!0;if(!this.publishers.has(t)){const l=vi({});this.set(t,l)}const o=this.publishers.get(t);return r&&this.initialisedData.indexOf(t)===-1&&(i?.expirationDelayMs&&(o._expiration_delay_=i.expirationDelayMs),o._is_savable_=!0,this.initialisedData.push(t),this.setLocalData(o,t)),e&&(o._invalidate_on_page_show_=e),this.publishers.get(t)}set(t,i){this.publishers.set(t,i)}delete(t){return this.publishers.has(t)?(this.publishers.delete(t),!0):!1}async saveToLocalStorage(t=0){if(!(t!==F.saveId&&t%10!=0))try{if(!F.changed||F.saving)return;F.saving=!0,F.changed=!1;const i=Array.from(this.publishers.keys());let r=!1;for(const e of i){const o=this.publishers.get(e);if(!o?._is_savable_)continue;const n=o?.get();n&&(this.localStorageData[e+"¤lang_"+Z.getLanguage()]={lastModifiationMS:new Date().getTime(),expirationDelayMs:o._expiration_delay_,data:n},r=!0)}if(r){const e=await this.compress(JSON.stringify(this.localStorageData),"gzip");localStorage.setItem(gi,e)}if(F.saving=!1,F.changed){F.saveId++;const e=F.saveId;setTimeout(()=>this.saveToLocalStorage(e),1e3)}}catch{F.saving=!1}}async compress(t,i){const r=new TextEncoder().encode(t),e=window,o=new e.CompressionStream(i),n=o.writable.getWriter();n.write(r),n.close();const l=await new Response(o.readable).arrayBuffer(),c=new Uint8Array(l);let h="";for(let u=0;u<c.length;u++)h+=String.fromCharCode(c[u]);return btoa(h)}async decompress(t,i){const r=atob(t),o=Uint8Array.from(r,u=>u.charCodeAt(0)).buffer,n=window,l=new n.DecompressionStream(i),c=l.writable.getWriter();c.write(o),c.close();const h=await new Response(l.readable).arrayBuffer();return new TextDecoder().decode(h)}};F.buildDate="Thu Jul 30 2026 10:31:44 GMT+0200 (Central European Summer Time)",F.changed=!1,F.saving=!1,F.saveId=0,F.instance=null,F.instances=new Map,F.pageShowHandlerInitialized=!1;let E=F;if(typeof window<"u"){const s=window;s[Es+"PublisherManager"]=s[Es+"PublisherManager"]||E}const on=new Set(["invalidate","onInvalidate","offInvalidate","invalidateForm","onFormInvalidate","offFormInvalidate","onAssign","offAssign","startDynamicFilling","stopDynamicFilling","startTemplateFilling","stopTemplateFilling","onInternalMutation","offInternalMutation","set","get","$tag","_cachedGet_","_templateFillListeners_","_fillListeners_","_assignListeners_","_invalidateListeners_","_formInvalidateListeners_","_publishInternalMutation_","hasListener","delete","_mutationListeners_","_publishDynamicFilling_","_publishInvalidation_","_publishFormInvalidation_","_publishTemplateFilling_","_publishAssignement_","_proxies_","parent","_parentKey_","_value_","_is_savable_","_expiration_delay_","_lockInternalMutationPublishing_","_instanceCounter_","_assignmentId_","_invalidate_on_page_show_"]);function nn(s,t){return{get:function(i,r){if(typeof r=="string"&&on.has(r))return s[r];if(r==Symbol.toPrimitive)return()=>t().get();if(!s._proxies_.has(r)){const e=s._value_[r],o=vi(ne(e)?e:{__value:e},s,r);o._proxies_.set("_parent_",t()),s._proxies_.set(r,o)}return s._proxies_.get(r)},set:function(i,r,e){if(r=="_value_")return s._value_=e,!0;if(r=="_cachedGet_")return s._cachedGet_=e,!0;if(r=="_assignmentId_")return s._assignmentId_=e,!0;if(r=="_is_savable_")return s._is_savable_=e,!0;if(r=="_expiration_delay_")return s._expiration_delay_=e,!0;if(r=="_invalidate_on_page_show_")return s._invalidate_on_page_show_=e,!0;if(r=="_instanceCounter_")return s._instanceCounter_=e,!0;if(!s._proxies_.has(r)){const n=vi({},s,r);n._proxies_.set("_parent_",t()),s._proxies_.set(r,n)}return s._value_[r]!==e&&(s._value_[r]=e,s._publishDynamicFilling_(r,e),s._proxies_.get(r)?.set(ne(e)?e:{__value:e})),!0},deleteProperty:function(i,r){return s._publishDynamicFilling_(r,null),s._proxies_.get(r)?.set(null),delete s._value_[r]},has:function(i,r){return r in s._value_&&r!="_lockInternalMutationPublishing_"},defineProperty:function(i,r,e){return e&&"value"in e&&(s._value_[r]=e.value),!0},getOwnPropertyDescriptor:function(i,r){return{enumerable:!0,configurable:!0}},ownKeys:function(i){return s._value_.__value?Object.keys(s._value_.__value):Object.keys(s._value_)}}}function vi(s,t=null,i){const r=new ss(s,t,i);let e=null;const o=nn(r,()=>e);return e=new Proxy(r,o),e}class an extends HTMLElement{constructor(){super(),this.publisherId="",this.onAssign=t=>{this.innerHTML=t.toString()}}connectedCallback(){this.publisherId=this.getAttribute("publisher")||"",this.publisher=ss.instances.get(parseInt(this.publisherId)),this.publisher?.onAssign(this.onAssign)}disconnectedCallback(){this.publisher?.offAssign(this.onAssign)}}try{customElements.define(ze+"-publisher-proxy",an)}catch{}const Is=(s,t)=>{if(typeof s=="function"){const i=s;return Sr(),i(),$r()}if(typeof s=="string"){const i=s.split("."),r=i.shift()||"";let e=E.get(r,t);e=nt.traverse(e,i);const o=new Set;return o.add(e),o}return new Set([s])};function ln(s){const t=mi(s);return Is(t).values().next().value?.get()}function Ms(s,t,i){const r=mi(s);return Is(r,i).values().next().value}function cn(s,t){return Cr(t)?Ms(s,void 0,t):Ms(s)}function Ns(s,t){return Cr(t)?Ms(s,void 0,t):Ms(s)}function hn(s,t){const i=mi(s);Is(i).values().next().value?.set(t)}let Fs=(M=class{static disable(){this.enabled&&(this.enabled=!1,Array.from(M.observedElements.keys()).forEach(t=>M.unObserve(t)))}static observe(t){if(!t||!M.enabled||M.observedElements.has(t))return;const i=new MutationObserver(M.onMutation),r={};r.childList=!0,r.subtree=!0,r.attributes=!0,r.attributeFilter=["data-bind"],i.observe(t,r),t.querySelectorAll("[data-bind]").forEach(e=>M.addPublisherListeners(e)),M.observedElements.set(t,i)}static unObserve(t){if(!t)return;const i=this.observedElements.get(t);i&&(i.disconnect(),t.querySelectorAll("[data-bind]").forEach(r=>M.removePublisherListeners(r)))}static onAdded(t){t.hasAttribute&&t.hasAttribute("data-bind")&&M.addPublisherListeners(t),t.querySelectorAll?t.querySelectorAll("[data-bind]").forEach(i=>M.addPublisherListeners(i)):t.childNodes.forEach(i=>M.onAdded(i))}static onRemoved(t){t.hasAttribute&&t.hasAttribute("data-bind")&&M.removePublisherListeners(t),t.querySelectorAll?t.querySelectorAll("[data-bind]").forEach(i=>M.removePublisherListeners(i)):t.childNodes.forEach(i=>M.onRemoved(i))}static onMutation(t){for(const i of t)switch(i.type){case"attributes":M.addPublisherListeners(i.target);break;case"childList":i.addedNodes.forEach(r=>{M.onAdded(r)}),i.removedNodes.forEach(r=>{M.onRemoved(r)});break}}static removePublisherListeners(t){const i=M.publisherListeners.get(t);i&&(M.publisherListeners.delete(t),i.forEach(r=>{r.publisher?.offAssign(r.onAssign)}))}static getVariablesDescriptor(t){let i=t.match(/(\$(?:\w+\\?\.?)+)/g);return i?i=i.map(r=>r.replace("$","")):i=[t],i=i.filter(r=>r.length>0),{expression:t.replace("\\",""),variables:i.map(r=>r.split(/\b\.\b/).map(e=>e.replace("\\","")))}}static getDataBindItems(t){return"attributes"in t?Array.from(t.attributes).filter(i=>i.name.indexOf("::")==0).map(i=>({propertyToUpdate:i.name.substring(2).replace(/-((html)|\w)/g,e=>e.substring(1).toUpperCase()),bindedVariablesDescriptor:M.getVariablesDescriptor(i.value)})):[]}static getSubPublisher(t,i){if(!i)return t;for(const r of i)if(r!="_self_"){if(!t)return null;t=t[r]}return t}static addPublisherListeners(t){M.removePublisherListeners(t);const i=Z.getAncestorAttributeValue(t.parentNode||t.host||t,"dataProvider");if(!i)return;const r=E.getInstance().get(i),e=M.getDataBindItems(t),o=[];e.forEach(n=>{const l=n.bindedVariablesDescriptor,c=n.propertyToUpdate;for(const h of l.variables){const u=h;let d=r;d=M.getSubPublisher(r,u);const p=t,w={publisher:d,onAssign:()=>{const v=l.variables.map(D=>M.getSubPublisher(r,D)?.get());let m=l.expression,y=!1;if(v.length==1&&l.variables[0].join(".")==m.substring(1)){let D=v[0];D===null&&(D=""),p[c]=D;return}for(let D=0;D<v.length;D++){let f=v[D];const b=l.variables[D];f===null&&(y=!0,f=void 0),m=m.replace("$"+b.join("."),f)}if(m.indexOf("|")!=-1){const D=m.indexOf("|");if(D==0)m=Os.js(m.substring(1));else{const f=m.substring(0,D),b=m.substring(D+1),x=Os[f];m=y?"":x?x(b):m}}else m=y?"":m;p[c]=m}};d?.onAssign(w.onAssign),o.push(w)}}),M.publisherListeners.set(t,o)}},M.observedElements=new Map,M.enabled=!0,M.publisherListeners=new Map,M);Fs.observe(document.documentElement),window.SonicDataBindObserver||(window.SonicDataBindObserver=Fs);/**
|
|
1
|
+
(function(Z){typeof define=="function"&&define.amd?define(Z):Z()})((function(){"use strict";var M,tt;let Z=class Ft{static getLanguage(){const t=document.documentElement.lang;return localStorage.getItem("SonicSelectedLanguage")||t}static getCookies(){return document.cookie.split(";").reduce((t,i)=>{const r=i.indexOf("=");return t[i.substring(0,r).trim()]=i.substring(r+1),t},{})}static everyAncestors(t,i){for(;t;){if(!i(t))return;t=t.parentNode||t.host}}static getScrollableAncestor(t){for(;t;){const i=t;if(i.nodeType===1){const r=window.getComputedStyle(i);if(r?.overflowY==="auto"||r?.overflowY==="scroll"||r?.overflowY==="hidden"||r?.overflowX==="auto"||r?.overflowX==="scroll"||r?.overflowX==="hidden")return t}t=t.parentNode||t.host}return null}static scopeAttributeNames(t){const i=t.toLowerCase();return i===t?[t]:[t,i]}static readScopeAttributeOnElement(t,i){for(const r of Ft.scopeAttributeNames(i))if(t.hasAttribute(r))return t.getAttribute(r)??"";return null}static getAncestorAttributeValue(t,i){if(!t)return null;let r=t;for(;r;){if(r instanceof HTMLElement){const o=Ft.readScopeAttributeOnElement(r,i);if(o!=null)return o}const e=r.parentNode||r.host;if(!e)break;r=e}return null}static getApiConfiguration(t){const i=Ft.getAncestorAttributeValue(t,"token"),r=Ft.getAncestorAttributeValue(t,"addHTTPResponse")!=null,e=Ft.getAncestorAttributeValue(t,"serviceURL");let o=null,n=null;const l=Ft.getAncestorAttributeValue(t,"tokenProvider"),c=Ft.getAncestorAttributeValue(t,"eventsApiToken");i||(o=Ft.getAncestorAttributeValue(t,"userName"),n=Ft.getAncestorAttributeValue(t,"password"));const h=Ft.getAncestorAttributeValue(t,"credentials")||void 0,u=t.getAttribute("cache"),d=t.hasAttribute("blockUntilDone"),p=t.hasAttribute("keepAlive");return{serviceURL:e,token:i,userName:o,password:n,authToken:c,tokenProvider:l,addHTTPResponse:r,credentials:h,cache:u,blockUntilDone:d,keepAlive:p}}static getClosestElement(t,i){for(;!(t.nodeName&&t.nodeName.toLowerCase()===i)&&(t.parentNode||t.host);)t=t.parentNode||t.host;return t.nodeName?t:null}static getClosestForm(t){return Ft.getClosestElement(t,"form")}static getAncestorsByTagNames(t,i){const r=new Set(i.map(n=>n.toLowerCase())),e=[];let o=t.parentNode||t.host;for(;o;)o instanceof Element&&r.has(o.tagName.toLowerCase())&&e.push(o),o=o.parentNode||o.host;return e}static getAncestorsBySelectors(t,i){const r=[];let e=t.parentNode||t.host;for(;e;){if(e instanceof Element)for(const o of i)try{if(e.matches(o)){r.push(e);break}}catch{}e=e.parentNode||e.host}return r}static async loadJS(t){return new Promise(async r=>{const e=document.createElement("script");e.src=t,e.onload=()=>r(!0),e.onerror=()=>r(!0),document.head.appendChild(e)})}static async loadCSS(t){return new Promise(async r=>{const e=document.createElement("link");e.type="text/css",e.rel="stylesheet",e.href=t,e.onload=()=>r(!0),e.onerror=()=>r(!0),document.head.appendChild(e)})}};const bi=s=>{const t=document.documentElement,i=new MutationObserver(e=>{for(let o of e)o.type==="attributes"&&o.attributeName==="lang"&&s()}),r={attributes:!0,attributeFilter:["lang"]};i.observe(t,r)};let Os=class{static ucFirst(t){return typeof t!="string"?t:t.charAt(0).toUpperCase()+t.substring(1)}static minutesDuration(t,i="",r="long"){i||(i=Z.getLanguage());const e=(h,u)=>[Math.floor(h/u),h%u];function o(h,u,d){return new Intl.NumberFormat(h,{style:"unit",unit:u,unitDisplay:d}).format}const[n,l]=e(t,60),c=[];return n&&c.push(o(i,"hour",r)(n)),l&&c.push(o(i,"minute",r)(l)),new Intl.ListFormat(i,{style:"long",type:"conjunction"}).format(c)}static js(t){try{return Function("return "+t)()}catch{return""}}};class _r{constructor(t){this.path=t}toString(){return this.path}}function wr(s){return new Proxy(s,{get(t,i){if(i==="path")return t.path;if(i==="toString")return t.toString.bind(t);if(i===Symbol.toStringTag)return"DataProviderKey";if(typeof i=="symbol")return t[i];const r=t.path?`${t.path}.${String(i)}`:String(i);return wr(new _r(r))}})}const Jo=/\$\{|\{\$/;function tn(s){return Jo.test(s)}function mi(s){const t=typeof s=="string"?s:s.path;if(tn(t))throw new Error("Static publisher path required for get/set/dp. Use @subscribe, @publish, or @handle for dynamic DataProviderKey paths.");return t}const es=function(s){return this instanceof es?wr(new _r(s)):new es(s)};let nt=class oe{static shallowEqual(t,i,r=!0){const e=Object.keys(t),o=Object.keys(i);if(e.length!==o.length&&r)return!1;for(const n of e){const l=t[n],c=i[n];if(r?l!==c:l!=c)return!1}return!0}static deepEqual(t,i,r=!0){const e=Object.keys(t),o=Object.keys(i);if(e.length!==o.length&&r)return!1;for(const n of e){const l=t[n],c=i[n],h=oe.isObject(l)&&oe.isObject(c),u=r?l!==c:l!=c;if(h&&!oe.deepEqual(l,c)||!h&&u)return!1}return!0}static isObject(t){return t!=null&&typeof t=="object"}static isUndefindOrNull(t){return t==null}static isEmpty(t){return oe.isUndefindOrNull(t)?!0:Object.keys(t).length===0}static traverse(t,i,r=!1){for(const e of i){const o=t[e];if(o===void 0)return;r&&oe.isObject(o)?t=Object.assign(Array.isArray(o)?[]:{},t,o):t=t[e]}return t}static traverseDotNotation(t,i,r=!1){return oe.traverse(t,i.split("."),r)}static getURLSearchArray(t,i=""){let r=[];for(let e in t){const o=t[e];i&&(e=i+"["+e+"]"),oe.isObject(o)?r=[...r,...this.getURLSearchArray(o,e)]:r.push(`${e}=${o}`)}return r}static getURLSearchString(t){return oe.getURLSearchArray(t,"").join("&")}};const yt=nt.traverseDotNotation;let en=class{static async queueTaskPromise(){return new Promise(t=>{window.queueMicrotask(()=>t(null))})}static async delayPromise(t){return new Promise(i=>{setTimeout(i,t)})}},xr="sonic";typeof __SONIC_PREFIX__<"u"&&(xr=__SONIC_PREFIX__);let Pr=xr.replace(/-([a-z])/g,s=>s[1].toUpperCase());const Es=Pr.charAt(0).toUpperCase()+Pr.slice(1),sn=new Set(["localStorageMode","expirationDelayMs","invalidateOnPageShow"]);function Cr(s){return s==null||typeof s!="object"||Array.isArray(s)?!1:Object.keys(s).some(t=>sn.has(t))}function Ls(s){return Object.prototype.hasOwnProperty.call(s,"__value")}function ne(s){return typeof s=="object"&&s!==null}let ze="sonic";typeof __SONIC_PREFIX__>"u"&&(ze="sonic");const gi=ze=="sonic"?"publisher-proxies-data":ze+"-publisher-proxies-data",xe=class xe{constructor(t,i,r){for(this._proxies_=new Map,this._is_savable_=!1,this._expiration_delay_=1e3*60*60*12,this._invalidate_on_page_show_=!1,this._invalidateListeners_=new Set,this._formInvalidateListeners_=new Set,this._assignListeners_=new Set,this._mutationListeners_=new Set,this._fillListeners_=new Set,this._templateFillListeners_=new Set,this._lockInternalMutationPublishing_=!1,this._instanceCounter_=0,this._assignmentId_=0,this._value_=t,this.parent=i||null,this._parentKey_=r,this.root=this,this._instanceCounter_=0;this.root.parent;)this.root=this.root.parent}delete(){for(const t in this._proxies_.keys())t!="_parent_"&&this._proxies_.get(t)?.delete();this._invalidateListeners_.clear(),this._formInvalidateListeners_.clear(),this._assignListeners_.clear(),this._mutationListeners_.clear(),this._fillListeners_.clear(),this._templateFillListeners_.clear(),this._proxies_.clear(),xe.instances.delete(this._instanceCounter_)}hasListener(){return this._templateFillListeners_.size>0||this._assignListeners_.size>0||this._invalidateListeners_.size>0||this._formInvalidateListeners_.size>0||this._mutationListeners_.size>0||this._fillListeners_.size>0}_publishInternalMutation_(t=!1){if(this._mutationListeners_.forEach(i=>i()),this._is_savable_&&!E.changed){E.changed=!0,E.saveId++;const i=E.saveId;setTimeout(()=>E.getInstance().saveToLocalStorage(i),1e3)}t||this.parent&&this.parent._publishInternalMutation_()}async _publishAssignement_(t=!1){if(this._assignmentId_++,this._assignmentId_!==this._assignmentId_)return;const r=this.get();this._assignListeners_.forEach(e=>{e(r)}),this._publishInternalMutation_(t)}_publishInvalidation_(){this._invalidateListeners_.forEach(t=>t())}_publishFormInvalidation_(){this._formInvalidateListeners_.forEach(t=>t())}_publishDynamicFilling_(t,i){this._fillListeners_.forEach(r=>{r[t]!==i&&(r[t]=i)}),this._publishTemplateFilling_(t,i)}_publishTemplateFilling_(t,i){this._templateFillListeners_.forEach(r=>{const e=Object.getOwnPropertyDescriptor(r,t);e&&!e.set&&!e.writable||(r.propertyMap&&r.propertyMap[t]&&(t=r.propertyMap[t]),typeof r[t]<"u"&&r[t]!==i&&(r[t]=i))})}onAssign(t,i=!0){typeof t=="function"&&(this._assignListeners_.has(t)||(this._assignListeners_.add(t),i&&t(this.get())))}offAssign(t){this._assignListeners_.delete(t)}onInvalidate(t){typeof t=="function"&&this._invalidateListeners_.add(t)}offInvalidate(t){typeof t=="function"&&this._invalidateListeners_.delete(t)}invalidate(){this._publishInvalidation_()}onFormInvalidate(t){typeof t=="function"&&this._formInvalidateListeners_.add(t)}offFormInvalidate(t){typeof t=="function"&&this._formInvalidateListeners_.delete(t)}invalidateForm(){this._publishFormInvalidation_()}onInternalMutation(t){typeof t=="function"&&(this._mutationListeners_.add(t),t())}offInternalMutation(t){typeof t=="function"&&this._mutationListeners_.delete(t)}startTemplateFilling(t){if(this._templateFillListeners_.add(t),typeof this._value_=="object")for(const i in this._value_){let r=i;const e=this._value_[i];t.propertyMap&&t.propertyMap[i]&&(r=t.propertyMap[i]),typeof t[i]<"u"&&t[i]!==e&&(t[r]=e)}}stopTemplateFilling(t){this._templateFillListeners_.delete(t)}startDynamicFilling(t){this._fillListeners_.add(t);for(const i in this._value_){const r=this._value_[i];t[i]!==r&&(t[i]=r)}}stopDynamicFilling(t){this._fillListeners_.delete(t)}set(t,i=!1){if(this._value_===t||ne(this._value_)&&ne(t)&&t&&Ls(this._value_)&&Ls(t)&&this._value_.__value===t.__value||!ne(t)&&t===this._value_.__value)return!0;this._value_=ne(t)?t:{__value:t},this._cachedGet_=void 0;const r=Ls(this._value_);if(this._parentKey_&&this.parent){const e=Ls(this._value_)?this._value_.__value:this._value_;if(this.parent?.get()==null&&this.parent?.get()==null)if(isNaN(Number(this._parentKey_)))this.parent.set({[this._parentKey_]:e});else{const o=[];o[Number(this._parentKey_)]=e,this.parent.set(o)}else this.parent._value_[this._parentKey_]=e}if(r)return this._proxies_.forEach((e,o)=>{o!="_parent_"&&(e.set(null),this._publishDynamicFilling_(o,null))}),this._publishAssignement_(i),this.parent&&this._parentKey_&&this.parent._publishDynamicFilling_(this._parentKey_,this._value_.__value),!0;for(const e in this._value_)this._value_[e]===void 0&&delete this._value_[e];if(this._proxies_.forEach((e,o)=>{const n=this._value_[o];o!="_parent_"&&n===void 0&&n!==null&&isNaN(Number(o))&&(e.set(null),this._publishDynamicFilling_(o,null))}),this._publishAssignement_(),this.parent&&this._parentKey_&&this.parent._publishDynamicFilling_(this._parentKey_,this._value_),ne(this._value_))for(const e in this._value_){const o=t[e],l=ne(o)?o:{__value:o};if(!this._proxies_.has(e)){this._publishDynamicFilling_(e,o);continue}this._proxies_.get(e)?.set(l,!0),this._publishDynamicFilling_(e,o)}return!0}get(){if(rn(this),this._cachedGet_!==void 0)return this._cachedGet_;if(Object.prototype.hasOwnProperty.call(this._value_,"__value")){const t=this._value_.__value;return this._cachedGet_=t??null}return this._cachedGet_=this._value_!=null?this._value_:null}get $tag(){return this._instanceCounter_||(xe.instancesCounter++,this._instanceCounter_=xe.instancesCounter),xe.instances.set(this._instanceCounter_,this),"<"+ze+'-publisher-proxy publisher="'+this._instanceCounter_+'"></'+ze+"-publisher-proxy>"}};xe.instances=new Map,xe.instancesCounter=0;let ss=xe;const Ts=[];function rn(s){Ts.length>0&&Ts[0].add(s)}function Sr(){Ts.unshift(new Set)}function $r(){return Ts.shift()}const F=class F{constructor(){if(this.enabledLocaStorageProxies=[],this.publishers=new Map,this.localStorageData={},this.isLocalStrorageReady=null,this.initialisedData=[],F.instance!=null)throw"Singleton / use getInstance";F.instance=this,this.isLocalStrorageReady=this.cleanStorageData(),F.initPageShowHandler()}static initPageShowHandler(){F.pageShowHandlerInitialized||(F.pageShowHandlerInitialized=!0,window.addEventListener("pageshow",t=>{t.persisted&&F.getInstance().invalidateAll()}))}invalidateAll(){this.publishers.forEach(t=>{t._invalidate_on_page_show_&&t.invalidate()})}async cleanStorageData(){return new Promise(t=>{(async()=>{try{let r=localStorage.getItem(gi),e=null;if(r&&(e=await this.decompress(r,"gzip")),e)try{this.localStorageData=JSON.parse(e)}catch{this.localStorageData={}}else r=await this.compress("{}","gzip"),localStorage.setItem(gi,r),this.localStorageData={};const o=1e3*60*60*12;for(const n in this.localStorageData){const l=this.localStorageData[n],c=new Date().getTime()-(l.expirationDelayMs||o);l.lastModifiationMS<c&&delete this.localStorageData[n]}t(!0)}catch{window.requestAnimationFrame(()=>{t(!1)}),console.warn("no publisher cache in this browser")}})()})}static getInstance(t){if(t){const i=F.instances.get(t);return i||(console.warn("No PublisherManager instance registered with id:",t,"creating new one"),new F)}return F.instance==null?new F:F.instance}static get(t,i){return F.getInstance().get(t,i)}async setLocalData(t,i){await this.isLocalStrorageReady,t.set(this.localStorageData[i+"¤lang_"+Z.getLanguage()]?.data||t.get())}get(t,i){const r=i?.localStorageMode==="enabled",e=i?.invalidateOnPageShow===!0;if(!this.publishers.has(t)){const l=vi({});this.set(t,l)}const o=this.publishers.get(t);return r&&this.initialisedData.indexOf(t)===-1&&(i?.expirationDelayMs&&(o._expiration_delay_=i.expirationDelayMs),o._is_savable_=!0,this.initialisedData.push(t),this.setLocalData(o,t)),e&&(o._invalidate_on_page_show_=e),this.publishers.get(t)}set(t,i){this.publishers.set(t,i)}delete(t){return this.publishers.has(t)?(this.publishers.delete(t),!0):!1}async saveToLocalStorage(t=0){if(!(t!==F.saveId&&t%10!=0))try{if(!F.changed||F.saving)return;F.saving=!0,F.changed=!1;const i=Array.from(this.publishers.keys());let r=!1;for(const e of i){const o=this.publishers.get(e);if(!o?._is_savable_)continue;const n=o?.get();n&&(this.localStorageData[e+"¤lang_"+Z.getLanguage()]={lastModifiationMS:new Date().getTime(),expirationDelayMs:o._expiration_delay_,data:n},r=!0)}if(r){const e=await this.compress(JSON.stringify(this.localStorageData),"gzip");localStorage.setItem(gi,e)}if(F.saving=!1,F.changed){F.saveId++;const e=F.saveId;setTimeout(()=>this.saveToLocalStorage(e),1e3)}}catch{F.saving=!1}}async compress(t,i){const r=new TextEncoder().encode(t),e=window,o=new e.CompressionStream(i),n=o.writable.getWriter();n.write(r),n.close();const l=await new Response(o.readable).arrayBuffer(),c=new Uint8Array(l);let h="";for(let u=0;u<c.length;u++)h+=String.fromCharCode(c[u]);return btoa(h)}async decompress(t,i){const r=atob(t),o=Uint8Array.from(r,u=>u.charCodeAt(0)).buffer,n=window,l=new n.DecompressionStream(i),c=l.writable.getWriter();c.write(o),c.close();const h=await new Response(l.readable).arrayBuffer();return new TextDecoder().decode(h)}};F.buildDate="Thu Jul 30 2026 13:16:38 GMT+0200 (Central European Summer Time)",F.changed=!1,F.saving=!1,F.saveId=0,F.instance=null,F.instances=new Map,F.pageShowHandlerInitialized=!1;let E=F;if(typeof window<"u"){const s=window;s[Es+"PublisherManager"]=s[Es+"PublisherManager"]||E}const on=new Set(["invalidate","onInvalidate","offInvalidate","invalidateForm","onFormInvalidate","offFormInvalidate","onAssign","offAssign","startDynamicFilling","stopDynamicFilling","startTemplateFilling","stopTemplateFilling","onInternalMutation","offInternalMutation","set","get","$tag","_cachedGet_","_templateFillListeners_","_fillListeners_","_assignListeners_","_invalidateListeners_","_formInvalidateListeners_","_publishInternalMutation_","hasListener","delete","_mutationListeners_","_publishDynamicFilling_","_publishInvalidation_","_publishFormInvalidation_","_publishTemplateFilling_","_publishAssignement_","_proxies_","parent","_parentKey_","_value_","_is_savable_","_expiration_delay_","_lockInternalMutationPublishing_","_instanceCounter_","_assignmentId_","_invalidate_on_page_show_"]);function nn(s,t){return{get:function(i,r){if(typeof r=="string"&&on.has(r))return s[r];if(r==Symbol.toPrimitive)return()=>t().get();if(!s._proxies_.has(r)){const e=s._value_[r],o=vi(ne(e)?e:{__value:e},s,r);o._proxies_.set("_parent_",t()),s._proxies_.set(r,o)}return s._proxies_.get(r)},set:function(i,r,e){if(r=="_value_")return s._value_=e,!0;if(r=="_cachedGet_")return s._cachedGet_=e,!0;if(r=="_assignmentId_")return s._assignmentId_=e,!0;if(r=="_is_savable_")return s._is_savable_=e,!0;if(r=="_expiration_delay_")return s._expiration_delay_=e,!0;if(r=="_invalidate_on_page_show_")return s._invalidate_on_page_show_=e,!0;if(r=="_instanceCounter_")return s._instanceCounter_=e,!0;if(!s._proxies_.has(r)){const n=vi({},s,r);n._proxies_.set("_parent_",t()),s._proxies_.set(r,n)}return s._value_[r]!==e&&(s._value_[r]=e,s._publishDynamicFilling_(r,e),s._proxies_.get(r)?.set(ne(e)?e:{__value:e})),!0},deleteProperty:function(i,r){return s._publishDynamicFilling_(r,null),s._proxies_.get(r)?.set(null),delete s._value_[r]},has:function(i,r){return r in s._value_&&r!="_lockInternalMutationPublishing_"},defineProperty:function(i,r,e){return e&&"value"in e&&(s._value_[r]=e.value),!0},getOwnPropertyDescriptor:function(i,r){return{enumerable:!0,configurable:!0}},ownKeys:function(i){return s._value_.__value?Object.keys(s._value_.__value):Object.keys(s._value_)}}}function vi(s,t=null,i){const r=new ss(s,t,i);let e=null;const o=nn(r,()=>e);return e=new Proxy(r,o),e}class an extends HTMLElement{constructor(){super(),this.publisherId="",this.onAssign=t=>{this.innerHTML=t.toString()}}connectedCallback(){this.publisherId=this.getAttribute("publisher")||"",this.publisher=ss.instances.get(parseInt(this.publisherId)),this.publisher?.onAssign(this.onAssign)}disconnectedCallback(){this.publisher?.offAssign(this.onAssign)}}try{customElements.define(ze+"-publisher-proxy",an)}catch{}const Is=(s,t)=>{if(typeof s=="function"){const i=s;return Sr(),i(),$r()}if(typeof s=="string"){const i=s.split("."),r=i.shift()||"";let e=E.get(r,t);e=nt.traverse(e,i);const o=new Set;return o.add(e),o}return new Set([s])};function ln(s){const t=mi(s);return Is(t).values().next().value?.get()}function Ms(s,t,i){const r=mi(s);return Is(r,i).values().next().value}function cn(s,t){return Cr(t)?Ms(s,void 0,t):Ms(s)}function Ns(s,t){return Cr(t)?Ms(s,void 0,t):Ms(s)}function hn(s,t){const i=mi(s);Is(i).values().next().value?.set(t)}let Fs=(M=class{static disable(){this.enabled&&(this.enabled=!1,Array.from(M.observedElements.keys()).forEach(t=>M.unObserve(t)))}static observe(t){if(!t||!M.enabled||M.observedElements.has(t))return;const i=new MutationObserver(M.onMutation),r={};r.childList=!0,r.subtree=!0,r.attributes=!0,r.attributeFilter=["data-bind"],i.observe(t,r),t.querySelectorAll("[data-bind]").forEach(e=>M.addPublisherListeners(e)),M.observedElements.set(t,i)}static unObserve(t){if(!t)return;const i=this.observedElements.get(t);i&&(i.disconnect(),t.querySelectorAll("[data-bind]").forEach(r=>M.removePublisherListeners(r)))}static onAdded(t){t.hasAttribute&&t.hasAttribute("data-bind")&&M.addPublisherListeners(t),t.querySelectorAll?t.querySelectorAll("[data-bind]").forEach(i=>M.addPublisherListeners(i)):t.childNodes.forEach(i=>M.onAdded(i))}static onRemoved(t){t.hasAttribute&&t.hasAttribute("data-bind")&&M.removePublisherListeners(t),t.querySelectorAll?t.querySelectorAll("[data-bind]").forEach(i=>M.removePublisherListeners(i)):t.childNodes.forEach(i=>M.onRemoved(i))}static onMutation(t){for(const i of t)switch(i.type){case"attributes":M.addPublisherListeners(i.target);break;case"childList":i.addedNodes.forEach(r=>{M.onAdded(r)}),i.removedNodes.forEach(r=>{M.onRemoved(r)});break}}static removePublisherListeners(t){const i=M.publisherListeners.get(t);i&&(M.publisherListeners.delete(t),i.forEach(r=>{r.publisher?.offAssign(r.onAssign)}))}static getVariablesDescriptor(t){let i=t.match(/(\$(?:\w+\\?\.?)+)/g);return i?i=i.map(r=>r.replace("$","")):i=[t],i=i.filter(r=>r.length>0),{expression:t.replace("\\",""),variables:i.map(r=>r.split(/\b\.\b/).map(e=>e.replace("\\","")))}}static getDataBindItems(t){return"attributes"in t?Array.from(t.attributes).filter(i=>i.name.indexOf("::")==0).map(i=>({propertyToUpdate:i.name.substring(2).replace(/-((html)|\w)/g,e=>e.substring(1).toUpperCase()),bindedVariablesDescriptor:M.getVariablesDescriptor(i.value)})):[]}static getSubPublisher(t,i){if(!i)return t;for(const r of i)if(r!="_self_"){if(!t)return null;t=t[r]}return t}static addPublisherListeners(t){M.removePublisherListeners(t);const i=Z.getAncestorAttributeValue(t.parentNode||t.host||t,"dataProvider");if(!i)return;const r=E.getInstance().get(i),e=M.getDataBindItems(t),o=[];e.forEach(n=>{const l=n.bindedVariablesDescriptor,c=n.propertyToUpdate;for(const h of l.variables){const u=h;let d=r;d=M.getSubPublisher(r,u);const p=t,w={publisher:d,onAssign:()=>{const v=l.variables.map(D=>M.getSubPublisher(r,D)?.get());let m=l.expression,y=!1;if(v.length==1&&l.variables[0].join(".")==m.substring(1)){let D=v[0];D===null&&(D=""),p[c]=D;return}for(let D=0;D<v.length;D++){let f=v[D];const b=l.variables[D];f===null&&(y=!0,f=void 0),m=m.replace("$"+b.join("."),f)}if(m.indexOf("|")!=-1){const D=m.indexOf("|");if(D==0)m=Os.js(m.substring(1));else{const f=m.substring(0,D),b=m.substring(D+1),x=Os[f];m=y?"":x?x(b):m}}else m=y?"":m;p[c]=m}};d?.onAssign(w.onAssign),o.push(w)}}),M.publisherListeners.set(t,o)}},M.observedElements=new Map,M.enabled=!0,M.publisherListeners=new Map,M);Fs.observe(document.documentElement),window.SonicDataBindObserver||(window.SonicDataBindObserver=Fs);/**
|
|
2
2
|
* @license
|
|
3
3
|
* Copyright 2017 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: BSD-3-Clause
|
package/dist/concorde-core.es.js
CHANGED
|
@@ -742,7 +742,7 @@ const j = class j {
|
|
|
742
742
|
return new TextDecoder().decode(h);
|
|
743
743
|
}
|
|
744
744
|
};
|
|
745
|
-
j.buildDate = "Thu Jul 30 2026
|
|
745
|
+
j.buildDate = "Thu Jul 30 2026 13:16:38 GMT+0200 (Central European Summer Time)", j.changed = !1, j.saving = !1, j.saveId = 0, j.instance = null, j.instances = /* @__PURE__ */ new Map(), j.pageShowHandlerInitialized = !1;
|
|
746
746
|
let E = j;
|
|
747
747
|
if (typeof window < "u") {
|
|
748
748
|
const s = window;
|
package/package.json
CHANGED
package/scripts/ai-init.mjs
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* Options:
|
|
10
10
|
* --project-root <dir> Project root (default: cwd)
|
|
11
11
|
* --concorde-ai <dir> Concorde ai/ folder (default: auto-detect)
|
|
12
|
-
* --overlay <dir> Extra layer (
|
|
12
|
+
* --overlay <dir> Extra layer (project kit) — uses AGENTS.concorde.md
|
|
13
13
|
* --cursor-only Install only Cursor (.cursor/)
|
|
14
14
|
* --jetbrains-only Install only JetBrains (.aiassistant/rules/)
|
|
15
15
|
* --skip-agents Never write AGENTS.md (skills/rules only)
|
|
@@ -27,11 +27,13 @@
|
|
|
27
27
|
* [optional project preamble — short, project-only]
|
|
28
28
|
* <!-- concorde-ai -->
|
|
29
29
|
* <package ai/AGENTS.md>
|
|
30
|
-
* [--- + overlay AGENTS.
|
|
30
|
+
* [--- + overlay AGENTS.concorde.md]
|
|
31
31
|
*
|
|
32
32
|
* Everything AFTER the marker is owned by Concorde and replaced on every run.
|
|
33
|
-
* Do not copy the full Concorde guide into the preamble — use overlay/AGENTS.
|
|
33
|
+
* Do not copy the full Concorde guide into the preamble — use overlay/AGENTS.concorde.md
|
|
34
34
|
* for project-specific agent notes (endpoints, dpKeys, …).
|
|
35
|
+
*
|
|
36
|
+
* Legacy: AGENTS.starter.md / AGENTS.overlay.md still read if AGENTS.concorde.md is missing.
|
|
35
37
|
*/
|
|
36
38
|
|
|
37
39
|
import fs from "node:fs";
|
|
@@ -41,6 +43,13 @@ import {fileURLToPath, pathToFileURL} from "node:url";
|
|
|
41
43
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
42
44
|
|
|
43
45
|
const AGENTS_MARKER = "<!-- concorde-ai -->";
|
|
46
|
+
/** Project Concorde notes for `--overlay` (preferred). */
|
|
47
|
+
const OVERLAY_AGENTS_FILE = "AGENTS.concorde.md";
|
|
48
|
+
/** @deprecated Prefer AGENTS.concorde.md */
|
|
49
|
+
const OVERLAY_AGENTS_FILE_LEGACY = [
|
|
50
|
+
"AGENTS.overlay.md",
|
|
51
|
+
"AGENTS.starter.md",
|
|
52
|
+
];
|
|
44
53
|
|
|
45
54
|
const args = process.argv.slice(2);
|
|
46
55
|
|
|
@@ -102,6 +111,33 @@ function detectConcordeAi() {
|
|
|
102
111
|
);
|
|
103
112
|
}
|
|
104
113
|
|
|
114
|
+
/**
|
|
115
|
+
* Read project Concorde AGENTS notes from `--overlay` dir.
|
|
116
|
+
* Prefers AGENTS.concorde.md; falls back to deprecated legacy names.
|
|
117
|
+
* @returns {{ content: string, warnings: string[] }}
|
|
118
|
+
*/
|
|
119
|
+
export function readOverlayAgents(overlayDir) {
|
|
120
|
+
const warnings = [];
|
|
121
|
+
if (!overlayDir) return {content: "", warnings};
|
|
122
|
+
|
|
123
|
+
const preferred = path.join(overlayDir, OVERLAY_AGENTS_FILE);
|
|
124
|
+
if (fs.existsSync(preferred)) {
|
|
125
|
+
return {content: fs.readFileSync(preferred, "utf8"), warnings};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
for (const legacyName of OVERLAY_AGENTS_FILE_LEGACY) {
|
|
129
|
+
const legacy = path.join(overlayDir, legacyName);
|
|
130
|
+
if (fs.existsSync(legacy)) {
|
|
131
|
+
warnings.push(
|
|
132
|
+
`Overlay uses deprecated ${legacyName} — rename to ${OVERLAY_AGENTS_FILE}.`,
|
|
133
|
+
);
|
|
134
|
+
return {content: fs.readFileSync(legacy, "utf8"), warnings};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return {content: "", warnings};
|
|
139
|
+
}
|
|
140
|
+
|
|
105
141
|
function copyDir(src, dest) {
|
|
106
142
|
if (!fs.existsSync(src)) return;
|
|
107
143
|
fs.mkdirSync(dest, {recursive: true});
|
|
@@ -300,7 +336,7 @@ export function buildAgentsFile({
|
|
|
300
336
|
preamble = slimPreamble(preamble, baseContent);
|
|
301
337
|
if (before.trim() && !preamble) {
|
|
302
338
|
warnings.push(
|
|
303
|
-
"AGENTS.md preamble duplicated Concorde ai/AGENTS.md — dropped. Put project-only notes in overlay AGENTS.
|
|
339
|
+
"AGENTS.md preamble duplicated Concorde ai/AGENTS.md — dropped. Put project-only notes in overlay AGENTS.concorde.md (or a short preamble before <!-- concorde-ai -->).",
|
|
304
340
|
);
|
|
305
341
|
} else if (before.trim() && preamble !== before.trim()) {
|
|
306
342
|
warnings.push(
|
|
@@ -413,18 +449,16 @@ function main() {
|
|
|
413
449
|
}
|
|
414
450
|
} else {
|
|
415
451
|
const baseAgents = fs.readFileSync(path.join(concordeAi, "AGENTS.md"), "utf8");
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
forceAgents: action === "force",
|
|
427
|
-
});
|
|
452
|
+
const {content: overlayAgents, warnings: overlayWarnings} =
|
|
453
|
+
readOverlayAgents(overlayDir);
|
|
454
|
+
|
|
455
|
+
const warnings = [
|
|
456
|
+
...overlayWarnings,
|
|
457
|
+
...mergeAgentsFile(agentsPath, baseAgents, overlayAgents, {
|
|
458
|
+
mergeAgents: action === "merge" || action === "refresh",
|
|
459
|
+
forceAgents: action === "force",
|
|
460
|
+
}),
|
|
461
|
+
];
|
|
428
462
|
for (const w of warnings) {
|
|
429
463
|
console.warn(` ⚠ ${w}`);
|
|
430
464
|
}
|
package/scripts/ai-init.test.mjs
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
2
5
|
import test from "node:test";
|
|
3
6
|
import {
|
|
4
7
|
buildAgentsFile,
|
|
5
8
|
decideAgentsAction,
|
|
6
9
|
preambleDuplicatesBase,
|
|
10
|
+
readOverlayAgents,
|
|
7
11
|
slimPreamble,
|
|
8
12
|
} from "./ai-init.mjs";
|
|
9
13
|
|
|
@@ -204,3 +208,52 @@ custom install cmd
|
|
|
204
208
|
// Installation may stay if not in package — package has no Installation ##
|
|
205
209
|
assert.match(slim, /Installation \/ réinstallation|Project endpoints/);
|
|
206
210
|
});
|
|
211
|
+
|
|
212
|
+
test("readOverlayAgents: prefers AGENTS.concorde.md", async () => {
|
|
213
|
+
const dir = await fs.mkdtemp(path.join(os.tmpdir(), "concorde-overlay-"));
|
|
214
|
+
try {
|
|
215
|
+
await fs.writeFile(
|
|
216
|
+
path.join(dir, "AGENTS.concorde.md"),
|
|
217
|
+
"# overlay preferred\n",
|
|
218
|
+
);
|
|
219
|
+
await fs.writeFile(
|
|
220
|
+
path.join(dir, "AGENTS.starter.md"),
|
|
221
|
+
"# overlay legacy\n",
|
|
222
|
+
);
|
|
223
|
+
const {content, warnings} = readOverlayAgents(dir);
|
|
224
|
+
assert.match(content, /overlay preferred/);
|
|
225
|
+
assert.equal(warnings.length, 0);
|
|
226
|
+
} finally {
|
|
227
|
+
await fs.rm(dir, {recursive: true, force: true});
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
test("readOverlayAgents: falls back to AGENTS.starter.md with warning", async () => {
|
|
232
|
+
const dir = await fs.mkdtemp(path.join(os.tmpdir(), "concorde-overlay-"));
|
|
233
|
+
try {
|
|
234
|
+
await fs.writeFile(
|
|
235
|
+
path.join(dir, "AGENTS.starter.md"),
|
|
236
|
+
"# overlay legacy\n",
|
|
237
|
+
);
|
|
238
|
+
const {content, warnings} = readOverlayAgents(dir);
|
|
239
|
+
assert.match(content, /overlay legacy/);
|
|
240
|
+
assert.match(warnings[0] ?? "", /deprecated AGENTS\.starter\.md/);
|
|
241
|
+
} finally {
|
|
242
|
+
await fs.rm(dir, {recursive: true, force: true});
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
test("readOverlayAgents: falls back to AGENTS.overlay.md with warning", async () => {
|
|
247
|
+
const dir = await fs.mkdtemp(path.join(os.tmpdir(), "concorde-overlay-"));
|
|
248
|
+
try {
|
|
249
|
+
await fs.writeFile(
|
|
250
|
+
path.join(dir, "AGENTS.overlay.md"),
|
|
251
|
+
"# overlay mid legacy\n",
|
|
252
|
+
);
|
|
253
|
+
const {content, warnings} = readOverlayAgents(dir);
|
|
254
|
+
assert.match(content, /overlay mid legacy/);
|
|
255
|
+
assert.match(warnings[0] ?? "", /deprecated AGENTS\.overlay\.md/);
|
|
256
|
+
} finally {
|
|
257
|
+
await fs.rm(dir, {recursive: true, force: true});
|
|
258
|
+
}
|
|
259
|
+
});
|
|
@@ -29,7 +29,7 @@ node node_modules/@supersoniks/concorde/scripts/ai-init.mjs
|
|
|
29
29
|
| `--skip-agents` | Never write `AGENTS.md` (skills / rules only) |
|
|
30
30
|
| `--merge-agents` | Opt-in: keep the project preamble and append / refresh the Concorde block |
|
|
31
31
|
| `--force-agents` | Opt-in: **replace** the whole `AGENTS.md` (destructive) |
|
|
32
|
-
| `--overlay <dir>` | Extra rules/skills + optional `AGENTS.
|
|
32
|
+
| `--overlay <dir>` | Extra rules/skills + optional `AGENTS.concorde.md` for project-only Concorde agent notes |
|
|
33
33
|
| `--cursor-only` | Install only `.cursor/skills` and `.cursor/rules` |
|
|
34
34
|
| `--jetbrains-only` | Install only `.aiassistant/rules/` |
|
|
35
35
|
|
|
@@ -46,10 +46,10 @@ node node_modules/@supersoniks/concorde/scripts/ai-init.mjs
|
|
|
46
46
|
[optional project preamble — short, project-only]
|
|
47
47
|
<!-- concorde-ai -->
|
|
48
48
|
<package ai/AGENTS.md>
|
|
49
|
-
[--- + overlay AGENTS.
|
|
49
|
+
[--- + overlay AGENTS.concorde.md]
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
Everything **after** `<!-- concorde-ai -->` is replaced on each `ai-init` run (idempotent). Do not paste a full copy of the Concorde guide above the marker — put project-specific notes in `AGENTS.
|
|
52
|
+
Everything **after** `<!-- concorde-ai -->` is replaced on each `ai-init` run (idempotent). Do not paste a full copy of the Concorde guide above the marker — put project-specific notes in `AGENTS.concorde.md` (overlay). If the preamble duplicates package `AGENTS.md`, `ai-init` slims or drops it and prints a warning. Legacy filenames `AGENTS.overlay.md` / `AGENTS.starter.md` are still accepted with a deprecation warning.
|
|
53
53
|
|
|
54
54
|
## What gets installed
|
|
55
55
|
|