@blackcube/aurelia-kit 1.0.0-rc1 → 1.0.0-rc2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","names":["customAttribute","IEventAggregator","ILogger","INode","resolve","Channels","MenuAction","BleetBurgerCustomAttribute","logger","scopeTo","ea","element","trace","attached","addEventListener","onClickButton","detaching","removeEventListener","event","preventDefault","publish","Menu","action","Open","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","customAttribute","IEventAggregator","ILogger","INode","IPlatform","resolve","Channels","MenuAction","MenuStatus","OverlayAction","OverlayStatus","ITransitionService","IStorageService","setState","BleetMenuCustomAttribute","logger","scopeTo","ea","element","p","transitionService","storageService","trace","disposable","disposableOverlay","closeButton","toggleButtons","sublists","Map","isOpen","attaching","querySelector","querySelectorAll","initMenuButtons","attached","subscribe","Menu","onMenuEvent","onOverlayStatus","addEventListener","onClickClose","onClickToggleButtons","detaching","removeEventListener","dispose","open","fromOverlay","run","publish","Overlay","action","Open","status","Opening","ariaHidden","Opened","close","Closing","Close","Closed","event","preventDefault","target","btn","closest","matches","toggleButton","forEach","initButton","has","id","dataset","menu","replace","list","svg","set","setSublist","load","sublist","get","undefined","hidden","closeOtherButtons","except","value","key","ariaExpanded","save","data","Toggle","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","id","bindable","customAttribute","IEventAggregator","ILogger","INode","resolve","BadgeAction","Channels","name","defaultProperty","BleetBadgeCustomAttribute","logger","scopeTo","ea","element","trace","closeButton","attached","querySelector","undefined","addEventListener","onClickRemove","detaching","removeEventListener","event","preventDefault","publish","Badge","action","Remove","remove","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_init_id","_init_extra__init_id","customAttribute","ILogger","INode","resolve","ITrapFocusService","setState","BleetDropdownCustomAttribute","logger","scopeTo","element","trapFocusService","trace","select","button","buttonText","optionTemplate","countTemplate","groupTemplate","tagTemplate","tagsContainer","placeholder","itemsPlace","itemsContainer","searchInput","emptyMessage","isMultiple","withTags","selectObserver","attaching","querySelector","multiple","attached","Error","id","Math","random","toString","substring","options","length","preparePanel","MutationObserver","observe","childList","subtree","ariaHasPopup","setAttribute","role","addEventListener","onClickToggleMenu","onClickToggleItem","onSearchInput","onSelectChange","onClickRemoveTag","detaching","disconnect","undefined","removeEventListener","event","result","target","closest","preventDefault","disabled","toggleMenu","swapItemClasses","removeButton","stopPropagation","tagElement","value","dataset","tagValue","Array","from","forEach","option","selected","dispatchEvent","Event","bubbles","updateDisplay","onStopTrapFocus","hidden","filterItems","Promise","isClosed","ariaExpanded","initialFocus","start","then","scrollIntoView","block","stop","getAttribute","clickedValue","synchSelect","query","normalizedQuery","toLowerCase","trim","visibleCount","querySelectorAll","item","text","textContent","isVisible","includes","updateGroupVisibility","groups","group","hasVisible","sibling","nextElementSibling","matches","updateTags","updateButtonText","selectedOptions","filter","opt","find","innerHTML","count","String","content","replace","tag","remove","tagFragment","cloneNode","tagText","appendChild","CSS","escape","checkmark","children","child","tagName","groupedOptions","c","appendGroupHeader","label","o","appendOption","itemText","itemValue","disabledClasses","split","classList","add","append","fragment","groupLabel","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","customAttribute","ILogger","INode","resolve","setState","BleetPasswordCustomAttribute","logger","scopeTo","element","button","iconHidden","iconVisible","input","attaching","querySelector","undefined","attached","addEventListener","onToggle","detaching","removeEventListener","event","preventDefault","isPassword","type","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","customAttribute","ILogger","INode","IPlatform","resolve","BleetTabsCustomAttribute","logger","scopeTo","element","p","trace","activeClasses","inactiveClasses","select","attaching","activeButton","querySelector","inactiveButton","className","attached","querySelectorAll","forEach","button","addEventListener","onClickTab","onChangeSelect","detaching","removeEventListener","event","preventDefault","tabIndex","currentTarget","getAttribute","replace","buttonTabIndex","setAttribute","panel","panelIndex","hidden","value","dispatchEvent","Event","bubbles","click","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","id","bindable","customAttribute","IEventAggregator","ILogger","INode","IPlatform","resolve","Channels","ProfileAction","ProfileStatus","ITransitionService","ITrapFocusService","setState","name","defaultProperty","BleetProfileCustomAttribute","logger","scopeTo","ea","element","transitionService","p","trapFocusService","trace","disposable","toggleButton","panel","isOpen","attaching","querySelector","attached","subscribe","Profile","onProfileEvent","addEventListener","onClickToggle","detaching","removeEventListener","stop","dispose","event","preventDefault","close","open","onStopTrapFocus","setAttribute","run","publish","action","Close","status","Closing","requestAnimationFrame","hidden","Closed","Promise","firstItem","start","undefined","then","Open","Opening","Opened","data","isTargeted","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_init_id","_init_extra__init_id","id","color","icon","title","content","duration","bindable","customAttribute","IEventAggregator","ILogger","INode","resolve","Channels","ToasterAction","UiColor","UiToastIcon","name","defaultProperty","BleetToasterTriggerCustomAttribute","logger","scopeTo","element","ea","trace","Info","attaching","attached","addEventListener","onClick","detaching","removeEventListener","event","preventDefault","publish","Toaster","action","Add","toast","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_dec1","_dec2","_dec3","_dec4","_dec5","_init_id","_init_extra__init_id","_init_color","_init_extra__init_color","_init_icon","_init_extra__init_icon","_init_title","_init_extra__init_title","_init_content","_init_extra__init_content","_init_duration","_init_extra__init_duration","customAttribute","ILogger","INode","IPlatform","resolve","ITransitionService","setState","BleetAlertCustomAttribute","logger","scopeTo","element","p","transitionService","trace","closeButton","attaching","querySelector","attached","addEventListener","onClose","detaching","removeEventListener","event","preventDefault","run","currentHeight","scrollHeight","style","height","offsetHeight","hidden","requestAnimationFrame","remove","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","id","url","color","bindable","customAttribute","IEventAggregator","ILogger","INode","resolve","Channels","ModalAction","name","defaultProperty","BleetModalTriggerCustomAttribute","logger","scopeTo","element","ea","trace","attaching","attached","addEventListener","onClick","detaching","removeEventListener","dispose","event","preventDefault","publish","Modal","action","Toggle","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_dec1","_dec2","_init_id","_init_extra__init_id","_init_url","_init_extra__init_url","_init_color","_init_extra__init_color","customAttribute","ILogger","INode","IPlatform","resolve","BleetPagerCustomAttribute","logger","scopeTo","element","p","trace","select","attaching","querySelector","attached","addEventListener","onChangeSelect","detaching","removeEventListener","event","pageNumber","value","link","click","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","url","verb","event","id","mode","target","method","errorTitle","errorContent","bindable","customAttribute","IEventAggregator","ILogger","INode","IPlatform","resolve","AjaxifyAction","AjaxifyTriggerMode","Channels","ToasterAction","UiColor","IApiService","name","defaultProperty","BleetAjaxifyTriggerCustomAttribute","logger","scopeTo","element","ea","apiService","p","trace","Classic","attached","addEventListener","onTrigger","detaching","removeEventListener","preventDefault","stopPropagation","PublishOnly","onTriggerPublishOnly","onTriggerClassic","debug","form","closest","linkedElements","querySelectorAll","linked","Array","from","HTMLSelectElement","HTMLInputElement","HTMLTextAreaElement","targetName","dataset","ajaxifyTarget","hidden","querySelector","value","disabledInputs","input","disabled","publish","Ajaxify","action","Run","undefined","resolveUrl","resolveVerb","warn","formData","buildFormData","fromMultipart","request","then","response","body","updateElement","toast","Toaster","Add","ajaxify","catch","error","color","Danger","title","content","duration","FormData","inputs","appendInputsToFormData","SubmitEvent","submitter","append","csrfInput","ajaxifyInputs","type","checked","html","template","document","createElement","innerHTML","trim","newElement","firstElementChild","syncElement","current","incoming","attr","attributes","setAttribute","hasAttribute","removeAttribute","currentChildren","children","incomingChildren","i","length","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_dec1","_dec2","_dec3","_dec4","_dec5","_init_url","_init_extra__init_url","_init_id","_init_extra__init_id","id","bindable","customAttribute","IEventAggregator","ILogger","INode","IPlatform","resolve","Channels","PopoverAction","PopoverStatus","setState","name","defaultProperty","BleetPopoverCustomAttribute","logger","scopeTo","element","ea","p","trace","isOpen","subscription","attaching","subscribe","Popover","onPopover","attached","detaching","dispose","payload","action","Open","open","rect","Close","close","Toggle","positionAt","publish","status","Opened","Closed","style","visibility","display","popoverRect","getBoundingClientRect","top","height","left","width","bottom","window","innerWidth","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_init_id","_init_extra__init_id","id","absolute","bindable","customAttribute","IEventAggregator","ILogger","INode","resolve","Channels","PopoverAction","name","defaultProperty","BleetPopoverTriggerCustomAttribute","logger","scopeTo","element","ea","trace","attached","addEventListener","onMouseEnter","onMouseLeave","detaching","removeEventListener","dispose","publish","Popover","action","Open","rect","getBoundingClientRect","undefined","Close","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_dec1","_init_id","_init_extra__init_id","customAttribute","IEventAggregator","ILogger","INode","IPlatform","resolve","Channels","ToasterAction","UiColor","UiToastIcon","ITransitionService","setState","BleetToasterCustomAttribute","logger","scopeTo","element","ea","p","transitionService","trace","disposable","toasts","Map","attaching","subscribe","Toaster","onToasterEvent","detaching","dispose","forEach","entry","closeTimeout","undefined","clearTimeout","data","action","Add","toast","id","Math","random","toString","substring","color","Info","icon","duration","title","content","has","add","Remove","close","template","querySelector","warn","fragment","cloneNode","toastElement","firstElementChild","iconTemplate","iconSlot","appendChild","titleElement","replaceChildren","remove","contentElement","innerHTML","addEventListener","event","preventDefault","closing","set","raise","debug","run","setTimeout","get","delete","size","lower","hasAttribute","matches","hidePopover","showPopover","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","id","color","icon","title","content","duration","bindable","customAttribute","IEventAggregator","ILogger","IPlatform","queueTask","resolve","Channels","ToasterAction","UiColor","UiToastIcon","name","defaultProperty","BleetToastCustomAttribute","logger","scopeTo","ea","p","trace","Info","attached","document","readyState","addEventListener","publish","once","Toaster","action","Add","toast","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_dec1","_dec2","_init_id","_init_extra__init_id","customAttribute","IEventAggregator","ILogger","INode","IPlatform","resolve","Channels","OverlayAction","OverlayStatus","ITransitionService","setState","BleetOverlayCustomAttribute","logger","scopeTo","element","ea","p","transitionService","trace","disposable","attached","subscribe","Overlay","onOverlayEvent","addEventListener","onClickOverlay","detaching","removeEventListener","dispose","toggle","fromOverlay","hidden","open","close","run","publish","action","Open","status","Opening","requestAnimationFrame","Opened","Close","Closing","Closed","data","Toggle","event","preventDefault","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","name","template","dependencies","bindables","_e","register","id","url","__au2ViewDef","customElement","bindable","IEventAggregator","resolve","ILogger","INode","IApiService","AjaxifyAction","Channels","AjaxifyCodec","name","BleetAjaxify","ea","logger","scopeTo","apiService","element","trace","ajaxedView","disposable","attaching","subscribe","Ajaxify","onEvent","detaching","dispose","findForm","querySelector","closest","data","action","Refresh","handleRefresh","Run","handleRun","length","debug","withInputCodec","codec","toText","get","then","response","body","catch","error","form","warn","method","toUpperCase","builder","undefined","FormData","fromMultipart","fromJson","request","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_dec1","_init_id","_init_extra__init_id","__au2ViewDef","id","dialogClass","loadError","submitError","__au2ViewDef","bindable","customElement","IEventAggregator","ILogger","INode","IPlatform","resolve","Channels","DialogAction","ModalAction","ModalStatus","OverlayAction","ToasterAction","UiColor","ITransitionService","IApiService","setState","name","attribute","BleetDialog","logger","scopeTo","element","ea","p","transitionService","apiService","dialogElement","disposable","loading","closing","contentView","attached","subscribe","Modal","onModalEvent","addEventListener","onCancelEvent","detaching","removeEventListener","unbindDialogEvents","dispose","bindDialogEvents","onFormSubmit","onDialogClick","data","isOpen","open","action","Open","url","loadFromUrl","Close","close","Toggle","event","target","preventDefault","closest","form","getAttribute","formData","FormData","submitter","HTMLButtonElement","append","value","method","get","fromMultipart","request","then","response","applyResponse","body","catch","error","publishError","finally","content","executeActions","refresh","RefreshAndClose","toast","publish","Toaster","Add","ajaxify","Ajaxify","redirect","window","location","href","reload","color","Danger","run","Overlay","status","Opening","showModal","requestAnimationFrame","Opened","Closing","Closed","__au2ViewDef","BleetAlertCustomAttribute","BleetBurgerCustomAttribute","BleetDropdownCustomAttribute","BleetMenuCustomAttribute","BleetModalTriggerCustomAttribute","BleetPagerCustomAttribute","BleetProfileCustomAttribute","BleetPasswordCustomAttribute","BleetBadgeCustomAttribute","BleetTabsCustomAttribute","BleetToasterTriggerCustomAttribute","BleetAjaxifyTriggerCustomAttribute","BleetPopoverCustomAttribute","BleetPopoverTriggerCustomAttribute","BleetToasterCustomAttribute","BleetToastCustomAttribute","BleetOverlayCustomAttribute","BleetAjaxify","BleetDialog","__defProp","__exportAll","target","name","all","no_symbols","IStorageService","x","StorageService","resolve","ILogger","IPlatform","logger","p","key","result","def","value","error","ITransitionService","TransitionService","securityTimeout","endTransition","element","after","before","ITrapFocusService","TrapFocusService","isDisabled","isAriaHidden","isNotTabbable","hidden","current","opener","startCallback","stopCallback","globalElement","initialFocusElement","promise","stopped","reject","index","currentIndex","changed","loop","event","setState","other","state","readClasses","source","classes","token","Channels","\"Overlay\"","\"OverlayStatus\"","\"Modal\"","\"ModalStatus\"","\"Toaster\"","\"ToasterStatus\"","\"Menu\"","\"MenuStatus\"","\"Badge\"","\"Profile\"","\"ProfileStatus\"","\"Ajaxify\"","\"Popover\"","\"PopoverStatus\"","\"Upload\"","UploadAction","\"Reset\"","OverlayAction","\"Open\"","\"Close\"","\"Toggle\"","OverlayStatus","\"Opening\"","\"Closing\"","\"Opened\"","\"Closed\"","ProfileAction","ProfileStatus","ModalAction","ModalStatus","AjaxifyAction","\"Refresh\"","\"Run\"","AjaxifyTriggerMode","\"Classic\"","\"PublishOnly\"","ToasterAction","\"Add\"","\"Remove\"","ToasterStatus","\"Added\"","\"Removed\"","MenuAction","BadgeAction","MenuStatus","PopoverAction","PopoverStatus","UiColor","\"Primary\"","\"Secondary\"","\"Success\"","\"Danger\"","\"Warning\"","\"Info\"","\"Accent\"","UiToastIcon","UiIcon","\"InformationCircle\"","\"CheckCircle\"","\"ExclamationTriangle\"","\"XCircle\"","DialogAction","\"Keep\"","\"RefreshAndClose\"","toPrimitive$18","input","prim","res","hint","toPropertyKey$18","arg","checkInRHS$18","setFunctionName$18","fn","prefix","_apply_decs_2311$18","symbolMetadata","defineProperty","create","metadata","existingNonFields","hasClassDecs","classDecs","_","createRunInitializers","useStaticThis","thisArg","targetClass","i","initializers","hasValue","assertCallable","throwUndefined","hint1","hint2","applyDec","assertInstanceIfPrivate","hasPrivateBrand","decs","decInfo","decVal","isClass","ret","isAccessor","kind","isGetter","isSetter","isMethod","bindPropCall","_this","Class","desc1","init","isPrivate","isField","isStatic","newValue","decoratorsHaveThis","dec","decThis","decoratorFinishedRef","ctx","initializer","applyMemberDecs","protoInitializers","staticInitializers","pushInitializers","applyMemberDecsOfKind","memberDecs","kindOnly","instanceBrand","defineMetadata","parentClass","classDecsHaveThis","_dec$18","customAttribute","_initClass$18","_BleetBurgerCustomAttribute","IEventAggregator","INode","ea","toPrimitive$17","toPropertyKey$17","checkInRHS$17","setFunctionName$17","_apply_decs_2311$17","_dec$17","_initClass$17","_BleetMenuCustomAttribute","transitionService","storageService","fromOverlay","btn","id","list","svg","sublist","open","except","data","toPrimitive$16","toPropertyKey$16","checkInRHS$16","setFunctionName$16","_apply_decs_2311$16","_dec$16","_initClass$16","_init_id$9","_init_extra__init_id$9","_BleetBadgeCustomAttribute","bindable","toPrimitive$15","toPropertyKey$15","checkInRHS$15","setFunctionName$15","_apply_decs_2311$15","_dec$15","_initClass$15","_BleetDropdownCustomAttribute","trapFocusService","removeButton","tagElement","option","isClosed","initialFocus","clickedValue","query","normalizedQuery","visibleCount","text","item","isVisible","hasVisible","sibling","group","selectedOptions","opt","placeholder","count","tag","tagFragment","tagText","checkmark","child","groupedOptions","c","o","button","itemText","itemValue","disabledClasses","fragment","groupLabel","label","toPrimitive$14","toPropertyKey$14","checkInRHS$14","setFunctionName$14","_apply_decs_2311$14","_dec$14","_initClass$14","_BleetPasswordCustomAttribute","isPassword","toPrimitive$13","toPropertyKey$13","checkInRHS$13","setFunctionName$13","_apply_decs_2311$13","_dec$13","_initClass$13","_BleetTabsCustomAttribute","activeButton","inactiveButton","tabIndex","panel","toPrimitive$12","toPropertyKey$12","checkInRHS$12","setFunctionName$12","_apply_decs_2311$12","_dec$12","_initClass$12","_init_id$8","_init_extra__init_id$8","_BleetProfileCustomAttribute","firstItem","isTargeted","toPrimitive$11","toPropertyKey$11","checkInRHS$11","setFunctionName$11","_apply_decs_2311$11","_dec$11","_initClass$11","_dec1$6","_dec2$4","_dec3$2","_dec4$2","_dec5$2","_init_id$7","_init_extra__init_id$7","_init_color$2","_init_extra__init_color$2","_init_icon$1","_init_extra__init_icon$1","_init_title$1","_init_extra__init_title$1","_init_content$1","_init_extra__init_content$1","_init_duration$1","_init_extra__init_duration$1","_BleetToasterTriggerCustomAttribute","toPrimitive$10","toPropertyKey$10","checkInRHS$10","setFunctionName$10","_apply_decs_2311$10","_dec$10","_initClass$10","_BleetAlertCustomAttribute","currentHeight","toPrimitive$9","toPropertyKey$9","checkInRHS$9","setFunctionName$9","_apply_decs_2311$9","_dec$9","_initClass$9","_dec1$5","_dec2$3","_init_id$6","_init_extra__init_id$6","_init_url$2","_init_extra__init_url$2","_init_color$1","_init_extra__init_color$1","_BleetModalTriggerCustomAttribute","toPrimitive$8","toPropertyKey$8","checkInRHS$8","setFunctionName$8","_apply_decs_2311$8","_dec$8","_initClass$8","_BleetPagerCustomAttribute","pageNumber","link","toPrimitive$7","toPropertyKey$7","checkInRHS$7","setFunctionName$7","_apply_decs_2311$7","_dec$7","_initClass$7","_dec1$4","_dec2$2","_dec3$1","_dec4$1","_dec5$1","_dec6","_dec7","_dec8","_init_url$1","_init_extra__init_url$1","_init_verb","_init_extra__init_verb","_init_event","_init_extra__init_event","_init_id$5","_init_extra__init_id$5","_init_mode","_init_extra__init_mode","_init_target","_init_extra__init_target","_init_method","_init_extra__init_method","_init_errorTitle","_init_extra__init_errorTitle","_init_errorContent","_init_extra__init_errorContent","_BleetAjaxifyTriggerCustomAttribute","IApiService","apiService","form","linkedElements","linked","targetName","disabledInputs","url","verb","formData","response","inputs","submitter","csrfInput","ajaxifyInputs","template","html","newElement","attr","incoming","currentChildren","incomingChildren","toPrimitive$6","toPropertyKey$6","checkInRHS$6","setFunctionName$6","_apply_decs_2311$6","_dec$6","_initClass$6","_init_id$4","_init_extra__init_id$4","_BleetPopoverCustomAttribute","payload","rect","popoverRect","top","left","toPrimitive$5","toPropertyKey$5","checkInRHS$5","setFunctionName$5","_apply_decs_2311$5","_dec$5","_initClass$5","_dec1$3","_init_id$3","_init_extra__init_id$3","_init_absolute","_init_extra__init_absolute","_BleetPopoverTriggerCustomAttribute","toPrimitive$4","toPropertyKey$4","checkInRHS$4","setFunctionName$4","_apply_decs_2311$4","_dec$4","_initClass$4","_BleetToasterCustomAttribute","entry","toast","toastElement","iconTemplate","iconSlot","titleElement","contentElement","toPrimitive$3","toPropertyKey$3","checkInRHS$3","setFunctionName$3","_apply_decs_2311$3","_dec$3","_initClass$3","_dec1$2","_dec2$1","_dec3","_dec4","_dec5","_init_id$2","_init_extra__init_id$2","_init_color","_init_extra__init_color","_init_icon","_init_extra__init_icon","_init_title","_init_extra__init_title","_init_content","_init_extra__init_content","_init_duration","_init_extra__init_duration","_BleetToastCustomAttribute","queueTask","toPrimitive$2","toPropertyKey$2","checkInRHS$2","setFunctionName$2","_apply_decs_2311$2","_dec$2","_initClass$2","_BleetOverlayCustomAttribute","bleet_ajaxify_$au_exports","bindables$1","template$1","dependencies$1","name$1","register$1","_e$1","CustomElement","container","toPrimitive$1","toPropertyKey$1","checkInRHS$1","setFunctionName$1","_apply_decs_2311$1","_dec$1","customElement","_initClass$1","_dec1$1","_dec2","_init_id$1","_init_extra__init_id$1","_init_url","_init_extra__init_url","_BleetAjaxify","AjaxifyCodec","method","builder","bleet_dialog_$au_exports","bindables","dependencies","register","_e","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_dec1","_init_id","_init_extra__init_id","_init_dialogClass","_init_extra__init_dialogClass","_init_loadError","_init_extra__init_loadError","_init_submitError","_init_extra__init_submitError","_BleetDialog","isOpen","refresh","content","DefaultComponents","createBleetConfiguration","optionsCallback","ApiConfiguration","callback","BleetConfiguration"],"sources":["../src/services/storage-service.ts","../src/services/transition-service.ts","../src/services/trap-focus-service.ts","../src/utils/state-classes.ts","../src/enums/event-aggregator.ts","../src/attributes/burger.ts","../src/attributes/menu.ts","../src/attributes/badge.ts","../src/attributes/dropdown.ts","../src/attributes/password.ts","../src/attributes/tabs.ts","../src/attributes/profile.ts","../src/attributes/toaster-trigger.ts","../src/attributes/alert.ts","../src/attributes/modal-trigger.ts","../src/attributes/pager.ts","../src/attributes/ajaxify-trigger.ts","../src/attributes/popover.ts","../src/attributes/popover-trigger.ts","../src/attributes/toaster.ts","../src/attributes/toast.ts","../src/attributes/overlay.ts","../src/components/bleet-ajaxify.$au.ts","../src/components/bleet-ajaxify.ts","../src/components/bleet-dialog.$au.ts","../src/components/bleet-dialog.ts","../src/index.ts"],"sourcesContent":["import {DI, ILogger, IPlatform, resolve} from \"aurelia\";\n\nexport interface IStorageService extends StorageService { }\nexport const IStorageService = /*@__PURE__*/DI.createInterface<IStorageService>('IStorageService', (x) => x.singleton(StorageService));\n\n/**\n * JSON values in localStorage (open sublists of the menu, application settings).\n */\nexport class StorageService\n{\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('StorageService'),\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor')\n }\n\n /**\n * Value stored under key, or def when there is none; an unreadable value is removed and gives def.\n */\n public load(key: string, def: unknown = null): unknown\n {\n this.logger.trace('load', key);\n let result = def;\n const value = localStorage.getItem(key);\n if (value !== null) {\n try {\n result = JSON.parse(value);\n } catch (error) {\n this.logger.warn('load: unreadable value removed', key, error);\n localStorage.removeItem(key);\n }\n }\n return result;\n }\n\n public save(key: string, value: unknown): void\n {\n this.logger.trace('save', key, value);\n localStorage.setItem(key, JSON.stringify(value));\n }\n\n public remove(key: string): void\n {\n this.logger.trace('remove', key);\n localStorage.removeItem(key);\n }\n}","import {DI, IEventAggregator, ILogger, INode, IPlatform, resolve} from \"aurelia\";\n\nexport interface ITransitionService extends TransitionService { }\nexport const ITransitionService = /*@__PURE__*/DI.createInterface<ITransitionService>('ITransitionService', (x) => x.singleton(TransitionService));\n\nexport type TransitionCallback = (e: HTMLElement|HTMLDialogElement) => void\nexport class TransitionService\n{\n public securityTimeout: number = 2000;\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('TransitionService'),\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor')\n }\n\n public run(element: HTMLElement, before: TransitionCallback, after?: TransitionCallback) {\n let securityTimeout: number | undefined = undefined;\n const endTransition = (evt: TransitionEvent) => {\n if (securityTimeout !== undefined) {\n this.p.clearTimeout(securityTimeout);\n securityTimeout = undefined;\n }\n element.removeEventListener('transitionend', endTransition);\n if (after) {\n this.logger.trace('after()');\n after(element);\n }\n }\n if (before) {\n securityTimeout = this.p.setTimeout(endTransition, this.securityTimeout);\n element.addEventListener('transitionend', endTransition);\n this.p.requestAnimationFrame(() => {\n this.logger.trace('before()');\n before(element);\n });\n }\n }\n}","import {DI, ILogger, IPlatform, resolve} from \"aurelia\";\n\nexport interface ITrapFocusService extends TrapFocusService { }\nexport const ITrapFocusService = /*@__PURE__*/DI.createInterface<ITrapFocusService>('ITrapFocusService', (x) => x.transient(TrapFocusService));\n\n/**\n * Keeps the focus inside a panel (dropdown, select, profile menu): Tab / Shift+Tab loop, arrows move, Escape and a\n * click outside stop it. Elements hidden inside the panel are not focusable.\n */\nexport class TrapFocusService\n{\n\n public focusableElementsQuerySelector = '[href], button, input, select, textarea, [tabindex]:not([tabindex=\"-1\"]), [accesskey], summary, canvas, audio, video, details, iframe, [contenteditable]';\n\n private opener: HTMLElement|null = null;\n private target: HTMLElement|null = null;\n private globalElement: HTMLElement|null = null;\n private startCallback: Function|null = null;\n private stopCallback: Function|null = null;\n private focusableElements: HTMLElement[] = [];\n private lastFocusedElement: HTMLElement|null = null;\n private started: boolean = false;\n\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('TrapFocusService'),\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor')\n }\n\n private buildFocusableElements() {\n this.focusableElements = [];\n const focusableElements = this.target?.querySelectorAll(this.focusableElementsQuerySelector);\n focusableElements?.forEach((element: Element) => {\n const isDisabled = element.hasAttribute('disabled');\n const isAriaHidden = (element.getAttribute('aria-hidden') === 'true');\n const isNotTabbable = (element.getAttribute('tabindex') === '-1');\n if (isDisabled === false && isAriaHidden === false && isNotTabbable === false && this.isHiddenInTarget(element) === false) {\n this.focusableElements.push(element as HTMLElement);\n }\n });\n }\n\n /**\n * Element hidden (hidden attribute or display: none) by itself or by an ancestor inside the target; the target's\n * own state is not looked at, it is shown right after start().\n */\n private isHiddenInTarget(element: Element): boolean {\n let hidden = false;\n let current: Element | null = element;\n while (hidden === false && current !== null && current !== this.target) {\n hidden = (current as HTMLElement).hidden === true || this.p.window.getComputedStyle(current).display === 'none';\n current = current.parentElement;\n }\n return hidden;\n }\n\n public start(opener: HTMLElement, target: HTMLElement, globalElement: HTMLElement, startCallback?: Function, stopCallback?: Function, initialFocusElement?: HTMLElement) {\n this.logger.trace('start', opener, target);\n this.startCallback = startCallback ?? null;\n this.stopCallback = stopCallback ?? null;\n this.opener = opener;\n this.target = target;\n this.globalElement = globalElement;\n this.buildFocusableElements();\n\n if (initialFocusElement && this.focusableElements.includes(initialFocusElement)) {\n this.lastFocusedElement = initialFocusElement;\n } else {\n this.lastFocusedElement = this.focusableElements[0] || undefined;\n }\n\n this.logger.trace('start: add keydown listener');\n this.p.requestAnimationFrame(() => {\n this.logger.trace('start: focus initial element', this.lastFocusedElement);\n this.lastFocusedElement?.focus();\n\n });\n this.target.addEventListener('keydown', this.onKeyDown);\n this.p.document.addEventListener('click', this.onClickOutside);\n this.started = true;\n if(this.startCallback) {\n const promise = this.startCallback();\n if (promise && promise instanceof Promise) {\n return promise;\n }\n }\n return Promise.resolve();\n\n }\n /**\n * Stops the trap: the stop callback may return a value or a Promise; the opener gets the focus back and the\n * state is cleaned in every case, a rejected callback rejects the returned Promise.\n */\n public stop() {\n this.logger.trace('stop');\n return new Promise((resolve, reject) => {\n if (this.started) {\n this.logger.trace('stop: remove keydown listener');\n this.target?.removeEventListener('keydown', this.onKeyDown);\n this.p.document.removeEventListener('click', this.onClickOutside);\n const stopped = Promise.resolve(this.stopCallback !== null ? this.stopCallback() : undefined);\n this.p.requestAnimationFrame(() => {\n this.opener?.focus();\n this.cleanup();\n stopped.then(resolve, reject);\n });\n } else {\n reject('TrapFocusService: not started');\n }\n });\n }\n private cleanup() {\n this.logger.trace('cleanup');\n if (this.started) {\n this.opener = null;\n this.startCallback = null;\n this.stopCallback = null;\n this.target = null;\n this.lastFocusedElement = null;\n this.focusableElements = [];\n this.started = false;\n }\n }\n\n\n private focusedElementIndex() : number {\n let index = -1;\n if (this.lastFocusedElement) {\n index = this.focusableElements.indexOf(this.lastFocusedElement);\n }\n if (index === -1 && this.lastFocusedElement !== undefined) {\n this.lastFocusedElement = null;\n }\n return index;\n }\n private focusPreviousElement(loop = true): HTMLElement | null {\n\n const currentIndex = this.focusedElementIndex();\n if (currentIndex === -1) {\n return null;\n }\n let changed = false;\n if (currentIndex === 0 && loop === true) {\n this.lastFocusedElement = this.focusableElements[this.focusableElements.length - 1];\n changed = true;\n } else if (currentIndex > 0) {\n this.lastFocusedElement = this.focusableElements[currentIndex - 1];\n changed = true;\n }\n if (changed === true) {\n this.p.requestAnimationFrame(() => {\n this.logger.trace('focusPreviousElement: focusing', this.lastFocusedElement);\n this.lastFocusedElement?.focus();\n });\n }\n return this.lastFocusedElement;\n }\n private focusNextElement(loop = true): HTMLElement | null {\n const currentIndex = this.focusedElementIndex();\n if (currentIndex === -1) {\n return null;\n }\n let changed = false;\n if (currentIndex === this.focusableElements.length - 1 && loop === true) {\n this.lastFocusedElement = this.focusableElements[0];\n changed = true;\n } else if (currentIndex < this.focusableElements.length - 1) {\n this.lastFocusedElement = this.focusableElements[currentIndex + 1];\n changed = true;\n }\n if (changed === true) {\n this.p.requestAnimationFrame(() => {\n this.logger.trace('focusNextElement: focusing', this.lastFocusedElement);\n this.lastFocusedElement?.focus();\n });\n }\n return this.lastFocusedElement;\n }\n\n private onKeyDown = (event: KeyboardEvent) => {\n let changeFocus = false;\n if (event.key === 'Tab') {\n if (event.shiftKey) {\n event.preventDefault();\n this.lastFocusedElement = this.focusPreviousElement(true);\n } else {\n event.preventDefault();\n this.lastFocusedElement = this.focusNextElement(true);\n }\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.lastFocusedElement = this.focusPreviousElement(false);\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.lastFocusedElement = this.focusNextElement(false);\n } else if (event.key === 'Escape') {\n event.preventDefault();\n this.stop();\n }\n };\n private onClickOutside = (event: MouseEvent) => {\n this.logger.trace('onClickOutside', event);\n if (this.started && this.globalElement && event.target) {\n this.logger.trace('onClickOutside: checking if click is outside globalElement', event.target, this.globalElement);\n if (!this.globalElement.contains(event.target as Node)) {\n this.stop();\n }\n }\n }\n}","/**\n * State classes written in the PHP markup: data-<name>-show=\"classes\" and data-<name>-hide=\"classes\".\n * Setting a state removes the classes of the other state and adds the classes of this one.\n * The classes are read on `source` (the element itself by default) and applied to `element`.\n */\nexport type StateName = 'show' | 'hide';\n\nexport function setState(element: Element, name: string, state: StateName, source: Element = element): void\n{\n const other: StateName = state === 'show' ? 'hide' : 'show';\n element.classList.remove(...readClasses(source, name, other));\n element.classList.add(...readClasses(source, name, state));\n}\n\nfunction readClasses(element: Element, name: string, state: StateName): string[]\n{\n const classes: string[] = [];\n (element.getAttribute(`data-${name}-${state}`) ?? '').split(' ').forEach((token) => {\n if (token !== '') {\n classes.push(token);\n }\n });\n return classes;\n}\n","export enum Channels {\n Overlay = 'bleet:overlay',\n OverlayStatus = 'bleet:overlay:status',\n Modal = 'bleet:modal',\n ModalStatus = 'bleet:modal:status',\n Toaster = 'bleet:toaster',\n ToasterStatus = 'bleet:toaster:status',\n Menu = 'bleet:menu',\n MenuStatus = 'bleet:menu:status',\n Badge = 'bleet:badge',\n Profile = 'bleet:profile',\n ProfileStatus = 'bleet:profile:status',\n Ajaxify = 'bleet:ajaxify',\n Popover = 'bleet:popover',\n PopoverStatus = 'bleet:popover:status',\n Upload = 'bleet:upload',\n}\n/**\n * Upload actions, handled by the upload bridges (@blackcube/aurelia-bridge-resumablejs)\n */\nexport enum UploadAction {\n Reset = 'reset',\n}\nexport enum OverlayAction {\n Open = 'open',\n Close = 'close',\n Toggle = 'toggle',\n}\nexport enum OverlayStatus {\n Opening = 'opening',\n Closing = 'closing',\n Opened = 'opened',\n Closed = 'closed',\n}\nexport enum ProfileAction {\n Open = 'open',\n Close = 'close',\n Toggle = 'toggle',\n}\nexport enum ProfileStatus {\n Opening = 'opening',\n Closing = 'closing',\n Opened = 'opened',\n Closed = 'closed',\n}\nexport enum ModalAction {\n Open = 'open',\n Close = 'close',\n Toggle = 'toggle',\n}\nexport enum ModalStatus {\n Opening = 'opening',\n Closing = 'closing',\n Opened = 'opened',\n Closed = 'closed',\n}\n\nexport enum AjaxifyAction {\n Refresh = 'refresh',\n Run = 'run',\n}\nexport enum AjaxifyTriggerMode {\n Classic = 'classic',\n PublishOnly = 'publishOnly',\n}\nexport enum ToasterAction {\n Add = 'add',\n Remove = 'remove',\n}\nexport enum ToasterStatus {\n Added = 'added',\n Removed = 'removed',\n}\n\nexport enum MenuAction {\n Open = 'open',\n Close = 'close',\n Toggle = 'toggle',\n}\nexport enum BadgeAction {\n Remove = 'remove',\n}\nexport enum MenuStatus {\n Opening = 'opening',\n Closing = 'closing',\n Opened = 'opened',\n Closed = 'closed',\n}\n\nexport enum PopoverAction {\n Open = 'open',\n Close = 'close',\n Toggle = 'toggle',\n}\nexport enum PopoverStatus {\n Opening = 'opening',\n Closing = 'closing',\n Opened = 'opened',\n Closed = 'closed',\n}\n\nexport enum UiColor {\n Primary = 'primary',\n Secondary = 'secondary',\n Success = 'success',\n Danger = 'danger',\n Warning = 'warning',\n Info = 'info',\n Accent = 'accent',\n}\nexport enum UiToastIcon {\n Info = 'information-circle',\n Success = 'check-circle',\n Warning = 'exclamation-triangle',\n Danger = 'x-circle',\n}\n\n/**\n * Icons for toasts and dialogs\n * Double alias: short (Info) and long (InformationCircle) → same value\n */\nexport enum UiIcon {\n Info = 'information-circle',\n Success = 'check-circle',\n Warning = 'exclamation-triangle',\n Danger = 'x-circle',\n\n InformationCircle = 'information-circle',\n CheckCircle = 'check-circle',\n ExclamationTriangle = 'exclamation-triangle',\n XCircle = 'x-circle',\n}\n\n/**\n * Primary actions of a dialog response (mutually exclusive)\n */\nexport enum DialogAction {\n Keep = 'keep',\n Close = 'close',\n RefreshAndClose = 'refreshAndClose',\n}","import {customAttribute, IEventAggregator, ILogger, INode, resolve} from \"aurelia\";\nimport {Channels, MenuAction} from '../enums/event-aggregator';\nimport {IMenu} from '../interfaces/event-aggregator';\n\n/**\n * Burger button of the Header widget: a click publishes MenuAction.Open on Channels.Menu.\n */\n@customAttribute('bleet-burger')\nexport class BleetBurgerCustomAttribute\n{\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-burger'),\n private readonly ea:IEventAggregator = resolve(IEventAggregator),\n private readonly element: HTMLButtonElement = resolve(INode) as HTMLButtonElement,\n ) {\n this.logger.trace('constructor')\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.element.addEventListener('click', this.onClickButton);\n\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.element.removeEventListener('click', this.onClickButton);\n }\n\n private onClickButton = (event: MouseEvent) => {\n this.logger.trace('onClickButton', event);\n event.preventDefault();\n this.ea.publish(Channels.Menu, <IMenu>{action: MenuAction.Open});\n }\n\n}","import {customAttribute, IDisposable, IEventAggregator, ILogger, INode, IPlatform, resolve} from \"aurelia\";\nimport {Channels, MenuAction, MenuStatus, OverlayAction, OverlayStatus} from '../enums/event-aggregator';\nimport {IMenu, IMenuStatus, IOverlay, IOverlayStatus} from '../interfaces/event-aggregator';\nimport {ITransitionService} from '../services/transition-service';\nimport {IStorageService} from '../services/storage-service';\nimport {setState} from '../utils/state-classes';\n\n/**\n * Side menu rendered by the PHP Sidebar widget: opened and closed through Channels.Menu with\n * the data-menu-show / data-menu-hide classes of the element; [data-menu=toggle-button-ID]\n * shows or hides [data-menu=toggle-list-ID] (hidden attribute, accordion: opening one closes the others) and sets\n * the data-menu-show / data-menu-hide classes of its svg[data-menu=icon]. The open sublists are kept in storage; a\n * button added after attaching is linked on its first click.\n */\n@customAttribute('bleet-menu')\nexport class BleetMenuCustomAttribute\n{\n private disposable?: IDisposable;\n private disposableOverlay?: IDisposable;\n private closeButton?: HTMLButtonElement;\n private toggleButtons?: NodeListOf<HTMLButtonElement>;\n private sublists: Map<HTMLButtonElement, {list: HTMLElement, svg: HTMLElement}> = new Map();\n private isOpen: boolean = false;\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-menu'),\n private readonly ea:IEventAggregator = resolve(IEventAggregator),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly p: IPlatform = resolve(IPlatform),\n private readonly transitionService: ITransitionService = resolve(ITransitionService),\n private readonly storageService: IStorageService = resolve(IStorageService),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n this.closeButton = this.element.querySelector('[data-menu=close]') as HTMLButtonElement;\n this.toggleButtons = this.element.querySelectorAll('[data-menu^=\"toggle-button\"]');\n this.initMenuButtons();\n }\n public attached()\n {\n this.logger.trace('attached');\n this.disposable = this.ea.subscribe(Channels.Menu, this.onMenuEvent);\n this.disposableOverlay = this.ea.subscribe(Channels.OverlayStatus, this.onOverlayStatus);\n this.closeButton?.addEventListener('click', this.onClickClose);\n this.element.addEventListener('click', this.onClickToggleButtons)\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.closeButton?.removeEventListener('click', this.onClickClose);\n this.element.removeEventListener('click', this.onClickToggleButtons)\n this.disposableOverlay?.dispose();\n this.disposable?.dispose();\n }\n public dispose() {\n this.logger.trace('dispose');\n this.disposableOverlay?.dispose();\n this.disposable?.dispose();\n }\n\n private open(fromOverlay: boolean = false) {\n if (!this.isOpen) {\n this.logger.trace('open');\n this.isOpen = true;\n this.transitionService.run(this.element, (element: HTMLElement) => {\n if (!fromOverlay) {\n this.ea.publish(Channels.Overlay, <IOverlay>{action: OverlayAction.Open});\n }\n this.ea.publish(Channels.MenuStatus, <IMenuStatus>{status: MenuStatus.Opening});\n setState(element, 'menu', 'show');\n element.ariaHidden = 'false';\n }, (element: HTMLElement) => {\n this.ea.publish(Channels.MenuStatus, <IMenuStatus>{status: MenuStatus.Opened});\n });\n }\n }\n private close(fromOverlay: boolean = false) {\n if (this.isOpen) {\n this.logger.trace('close');\n this.isOpen = false;\n this.transitionService.run(this.element, (element: HTMLElement) => {\n this.ea.publish(Channels.MenuStatus, <IMenuStatus>{status: MenuStatus.Closing});\n if (!fromOverlay) {\n this.ea.publish(Channels.Overlay, <IOverlay>{action: OverlayAction.Close});\n }\n setState(element, 'menu', 'hide');\n element.ariaHidden = 'true';\n }, (element: HTMLElement) => {\n this.ea.publish(Channels.MenuStatus, <IMenuStatus>{status: MenuStatus.Closed});\n });\n }\n }\n\n private onClickClose = (event: MouseEvent) => {\n this.logger.trace('onClickClose', event);\n event.preventDefault();\n this.close();\n }\n\n private onClickToggleButtons = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n const btn = target.closest('[data-menu^=\"toggle-button\"]') as HTMLButtonElement;\n if (btn && btn.matches('[data-menu^=\"toggle-button\"]')) {\n event.preventDefault();\n this.toggleButton(btn);\n }\n }\n\n private initMenuButtons() {\n this.logger.trace('initMenu');\n this.toggleButtons?.forEach((btn: HTMLButtonElement) => {\n this.initButton(btn);\n });\n }\n\n /**\n * Links a toggle button to its list and restores the stored state; called at attaching for the buttons present,\n * and on the first click for a button added to the menu afterwards.\n */\n private initButton(btn: HTMLButtonElement) {\n if (this.sublists.has(btn) === false) {\n const id = btn.dataset.menu?.replace('toggle-button-', '');\n const list = this.element.querySelector(`[data-menu=\"toggle-list-${id}\"]`) as HTMLElement | null;\n const svg = btn.querySelector('svg[data-menu=icon]') as HTMLElement | null;\n if (list !== null && svg !== null) {\n this.sublists.set(btn, {list, svg});\n this.setSublist(btn, this.storageService.load(`toggle-list-${id}`, false) === true);\n }\n }\n }\n\n /**\n * Accordion: opening a list closes the other ones.\n */\n private toggleButton(btn: HTMLButtonElement) {\n this.initButton(btn);\n const sublist = this.sublists.get(btn);\n if (sublist !== undefined) {\n const open = sublist.list.hidden === true;\n if (open === true) {\n this.closeOtherButtons(btn);\n }\n this.setSublist(btn, open);\n }\n }\n\n private closeOtherButtons(except: HTMLButtonElement) {\n this.sublists.forEach((value, key) => {\n if (key !== except) {\n this.setSublist(key, false);\n }\n });\n }\n\n private setSublist(btn: HTMLButtonElement, open: boolean) {\n const sublist = this.sublists.get(btn);\n if (sublist !== undefined) {\n const id = btn.dataset.menu?.replace('toggle-button-', '');\n sublist.list.hidden = open === false;\n setState(sublist.svg, 'menu', open === true ? 'show' : 'hide');\n btn.ariaExpanded = open === true ? 'true' : 'false';\n this.storageService.save(`toggle-list-${id}`, open);\n }\n }\n private onMenuEvent = (data: IMenu) => {\n this.logger.trace('onMenuEvent', data);\n if (data.action === MenuAction.Close) {\n this.logger.trace('Menu Close action received');\n this.close();\n } else if (data.action === MenuAction.Open) {\n this.logger.trace('Menu Open action received');\n this.open();\n } else if (data.action === MenuAction.Toggle) {\n this.logger.trace('Menu Toggle action received');\n if (this.isOpen === true) {\n this.close();\n } else {\n this.open();\n }\n }\n }\n private onOverlayStatus = (data: IOverlayStatus) => {\n if (data.status === OverlayStatus.Closing) {\n this.logger.trace('Overlay Close action received');\n this.close(true);\n } else {\n this.logger.trace('onOverlayStatus unhandled', data);\n }\n }\n}","import {bindable, customAttribute, IEventAggregator, ILogger, INode, resolve} from \"aurelia\";\nimport {BadgeAction, Channels} from '../enums/event-aggregator';\nimport {IBadge} from '../interfaces/event-aggregator';\n\n/**\n * Removable badge: a click on [data-badge=remove] publishes BadgeAction.Remove with the badge id on Channels.Badge,\n * then removes the element.\n */\n@customAttribute({ name: 'bleet-badge', defaultProperty: 'id' })\nexport class BleetBadgeCustomAttribute\n{\n private closeButton?: HTMLElement;\n @bindable id: string = '';\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-badge'),\n private readonly ea:IEventAggregator = resolve(IEventAggregator),\n private readonly element: HTMLButtonElement = resolve(INode) as HTMLButtonElement,\n ) {\n this.logger.trace('constructor')\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.closeButton = this.element.querySelector('[data-badge=remove]') ?? undefined;\n this.closeButton?.addEventListener('click', this.onClickRemove);\n\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.closeButton?.removeEventListener('click', this.onClickRemove);\n }\n\n private onClickRemove = (event: MouseEvent) => {\n this.logger.trace('onClickRemove', event);\n event.preventDefault();\n this.ea.publish(Channels.Badge, <IBadge>{action: BadgeAction.Remove, id: this.id});\n this.element.remove();\n }\n\n}","import {customAttribute, ILogger, INode, resolve} from \"aurelia\";\nimport {ITrapFocusService} from '../services/trap-focus-service';\nimport {setState} from '../utils/state-classes';\n\n/**\n * Advanced select rendered by the PHP Select widget (searchable, multiple, with tags): the native select stays the\n * value holder, [data-dropdown=items] (hidden attribute) is filled from its options with the\n * [data-dropdown=item-template] and [data-dropdown=group-template] templates. The selected items and their\n * [data-dropdown=item-check] get their data-dropdown-show classes, the others their data-dropdown-hide classes; a\n * disabled option gets the data-dropdown-disabled classes of its item. [data-dropdown=search] filters the items\n * (hidden attribute) and shows [data-dropdown=empty] when nothing matches.\n */\n@customAttribute('bleet-dropdown')\nexport class BleetDropdownCustomAttribute {\n\n private select?: HTMLSelectElement;\n private button?: HTMLButtonElement;\n private buttonText?: HTMLElement;\n private optionTemplate?: HTMLTemplateElement;\n private countTemplate: HTMLTemplateElement | null = null;\n private groupTemplate?: HTMLTemplateElement;\n private tagTemplate?: HTMLTemplateElement;\n private tagsContainer?: HTMLElement;\n private placeholder?: HTMLElement;\n private itemsPlace?: HTMLElement;\n private itemsContainer?: HTMLElement;\n private searchInput?: HTMLInputElement;\n private emptyMessage?: HTMLElement;\n private isMultiple: boolean = false;\n private withTags: boolean = false;\n private selectObserver?: MutationObserver;\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-dropdown'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly trapFocusService: ITrapFocusService = resolve(ITrapFocusService),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n this.select = this.element.querySelector('select') as HTMLSelectElement;\n this.button = this.element.querySelector('button') as HTMLButtonElement;\n this.buttonText = this.button.querySelector('[data-dropdown=value]') as HTMLElement;\n this.tagsContainer = this.button.querySelector('[data-dropdown=tags]') as HTMLElement;\n this.placeholder = this.button.querySelector('[data-dropdown=placeholder]') as HTMLElement;\n this.optionTemplate = this.element.querySelector('[data-dropdown=item-template]') as HTMLTemplateElement;\n this.groupTemplate = this.element.querySelector('[data-dropdown=group-template]') as HTMLTemplateElement;\n this.tagTemplate = this.element.querySelector('[data-dropdown=tag-template]') as HTMLTemplateElement;\n this.itemsPlace = this.element.querySelector('[data-dropdown=items]') as HTMLElement;\n this.itemsContainer = this.element.querySelector('[data-dropdown=items-container]') as HTMLElement;\n this.searchInput = this.element.querySelector('[data-dropdown=search]') as HTMLInputElement;\n this.emptyMessage = this.element.querySelector('[data-dropdown=empty]') as HTMLElement;\n this.countTemplate = this.element.querySelector('template[data-dropdown=count]');\n this.isMultiple = this.select?.multiple || false;\n this.withTags = this.tagTemplate !== null;\n }\n\n /**\n * The panel is rebuilt when the options of the native select change, inside an <optgroup> too (subtree).\n */\n public attached()\n {\n this.logger.trace('attached');\n if (!this.itemsPlace) {\n throw new Error('Items place element not found');\n }\n if (!this.itemsPlace.id) {\n this.itemsPlace.id = `data-dropdown-items-${Math.random().toString(36).substring(2, 15)}`;\n }\n if (!this.select?.options) {\n throw new Error('Select options not found');\n }\n if (!this.optionTemplate) {\n throw new Error('Option template not found');\n }\n if (!this.button) {\n throw new Error('Button element not found');\n }\n if (!this.buttonText && !this.tagsContainer) {\n throw new Error('Button text or tags container element not found');\n }\n if (this.select.options.length > 0) {\n this.preparePanel();\n }\n this.selectObserver = new MutationObserver(() => {\n if (this.select && this.select.options.length > 0) {\n this.preparePanel();\n }\n });\n this.selectObserver.observe(this.select, { childList: true, subtree: true });\n\n this.button.ariaHasPopup = 'listbox';\n this.button.setAttribute('aria-controls', this.itemsPlace.id);\n this.itemsPlace.role = 'listbox';\n\n this.button?.addEventListener('click', this.onClickToggleMenu);\n this.itemsPlace?.addEventListener('click', this.onClickToggleItem);\n this.searchInput?.addEventListener('input', this.onSearchInput);\n this.select.addEventListener('change', this.onSelectChange);\n\n if (this.withTags) {\n this.tagsContainer?.addEventListener('click', this.onClickRemoveTag);\n }\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.selectObserver?.disconnect();\n this.selectObserver = undefined;\n this.button?.removeEventListener('click', this.onClickToggleMenu);\n this.itemsPlace?.removeEventListener('click', this.onClickToggleItem);\n this.searchInput?.removeEventListener('input', this.onSearchInput);\n this.select?.removeEventListener('change', this.onSelectChange);\n if (this.withTags) {\n this.tagsContainer?.removeEventListener('click', this.onClickRemoveTag);\n }\n }\n\n private onClickToggleMenu = (event: MouseEvent) => {\n this.logger.trace('onClick', event);\n let result: Promise<unknown> | undefined;\n if ((event.target as HTMLElement).closest('[data-dropdown=tag-remove]') === null) {\n event.preventDefault();\n if (this.select?.disabled !== true) {\n result = this.toggleMenu();\n }\n }\n return result;\n }\n\n /**\n * A value set on the native select by the page (programmatic change followed by a change event) is shown too.\n */\n private onSelectChange = () => {\n this.swapItemClasses();\n }\n\n private onClickRemoveTag = (event: MouseEvent) => {\n const removeButton = (event.target as HTMLElement).closest('[data-dropdown=tag-remove]');\n if (!removeButton) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n const tagElement = removeButton.closest('[data-tag-value]') as HTMLElement;\n if (!tagElement) return;\n\n const value = tagElement.dataset.tagValue;\n\n Array.from((this.select as HTMLSelectElement).options).forEach((option) => {\n if (option.value == value) {\n option.selected = false;\n }\n });\n\n this.select?.dispatchEvent(new Event('change', { bubbles: true }));\n\n this.swapItemClasses();\n this.updateDisplay();\n }\n\n private onStopTrapFocus = () => {\n this.logger.trace('onStopTrapFocus');\n this.itemsPlace!.hidden = true;\n if (this.searchInput) {\n this.searchInput.value = '';\n this.filterItems('');\n }\n return Promise.resolve();\n }\n\n /**\n * The panel opens on its SELECTION, not on its first item: once the panel is shown (a hidden element has no\n * geometry), the selected item is scrolled into view — `nearest` scrolls the panel only when the item is out of\n * sight, and never the page. Without it, with a search field taking the focus, the current value of a long list\n * stayed below the fold.\n */\n private toggleMenu = () => {\n const isClosed = this.itemsPlace?.hidden;\n return new Promise((resolve) => {\n if (isClosed) {\n (this.button as HTMLButtonElement).ariaExpanded = 'true';\n\n const initialFocus = this.searchInput || this.itemsPlace?.querySelector('[aria-selected=\"true\"]') as HTMLElement;\n\n return this.trapFocusService.start(\n this.button as HTMLButtonElement,\n this.itemsPlace as HTMLElement,\n this.element,\n undefined,\n this.onStopTrapFocus,\n initialFocus\n )\n .then(() => {\n this.logger.trace('toggleMenu opened');\n this.itemsPlace!.hidden = false;\n (this.itemsPlace?.querySelector('[aria-selected=\"true\"]') as HTMLElement | null)\n ?.scrollIntoView({ block: 'nearest' });\n resolve(void 0);\n });\n } else {\n (this.button as HTMLButtonElement).ariaExpanded = 'false';\n return this.trapFocusService.stop()\n .then(() => {\n this.logger.trace('toggleMenu closed');\n this.itemsPlace!.hidden = true;\n resolve(void 0);\n });\n }\n });\n }\n\n /**\n * A disabled option is shown but never chosen: the native <option disabled> is the source of truth.\n */\n private onClickToggleItem = (event: MouseEvent) => {\n this.logger.trace('onClickItem', event);\n event.preventDefault();\n const element = (event.target as HTMLElement).closest('[data-value]') as HTMLElement;\n if (!element) return;\n if (element.getAttribute('aria-disabled') === 'true') return;\n\n const clickedValue = element.dataset.value;\n\n if (this.isMultiple) {\n Array.from((this.select as HTMLSelectElement).options).forEach((option) => {\n if (option.value == clickedValue) {\n option.selected = !option.selected;\n }\n });\n\n this.select?.dispatchEvent(new Event('change', { bubbles: true }));\n\n this.swapItemClasses();\n this.updateDisplay();\n } else {\n Array.from((this.select as HTMLSelectElement).options).forEach((option) => {\n option.selected = option.value == clickedValue;\n });\n\n this.select?.dispatchEvent(new Event('change', { bubbles: true }));\n\n this.synchSelect();\n }\n }\n\n private onSearchInput = (event: Event) => {\n const query = (event.target as HTMLInputElement).value;\n this.filterItems(query);\n }\n\n private filterItems(query: string) {\n const normalizedQuery = query.toLowerCase().trim();\n let visibleCount = 0;\n\n this.itemsContainer?.querySelectorAll('[data-value]').forEach((item) => {\n const text = item.querySelector('[data-dropdown=item-text]')?.textContent?.toLowerCase() || '';\n const isVisible = normalizedQuery === '' || text.includes(normalizedQuery);\n\n (item as HTMLElement).hidden = !isVisible;\n if (isVisible) {\n visibleCount++;\n }\n });\n\n if (this.emptyMessage) {\n this.emptyMessage.hidden = !(visibleCount === 0 && normalizedQuery !== '');\n }\n\n this.updateGroupVisibility();\n }\n\n private updateGroupVisibility() {\n if (!this.itemsContainer) return;\n const groups = this.itemsContainer.querySelectorAll('[data-dropdown=group]');\n groups.forEach((group) => {\n let hasVisible = false;\n let sibling = group.nextElementSibling;\n while (sibling && !sibling.matches('[data-dropdown=group]')) {\n if (!(sibling as HTMLElement).hidden) {\n hasVisible = true;\n break;\n }\n sibling = sibling.nextElementSibling;\n }\n (group as HTMLElement).hidden = !hasVisible;\n });\n }\n\n private synchSelect() {\n this.swapItemClasses();\n\n return this.toggleMenu();\n }\n\n private updateDisplay() {\n if (this.withTags) {\n this.updateTags();\n } else {\n this.updateButtonText();\n }\n }\n\n /**\n * Several options selected without tags: the text of template[data-dropdown=count] with {count} replaced, given\n * by the application, else the number alone.\n */\n private updateButtonText() {\n const selectedOptions = Array.from((this.select as HTMLSelectElement).options).filter(opt => opt.selected);\n\n if (selectedOptions.length === 0) {\n const placeholder = Array.from((this.select as HTMLSelectElement).options).find(opt => opt.value === '');\n (this.buttonText as HTMLElement).innerHTML = placeholder?.innerHTML || '';\n } else if (selectedOptions.length === 1) {\n (this.buttonText as HTMLElement).innerHTML = selectedOptions[0].innerHTML;\n } else {\n const count = String(selectedOptions.length);\n const text = this.countTemplate !== null ? (this.countTemplate.content.textContent ?? '').replace('{count}', count) : count;\n (this.buttonText as HTMLElement).textContent = text;\n }\n }\n\n private updateTags() {\n if (!this.tagsContainer || !this.tagTemplate) return;\n\n const selectedOptions = Array.from((this.select as HTMLSelectElement).options).filter(opt => opt.selected && opt.value !== '');\n\n this.tagsContainer.querySelectorAll('[data-tag-value]').forEach(tag => tag.remove());\n\n if (this.placeholder) {\n this.placeholder.hidden = selectedOptions.length > 0;\n }\n\n selectedOptions.forEach((option) => {\n const tagFragment = this.tagTemplate!.content.cloneNode(true) as DocumentFragment;\n const tagElement = tagFragment.querySelector('[data-tag-value]') as HTMLElement;\n const tagText = tagFragment.querySelector('[data-dropdown=tag-text]') as HTMLElement;\n\n tagElement.dataset.tagValue = option.value;\n tagText.textContent = option.textContent;\n\n this.tagsContainer?.appendChild(tagFragment);\n });\n }\n\n private swapItemClasses() {\n Array.from((this.select as HTMLSelectElement).options).forEach((option) => {\n const item = this.itemsContainer?.querySelector(`[data-value=\"${CSS.escape(option.value)}\"]`) as HTMLElement;\n if (!item) return;\n\n const checkmark = item.querySelector('[data-dropdown=item-check]') as HTMLElement | null;\n\n if (option.selected) {\n setState(item, 'dropdown', 'show');\n if (checkmark) {\n setState(checkmark, 'dropdown', 'show');\n }\n\n item.setAttribute('aria-selected', 'true');\n this.button?.setAttribute('aria-activedescendant', item.id);\n } else {\n setState(item, 'dropdown', 'hide');\n if (checkmark) {\n setState(checkmark, 'dropdown', 'hide');\n }\n\n item.setAttribute('aria-selected', 'false');\n }\n });\n\n this.updateDisplay();\n }\n\n private preparePanel() {\n this.logger.trace('preparePanel');\n if (!this.select) {\n throw new Error('Select element not found');\n }\n if (this.itemsContainer) {\n this.itemsContainer.innerHTML = '';\n }\n\n Array.from(this.select.children).forEach((child) => {\n if (child.tagName === 'OPTGROUP') {\n const groupedOptions = Array.from(child.children).filter((c) => c.tagName === 'OPTION');\n if (groupedOptions.length > 0) {\n this.appendGroupHeader((child as HTMLOptGroupElement).label);\n groupedOptions.forEach((o) => this.appendOption(o as HTMLOptionElement));\n }\n } else if (child.tagName === 'OPTION') {\n this.appendOption(child as HTMLOptionElement);\n }\n });\n\n this.swapItemClasses();\n }\n\n /**\n * An <option disabled> gives an item that stays visible (the reader knows it exists) but cannot be taken: no\n * click, no focus, and the classes the template declares for that state (data-dropdown-disabled).\n */\n private appendOption(option: HTMLOptionElement) {\n const item = (this.optionTemplate as HTMLTemplateElement).content.cloneNode(true) as DocumentFragment;\n const button = item.querySelector('button') as HTMLButtonElement;\n\n button.role = 'option';\n button.id = `bleet-option-${option.value}-${Math.random().toString(36).substring(2, 9)}`;\n\n const itemText = item.querySelector('[data-dropdown=item-text]') as HTMLElement;\n const itemValue = item.querySelector('[data-value]') as HTMLElement;\n itemValue.dataset.value = option.value;\n itemText.innerHTML = option.innerHTML;\n\n if (option.disabled) {\n button.disabled = true;\n button.setAttribute('aria-disabled', 'true');\n const disabledClasses = (button.getAttribute('data-dropdown-disabled') ?? '').split(' ').filter((c) => c !== '');\n button.classList.add(...disabledClasses);\n }\n\n this.itemsContainer?.append(item);\n }\n\n private appendGroupHeader(label: string) {\n if (!this.groupTemplate) return;\n const fragment = this.groupTemplate.content.cloneNode(true) as DocumentFragment;\n const groupLabel = fragment.querySelector('[data-dropdown=group-label]') as HTMLElement | null;\n if (groupLabel) {\n groupLabel.textContent = label;\n }\n this.itemsContainer?.append(fragment);\n }\n}\n","import {customAttribute, ILogger, INode, resolve} from \"aurelia\";\nimport {setState} from '../utils/state-classes';\n\n/**\n * Password field rendered by the PHP Input widget: [data-password=toggle] switches the input between password and\n * text, and sets the data-password-show / data-password-hide classes of [data-password=icon-hidden] and\n * [data-password=icon-visible].\n */\n@customAttribute('bleet-password')\nexport class BleetPasswordCustomAttribute\n{\n private button?: HTMLElement;\n private iconHidden?: HTMLElement;\n private iconVisible?: HTMLElement;\n private input?: HTMLInputElement;\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-password'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n ) {\n }\n\n public attaching(): void\n {\n this.button = this.element.querySelector('[data-password=toggle]') ?? undefined;\n this.iconHidden = this.button?.querySelector('[data-password=icon-hidden]') ?? undefined;\n this.iconVisible = this.button?.querySelector('[data-password=icon-visible]') ?? undefined;\n this.input = this.element.querySelector('input') ?? undefined;\n }\n\n public attached(): void\n {\n this.button?.addEventListener('click', this.onToggle);\n }\n\n public detaching(): void\n {\n this.button?.removeEventListener('click', this.onToggle);\n }\n\n private onToggle = (event: MouseEvent): void => {\n event.preventDefault();\n\n const isPassword = this.input?.type === 'password';\n\n if (this.input) {\n this.input.type = isPassword ? 'text' : 'password';\n }\n\n if (this.iconHidden) {\n setState(this.iconHidden, 'password', isPassword ? 'hide' : 'show');\n }\n if (this.iconVisible) {\n setState(this.iconVisible, 'password', isPassword ? 'show' : 'hide');\n }\n }\n}","import {customAttribute, ILogger, INode, IPlatform, resolve} from \"aurelia\";\n\n/**\n * Tabs rendered by the PHP Tabs widget: [data-tabs=tab-N] buttons and the [data-tabs=select]\n * mobile select switch the [data-tabs=panel-N] panels (hidden attribute); button classes are\n * copied from the active and inactive buttons of the markup.\n */\n@customAttribute('bleet-tabs')\nexport class BleetTabsCustomAttribute {\n\n private activeClasses: string = '';\n private inactiveClasses: string = '';\n private select?: HTMLSelectElement;\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-tabs'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n const activeButton = this.element.querySelector('[data-tabs^=\"tab-\"][aria-selected=\"true\"]');\n const inactiveButton = this.element.querySelector('[data-tabs^=\"tab-\"][aria-selected=\"false\"]');\n\n this.activeClasses = activeButton?.className || '';\n this.inactiveClasses = inactiveButton?.className || '';\n\n this.select = this.element.querySelector('select') as HTMLSelectElement;\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.element.querySelectorAll('[data-tabs^=\"tab-\"]').forEach((button: Element) => {\n button.addEventListener('click', this.onClickTab);\n });\n\n if (this.select) {\n this.select.addEventListener('change', this.onChangeSelect);\n }\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.element.querySelectorAll('[data-tabs^=\"tab-\"]').forEach((button: Element) => {\n button.removeEventListener('click', this.onClickTab);\n });\n\n if (this.select) {\n this.select.removeEventListener('change', this.onChangeSelect);\n }\n }\n\n private onClickTab = (event: Event) => {\n this.logger.trace('onClickTab', event);\n event.preventDefault();\n const tabIndex = (event.currentTarget as HTMLElement).getAttribute('data-tabs')?.replace('tab-', '') || '0';\n\n this.element.querySelectorAll('[data-tabs^=\"tab-\"]').forEach((button: Element) => {\n const buttonTabIndex = button.getAttribute('data-tabs')?.replace('tab-', '') || '0';\n if (buttonTabIndex === tabIndex) {\n button.setAttribute('aria-selected', 'true');\n button.className = this.activeClasses;\n } else {\n button.setAttribute('aria-selected', 'false');\n button.className = this.inactiveClasses;\n }\n });\n\n this.element.querySelectorAll('[data-tabs^=\"panel-\"]').forEach((panel: Element) => {\n const panelIndex = panel.getAttribute('data-tabs')?.replace('panel-', '') || '0';\n if (panelIndex === tabIndex) {\n (panel as HTMLElement).hidden = false;\n panel.setAttribute('aria-hidden', 'false');\n } else {\n (panel as HTMLElement).hidden = true;\n panel.setAttribute('aria-hidden', 'true');\n }\n });\n\n if (this.select && this.select.value !== tabIndex) {\n this.select.value = tabIndex;\n this.select.dispatchEvent(new Event('change', { bubbles: true }));\n }\n }\n\n private onChangeSelect = (event: Event) => {\n this.logger.trace('onChangeSelect', event);\n const tabIndex = this.select?.value;\n const button = this.element.querySelector(`[data-tabs=\"tab-${tabIndex}\"]`) as HTMLElement;\n\n if (button) {\n button.click();\n }\n }\n}","import {bindable, customAttribute, IDisposable, IEventAggregator, ILogger, INode, IPlatform, resolve} from \"aurelia\";\nimport {Channels, ProfileAction, ProfileStatus} from '../enums/event-aggregator';\nimport {IProfile, IProfileStatus} from '../interfaces/event-aggregator';\nimport {ITransitionService} from '../services/transition-service';\nimport {ITrapFocusService} from '../services/trap-focus-service';\nimport {setState} from '../utils/state-classes';\n\n/**\n * Profile menu rendered by the PHP Profile widget: [data-profile=toggle] opens the\n * [data-profile=panel] (hidden attribute, then data-profile-show / data-profile-hide classes\n * of the panel) and traps the focus while it is open.\n */\n@customAttribute({ name: 'bleet-profile', defaultProperty: 'id' })\nexport class BleetProfileCustomAttribute\n{\n\n @bindable id: string = '';\n private disposable?: IDisposable;\n private toggleButton?: HTMLButtonElement;\n private panel?: HTMLDivElement;\n private isOpen: boolean = false;\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-profile'),\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly transitionService: ITransitionService = resolve(ITransitionService),\n private readonly p: IPlatform = resolve(IPlatform),\n private readonly trapFocusService: ITrapFocusService = resolve(ITrapFocusService),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n this.toggleButton = this.element.querySelector('[data-profile=toggle]') as HTMLButtonElement;\n this.panel = this.element.querySelector('[data-profile=panel]') as HTMLDivElement;\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.disposable = this.ea.subscribe(Channels.Profile, this.onProfileEvent);\n this.toggleButton?.addEventListener('click', this.onClickToggle);\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.toggleButton?.removeEventListener('click', this.onClickToggle);\n if (this.isOpen) {\n this.trapFocusService.stop();\n }\n this.disposable?.dispose();\n }\n public dispose() {\n this.logger.trace('dispose');\n this.disposable?.dispose();\n }\n\n private onClickToggle = (event: MouseEvent) => {\n this.logger.trace('onClickToggle', event);\n event.preventDefault();\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n private onStopTrapFocus = () => {\n this.logger.trace('onStopTrapFocus');\n this.isOpen = false;\n this.toggleButton?.setAttribute('aria-expanded', 'false');\n this.transitionService.run(this.panel!, (element) => {\n this.ea.publish(Channels.Profile, <IProfile>{action: ProfileAction.Close, id: this.id});\n this.ea.publish(Channels.ProfileStatus, <IProfileStatus>{status: ProfileStatus.Closing, id: this.id});\n this.p.requestAnimationFrame(() => {\n setState(element, 'profile', 'hide');\n });\n }, (element) => {\n element.hidden = true;\n this.ea.publish(Channels.ProfileStatus, <IProfileStatus>{status: ProfileStatus.Closed, id: this.id});\n });\n return Promise.resolve();\n }\n\n private open() {\n this.logger.trace('open');\n this.isOpen = true;\n this.toggleButton?.setAttribute('aria-expanded', 'true');\n\n const firstItem = this.panel?.querySelector('a, button') as HTMLElement;\n\n return this.trapFocusService.start(\n this.toggleButton as HTMLButtonElement,\n this.panel as HTMLElement,\n this.element,\n undefined,\n this.onStopTrapFocus,\n firstItem\n ).then(() => {\n this.panel!.hidden = false;\n this.transitionService.run(this.panel!, (element) => {\n this.ea.publish(Channels.Profile, <IProfile>{action: ProfileAction.Open, id: this.id});\n this.ea.publish(Channels.ProfileStatus, <IProfileStatus>{status: ProfileStatus.Opening, id: this.id});\n this.p.requestAnimationFrame(() => {\n setState(element, 'profile', 'show');\n });\n }, () => {\n this.ea.publish(Channels.ProfileStatus, <IProfileStatus>{status: ProfileStatus.Opened, id: this.id});\n });\n });\n }\n\n private close() {\n this.logger.trace('close');\n this.trapFocusService.stop();\n }\n\n private onProfileEvent = (data: IProfile) => {\n this.logger.trace('onProfileEvent', data);\n const isTargeted = (data.id === undefined || data.id === this.id);\n if (data.action === ProfileAction.Close && isTargeted && this.isOpen) {\n this.logger.trace('Profile Close action received');\n this.close();\n }\n }\n\n}\n","import {bindable, customAttribute, IEventAggregator, ILogger, INode, resolve} from \"aurelia\";\nimport {Channels, ToasterAction, UiColor, UiToastIcon} from '../enums/event-aggregator';\nimport {IToaster} from '../interfaces/event-aggregator';\n\n/**\n * Click on the element: publishes one toast (id, color, icon, title, content, duration) on Channels.Toaster.\n */\n@customAttribute({ name: 'bleet-toaster-trigger', defaultProperty: 'id' })\nexport class BleetToasterTriggerCustomAttribute {\n\n @bindable id: string = '';\n @bindable() public color: UiColor = UiColor.Info;\n @bindable() public icon: UiToastIcon = UiToastIcon.Info;\n @bindable() public title: string = '';\n @bindable() public content: string = '';\n @bindable() public duration: number = 0; // Duration in milliseconds\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-toaster-trigger'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.element.addEventListener('click', this.onClick);\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.element.removeEventListener('click', this.onClick);\n }\n\n private onClick = (event: Event) => {\n this.logger.trace('onClick', event);\n event.preventDefault();\n this.ea.publish(Channels.Toaster, <IToaster>{\n action: ToasterAction.Add, toast:\n {\n id: this.id,\n duration: this.duration,\n color: this.color,\n icon: this.icon,\n title: this.title,\n content: this.content\n }\n });\n }\n}","import {customAttribute, ILogger, INode, IPlatform, resolve} from \"aurelia\";\nimport {ITransitionService} from '../services/transition-service';\nimport {setState} from '../utils/state-classes';\n\n/**\n * Dismissible alert rendered by the PHP Alert widget: [data-alert=close] collapses it\n * (data-alert-hide classes, height to 0) then removes it.\n */\n@customAttribute('bleet-alert')\nexport class BleetAlertCustomAttribute {\n\n private closeButton?: HTMLButtonElement;\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-alert'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly p: IPlatform = resolve(IPlatform),\n private readonly transitionService: ITransitionService = resolve(ITransitionService),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n this.closeButton = this.element.querySelector('[data-alert=close]') as HTMLButtonElement;\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.closeButton?.addEventListener('click', this.onClose);\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.closeButton?.removeEventListener('click', this.onClose);\n }\n private onClose = (event: Event) => {\n this.logger.trace('onClose', event);\n event.preventDefault();\n this.transitionService.run(this.element, (element: HTMLElement) => {\n const currentHeight = element.scrollHeight;\n element.style.height = currentHeight + 'px';\n element.offsetHeight;\n element.style.height = '0px';\n setState(element, 'alert', 'hide');\n }, (element: HTMLElement) => {\n\n element.hidden = true;\n this.p.requestAnimationFrame(() => {\n element.style.height = '';\n element.remove();\n });\n });\n }\n}","import {bindable, customAttribute, IEventAggregator, ILogger, INode, resolve} from \"aurelia\";\nimport {Channels, ModalAction} from '../enums/event-aggregator';\nimport {IModal} from '../interfaces/event-aggregator';\n\n/**\n * Click on the element: publishes ModalAction.Toggle on Channels.Modal with the id and url of the dialog to open\n * (rendered by Bleet::modal($id)->trigger($url) / Bleet::drawer($id)->trigger($url)).\n */\n@customAttribute({ name: 'bleet-modal-trigger', defaultProperty: 'id' })\nexport class BleetModalTriggerCustomAttribute {\n\n @bindable id: string = '';\n @bindable() url: string = '';\n @bindable() color: string = 'primary';\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-modal-trigger'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.element.addEventListener('click', this.onClick);\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.element.removeEventListener('click', this.onClick);\n }\n public dispose()\n {\n this.logger.trace('dispose');\n }\n\n private onClick = (event: Event): void => {\n this.logger.trace('onClick', event);\n event.preventDefault();\n\n this.ea.publish(Channels.Modal, <IModal>{\n action: ModalAction.Toggle,\n id: this.id,\n url: this.url,\n color: this.color,\n });\n };\n\n}\n","import {customAttribute, ILogger, INode, IPlatform, resolve} from \"aurelia\";\n\n/**\n * Pager rendered by the PHP Pager widget: changing [data-pager=select] clicks the [data-pager=page-N] link of the\n * chosen page.\n */\n@customAttribute('bleet-pager')\nexport class BleetPagerCustomAttribute {\n\n private select?: HTMLSelectElement;\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-pager'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n this.select = this.element.querySelector('[data-pager=\"select\"]') as HTMLSelectElement;\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.select?.addEventListener('change', this.onChangeSelect);\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.select?.removeEventListener('change', this.onChangeSelect);\n }\n\n private onChangeSelect = (event: Event) => {\n this.logger.trace('onChangeSelect', event);\n const pageNumber = this.select?.value;\n const link = this.element.querySelector(`[data-pager=\"page-${pageNumber}\"]`) as HTMLElement;\n\n if (link) {\n link.click();\n }\n }\n}","import {bindable, customAttribute, IEventAggregator, ILogger, INode, IPlatform, resolve} from \"aurelia\";\nimport {AjaxifyAction, AjaxifyTriggerMode, Channels, ToasterAction, UiColor} from '../enums/event-aggregator';\nimport {IAjaxify, IAjaxifyResponse, IToast, IToaster} from '../interfaces/event-aggregator';\nimport {IApiService} from '@blackcube/aurelia-api';\n\n/**\n * Generic AJAX trigger attribute for elements.\n * Placed on the element that triggers the AJAX call.\n * Looks up parent form with closest() to get URL/verb if not specified.\n * Sends only the inputs contained within this.element.\n * Pessimistic UI: state changes only on server response.\n *\n * Bindables:\n * - url (primary): URL to call. Falls back to closest form.action.\n * - verb: HTTP method. Falls back to closest form.method or 'POST'.\n * - event: DOM event to listen for (default: 'click')\n * - id: If set, also collects inputs with data-ajaxify=\"{id}\" from closest form\n * - mode: AjaxifyTriggerMode.Classic (default) or AjaxifyTriggerMode.PublishOnly\n * - target: bleet-ajaxify id to publish the event to (publishOnly mode)\n * - method: HTTP method for the ajaxify event (publishOnly mode, default: 'POST')\n * - errorTitle / errorContent: texts of the danger toast when the request fails, given by the application\n * (Bleet::ajaxify()->errorTitle()->errorContent()); without content, the error is only logged\n */\n@customAttribute({ name: 'bleet-ajaxify-trigger', defaultProperty: 'url' })\nexport class BleetAjaxifyTriggerCustomAttribute {\n\n @bindable url: string = '';\n @bindable() verb: string = '';\n @bindable() event: string = 'click';\n @bindable() id: string = '';\n @bindable() mode: string = AjaxifyTriggerMode.Classic;\n @bindable() target: string = '';\n @bindable() method: string = 'POST';\n @bindable() errorTitle: string = '';\n @bindable() errorContent: string = '';\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-ajaxify-trigger'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly apiService: IApiService = resolve(IApiService),\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor');\n }\n\n public attached(): void {\n this.logger.trace('attached', { url: this.url, verb: this.verb, event: this.event, mode: this.mode });\n this.element.addEventListener(this.event, this.onTrigger);\n }\n\n public detaching(): void {\n this.logger.trace('detaching');\n this.element.removeEventListener(this.event, this.onTrigger);\n }\n\n private onTrigger = (event: Event): void => {\n event.preventDefault();\n event.stopPropagation();\n this.logger.trace('onTrigger', event);\n\n if (this.mode === AjaxifyTriggerMode.PublishOnly) {\n this.onTriggerPublishOnly();\n return;\n }\n\n this.onTriggerClassic(event);\n };\n\n /**\n * PublishOnly mode: enable disabled child inputs, publish ajaxify event.\n * No server call — bleet-ajaxify will collect the form and handle the request.\n *\n * Linked elements (data-ajaxify=\"{id}\") can specify data-ajaxify-target\n * to copy their value into a matching hidden input inside this.element.\n */\n private onTriggerPublishOnly(): void {\n this.logger.debug('onTriggerPublishOnly', { target: this.target, method: this.method });\n\n if (this.id) {\n const form = this.element.closest('form');\n if (form) {\n const linkedElements = form.querySelectorAll(`[data-ajaxify=\"${this.id}\"]`);\n for (const linked of Array.from(linkedElements)) {\n if (linked instanceof HTMLSelectElement || linked instanceof HTMLInputElement || linked instanceof HTMLTextAreaElement) {\n const targetName = linked.dataset.ajaxifyTarget;\n if (targetName) {\n const hidden = this.element.querySelector(`input[name=\"${targetName}\"]`) as HTMLInputElement;\n if (hidden) {\n hidden.value = linked.value;\n }\n }\n }\n }\n }\n }\n\n const disabledInputs = this.element.querySelectorAll('input:disabled, select:disabled, textarea:disabled');\n for (const input of Array.from(disabledInputs)) {\n (input as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement).disabled = false;\n }\n\n this.ea.publish(Channels.Ajaxify, <IAjaxify>{\n action: AjaxifyAction.Run,\n id: this.target,\n url: this.url || undefined,\n method: this.method,\n });\n }\n\n /**\n * Classic mode: POST to server, process response (existing behavior).\n */\n private onTriggerClassic(event: Event): void {\n const form = this.element.closest('form');\n const url = this.resolveUrl(form);\n const verb = this.resolveVerb(form);\n\n if (!url) {\n this.logger.warn('No URL found for ajaxify-trigger');\n return;\n }\n\n this.logger.debug('onTriggerClassic', { url, verb });\n\n const formData = this.buildFormData(event);\n\n this.apiService\n .url(url)\n .fromMultipart(formData)\n .request<IAjaxifyResponse>(verb)\n .then((response) => {\n this.logger.debug('response', response.body);\n\n if (response.body.element) {\n this.updateElement(response.body.element);\n }\n\n if (response.body.toast) {\n this.ea.publish(Channels.Toaster, <IToaster>{\n action: ToasterAction.Add,\n toast: response.body.toast\n });\n }\n\n if (response.body.ajaxify) {\n this.ea.publish(Channels.Ajaxify, response.body.ajaxify);\n }\n })\n .catch((error) => {\n this.logger.error('AJAX request failed', error);\n\n if (this.errorContent !== '') {\n this.ea.publish(Channels.Toaster, <IToaster>{\n action: ToasterAction.Add,\n toast: {\n color: UiColor.Danger,\n title: this.errorTitle,\n content: this.errorContent,\n duration: 5000,\n } as IToast\n });\n }\n });\n }\n\n private buildFormData(event: Event): FormData {\n const formData = new FormData();\n\n const inputs = this.element.querySelectorAll('input, select, textarea');\n this.appendInputsToFormData(formData, inputs);\n\n if (event instanceof SubmitEvent && event.submitter) {\n const submitter = event.submitter as HTMLButtonElement | HTMLInputElement;\n if (submitter.name) {\n formData.append(submitter.name, submitter.value || '');\n }\n }\n\n const form = this.element.closest('form');\n if (form) {\n const csrfInput = form.querySelector('input[name=\"_csrf\"]') as HTMLInputElement | null;\n if (csrfInput) {\n formData.append('_csrf', csrfInput.value);\n }\n\n if (this.id) {\n const ajaxifyInputs = form.querySelectorAll(`[data-ajaxify=\"${this.id}\"]`);\n this.appendInputsToFormData(formData, ajaxifyInputs);\n }\n }\n\n return formData;\n }\n\n private appendInputsToFormData(formData: FormData, inputs: NodeListOf<Element>): void {\n for (const input of Array.from(inputs)) {\n if (input instanceof HTMLInputElement) {\n if (input.type === 'checkbox' || input.type === 'radio') {\n if (input.checked && input.name) {\n formData.append(input.name, input.value || 'on');\n }\n } else if (input.name) {\n formData.append(input.name, input.value);\n }\n } else if (input instanceof HTMLSelectElement && input.name) {\n formData.append(input.name, input.value);\n } else if (input instanceof HTMLTextAreaElement && input.name) {\n formData.append(input.name, input.value);\n }\n }\n }\n\n private resolveUrl(form: HTMLFormElement | null): string {\n if (this.url) {\n return this.url;\n }\n if (form) {\n return form.action || '';\n }\n return '';\n }\n\n private resolveVerb(form: HTMLFormElement | null): string {\n if (this.verb) {\n return this.verb;\n }\n if (form) {\n return form.method || 'POST';\n }\n return 'POST';\n }\n\n private updateElement(html: string): void {\n const template = this.p.document.createElement('template');\n template.innerHTML = html.trim();\n const newElement = template.content.firstElementChild;\n\n if (newElement) {\n this.syncElement(this.element, newElement);\n }\n }\n\n private syncElement(current: Element, incoming: Element): void {\n for (const attr of Array.from(incoming.attributes)) {\n current.setAttribute(attr.name, attr.value);\n }\n\n for (const attr of Array.from(current.attributes)) {\n if (!incoming.hasAttribute(attr.name)) {\n current.removeAttribute(attr.name);\n }\n }\n\n if (current instanceof HTMLInputElement && incoming instanceof HTMLInputElement) {\n if (current.type === 'checkbox' || current.type === 'radio') {\n current.checked = incoming.checked;\n } else {\n current.value = incoming.value;\n }\n }\n\n const currentChildren = Array.from(current.children);\n const incomingChildren = Array.from(incoming.children);\n\n for (let i = 0; i < incomingChildren.length; i++) {\n if (i < currentChildren.length) {\n this.syncElement(currentChildren[i], incomingChildren[i]);\n }\n }\n }\n}\n","import {bindable, customAttribute, IDisposable, IEventAggregator, ILogger, INode, IPlatform, resolve} from 'aurelia';\nimport {Channels, PopoverAction, PopoverStatus} from '../enums/event-aggregator';\nimport {IPopover, IPopoverStatus} from '../interfaces/event-aggregator';\nimport {setState} from '../utils/state-classes';\n\n/**\n * Popover positioned next to the rectangle given by its trigger; shown and hidden with\n * data-popover-show / data-popover-hide of its markup.\n */\n@customAttribute({name: 'bleet-popover', defaultProperty: 'id'})\nexport class BleetPopoverCustomAttribute {\n @bindable id: string = '';\n\n private isOpen: boolean = false;\n private subscription: IDisposable | null = null;\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-popover'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor');\n }\n\n public attaching(): void {\n this.logger.trace('attaching');\n this.subscription = this.ea.subscribe(Channels.Popover, this.onPopover);\n }\n\n public attached(): void {\n this.logger.trace('attached');\n }\n\n public detaching(): void {\n this.logger.trace('detaching');\n this.subscription?.dispose();\n }\n\n public dispose() {\n this.logger.trace('dispose');\n this.subscription?.dispose();\n }\n\n private onPopover = (payload: IPopover) => {\n if (payload.id !== this.id) return;\n\n switch (payload.action) {\n case PopoverAction.Open:\n this.open(payload.rect);\n break;\n case PopoverAction.Close:\n this.close();\n break;\n case PopoverAction.Toggle:\n if (this.isOpen) {\n this.close();\n } else {\n this.open(payload.rect);\n }\n break;\n }\n };\n\n private open(rect?: DOMRect) {\n this.isOpen = true;\n setState(this.element, 'popover', 'show');\n if (rect) {\n this.positionAt(rect);\n }\n this.ea.publish(Channels.PopoverStatus, <IPopoverStatus>{\n status: PopoverStatus.Opened,\n id: this.id,\n });\n }\n\n private close() {\n this.isOpen = false;\n setState(this.element, 'popover', 'hide');\n this.ea.publish(Channels.PopoverStatus, <IPopoverStatus>{\n status: PopoverStatus.Closed,\n id: this.id,\n });\n }\n\n private positionAt(rect: DOMRect) {\n this.element.style.visibility = 'hidden';\n this.element.style.display = 'block';\n\n const popoverRect = this.element.getBoundingClientRect();\n\n let top = rect.top - popoverRect.height - 10;\n let left = rect.left + (rect.width / 2) - (popoverRect.width / 2);\n\n if (top < 4) top = rect.bottom + 10;\n\n if (left < 4) left = 4;\n if (left + popoverRect.width > this.p.window.innerWidth - 4) {\n left = this.p.window.innerWidth - popoverRect.width - 4;\n }\n\n this.element.style.top = `${top}px`;\n this.element.style.left = `${left}px`;\n this.element.style.visibility = '';\n this.element.style.display = '';\n }\n}\n","import {bindable, customAttribute, IEventAggregator, ILogger, INode, resolve} from 'aurelia';\nimport {Channels, PopoverAction} from '../enums/event-aggregator';\nimport {IPopover} from '../interfaces/event-aggregator';\n\n@customAttribute({name: 'bleet-popover-trigger', defaultProperty: 'id'})\nexport class BleetPopoverTriggerCustomAttribute {\n @bindable id: string = '';\n @bindable() absolute: boolean = true;\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-popover-trigger'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n ) {\n this.logger.trace('constructor');\n }\n\n public attached() {\n this.logger.trace('attached');\n this.element.addEventListener('mouseenter', this.onMouseEnter);\n this.element.addEventListener('mouseleave', this.onMouseLeave);\n }\n\n public detaching() {\n this.logger.trace('detaching');\n this.element.removeEventListener('mouseenter', this.onMouseEnter);\n this.element.removeEventListener('mouseleave', this.onMouseLeave);\n }\n\n public dispose() {\n this.logger.trace('dispose');\n }\n\n private onMouseEnter = () => {\n this.ea.publish(Channels.Popover, <IPopover>{\n id: this.id,\n action: PopoverAction.Open,\n rect: this.absolute ? this.element.getBoundingClientRect() : undefined,\n });\n };\n\n private onMouseLeave = () => {\n this.ea.publish(Channels.Popover, <IPopover>{\n id: this.id,\n action: PopoverAction.Close,\n });\n };\n}\n","import {customAttribute, IDisposable, IEventAggregator, ILogger, INode, IPlatform, resolve} from \"aurelia\";\nimport {Channels, ToasterAction, UiColor, UiToastIcon} from '../enums/event-aggregator';\nimport {IToast, IToaster} from '../interfaces/event-aggregator';\nimport {ITransitionService} from '../services/transition-service';\nimport {setState} from '../utils/state-classes';\n\ninterface IToastEntry {\n element: HTMLElement;\n closing: boolean;\n closeTimeout?: number;\n}\n\n/**\n * Toast container: clones the toast template of the requested color\n * (template[data-toaster=color]) and the icon template of the requested icon\n * (template[data-toaster=icon-name]), both rendered by the PHP Toaster widget.\n * When the container is a manual popover (popover=\"manual\"), it is shown again on each toast so that it passes over\n * a dialog opened by showModal() (top layer), and hidden once the last toast is gone.\n */\n@customAttribute('bleet-toaster')\nexport class BleetToasterCustomAttribute {\n\n private disposable?: IDisposable;\n private toasts: Map<string, IToastEntry> = new Map<string, IToastEntry>();\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-toaster'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly p: IPlatform = resolve(IPlatform),\n private readonly transitionService: ITransitionService = resolve(ITransitionService),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n this.disposable = this.ea.subscribe(Channels.Toaster, this.onToasterEvent);\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.disposable?.dispose();\n this.toasts.forEach((entry) => {\n if (entry.closeTimeout !== undefined) {\n this.p.clearTimeout(entry.closeTimeout);\n }\n });\n }\n\n private onToasterEvent = (data: IToaster) => {\n this.logger.trace('onToasterEvent', data);\n if (data.action === ToasterAction.Add && data.toast) {\n const toast: IToast = {\n id: data.toast.id || `toast-${Math.random().toString(36).substring(2, 15)}`,\n color: data.toast.color || UiColor.Info,\n icon: data.toast.icon || UiToastIcon.Info,\n duration: data.toast.duration || 0,\n title: data.toast.title,\n content: data.toast.content,\n };\n if (!this.toasts.has(toast.id)) {\n this.add(toast);\n }\n } else if (data.action === ToasterAction.Remove && data.toast?.id) {\n this.close(data.toast.id);\n }\n }\n\n private add(toast: IToast)\n {\n const template = this.element.querySelector(`template[data-toaster=\"${toast.color}\"]`) as HTMLTemplateElement | null;\n if (template === null) {\n this.logger.warn(`No toast template for color ${toast.color}`);\n } else {\n const fragment = template.content.cloneNode(true) as DocumentFragment;\n const toastElement = fragment.firstElementChild as HTMLElement;\n\n const iconTemplate = this.element.querySelector(`template[data-toaster=\"icon-${toast.icon}\"]`) as HTMLTemplateElement | null;\n const iconSlot = toastElement.querySelector('[data-toaster=\"icon\"]');\n if (iconTemplate !== null && iconSlot !== null) {\n iconSlot.appendChild(iconTemplate.content.cloneNode(true));\n }\n\n const titleElement = toastElement.querySelector('[data-toaster=\"title\"]');\n if (toast.title) {\n titleElement?.replaceChildren(toast.title);\n } else {\n titleElement?.remove();\n }\n\n const contentElement = toastElement.querySelector('[data-toaster=\"content\"]');\n if (contentElement !== null) {\n contentElement.innerHTML = toast.content || '';\n }\n\n toastElement.querySelector('[data-toaster=\"close\"]')?.addEventListener('click', (event: Event) => {\n event.preventDefault();\n this.close(toast.id);\n });\n\n const entry: IToastEntry = { element: toastElement, closing: false };\n this.toasts.set(toast.id, entry);\n this.element.appendChild(toastElement);\n this.raise();\n this.logger.debug(`Toast added with ID: ${toast.id}`);\n\n this.transitionService.run(toastElement, (element: HTMLElement) => {\n if (toast.duration > 0) {\n entry.closeTimeout = this.p.setTimeout(() => {\n this.close(toast.id);\n }, toast.duration);\n }\n setState(element, 'toaster', 'show');\n });\n }\n }\n\n private close(id: string)\n {\n const entry = this.toasts.get(id);\n if (entry !== undefined && entry.closing === false) {\n entry.closing = true;\n if (entry.closeTimeout !== undefined) {\n this.p.clearTimeout(entry.closeTimeout);\n }\n this.transitionService.run(entry.element, (element: HTMLElement) => {\n setState(element, 'toaster', 'hide');\n }, (element: HTMLElement) => {\n element.remove();\n this.toasts.delete(id);\n if (this.toasts.size === 0) {\n this.lower();\n }\n this.logger.debug(`Toast removed with ID: ${id}`);\n });\n }\n }\n\n /**\n * Popover container: shown again when it already was, so that it passes over what opened since.\n */\n private raise(): void\n {\n if (this.element.hasAttribute('popover') === true) {\n if (this.element.matches(':popover-open') === true) {\n this.element.hidePopover();\n }\n this.element.showPopover();\n }\n }\n\n private lower(): void\n {\n if (this.element.hasAttribute('popover') === true && this.element.matches(':popover-open') === true) {\n this.element.hidePopover();\n }\n }\n}\n","import {bindable, customAttribute, IEventAggregator, ILogger, IPlatform, queueTask, resolve} from \"aurelia\";\nimport {Channels, ToasterAction, UiColor, UiToastIcon} from '../enums/event-aggregator';\nimport {IToaster} from '../interfaces/event-aggregator';\n\n/**\n * Publishes a toast on page load (rendered by the PHP Toast widget as a hidden element).\n */\n@customAttribute({ name: 'bleet-toast', defaultProperty: 'id' })\nexport class BleetToastCustomAttribute {\n\n @bindable id: string = '';\n @bindable() public color: UiColor = UiColor.Info;\n @bindable() public icon: UiToastIcon = UiToastIcon.Info;\n @bindable() public title: string = '';\n @bindable() public content: string = '';\n @bindable() public duration: number = 0; // Duration in milliseconds\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-toast'),\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor')\n }\n\n public attached()\n {\n this.logger.trace('attached');\n if (this.p.document.readyState === 'loading') {\n this.p.document.addEventListener('DOMContentLoaded', () => {\n this.publish();\n }, { once: true });\n } else {\n this.publish();\n }\n }\n\n private publish = () => {\n this.logger.trace('publish');\n queueTask(() => {\n this.ea.publish(Channels.Toaster, <IToaster>{\n action: ToasterAction.Add, toast:\n {\n id: this.id,\n duration: this.duration,\n color: this.color,\n icon: this.icon,\n title: this.title,\n content: this.content\n }\n });\n });\n }\n}\n","import {customAttribute, IDisposable, IEventAggregator, ILogger, INode, IPlatform, resolve} from \"aurelia\";\nimport {Channels, OverlayAction, OverlayStatus} from '../enums/event-aggregator';\nimport {IOverlay, IOverlayStatus} from '../interfaces/event-aggregator';\nimport {ITransitionService} from '../services/transition-service';\nimport {setState} from '../utils/state-classes';\n\n/**\n * Backdrop of modals and drawers, rendered hidden by the PHP Bleet::overlay() helper.\n * Shown and hidden through the hidden attribute and data-overlay-show / data-overlay-hide.\n */\n@customAttribute('bleet-overlay')\nexport class BleetOverlayCustomAttribute {\n\n private disposable?: IDisposable;\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-overlay'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly p: IPlatform = resolve(IPlatform),\n private readonly transitionService: ITransitionService = resolve(ITransitionService),\n ) {\n this.logger.trace('constructor')\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.disposable = this.ea.subscribe(Channels.Overlay, this.onOverlayEvent);\n this.element.addEventListener('click', this.onClickOverlay);\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.element.removeEventListener('click', this.onClickOverlay);\n this.disposable?.dispose();\n }\n\n private toggle(fromOverlay: boolean = false) {\n if (this.element.hidden) {\n this.open(fromOverlay);\n } else {\n this.close(fromOverlay);\n }\n }\n private open(fromOverlay: boolean = false) {\n if (this.element.hidden) {\n this.logger.trace('open');\n this.transitionService.run(this.element, (element: HTMLElement) => {\n if (fromOverlay) {\n this.ea.publish(Channels.Overlay, <IOverlay>{action: OverlayAction.Open});\n }\n this.ea.publish(Channels.OverlayStatus, <IOverlayStatus>{status: OverlayStatus.Opening});\n element.hidden = false;\n this.p.requestAnimationFrame(() => {\n setState(element, 'overlay', 'show');\n });\n this.logger.trace('open before()');\n }, (element: HTMLElement) => {\n this.ea.publish(Channels.OverlayStatus, <IOverlayStatus>{status: OverlayStatus.Opened});\n this.logger.trace('open after()');\n });\n }\n }\n private close(fromOverlay: boolean = false) {\n if (!this.element.hidden) {\n this.transitionService.run(this.element, (element: HTMLElement) => {\n if (fromOverlay) {\n this.ea.publish(Channels.Overlay, <IOverlay>{action: OverlayAction.Close});\n }\n this.ea.publish(Channels.OverlayStatus, <IOverlayStatus>{status: OverlayStatus.Closing});\n setState(element, 'overlay', 'hide');\n this.logger.trace('close before()');\n }, (element: HTMLElement) => {\n element.hidden = true;\n this.logger.trace('close after()');\n this.ea.publish(Channels.OverlayStatus, <IOverlayStatus>{status: OverlayStatus.Closed});\n });\n }\n }\n private onOverlayEvent = (data: IOverlay) => {\n if (data.action === OverlayAction.Open) {\n this.logger.trace('onOverlayEvent', data);\n this.open();\n } else if (data.action === OverlayAction.Close) {\n this.logger.trace('onOverlayEvent', data);\n this.close();\n } else if (data.action === OverlayAction.Toggle) {\n this.logger.trace('onOverlayEvent', data);\n this.toggle();\n } else {\n this.logger.trace('onOverlayEvent unhandled', data);\n }\n }\n private onClickOverlay = (event: MouseEvent) => {\n this.logger.trace('onClickOverlay', event);\n event.preventDefault();\n this.close(true);\n }\n\n}\n","import { CustomElement } from '@aurelia/runtime-html';\nexport const name = \"bleet-ajaxify\";\nexport const template = \"<template>\\n <au-slot if.bind=\\\"!ajaxedView\\\"></au-slot>\\n <au-compose if.bind=\\\"ajaxedView\\\" template.bind=\\\"ajaxedView\\\"></au-compose>\\n</template>\\n\";\nexport default template;\nexport const dependencies = [ ];\nexport const bindables = {};\nlet _e;\nexport function register(container) {\n if (!_e) {\n _e = CustomElement.define({ name, template, dependencies, bindables });\n }\n container.register(_e);\n}\n","import {customElement, bindable, IEventAggregator, resolve, ILogger, IDisposable, INode} from 'aurelia';\nimport {IApiService} from '@blackcube/aurelia-api';\nimport {IAjaxify} from '../interfaces/event-aggregator';\nimport {AjaxifyAction, Channels} from '../enums/event-aggregator';\nimport {AjaxifyCodec} from '@blackcube/aurelia-api';\n\n@customElement('bleet-ajaxify')\nexport class BleetAjaxify {\n @bindable() id: string = '';\n @bindable() url?: string;\n\n private ajaxedView: string | null = null;\n private disposable?: IDisposable;\n\n public constructor(\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly logger: ILogger = resolve(ILogger).scopeTo('<bleet-ajaxify>'),\n private readonly apiService: IApiService = resolve(IApiService),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n ) {\n this.logger.trace('constructor');\n }\n\n public attaching() {\n this.logger.trace('attaching')\n this.disposable = this.ea.subscribe(Channels.Ajaxify, this.onEvent);\n }\n\n public detaching() {\n this.logger.trace('detaching');\n this.disposable?.dispose();\n }\n\n public dispose() {\n this.logger.trace('dispose');\n this.disposable?.dispose();\n }\n\n private findForm(): HTMLFormElement | null {\n return this.element.querySelector('form') ?? this.element.closest('form');\n }\n\n private onEvent = (data: IAjaxify) => {\n this.logger.trace('onEvent', data);\n if (!(data.id && data.id == this.id)) {\n return;\n }\n\n if (data.action === AjaxifyAction.Refresh) {\n this.handleRefresh(data);\n } else if (data.action === AjaxifyAction.Run) {\n this.handleRun(data);\n }\n }\n\n /**\n * Refresh: GET to fetch fresh content (existing behavior).\n */\n private handleRefresh(data: IAjaxify): void {\n const url = data.url ? data.url : this.url;\n if (!url || url.length <= 1) {\n return;\n }\n\n this.logger.debug(`Refresh id=${this.id} from url=${url}`);\n\n this.apiService\n .url(url)\n .withInputCodec(AjaxifyCodec.codec)\n .toText()\n .get<string>()\n .then((response) => {\n this.logger.debug(`Received for id=${this.id}`);\n this.ajaxedView = response.body;\n })\n .catch((error) => {\n this.logger.error(`Error for id=${this.id}: `, error);\n });\n }\n\n /**\n * Run: collect form data (or use provided body) and send with the specified method.\n * URL fallback: event url -> component url -> closest form action.\n */\n private handleRun(data: IAjaxify): void {\n let url = data.url || this.url;\n if (!url || url.length <= 1) {\n const form = this.findForm();\n if (form) {\n url = form.action;\n }\n }\n if (!url || url.length <= 1) {\n this.logger.warn(`No URL found for Run id=${this.id}`);\n return;\n }\n\n const method = (data.method || 'POST').toUpperCase();\n this.logger.debug(`Run id=${this.id} method=${method} url=${url}`);\n\n let builder = this.apiService\n .url(url)\n .withInputCodec(AjaxifyCodec.codec)\n .toText();\n\n if (data.body !== undefined) {\n if (data.body instanceof FormData) {\n builder = builder.fromMultipart(data.body);\n } else {\n builder = builder.fromJson(data.body);\n }\n } else {\n const form = this.findForm();\n if (form) {\n builder = builder.fromMultipart(new FormData(form));\n }\n }\n\n builder\n .request<string>(method)\n .then((response) => {\n this.logger.debug(`Received for id=${this.id}`);\n this.ajaxedView = response.body;\n })\n .catch((error) => {\n this.logger.error(`Error for id=${this.id}: `, error);\n });\n }\n}\n","import { CustomElement } from '@aurelia/runtime-html';\nexport const name = \"bleet-dialog\";\nexport const template = \"<template>\\n <dialog ref=\\\"dialogElement\\\" class.bind=\\\"dialogClass\\\">\\n <au-slot name=\\\"loader\\\" if.bind=\\\"loading\\\"><progress></progress></au-slot>\\n <template else>\\n <au-compose if.bind=\\\"contentView\\\" template.bind=\\\"contentView\\\"></au-compose>\\n </template>\\n </dialog>\\n</template>\\n\";\nexport default template;\nexport const dependencies = [ ];\nexport const bindables = {};\nlet _e;\nexport function register(container) {\n if (!_e) {\n _e = CustomElement.define({ name, template, dependencies, bindables });\n }\n container.register(_e);\n}\n","import { bindable, customElement, IDisposable, IEventAggregator, ILogger, INode, IPlatform, resolve } from 'aurelia';\nimport { Channels, DialogAction, ModalAction, ModalStatus, OverlayAction, ToasterAction, UiColor } from '../enums/event-aggregator';\nimport { IModal, IModalStatus, IOverlay, IToast, IToaster } from '../interfaces/event-aggregator';\nimport { IDialogResponse } from '../interfaces/dialog';\nimport { ITransitionService } from '../services/transition-service';\nimport { IApiService } from '@blackcube/aurelia-api';\nimport { setState } from '../utils/state-classes';\n\n/**\n * Dialog (modal, drawer…) rendered by the PHP Modal and Drawer widgets. It holds no markup: the dialog classes come\n * from data-dialog-class, the loader from the \"loader\" slot, and everything else from the server HTML it loads.\n * Every closing goes through close() (Escape included), so that the hide transition runs; an Open received while\n * the dialog is closing cancels the closing.\n */\n@customElement('bleet-dialog')\nexport class BleetDialog {\n @bindable id: string = '';\n @bindable({ attribute: 'data-dialog-class' }) dialogClass: string = '';\n @bindable loadError: string = '';\n @bindable submitError: string = '';\n\n private dialogElement!: HTMLDialogElement;\n private disposable?: IDisposable;\n private loading: boolean = false;\n private closing: boolean = false;\n private contentView: string | null = null;\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('<bleet-dialog>'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly p: IPlatform = resolve(IPlatform),\n private readonly transitionService: ITransitionService = resolve(ITransitionService),\n private readonly apiService: IApiService = resolve(IApiService),\n ) {}\n\n public attached(): void {\n this.disposable = this.ea.subscribe(Channels.Modal, this.onModalEvent);\n this.dialogElement.addEventListener('cancel', this.onCancelEvent);\n }\n\n public detaching(): void {\n this.dialogElement.removeEventListener('cancel', this.onCancelEvent);\n this.unbindDialogEvents();\n this.disposable?.dispose();\n }\n\n private bindDialogEvents(): void {\n this.dialogElement.addEventListener('submit', this.onFormSubmit);\n this.dialogElement.addEventListener('click', this.onDialogClick);\n }\n\n private unbindDialogEvents(): void {\n this.dialogElement.removeEventListener('submit', this.onFormSubmit);\n this.dialogElement.removeEventListener('click', this.onDialogClick);\n }\n\n private onModalEvent = (data: IModal): void => {\n if (this.id && this.id !== '' && data.id === this.id) {\n const isOpen = this.dialogElement.open === true && this.closing === false;\n if (data.action === ModalAction.Open && isOpen === false) {\n if (data.url) {\n this.loadFromUrl(data.url);\n }\n } else if (data.action === ModalAction.Close && isOpen === true) {\n this.close();\n } else if (data.action === ModalAction.Toggle) {\n if (isOpen === true) {\n this.close();\n } else if (data.url) {\n this.loadFromUrl(data.url);\n }\n }\n }\n }\n\n /**\n * Escape: the browser would close the dialog at once, the hide transition runs instead. A cancel bubbling from\n * an <input type=\"file\"> (file chooser dismissed) is not for the dialog.\n */\n private onCancelEvent = (event: Event): void => {\n if (event.target === this.dialogElement) {\n event.preventDefault();\n this.close();\n }\n }\n\n private onDialogClick = (event: MouseEvent): void => {\n const target = event.target as HTMLElement;\n if (target.closest('[data-dialog=\"close\"]')) {\n event.preventDefault();\n this.close();\n }\n }\n\n /**\n * A form of the dialog is posted by the element, unless it is marked data-dialog=\"native\" (download, plain post).\n */\n private onFormSubmit = (event: SubmitEvent): void => {\n const form = (event.target as HTMLElement).closest('form');\n if (form && form.getAttribute('data-dialog') !== 'native') {\n event.preventDefault();\n\n const formData = new FormData(form);\n\n if (event.submitter instanceof HTMLButtonElement && event.submitter.name) {\n formData.append(event.submitter.name, event.submitter.value || '');\n }\n\n const method = (formData.get('_method') as string) || form.getAttribute('method') || 'POST';\n\n this.apiService\n .url(form.action)\n .fromMultipart(formData)\n .request<IDialogResponse>(method)\n .then((response) => {\n this.applyResponse(response.body);\n })\n .catch((error) => {\n this.logger.error('form submit failed', error);\n this.publishError(this.submitError);\n });\n }\n }\n\n private loadFromUrl(url: string): void {\n this.loading = true;\n this.open();\n\n this.apiService.url(url).get<IDialogResponse>()\n .then((response) => {\n this.applyResponse(response.body);\n })\n .catch((error) => {\n this.logger.error('loadFromUrl failed', error);\n this.close();\n this.publishError(this.loadError);\n })\n .finally(() => {\n this.loading = false;\n });\n }\n\n private applyResponse(response: IDialogResponse): void {\n if (response.content) {\n this.contentView = response.content;\n }\n this.executeActions(response);\n }\n\n private executeActions(response: IDialogResponse): void {\n const refresh = response.refresh === true || response.action === DialogAction.RefreshAndClose;\n if (response.action === DialogAction.Close || response.action === DialogAction.RefreshAndClose) {\n this.close();\n }\n\n if (response.toast) {\n this.ea.publish(Channels.Toaster, <IToaster>{\n action: ToasterAction.Add,\n toast: response.toast\n });\n }\n if (response.ajaxify) {\n this.ea.publish(Channels.Ajaxify, response.ajaxify);\n } else if (response.redirect) {\n this.p.window.location.href = response.redirect;\n } else if (refresh === true) {\n this.p.window.location.reload();\n }\n }\n\n /**\n * Danger toast with the text given by the PHP widget (load-error / submit-error); none without text.\n */\n private publishError(content: string): void {\n if (content !== '') {\n this.ea.publish(Channels.Toaster, <IToaster>{\n action: ToasterAction.Add,\n toast: { color: UiColor.Danger, content } as IToast\n });\n }\n }\n\n private open(): void {\n this.closing = false;\n this.bindDialogEvents();\n this.transitionService.run(this.dialogElement, (element) => {\n this.ea.publish(Channels.Overlay, <IOverlay>{ action: OverlayAction.Open });\n this.ea.publish(Channels.ModalStatus, <IModalStatus>{ status: ModalStatus.Opening, id: this.id });\n (element as HTMLDialogElement).showModal();\n this.p.requestAnimationFrame(() => {\n setState(element, 'dialog', 'show', this.element);\n });\n }, () => {\n this.ea.publish(Channels.ModalStatus, <IModalStatus>{ status: ModalStatus.Opened, id: this.id });\n });\n }\n\n private close(): void {\n this.closing = true;\n this.transitionService.run(this.dialogElement, (element) => {\n if (this.closing === true) {\n this.ea.publish(Channels.ModalStatus, <IModalStatus>{ status: ModalStatus.Closing, id: this.id });\n this.ea.publish(Channels.Overlay, <IOverlay>{ action: OverlayAction.Close });\n setState(element, 'dialog', 'hide', this.element);\n }\n }, (element) => {\n if (this.closing === true) {\n this.closing = false;\n (element as HTMLDialogElement).close();\n this.unbindDialogEvents();\n this.contentView = null;\n this.loading = false;\n this.ea.publish(Channels.ModalStatus, <IModalStatus>{ status: ModalStatus.Closed, id: this.id });\n }\n });\n }\n}\n","import { IContainer, IRegistry } from 'aurelia';\nimport { ApiConfiguration, type ConfigInterface } from '@blackcube/aurelia-api';\nimport { IStorageService } from './services/storage-service';\nimport { ITransitionService } from './services/transition-service';\nimport { ITrapFocusService } from './services/trap-focus-service';\nimport { setState, type StateName } from './utils/state-classes';\n\nimport {\n BleetAlertCustomAttribute,\n BleetBadgeCustomAttribute,\n BleetBurgerCustomAttribute,\n BleetDropdownCustomAttribute,\n BleetMenuCustomAttribute,\n BleetModalTriggerCustomAttribute,\n BleetPagerCustomAttribute,\n BleetPasswordCustomAttribute,\n BleetProfileCustomAttribute,\n BleetTabsCustomAttribute,\n BleetToasterTriggerCustomAttribute,\n BleetAjaxifyTriggerCustomAttribute,\n BleetPopoverCustomAttribute,\n BleetPopoverTriggerCustomAttribute,\n BleetToasterCustomAttribute,\n BleetToastCustomAttribute,\n BleetOverlayCustomAttribute\n} from './attributes';\n\nimport {\n BleetAjaxify,\n BleetDialog\n} from './components';\n\nimport {\n Channels,\n OverlayAction,\n OverlayStatus,\n ProfileAction,\n ProfileStatus,\n ModalAction,\n ModalStatus,\n ToasterAction,\n ToasterStatus,\n MenuAction,\n MenuStatus,\n BadgeAction,\n UiColor,\n UiToastIcon,\n UiIcon,\n DialogAction,\n AjaxifyAction,\n AjaxifyTriggerMode,\n PopoverAction,\n PopoverStatus,\n UploadAction\n} from './enums/event-aggregator';\n\nimport type { IDialogResponse } from './interfaces/dialog';\n\nimport type {\n IOverlay,\n IOverlayStatus,\n IModal,\n IModalStatus,\n IToaster,\n IToasterStatus,\n IToast,\n IMenu,\n IMenuStatus,\n IBadge,\n IProfile,\n IProfileStatus,\n IAjaxify,\n IPopover,\n IPopoverStatus,\n IUpload\n} from './interfaces/event-aggregator';\n\nexport {\n BleetAlertCustomAttribute,\n BleetBadgeCustomAttribute,\n BleetBurgerCustomAttribute,\n BleetDropdownCustomAttribute,\n BleetMenuCustomAttribute,\n BleetModalTriggerCustomAttribute,\n BleetPagerCustomAttribute,\n BleetPasswordCustomAttribute,\n BleetProfileCustomAttribute,\n BleetTabsCustomAttribute,\n BleetToasterTriggerCustomAttribute,\n BleetAjaxifyTriggerCustomAttribute,\n BleetPopoverCustomAttribute,\n BleetPopoverTriggerCustomAttribute,\n BleetToasterCustomAttribute,\n BleetToastCustomAttribute,\n BleetOverlayCustomAttribute,\n BleetAjaxify,\n BleetDialog,\n Channels,\n OverlayAction,\n OverlayStatus,\n ProfileAction,\n ProfileStatus,\n ModalAction,\n ModalStatus,\n ToasterAction,\n AjaxifyAction,\n AjaxifyTriggerMode,\n PopoverAction,\n PopoverStatus,\n UploadAction,\n ToasterStatus,\n MenuAction,\n MenuStatus,\n BadgeAction,\n UiColor,\n UiToastIcon,\n UiIcon,\n DialogAction,\n IStorageService,\n ITransitionService,\n ITrapFocusService,\n setState\n};\n\n/** The interfaces and the types: named apart, as a bundler transpiling file by file cannot tell them from the values. */\nexport type {\n IOverlay,\n IOverlayStatus,\n IModal,\n IModalStatus,\n IToaster,\n IToasterStatus,\n IToast,\n IMenu,\n IMenuStatus,\n IBadge,\n IProfile,\n IProfileStatus,\n IDialogResponse,\n IAjaxify,\n IPopover,\n IPopoverStatus,\n IUpload,\n StateName\n};\nconst DefaultComponents: IRegistry[] = [\n BleetAlertCustomAttribute as unknown as IRegistry,\n BleetBurgerCustomAttribute as unknown as IRegistry,\n BleetDropdownCustomAttribute as unknown as IRegistry,\n BleetMenuCustomAttribute as unknown as IRegistry,\n BleetModalTriggerCustomAttribute as unknown as IRegistry,\n BleetPagerCustomAttribute as unknown as IRegistry,\n BleetProfileCustomAttribute as unknown as IRegistry,\n BleetPasswordCustomAttribute as unknown as IRegistry,\n BleetBadgeCustomAttribute as unknown as IRegistry,\n BleetTabsCustomAttribute as unknown as IRegistry,\n BleetToasterTriggerCustomAttribute as unknown as IRegistry,\n BleetAjaxifyTriggerCustomAttribute as unknown as IRegistry,\n BleetPopoverCustomAttribute as unknown as IRegistry,\n BleetPopoverTriggerCustomAttribute as unknown as IRegistry,\n BleetToasterCustomAttribute as unknown as IRegistry,\n BleetToastCustomAttribute as unknown as IRegistry,\n BleetOverlayCustomAttribute as unknown as IRegistry,\n BleetAjaxify as unknown as IRegistry,\n BleetDialog as unknown as IRegistry\n];\n\nfunction createBleetConfiguration(optionsCallback?: (options: ConfigInterface) => void) {\n return {\n register(container: IContainer) {\n const apiConfiguration = optionsCallback ? ApiConfiguration.customize(optionsCallback) : ApiConfiguration;\n apiConfiguration.register(container);\n\n return container.register(...DefaultComponents);\n },\n customize(callback: (options: ConfigInterface) => void) {\n return createBleetConfiguration(callback);\n }\n };\n}\n\nexport const BleetConfiguration = createBleetConfiguration();\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","names":["customAttribute","IEventAggregator","ILogger","INode","resolve","Channels","MenuAction","BleetBurgerCustomAttribute","logger","scopeTo","ea","element","trace","attached","addEventListener","onClickButton","detaching","removeEventListener","event","preventDefault","publish","Menu","action","Open","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","customAttribute","IEventAggregator","ILogger","INode","IPlatform","resolve","Channels","MenuAction","MenuStatus","OverlayAction","OverlayStatus","ITransitionService","IStorageService","setState","BleetMenuCustomAttribute","logger","scopeTo","ea","element","p","transitionService","storageService","trace","disposable","disposableOverlay","closeButton","toggleButtons","sublists","Map","isOpen","attaching","querySelector","querySelectorAll","initMenuButtons","attached","subscribe","Menu","onMenuEvent","onOverlayStatus","addEventListener","onClickClose","onClickToggleButtons","detaching","removeEventListener","dispose","open","fromOverlay","run","publish","Overlay","action","Open","status","Opening","ariaHidden","Opened","close","Closing","Close","Closed","event","preventDefault","target","btn","closest","matches","toggleButton","forEach","initButton","has","id","dataset","menu","replace","list","svg","set","setSublist","load","sublist","get","undefined","hidden","closeOtherButtons","except","value","key","ariaExpanded","save","data","Toggle","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","id","bindable","customAttribute","IEventAggregator","ILogger","INode","resolve","BadgeAction","Channels","name","defaultProperty","BleetBadgeCustomAttribute","logger","scopeTo","ea","element","trace","closeButton","attached","querySelector","undefined","addEventListener","onClickRemove","detaching","removeEventListener","event","preventDefault","publish","Badge","action","Remove","remove","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_init_id","_init_extra__init_id","customAttribute","ILogger","INode","resolve","ITrapFocusService","setState","BleetDropdownCustomAttribute","logger","scopeTo","element","trapFocusService","trace","select","button","buttonText","optionTemplate","countTemplate","groupTemplate","tagTemplate","tagsContainer","placeholder","itemsPlace","itemsContainer","searchInput","emptyMessage","isMultiple","withTags","selectObserver","attaching","querySelector","multiple","attached","Error","id","Math","random","toString","substring","options","length","preparePanel","MutationObserver","observe","childList","subtree","ariaHasPopup","setAttribute","role","addEventListener","onClickToggleMenu","onClickToggleItem","onSearchInput","onSelectChange","onClickRemoveTag","detaching","disconnect","undefined","removeEventListener","event","result","target","closest","preventDefault","disabled","toggleMenu","swapItemClasses","removeButton","stopPropagation","tagElement","value","dataset","tagValue","Array","from","forEach","option","selected","dispatchEvent","Event","bubbles","updateDisplay","onStopTrapFocus","hidden","filterItems","Promise","isClosed","ariaExpanded","initialFocus","start","then","scrollIntoView","block","stop","getAttribute","clickedValue","synchSelect","query","normalizedQuery","toLowerCase","trim","visibleCount","querySelectorAll","item","text","textContent","isVisible","includes","updateGroupVisibility","groups","group","hasVisible","sibling","nextElementSibling","matches","updateTags","updateButtonText","selectedOptions","filter","opt","find","innerHTML","count","String","content","replace","tag","remove","tagFragment","cloneNode","tagText","appendChild","CSS","escape","checkmark","children","child","tagName","groupedOptions","c","appendGroupHeader","label","o","appendOption","itemText","itemValue","disabledClasses","split","classList","add","append","fragment","groupLabel","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","customAttribute","ILogger","INode","resolve","setState","BleetPasswordCustomAttribute","logger","scopeTo","element","button","iconHidden","iconVisible","input","attaching","querySelector","undefined","attached","addEventListener","onToggle","detaching","removeEventListener","event","preventDefault","isPassword","type","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","customAttribute","ILogger","INode","IPlatform","resolve","BleetTabsCustomAttribute","logger","scopeTo","element","p","trace","activeClasses","inactiveClasses","select","attaching","activeButton","querySelector","inactiveButton","className","attached","querySelectorAll","forEach","button","addEventListener","onClickTab","onChangeSelect","detaching","removeEventListener","event","preventDefault","tabIndex","currentTarget","getAttribute","replace","buttonTabIndex","setAttribute","panel","panelIndex","hidden","value","dispatchEvent","Event","bubbles","click","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","id","bindable","customAttribute","IEventAggregator","ILogger","INode","IPlatform","resolve","Channels","ProfileAction","ProfileStatus","ITransitionService","ITrapFocusService","setState","name","defaultProperty","BleetProfileCustomAttribute","logger","scopeTo","ea","element","transitionService","p","trapFocusService","trace","disposable","toggleButton","panel","isOpen","attaching","querySelector","attached","subscribe","Profile","onProfileEvent","addEventListener","onClickToggle","detaching","removeEventListener","stop","dispose","event","preventDefault","close","open","onStopTrapFocus","setAttribute","run","publish","action","Close","status","Closing","requestAnimationFrame","hidden","Closed","Promise","firstItem","start","undefined","then","Open","Opening","Opened","data","isTargeted","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_init_id","_init_extra__init_id","id","color","icon","title","content","duration","bindable","customAttribute","IEventAggregator","ILogger","INode","resolve","Channels","ToasterAction","UiColor","UiToastIcon","name","defaultProperty","BleetToasterTriggerCustomAttribute","logger","scopeTo","element","ea","trace","Info","attaching","attached","addEventListener","onClick","detaching","removeEventListener","event","preventDefault","publish","Toaster","action","Add","toast","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_dec1","_dec2","_dec3","_dec4","_dec5","_init_id","_init_extra__init_id","_init_color","_init_extra__init_color","_init_icon","_init_extra__init_icon","_init_title","_init_extra__init_title","_init_content","_init_extra__init_content","_init_duration","_init_extra__init_duration","customAttribute","ILogger","INode","IPlatform","resolve","ITransitionService","setState","BleetAlertCustomAttribute","logger","scopeTo","element","p","transitionService","trace","closeButton","attaching","querySelector","attached","addEventListener","onClose","detaching","removeEventListener","event","preventDefault","run","currentHeight","scrollHeight","style","height","offsetHeight","hidden","requestAnimationFrame","remove","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","id","url","color","bindable","customAttribute","IEventAggregator","ILogger","INode","resolve","Channels","ModalAction","name","defaultProperty","BleetModalTriggerCustomAttribute","logger","scopeTo","element","ea","trace","attaching","attached","addEventListener","onClick","detaching","removeEventListener","dispose","event","preventDefault","publish","Modal","action","Toggle","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_dec1","_dec2","_init_id","_init_extra__init_id","_init_url","_init_extra__init_url","_init_color","_init_extra__init_color","customAttribute","ILogger","INode","IPlatform","resolve","BleetPagerCustomAttribute","logger","scopeTo","element","p","trace","select","attaching","querySelector","attached","addEventListener","onChangeSelect","detaching","removeEventListener","event","pageNumber","value","link","click","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","url","verb","event","id","mode","target","method","errorTitle","errorContent","bindable","customAttribute","IEventAggregator","ILogger","INode","IPlatform","resolve","AjaxifyAction","AjaxifyTriggerMode","Channels","ToasterAction","UiColor","IApiService","name","defaultProperty","BleetAjaxifyTriggerCustomAttribute","logger","scopeTo","element","ea","apiService","p","trace","Classic","attached","addEventListener","onTrigger","detaching","removeEventListener","preventDefault","stopPropagation","PublishOnly","onTriggerPublishOnly","onTriggerClassic","debug","form","closest","linkedElements","querySelectorAll","linked","Array","from","HTMLSelectElement","HTMLInputElement","HTMLTextAreaElement","targetName","dataset","ajaxifyTarget","hidden","querySelector","value","disabledInputs","input","disabled","publish","Ajaxify","action","Run","undefined","resolveUrl","resolveVerb","warn","formData","buildFormData","fromMultipart","request","then","response","body","updateElement","toast","Toaster","Add","ajaxify","catch","error","color","Danger","title","content","duration","FormData","inputs","appendInputsToFormData","SubmitEvent","submitter","append","csrfInput","ajaxifyInputs","type","checked","html","template","document","createElement","innerHTML","trim","newElement","firstElementChild","syncElement","current","incoming","attr","attributes","setAttribute","hasAttribute","removeAttribute","currentChildren","children","incomingChildren","i","length","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_dec1","_dec2","_dec3","_dec4","_dec5","_init_url","_init_extra__init_url","_init_id","_init_extra__init_id","id","bindable","customAttribute","IEventAggregator","ILogger","INode","IPlatform","resolve","Channels","PopoverAction","PopoverStatus","setState","name","defaultProperty","BleetPopoverCustomAttribute","logger","scopeTo","element","ea","p","trace","isOpen","subscription","attaching","subscribe","Popover","onPopover","attached","detaching","dispose","payload","action","Open","open","rect","Close","close","Toggle","positionAt","publish","status","Opened","Closed","style","visibility","display","popoverRect","getBoundingClientRect","top","height","left","width","bottom","window","innerWidth","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_init_id","_init_extra__init_id","id","absolute","bindable","customAttribute","IEventAggregator","ILogger","INode","resolve","Channels","PopoverAction","name","defaultProperty","BleetPopoverTriggerCustomAttribute","logger","scopeTo","element","ea","trace","attached","addEventListener","onMouseEnter","onMouseLeave","detaching","removeEventListener","dispose","publish","Popover","action","Open","rect","getBoundingClientRect","undefined","Close","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_dec1","_init_id","_init_extra__init_id","customAttribute","IEventAggregator","ILogger","INode","IPlatform","resolve","Channels","ToasterAction","UiColor","UiToastIcon","ITransitionService","setState","BleetToasterCustomAttribute","logger","scopeTo","element","ea","p","transitionService","trace","disposable","toasts","Map","attaching","subscribe","Toaster","onToasterEvent","detaching","dispose","forEach","entry","closeTimeout","undefined","clearTimeout","data","action","Add","toast","id","Math","random","toString","substring","color","Info","icon","duration","title","content","has","add","Remove","close","template","querySelector","warn","fragment","cloneNode","toastElement","firstElementChild","iconTemplate","iconSlot","appendChild","titleElement","replaceChildren","remove","contentElement","innerHTML","addEventListener","event","preventDefault","closing","set","raise","debug","run","setTimeout","get","delete","size","lower","hasAttribute","matches","hidePopover","showPopover","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","id","color","icon","title","content","duration","bindable","customAttribute","IEventAggregator","ILogger","IPlatform","queueTask","resolve","Channels","ToasterAction","UiColor","UiToastIcon","name","defaultProperty","BleetToastCustomAttribute","logger","scopeTo","ea","p","trace","Info","attached","document","readyState","addEventListener","publish","once","Toaster","action","Add","toast","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_dec1","_dec2","_init_id","_init_extra__init_id","customAttribute","IEventAggregator","ILogger","INode","IPlatform","resolve","Channels","OverlayAction","OverlayStatus","ITransitionService","setState","BleetOverlayCustomAttribute","logger","scopeTo","element","ea","p","transitionService","trace","disposable","attached","subscribe","Overlay","onOverlayEvent","addEventListener","onClickOverlay","detaching","removeEventListener","dispose","toggle","fromOverlay","hidden","open","close","run","publish","action","Open","status","Opening","requestAnimationFrame","Opened","Close","Closing","Closed","data","Toggle","event","preventDefault","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","customAttribute","ILogger","INode","IPlatform","resolve","BleetFocusCustomAttribute","logger","scopeTo","element","p","trace","attached","requestAnimationFrame","focus","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","name","template","dependencies","bindables","_e","register","id","url","__au2ViewDef","customElement","bindable","IEventAggregator","resolve","ILogger","INode","IApiService","AjaxifyAction","Channels","AjaxifyCodec","name","BleetAjaxify","ea","logger","scopeTo","apiService","element","trace","ajaxedView","disposable","attaching","subscribe","Ajaxify","onEvent","detaching","dispose","findForm","querySelector","closest","data","action","Refresh","handleRefresh","Run","handleRun","length","debug","withInputCodec","codec","toText","get","then","response","body","catch","error","form","warn","method","toUpperCase","builder","undefined","FormData","fromMultipart","fromJson","request","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_dec1","_init_id","_init_extra__init_id","__au2ViewDef","id","dialogClass","loadError","submitError","__au2ViewDef","bindable","customElement","IEventAggregator","ILogger","INode","IPlatform","resolve","Channels","DialogAction","ModalAction","ModalStatus","OverlayAction","ToasterAction","UiColor","ITransitionService","IApiService","setState","name","attribute","BleetDialog","logger","scopeTo","element","ea","p","transitionService","apiService","title","color","dialogElement","disposable","loading","closing","contentView","attached","subscribe","Modal","onModalEvent","addEventListener","onCancelEvent","detaching","removeEventListener","unbindDialogEvents","dispose","bindDialogEvents","onFormSubmit","onDialogClick","data","isOpen","open","action","Open","show","Close","close","Toggle","event","target","menu","querySelector","preventDefault","click","closest","form","getAttribute","formData","FormData","submitter","HTMLButtonElement","append","value","method","get","url","fromMultipart","request","then","response","applyResponse","body","catch","error","publishError","loadFromUrl","content","finally","executeActions","refresh","RefreshAndClose","toast","publish","Toaster","Add","ajaxify","Ajaxify","redirect","window","location","href","reload","Danger","run","Overlay","status","Opening","showModal","requestAnimationFrame","Opened","Closing","Closed","__au2ViewDef","BleetAlertCustomAttribute","BleetBurgerCustomAttribute","BleetDropdownCustomAttribute","BleetMenuCustomAttribute","BleetModalTriggerCustomAttribute","BleetPagerCustomAttribute","BleetProfileCustomAttribute","BleetPasswordCustomAttribute","BleetBadgeCustomAttribute","BleetTabsCustomAttribute","BleetToasterTriggerCustomAttribute","BleetAjaxifyTriggerCustomAttribute","BleetPopoverCustomAttribute","BleetPopoverTriggerCustomAttribute","BleetToasterCustomAttribute","BleetToastCustomAttribute","BleetOverlayCustomAttribute","BleetFocusCustomAttribute","BleetAjaxify","BleetDialog","__defProp","__exportAll","target","name","all","no_symbols","IStorageService","x","StorageService","resolve","ILogger","IPlatform","logger","p","key","result","def","value","error","ITransitionService","TransitionService","securityTimeout","endTransition","element","after","before","ITrapFocusService","TrapFocusService","isDisabled","isAriaHidden","isNotTabbable","hidden","current","opener","startCallback","stopCallback","globalElement","initialFocusElement","promise","stopped","reject","index","currentIndex","changed","loop","event","setState","other","state","readClasses","source","classes","token","Channels","\"Overlay\"","\"OverlayStatus\"","\"Modal\"","\"ModalStatus\"","\"Toaster\"","\"ToasterStatus\"","\"Menu\"","\"MenuStatus\"","\"Badge\"","\"Profile\"","\"ProfileStatus\"","\"Ajaxify\"","\"Popover\"","\"PopoverStatus\"","\"Upload\"","UploadAction","\"Reset\"","OverlayAction","\"Open\"","\"Close\"","\"Toggle\"","OverlayStatus","\"Opening\"","\"Closing\"","\"Opened\"","\"Closed\"","ProfileAction","ProfileStatus","ModalAction","ModalStatus","AjaxifyAction","\"Refresh\"","\"Run\"","AjaxifyTriggerMode","\"Classic\"","\"PublishOnly\"","ToasterAction","\"Add\"","\"Remove\"","ToasterStatus","\"Added\"","\"Removed\"","MenuAction","BadgeAction","MenuStatus","PopoverAction","PopoverStatus","UiColor","\"Primary\"","\"Secondary\"","\"Success\"","\"Danger\"","\"Warning\"","\"Info\"","\"Accent\"","UiToastIcon","UiIcon","\"InformationCircle\"","\"CheckCircle\"","\"ExclamationTriangle\"","\"XCircle\"","DialogAction","\"Keep\"","\"RefreshAndClose\"","toPrimitive$19","input","prim","res","hint","toPropertyKey$19","arg","checkInRHS$19","setFunctionName$19","fn","prefix","_apply_decs_2311$19","symbolMetadata","defineProperty","create","metadata","existingNonFields","hasClassDecs","classDecs","_","createRunInitializers","useStaticThis","thisArg","targetClass","i","initializers","hasValue","assertCallable","throwUndefined","hint1","hint2","applyDec","assertInstanceIfPrivate","hasPrivateBrand","decs","decInfo","decVal","isClass","ret","isAccessor","kind","isGetter","isSetter","isMethod","bindPropCall","_this","Class","desc1","init","isPrivate","isField","isStatic","newValue","decoratorsHaveThis","dec","decThis","decoratorFinishedRef","ctx","initializer","applyMemberDecs","protoInitializers","staticInitializers","pushInitializers","applyMemberDecsOfKind","memberDecs","kindOnly","instanceBrand","defineMetadata","parentClass","classDecsHaveThis","_dec$19","customAttribute","_initClass$19","_BleetBurgerCustomAttribute","IEventAggregator","INode","ea","toPrimitive$18","toPropertyKey$18","checkInRHS$18","setFunctionName$18","_apply_decs_2311$18","_dec$18","_initClass$18","_BleetMenuCustomAttribute","transitionService","storageService","fromOverlay","btn","id","list","svg","sublist","open","except","data","toPrimitive$17","toPropertyKey$17","checkInRHS$17","setFunctionName$17","_apply_decs_2311$17","_dec$17","_initClass$17","_init_id$9","_init_extra__init_id$9","_BleetBadgeCustomAttribute","bindable","toPrimitive$16","toPropertyKey$16","checkInRHS$16","setFunctionName$16","_apply_decs_2311$16","_dec$16","_initClass$16","_BleetDropdownCustomAttribute","trapFocusService","removeButton","tagElement","option","isClosed","initialFocus","clickedValue","query","normalizedQuery","visibleCount","text","item","isVisible","hasVisible","sibling","group","selectedOptions","opt","placeholder","count","tag","tagFragment","tagText","checkmark","child","groupedOptions","c","o","button","itemText","itemValue","disabledClasses","fragment","groupLabel","label","toPrimitive$15","toPropertyKey$15","checkInRHS$15","setFunctionName$15","_apply_decs_2311$15","_dec$15","_initClass$15","_BleetPasswordCustomAttribute","isPassword","toPrimitive$14","toPropertyKey$14","checkInRHS$14","setFunctionName$14","_apply_decs_2311$14","_dec$14","_initClass$14","_BleetTabsCustomAttribute","activeButton","inactiveButton","tabIndex","panel","toPrimitive$13","toPropertyKey$13","checkInRHS$13","setFunctionName$13","_apply_decs_2311$13","_dec$13","_initClass$13","_init_id$8","_init_extra__init_id$8","_BleetProfileCustomAttribute","firstItem","isTargeted","toPrimitive$12","toPropertyKey$12","checkInRHS$12","setFunctionName$12","_apply_decs_2311$12","_dec$12","_initClass$12","_dec1$6","_dec2$4","_dec3$2","_dec4$2","_dec5$2","_init_id$7","_init_extra__init_id$7","_init_color$2","_init_extra__init_color$2","_init_icon$1","_init_extra__init_icon$1","_init_title$1","_init_extra__init_title$1","_init_content$1","_init_extra__init_content$1","_init_duration$1","_init_extra__init_duration$1","_BleetToasterTriggerCustomAttribute","toPrimitive$11","toPropertyKey$11","checkInRHS$11","setFunctionName$11","_apply_decs_2311$11","_dec$11","_initClass$11","_BleetAlertCustomAttribute","currentHeight","toPrimitive$10","toPropertyKey$10","checkInRHS$10","setFunctionName$10","_apply_decs_2311$10","_dec$10","_initClass$10","_dec1$5","_dec2$3","_init_id$6","_init_extra__init_id$6","_init_url$2","_init_extra__init_url$2","_init_color$1","_init_extra__init_color$1","_BleetModalTriggerCustomAttribute","toPrimitive$9","toPropertyKey$9","checkInRHS$9","setFunctionName$9","_apply_decs_2311$9","_dec$9","_initClass$9","_BleetPagerCustomAttribute","pageNumber","link","toPrimitive$8","toPropertyKey$8","checkInRHS$8","setFunctionName$8","_apply_decs_2311$8","_dec$8","_initClass$8","_dec1$4","_dec2$2","_dec3$1","_dec4$1","_dec5$1","_dec6","_dec7","_dec8","_init_url$1","_init_extra__init_url$1","_init_verb","_init_extra__init_verb","_init_event","_init_extra__init_event","_init_id$5","_init_extra__init_id$5","_init_mode","_init_extra__init_mode","_init_target","_init_extra__init_target","_init_method","_init_extra__init_method","_init_errorTitle","_init_extra__init_errorTitle","_init_errorContent","_init_extra__init_errorContent","_BleetAjaxifyTriggerCustomAttribute","IApiService","apiService","form","linkedElements","linked","targetName","disabledInputs","url","verb","formData","response","inputs","submitter","csrfInput","ajaxifyInputs","template","html","newElement","attr","incoming","currentChildren","incomingChildren","toPrimitive$7","toPropertyKey$7","checkInRHS$7","setFunctionName$7","_apply_decs_2311$7","_dec$7","_initClass$7","_init_id$4","_init_extra__init_id$4","_BleetPopoverCustomAttribute","payload","rect","popoverRect","top","left","toPrimitive$6","toPropertyKey$6","checkInRHS$6","setFunctionName$6","_apply_decs_2311$6","_dec$6","_initClass$6","_dec1$3","_init_id$3","_init_extra__init_id$3","_init_absolute","_init_extra__init_absolute","_BleetPopoverTriggerCustomAttribute","toPrimitive$5","toPropertyKey$5","checkInRHS$5","setFunctionName$5","_apply_decs_2311$5","_dec$5","_initClass$5","_BleetToasterCustomAttribute","entry","toast","toastElement","iconTemplate","iconSlot","titleElement","contentElement","toPrimitive$4","toPropertyKey$4","checkInRHS$4","setFunctionName$4","_apply_decs_2311$4","_dec$4","_initClass$4","_dec1$2","_dec2$1","_dec3","_dec4","_dec5","_init_id$2","_init_extra__init_id$2","_init_color","_init_extra__init_color","_init_icon","_init_extra__init_icon","_init_title","_init_extra__init_title","_init_content","_init_extra__init_content","_init_duration","_init_extra__init_duration","_BleetToastCustomAttribute","queueTask","toPrimitive$3","toPropertyKey$3","checkInRHS$3","setFunctionName$3","_apply_decs_2311$3","_dec$3","_initClass$3","_BleetOverlayCustomAttribute","toPrimitive$2","toPropertyKey$2","checkInRHS$2","setFunctionName$2","_apply_decs_2311$2","_dec$2","_initClass$2","_BleetFocusCustomAttribute","bleet_ajaxify_$au_exports","bindables$1","template$1","dependencies$1","name$1","register$1","_e$1","CustomElement","container","toPrimitive$1","toPropertyKey$1","checkInRHS$1","setFunctionName$1","_apply_decs_2311$1","_dec$1","customElement","_initClass$1","_dec1$1","_dec2","_init_id$1","_init_extra__init_id$1","_init_url","_init_extra__init_url","_BleetAjaxify","AjaxifyCodec","method","builder","bleet_dialog_$au_exports","bindables","dependencies","register","_e","toPrimitive","toPropertyKey","checkInRHS","setFunctionName","_apply_decs_2311","_dec","_initClass","_dec1","_init_id","_init_extra__init_id","_init_dialogClass","_init_extra__init_dialogClass","_init_loadError","_init_extra__init_loadError","_init_submitError","_init_extra__init_submitError","_BleetDialog","isOpen","menu","refresh","content","DefaultComponents","createBleetConfiguration","optionsCallback","ApiConfiguration","callback","BleetConfiguration"],"sources":["../src/services/storage-service.ts","../src/services/transition-service.ts","../src/services/trap-focus-service.ts","../src/utils/state-classes.ts","../src/enums/event-aggregator.ts","../src/attributes/burger.ts","../src/attributes/menu.ts","../src/attributes/badge.ts","../src/attributes/dropdown.ts","../src/attributes/password.ts","../src/attributes/tabs.ts","../src/attributes/profile.ts","../src/attributes/toaster-trigger.ts","../src/attributes/alert.ts","../src/attributes/modal-trigger.ts","../src/attributes/pager.ts","../src/attributes/ajaxify-trigger.ts","../src/attributes/popover.ts","../src/attributes/popover-trigger.ts","../src/attributes/toaster.ts","../src/attributes/toast.ts","../src/attributes/overlay.ts","../src/attributes/focus.ts","../src/components/bleet-ajaxify.$au.ts","../src/components/bleet-ajaxify.ts","../src/components/bleet-dialog.$au.ts","../src/components/bleet-dialog.ts","../src/index.ts"],"sourcesContent":["import {DI, ILogger, IPlatform, resolve} from \"aurelia\";\n\nexport interface IStorageService extends StorageService { }\nexport const IStorageService = /*@__PURE__*/DI.createInterface<IStorageService>('IStorageService', (x) => x.singleton(StorageService));\n\n/**\n * JSON values in localStorage (open sublists of the menu, application settings).\n */\nexport class StorageService\n{\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('StorageService'),\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor')\n }\n\n /**\n * Value stored under key, or def when there is none; an unreadable value is removed and gives def.\n */\n public load(key: string, def: unknown = null): unknown\n {\n this.logger.trace('load', key);\n let result = def;\n const value = localStorage.getItem(key);\n if (value !== null) {\n try {\n result = JSON.parse(value);\n } catch (error) {\n this.logger.warn('load: unreadable value removed', key, error);\n localStorage.removeItem(key);\n }\n }\n return result;\n }\n\n public save(key: string, value: unknown): void\n {\n this.logger.trace('save', key, value);\n localStorage.setItem(key, JSON.stringify(value));\n }\n\n public remove(key: string): void\n {\n this.logger.trace('remove', key);\n localStorage.removeItem(key);\n }\n}","import {DI, IEventAggregator, ILogger, INode, IPlatform, resolve} from \"aurelia\";\n\nexport interface ITransitionService extends TransitionService { }\nexport const ITransitionService = /*@__PURE__*/DI.createInterface<ITransitionService>('ITransitionService', (x) => x.singleton(TransitionService));\n\nexport type TransitionCallback = (e: HTMLElement|HTMLDialogElement) => void\nexport class TransitionService\n{\n public securityTimeout: number = 2000;\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('TransitionService'),\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor')\n }\n\n public run(element: HTMLElement, before: TransitionCallback, after?: TransitionCallback) {\n let securityTimeout: number | undefined = undefined;\n const endTransition = (evt: TransitionEvent) => {\n if (securityTimeout !== undefined) {\n this.p.clearTimeout(securityTimeout);\n securityTimeout = undefined;\n }\n element.removeEventListener('transitionend', endTransition);\n if (after) {\n this.logger.trace('after()');\n after(element);\n }\n }\n if (before) {\n securityTimeout = this.p.setTimeout(endTransition, this.securityTimeout);\n element.addEventListener('transitionend', endTransition);\n this.p.requestAnimationFrame(() => {\n this.logger.trace('before()');\n before(element);\n });\n }\n }\n}","import {DI, ILogger, IPlatform, resolve} from \"aurelia\";\n\nexport interface ITrapFocusService extends TrapFocusService { }\nexport const ITrapFocusService = /*@__PURE__*/DI.createInterface<ITrapFocusService>('ITrapFocusService', (x) => x.transient(TrapFocusService));\n\n/**\n * Keeps the focus inside a panel (dropdown, select, profile menu): Tab / Shift+Tab loop, arrows move, Escape and a\n * click outside stop it. Elements hidden inside the panel are not focusable.\n */\nexport class TrapFocusService\n{\n\n public focusableElementsQuerySelector = '[href], button, input, select, textarea, [tabindex]:not([tabindex=\"-1\"]), [accesskey], summary, canvas, audio, video, details, iframe, [contenteditable]';\n\n private opener: HTMLElement|null = null;\n private target: HTMLElement|null = null;\n private globalElement: HTMLElement|null = null;\n private startCallback: Function|null = null;\n private stopCallback: Function|null = null;\n private focusableElements: HTMLElement[] = [];\n private lastFocusedElement: HTMLElement|null = null;\n private started: boolean = false;\n\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('TrapFocusService'),\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor')\n }\n\n private buildFocusableElements() {\n this.focusableElements = [];\n const focusableElements = this.target?.querySelectorAll(this.focusableElementsQuerySelector);\n focusableElements?.forEach((element: Element) => {\n const isDisabled = element.hasAttribute('disabled');\n const isAriaHidden = (element.getAttribute('aria-hidden') === 'true');\n const isNotTabbable = (element.getAttribute('tabindex') === '-1');\n if (isDisabled === false && isAriaHidden === false && isNotTabbable === false && this.isHiddenInTarget(element) === false) {\n this.focusableElements.push(element as HTMLElement);\n }\n });\n }\n\n /**\n * Element hidden (hidden attribute or display: none) by itself or by an ancestor inside the target; the target's\n * own state is not looked at, it is shown right after start().\n */\n private isHiddenInTarget(element: Element): boolean {\n let hidden = false;\n let current: Element | null = element;\n while (hidden === false && current !== null && current !== this.target) {\n hidden = (current as HTMLElement).hidden === true || this.p.window.getComputedStyle(current).display === 'none';\n current = current.parentElement;\n }\n return hidden;\n }\n\n public start(opener: HTMLElement, target: HTMLElement, globalElement: HTMLElement, startCallback?: Function, stopCallback?: Function, initialFocusElement?: HTMLElement) {\n this.logger.trace('start', opener, target);\n this.startCallback = startCallback ?? null;\n this.stopCallback = stopCallback ?? null;\n this.opener = opener;\n this.target = target;\n this.globalElement = globalElement;\n this.buildFocusableElements();\n\n if (initialFocusElement && this.focusableElements.includes(initialFocusElement)) {\n this.lastFocusedElement = initialFocusElement;\n } else {\n this.lastFocusedElement = this.focusableElements[0] || undefined;\n }\n\n this.logger.trace('start: add keydown listener');\n this.p.requestAnimationFrame(() => {\n this.logger.trace('start: focus initial element', this.lastFocusedElement);\n this.lastFocusedElement?.focus();\n\n });\n this.target.addEventListener('keydown', this.onKeyDown);\n this.p.document.addEventListener('click', this.onClickOutside);\n this.started = true;\n if(this.startCallback) {\n const promise = this.startCallback();\n if (promise && promise instanceof Promise) {\n return promise;\n }\n }\n return Promise.resolve();\n\n }\n /**\n * Stops the trap: the stop callback may return a value or a Promise; the opener gets the focus back and the\n * state is cleaned in every case, a rejected callback rejects the returned Promise.\n */\n public stop() {\n this.logger.trace('stop');\n return new Promise((resolve, reject) => {\n if (this.started) {\n this.logger.trace('stop: remove keydown listener');\n this.target?.removeEventListener('keydown', this.onKeyDown);\n this.p.document.removeEventListener('click', this.onClickOutside);\n const stopped = Promise.resolve(this.stopCallback !== null ? this.stopCallback() : undefined);\n this.p.requestAnimationFrame(() => {\n this.opener?.focus();\n this.cleanup();\n stopped.then(resolve, reject);\n });\n } else {\n reject('TrapFocusService: not started');\n }\n });\n }\n private cleanup() {\n this.logger.trace('cleanup');\n if (this.started) {\n this.opener = null;\n this.startCallback = null;\n this.stopCallback = null;\n this.target = null;\n this.lastFocusedElement = null;\n this.focusableElements = [];\n this.started = false;\n }\n }\n\n\n private focusedElementIndex() : number {\n let index = -1;\n if (this.lastFocusedElement) {\n index = this.focusableElements.indexOf(this.lastFocusedElement);\n }\n if (index === -1 && this.lastFocusedElement !== undefined) {\n this.lastFocusedElement = null;\n }\n return index;\n }\n private focusPreviousElement(loop = true): HTMLElement | null {\n\n const currentIndex = this.focusedElementIndex();\n if (currentIndex === -1) {\n return null;\n }\n let changed = false;\n if (currentIndex === 0 && loop === true) {\n this.lastFocusedElement = this.focusableElements[this.focusableElements.length - 1];\n changed = true;\n } else if (currentIndex > 0) {\n this.lastFocusedElement = this.focusableElements[currentIndex - 1];\n changed = true;\n }\n if (changed === true) {\n this.p.requestAnimationFrame(() => {\n this.logger.trace('focusPreviousElement: focusing', this.lastFocusedElement);\n this.lastFocusedElement?.focus();\n });\n }\n return this.lastFocusedElement;\n }\n private focusNextElement(loop = true): HTMLElement | null {\n const currentIndex = this.focusedElementIndex();\n if (currentIndex === -1) {\n return null;\n }\n let changed = false;\n if (currentIndex === this.focusableElements.length - 1 && loop === true) {\n this.lastFocusedElement = this.focusableElements[0];\n changed = true;\n } else if (currentIndex < this.focusableElements.length - 1) {\n this.lastFocusedElement = this.focusableElements[currentIndex + 1];\n changed = true;\n }\n if (changed === true) {\n this.p.requestAnimationFrame(() => {\n this.logger.trace('focusNextElement: focusing', this.lastFocusedElement);\n this.lastFocusedElement?.focus();\n });\n }\n return this.lastFocusedElement;\n }\n\n private onKeyDown = (event: KeyboardEvent) => {\n let changeFocus = false;\n if (event.key === 'Tab') {\n if (event.shiftKey) {\n event.preventDefault();\n this.lastFocusedElement = this.focusPreviousElement(true);\n } else {\n event.preventDefault();\n this.lastFocusedElement = this.focusNextElement(true);\n }\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.lastFocusedElement = this.focusPreviousElement(false);\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.lastFocusedElement = this.focusNextElement(false);\n } else if (event.key === 'Escape') {\n event.preventDefault();\n this.stop();\n }\n };\n private onClickOutside = (event: MouseEvent) => {\n this.logger.trace('onClickOutside', event);\n if (this.started && this.globalElement && event.target) {\n this.logger.trace('onClickOutside: checking if click is outside globalElement', event.target, this.globalElement);\n if (!this.globalElement.contains(event.target as Node)) {\n this.stop();\n }\n }\n }\n}","/**\n * State classes written in the PHP markup: data-<name>-show=\"classes\" and data-<name>-hide=\"classes\".\n * Setting a state removes the classes of the other state and adds the classes of this one.\n * The classes are read on `source` (the element itself by default) and applied to `element`.\n */\nexport type StateName = 'show' | 'hide';\n\nexport function setState(element: Element, name: string, state: StateName, source: Element = element): void\n{\n const other: StateName = state === 'show' ? 'hide' : 'show';\n element.classList.remove(...readClasses(source, name, other));\n element.classList.add(...readClasses(source, name, state));\n}\n\nfunction readClasses(element: Element, name: string, state: StateName): string[]\n{\n const classes: string[] = [];\n (element.getAttribute(`data-${name}-${state}`) ?? '').split(' ').forEach((token) => {\n if (token !== '') {\n classes.push(token);\n }\n });\n return classes;\n}\n","export enum Channels {\n Overlay = 'bleet:overlay',\n OverlayStatus = 'bleet:overlay:status',\n Modal = 'bleet:modal',\n ModalStatus = 'bleet:modal:status',\n Toaster = 'bleet:toaster',\n ToasterStatus = 'bleet:toaster:status',\n Menu = 'bleet:menu',\n MenuStatus = 'bleet:menu:status',\n Badge = 'bleet:badge',\n Profile = 'bleet:profile',\n ProfileStatus = 'bleet:profile:status',\n Ajaxify = 'bleet:ajaxify',\n Popover = 'bleet:popover',\n PopoverStatus = 'bleet:popover:status',\n Upload = 'bleet:upload',\n}\n/**\n * Upload actions, handled by the upload bridges (@blackcube/aurelia-bridge-resumablejs)\n */\nexport enum UploadAction {\n Reset = 'reset',\n}\nexport enum OverlayAction {\n Open = 'open',\n Close = 'close',\n Toggle = 'toggle',\n}\nexport enum OverlayStatus {\n Opening = 'opening',\n Closing = 'closing',\n Opened = 'opened',\n Closed = 'closed',\n}\nexport enum ProfileAction {\n Open = 'open',\n Close = 'close',\n Toggle = 'toggle',\n}\nexport enum ProfileStatus {\n Opening = 'opening',\n Closing = 'closing',\n Opened = 'opened',\n Closed = 'closed',\n}\nexport enum ModalAction {\n Open = 'open',\n Close = 'close',\n Toggle = 'toggle',\n}\nexport enum ModalStatus {\n Opening = 'opening',\n Closing = 'closing',\n Opened = 'opened',\n Closed = 'closed',\n}\n\nexport enum AjaxifyAction {\n Refresh = 'refresh',\n Run = 'run',\n}\nexport enum AjaxifyTriggerMode {\n Classic = 'classic',\n PublishOnly = 'publishOnly',\n}\nexport enum ToasterAction {\n Add = 'add',\n Remove = 'remove',\n}\nexport enum ToasterStatus {\n Added = 'added',\n Removed = 'removed',\n}\n\nexport enum MenuAction {\n Open = 'open',\n Close = 'close',\n Toggle = 'toggle',\n}\nexport enum BadgeAction {\n Remove = 'remove',\n}\nexport enum MenuStatus {\n Opening = 'opening',\n Closing = 'closing',\n Opened = 'opened',\n Closed = 'closed',\n}\n\nexport enum PopoverAction {\n Open = 'open',\n Close = 'close',\n Toggle = 'toggle',\n}\nexport enum PopoverStatus {\n Opening = 'opening',\n Closing = 'closing',\n Opened = 'opened',\n Closed = 'closed',\n}\n\nexport enum UiColor {\n Primary = 'primary',\n Secondary = 'secondary',\n Success = 'success',\n Danger = 'danger',\n Warning = 'warning',\n Info = 'info',\n Accent = 'accent',\n}\nexport enum UiToastIcon {\n Info = 'information-circle',\n Success = 'check-circle',\n Warning = 'exclamation-triangle',\n Danger = 'x-circle',\n}\n\n/**\n * Icons for toasts and dialogs\n * Double alias: short (Info) and long (InformationCircle) → same value\n */\nexport enum UiIcon {\n Info = 'information-circle',\n Success = 'check-circle',\n Warning = 'exclamation-triangle',\n Danger = 'x-circle',\n\n InformationCircle = 'information-circle',\n CheckCircle = 'check-circle',\n ExclamationTriangle = 'exclamation-triangle',\n XCircle = 'x-circle',\n}\n\n/**\n * Primary actions of a dialog response (mutually exclusive)\n */\nexport enum DialogAction {\n Keep = 'keep',\n Close = 'close',\n RefreshAndClose = 'refreshAndClose',\n}","import {customAttribute, IEventAggregator, ILogger, INode, resolve} from \"aurelia\";\nimport {Channels, MenuAction} from '../enums/event-aggregator';\nimport {IMenu} from '../interfaces/event-aggregator';\n\n/**\n * Burger button of the Header widget: a click publishes MenuAction.Open on Channels.Menu.\n */\n@customAttribute('bleet-burger')\nexport class BleetBurgerCustomAttribute\n{\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-burger'),\n private readonly ea:IEventAggregator = resolve(IEventAggregator),\n private readonly element: HTMLButtonElement = resolve(INode) as HTMLButtonElement,\n ) {\n this.logger.trace('constructor')\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.element.addEventListener('click', this.onClickButton);\n\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.element.removeEventListener('click', this.onClickButton);\n }\n\n private onClickButton = (event: MouseEvent) => {\n this.logger.trace('onClickButton', event);\n event.preventDefault();\n this.ea.publish(Channels.Menu, <IMenu>{action: MenuAction.Open});\n }\n\n}","import {customAttribute, IDisposable, IEventAggregator, ILogger, INode, IPlatform, resolve} from \"aurelia\";\nimport {Channels, MenuAction, MenuStatus, OverlayAction, OverlayStatus} from '../enums/event-aggregator';\nimport {IMenu, IMenuStatus, IOverlay, IOverlayStatus} from '../interfaces/event-aggregator';\nimport {ITransitionService} from '../services/transition-service';\nimport {IStorageService} from '../services/storage-service';\nimport {setState} from '../utils/state-classes';\n\n/**\n * Side menu rendered by the PHP Sidebar widget: opened and closed through Channels.Menu with\n * the data-menu-show / data-menu-hide classes of the element; [data-menu=toggle-button-ID]\n * shows or hides [data-menu=toggle-list-ID] (hidden attribute, accordion: opening one closes the others) and sets\n * the data-menu-show / data-menu-hide classes of its svg[data-menu=icon]. The open sublists are kept in storage; a\n * button added after attaching is linked on its first click.\n */\n@customAttribute('bleet-menu')\nexport class BleetMenuCustomAttribute\n{\n private disposable?: IDisposable;\n private disposableOverlay?: IDisposable;\n private closeButton?: HTMLButtonElement;\n private toggleButtons?: NodeListOf<HTMLButtonElement>;\n private sublists: Map<HTMLButtonElement, {list: HTMLElement, svg: HTMLElement}> = new Map();\n private isOpen: boolean = false;\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-menu'),\n private readonly ea:IEventAggregator = resolve(IEventAggregator),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly p: IPlatform = resolve(IPlatform),\n private readonly transitionService: ITransitionService = resolve(ITransitionService),\n private readonly storageService: IStorageService = resolve(IStorageService),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n this.closeButton = this.element.querySelector('[data-menu=close]') as HTMLButtonElement;\n this.toggleButtons = this.element.querySelectorAll('[data-menu^=\"toggle-button\"]');\n this.initMenuButtons();\n }\n public attached()\n {\n this.logger.trace('attached');\n this.disposable = this.ea.subscribe(Channels.Menu, this.onMenuEvent);\n this.disposableOverlay = this.ea.subscribe(Channels.OverlayStatus, this.onOverlayStatus);\n this.closeButton?.addEventListener('click', this.onClickClose);\n this.element.addEventListener('click', this.onClickToggleButtons)\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.closeButton?.removeEventListener('click', this.onClickClose);\n this.element.removeEventListener('click', this.onClickToggleButtons)\n this.disposableOverlay?.dispose();\n this.disposable?.dispose();\n }\n public dispose() {\n this.logger.trace('dispose');\n this.disposableOverlay?.dispose();\n this.disposable?.dispose();\n }\n\n private open(fromOverlay: boolean = false) {\n if (!this.isOpen) {\n this.logger.trace('open');\n this.isOpen = true;\n this.transitionService.run(this.element, (element: HTMLElement) => {\n if (!fromOverlay) {\n this.ea.publish(Channels.Overlay, <IOverlay>{action: OverlayAction.Open});\n }\n this.ea.publish(Channels.MenuStatus, <IMenuStatus>{status: MenuStatus.Opening});\n setState(element, 'menu', 'show');\n element.ariaHidden = 'false';\n }, (element: HTMLElement) => {\n this.ea.publish(Channels.MenuStatus, <IMenuStatus>{status: MenuStatus.Opened});\n });\n }\n }\n private close(fromOverlay: boolean = false) {\n if (this.isOpen) {\n this.logger.trace('close');\n this.isOpen = false;\n this.transitionService.run(this.element, (element: HTMLElement) => {\n this.ea.publish(Channels.MenuStatus, <IMenuStatus>{status: MenuStatus.Closing});\n if (!fromOverlay) {\n this.ea.publish(Channels.Overlay, <IOverlay>{action: OverlayAction.Close});\n }\n setState(element, 'menu', 'hide');\n element.ariaHidden = 'true';\n }, (element: HTMLElement) => {\n this.ea.publish(Channels.MenuStatus, <IMenuStatus>{status: MenuStatus.Closed});\n });\n }\n }\n\n private onClickClose = (event: MouseEvent) => {\n this.logger.trace('onClickClose', event);\n event.preventDefault();\n this.close();\n }\n\n private onClickToggleButtons = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n const btn = target.closest('[data-menu^=\"toggle-button\"]') as HTMLButtonElement;\n if (btn && btn.matches('[data-menu^=\"toggle-button\"]')) {\n event.preventDefault();\n this.toggleButton(btn);\n }\n }\n\n private initMenuButtons() {\n this.logger.trace('initMenu');\n this.toggleButtons?.forEach((btn: HTMLButtonElement) => {\n this.initButton(btn);\n });\n }\n\n /**\n * Links a toggle button to its list and restores the stored state; called at attaching for the buttons present,\n * and on the first click for a button added to the menu afterwards.\n */\n private initButton(btn: HTMLButtonElement) {\n if (this.sublists.has(btn) === false) {\n const id = btn.dataset.menu?.replace('toggle-button-', '');\n const list = this.element.querySelector(`[data-menu=\"toggle-list-${id}\"]`) as HTMLElement | null;\n const svg = btn.querySelector('svg[data-menu=icon]') as HTMLElement | null;\n if (list !== null && svg !== null) {\n this.sublists.set(btn, {list, svg});\n this.setSublist(btn, this.storageService.load(`toggle-list-${id}`, false) === true);\n }\n }\n }\n\n /**\n * Accordion: opening a list closes the other ones.\n */\n private toggleButton(btn: HTMLButtonElement) {\n this.initButton(btn);\n const sublist = this.sublists.get(btn);\n if (sublist !== undefined) {\n const open = sublist.list.hidden === true;\n if (open === true) {\n this.closeOtherButtons(btn);\n }\n this.setSublist(btn, open);\n }\n }\n\n private closeOtherButtons(except: HTMLButtonElement) {\n this.sublists.forEach((value, key) => {\n if (key !== except) {\n this.setSublist(key, false);\n }\n });\n }\n\n private setSublist(btn: HTMLButtonElement, open: boolean) {\n const sublist = this.sublists.get(btn);\n if (sublist !== undefined) {\n const id = btn.dataset.menu?.replace('toggle-button-', '');\n sublist.list.hidden = open === false;\n setState(sublist.svg, 'menu', open === true ? 'show' : 'hide');\n btn.ariaExpanded = open === true ? 'true' : 'false';\n this.storageService.save(`toggle-list-${id}`, open);\n }\n }\n private onMenuEvent = (data: IMenu) => {\n this.logger.trace('onMenuEvent', data);\n if (data.action === MenuAction.Close) {\n this.logger.trace('Menu Close action received');\n this.close();\n } else if (data.action === MenuAction.Open) {\n this.logger.trace('Menu Open action received');\n this.open();\n } else if (data.action === MenuAction.Toggle) {\n this.logger.trace('Menu Toggle action received');\n if (this.isOpen === true) {\n this.close();\n } else {\n this.open();\n }\n }\n }\n private onOverlayStatus = (data: IOverlayStatus) => {\n if (data.status === OverlayStatus.Closing) {\n this.logger.trace('Overlay Close action received');\n this.close(true);\n } else {\n this.logger.trace('onOverlayStatus unhandled', data);\n }\n }\n}","import {bindable, customAttribute, IEventAggregator, ILogger, INode, resolve} from \"aurelia\";\nimport {BadgeAction, Channels} from '../enums/event-aggregator';\nimport {IBadge} from '../interfaces/event-aggregator';\n\n/**\n * Removable badge: a click on [data-badge=remove] publishes BadgeAction.Remove with the badge id on Channels.Badge,\n * then removes the element.\n */\n@customAttribute({ name: 'bleet-badge', defaultProperty: 'id' })\nexport class BleetBadgeCustomAttribute\n{\n private closeButton?: HTMLElement;\n @bindable id: string = '';\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-badge'),\n private readonly ea:IEventAggregator = resolve(IEventAggregator),\n private readonly element: HTMLButtonElement = resolve(INode) as HTMLButtonElement,\n ) {\n this.logger.trace('constructor')\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.closeButton = this.element.querySelector('[data-badge=remove]') ?? undefined;\n this.closeButton?.addEventListener('click', this.onClickRemove);\n\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.closeButton?.removeEventListener('click', this.onClickRemove);\n }\n\n private onClickRemove = (event: MouseEvent) => {\n this.logger.trace('onClickRemove', event);\n event.preventDefault();\n this.ea.publish(Channels.Badge, <IBadge>{action: BadgeAction.Remove, id: this.id});\n this.element.remove();\n }\n\n}","import {customAttribute, ILogger, INode, resolve} from \"aurelia\";\nimport {ITrapFocusService} from '../services/trap-focus-service';\nimport {setState} from '../utils/state-classes';\n\n/**\n * Advanced select rendered by the PHP Select widget (searchable, multiple, with tags): the native select stays the\n * value holder, [data-dropdown=items] (hidden attribute) is filled from its options with the\n * [data-dropdown=item-template] and [data-dropdown=group-template] templates. The selected items and their\n * [data-dropdown=item-check] get their data-dropdown-show classes, the others their data-dropdown-hide classes; a\n * disabled option gets the data-dropdown-disabled classes of its item. [data-dropdown=search] filters the items\n * (hidden attribute) and shows [data-dropdown=empty] when nothing matches.\n */\n@customAttribute('bleet-dropdown')\nexport class BleetDropdownCustomAttribute {\n\n private select?: HTMLSelectElement;\n private button?: HTMLButtonElement;\n private buttonText?: HTMLElement;\n private optionTemplate?: HTMLTemplateElement;\n private countTemplate: HTMLTemplateElement | null = null;\n private groupTemplate?: HTMLTemplateElement;\n private tagTemplate?: HTMLTemplateElement;\n private tagsContainer?: HTMLElement;\n private placeholder?: HTMLElement;\n private itemsPlace?: HTMLElement;\n private itemsContainer?: HTMLElement;\n private searchInput?: HTMLInputElement;\n private emptyMessage?: HTMLElement;\n private isMultiple: boolean = false;\n private withTags: boolean = false;\n private selectObserver?: MutationObserver;\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-dropdown'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly trapFocusService: ITrapFocusService = resolve(ITrapFocusService),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n this.select = this.element.querySelector('select') as HTMLSelectElement;\n this.button = this.element.querySelector('button') as HTMLButtonElement;\n this.buttonText = this.button.querySelector('[data-dropdown=value]') as HTMLElement;\n this.tagsContainer = this.button.querySelector('[data-dropdown=tags]') as HTMLElement;\n this.placeholder = this.button.querySelector('[data-dropdown=placeholder]') as HTMLElement;\n this.optionTemplate = this.element.querySelector('[data-dropdown=item-template]') as HTMLTemplateElement;\n this.groupTemplate = this.element.querySelector('[data-dropdown=group-template]') as HTMLTemplateElement;\n this.tagTemplate = this.element.querySelector('[data-dropdown=tag-template]') as HTMLTemplateElement;\n this.itemsPlace = this.element.querySelector('[data-dropdown=items]') as HTMLElement;\n this.itemsContainer = this.element.querySelector('[data-dropdown=items-container]') as HTMLElement;\n this.searchInput = this.element.querySelector('[data-dropdown=search]') as HTMLInputElement;\n this.emptyMessage = this.element.querySelector('[data-dropdown=empty]') as HTMLElement;\n this.countTemplate = this.element.querySelector('template[data-dropdown=count]');\n this.isMultiple = this.select?.multiple || false;\n this.withTags = this.tagTemplate !== null;\n }\n\n /**\n * The panel is rebuilt when the options of the native select change, inside an <optgroup> too (subtree).\n */\n public attached()\n {\n this.logger.trace('attached');\n if (!this.itemsPlace) {\n throw new Error('Items place element not found');\n }\n if (!this.itemsPlace.id) {\n this.itemsPlace.id = `data-dropdown-items-${Math.random().toString(36).substring(2, 15)}`;\n }\n if (!this.select?.options) {\n throw new Error('Select options not found');\n }\n if (!this.optionTemplate) {\n throw new Error('Option template not found');\n }\n if (!this.button) {\n throw new Error('Button element not found');\n }\n if (!this.buttonText && !this.tagsContainer) {\n throw new Error('Button text or tags container element not found');\n }\n if (this.select.options.length > 0) {\n this.preparePanel();\n }\n this.selectObserver = new MutationObserver(() => {\n if (this.select && this.select.options.length > 0) {\n this.preparePanel();\n }\n });\n this.selectObserver.observe(this.select, { childList: true, subtree: true });\n\n this.button.ariaHasPopup = 'listbox';\n this.button.setAttribute('aria-controls', this.itemsPlace.id);\n this.itemsPlace.role = 'listbox';\n\n this.button?.addEventListener('click', this.onClickToggleMenu);\n this.itemsPlace?.addEventListener('click', this.onClickToggleItem);\n this.searchInput?.addEventListener('input', this.onSearchInput);\n this.select.addEventListener('change', this.onSelectChange);\n\n if (this.withTags) {\n this.tagsContainer?.addEventListener('click', this.onClickRemoveTag);\n }\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.selectObserver?.disconnect();\n this.selectObserver = undefined;\n this.button?.removeEventListener('click', this.onClickToggleMenu);\n this.itemsPlace?.removeEventListener('click', this.onClickToggleItem);\n this.searchInput?.removeEventListener('input', this.onSearchInput);\n this.select?.removeEventListener('change', this.onSelectChange);\n if (this.withTags) {\n this.tagsContainer?.removeEventListener('click', this.onClickRemoveTag);\n }\n }\n\n private onClickToggleMenu = (event: MouseEvent) => {\n this.logger.trace('onClick', event);\n let result: Promise<unknown> | undefined;\n if ((event.target as HTMLElement).closest('[data-dropdown=tag-remove]') === null) {\n event.preventDefault();\n if (this.select?.disabled !== true) {\n result = this.toggleMenu();\n }\n }\n return result;\n }\n\n /**\n * A value set on the native select by the page (programmatic change followed by a change event) is shown too.\n */\n private onSelectChange = () => {\n this.swapItemClasses();\n }\n\n private onClickRemoveTag = (event: MouseEvent) => {\n const removeButton = (event.target as HTMLElement).closest('[data-dropdown=tag-remove]');\n if (!removeButton) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n const tagElement = removeButton.closest('[data-tag-value]') as HTMLElement;\n if (!tagElement) return;\n\n const value = tagElement.dataset.tagValue;\n\n Array.from((this.select as HTMLSelectElement).options).forEach((option) => {\n if (option.value == value) {\n option.selected = false;\n }\n });\n\n this.select?.dispatchEvent(new Event('change', { bubbles: true }));\n\n this.swapItemClasses();\n this.updateDisplay();\n }\n\n private onStopTrapFocus = () => {\n this.logger.trace('onStopTrapFocus');\n this.itemsPlace!.hidden = true;\n if (this.searchInput) {\n this.searchInput.value = '';\n this.filterItems('');\n }\n return Promise.resolve();\n }\n\n /**\n * The panel opens on its SELECTION, not on its first item: once the panel is shown (a hidden element has no\n * geometry), the selected item is scrolled into view — `nearest` scrolls the panel only when the item is out of\n * sight, and never the page. Without it, with a search field taking the focus, the current value of a long list\n * stayed below the fold.\n */\n private toggleMenu = () => {\n const isClosed = this.itemsPlace?.hidden;\n return new Promise((resolve) => {\n if (isClosed) {\n (this.button as HTMLButtonElement).ariaExpanded = 'true';\n\n const initialFocus = this.searchInput || this.itemsPlace?.querySelector('[aria-selected=\"true\"]') as HTMLElement;\n\n return this.trapFocusService.start(\n this.button as HTMLButtonElement,\n this.itemsPlace as HTMLElement,\n this.element,\n undefined,\n this.onStopTrapFocus,\n initialFocus\n )\n .then(() => {\n this.logger.trace('toggleMenu opened');\n this.itemsPlace!.hidden = false;\n (this.itemsPlace?.querySelector('[aria-selected=\"true\"]') as HTMLElement | null)\n ?.scrollIntoView({ block: 'nearest' });\n resolve(void 0);\n });\n } else {\n (this.button as HTMLButtonElement).ariaExpanded = 'false';\n return this.trapFocusService.stop()\n .then(() => {\n this.logger.trace('toggleMenu closed');\n this.itemsPlace!.hidden = true;\n resolve(void 0);\n });\n }\n });\n }\n\n /**\n * A disabled option is shown but never chosen: the native <option disabled> is the source of truth.\n */\n private onClickToggleItem = (event: MouseEvent) => {\n this.logger.trace('onClickItem', event);\n event.preventDefault();\n const element = (event.target as HTMLElement).closest('[data-value]') as HTMLElement;\n if (!element) return;\n if (element.getAttribute('aria-disabled') === 'true') return;\n\n const clickedValue = element.dataset.value;\n\n if (this.isMultiple) {\n Array.from((this.select as HTMLSelectElement).options).forEach((option) => {\n if (option.value == clickedValue) {\n option.selected = !option.selected;\n }\n });\n\n this.select?.dispatchEvent(new Event('change', { bubbles: true }));\n\n this.swapItemClasses();\n this.updateDisplay();\n } else {\n Array.from((this.select as HTMLSelectElement).options).forEach((option) => {\n option.selected = option.value == clickedValue;\n });\n\n this.select?.dispatchEvent(new Event('change', { bubbles: true }));\n\n this.synchSelect();\n }\n }\n\n private onSearchInput = (event: Event) => {\n const query = (event.target as HTMLInputElement).value;\n this.filterItems(query);\n }\n\n private filterItems(query: string) {\n const normalizedQuery = query.toLowerCase().trim();\n let visibleCount = 0;\n\n this.itemsContainer?.querySelectorAll('[data-value]').forEach((item) => {\n const text = item.querySelector('[data-dropdown=item-text]')?.textContent?.toLowerCase() || '';\n const isVisible = normalizedQuery === '' || text.includes(normalizedQuery);\n\n (item as HTMLElement).hidden = !isVisible;\n if (isVisible) {\n visibleCount++;\n }\n });\n\n if (this.emptyMessage) {\n this.emptyMessage.hidden = !(visibleCount === 0 && normalizedQuery !== '');\n }\n\n this.updateGroupVisibility();\n }\n\n private updateGroupVisibility() {\n if (!this.itemsContainer) return;\n const groups = this.itemsContainer.querySelectorAll('[data-dropdown=group]');\n groups.forEach((group) => {\n let hasVisible = false;\n let sibling = group.nextElementSibling;\n while (sibling && !sibling.matches('[data-dropdown=group]')) {\n if (!(sibling as HTMLElement).hidden) {\n hasVisible = true;\n break;\n }\n sibling = sibling.nextElementSibling;\n }\n (group as HTMLElement).hidden = !hasVisible;\n });\n }\n\n private synchSelect() {\n this.swapItemClasses();\n\n return this.toggleMenu();\n }\n\n private updateDisplay() {\n if (this.withTags) {\n this.updateTags();\n } else {\n this.updateButtonText();\n }\n }\n\n /**\n * Several options selected without tags: the text of template[data-dropdown=count] with {count} replaced, given\n * by the application, else the number alone.\n */\n private updateButtonText() {\n const selectedOptions = Array.from((this.select as HTMLSelectElement).options).filter(opt => opt.selected);\n\n if (selectedOptions.length === 0) {\n const placeholder = Array.from((this.select as HTMLSelectElement).options).find(opt => opt.value === '');\n (this.buttonText as HTMLElement).innerHTML = placeholder?.innerHTML || '';\n } else if (selectedOptions.length === 1) {\n (this.buttonText as HTMLElement).innerHTML = selectedOptions[0].innerHTML;\n } else {\n const count = String(selectedOptions.length);\n const text = this.countTemplate !== null ? (this.countTemplate.content.textContent ?? '').replace('{count}', count) : count;\n (this.buttonText as HTMLElement).textContent = text;\n }\n }\n\n private updateTags() {\n if (!this.tagsContainer || !this.tagTemplate) return;\n\n const selectedOptions = Array.from((this.select as HTMLSelectElement).options).filter(opt => opt.selected && opt.value !== '');\n\n this.tagsContainer.querySelectorAll('[data-tag-value]').forEach(tag => tag.remove());\n\n if (this.placeholder) {\n this.placeholder.hidden = selectedOptions.length > 0;\n }\n\n selectedOptions.forEach((option) => {\n const tagFragment = this.tagTemplate!.content.cloneNode(true) as DocumentFragment;\n const tagElement = tagFragment.querySelector('[data-tag-value]') as HTMLElement;\n const tagText = tagFragment.querySelector('[data-dropdown=tag-text]') as HTMLElement;\n\n tagElement.dataset.tagValue = option.value;\n tagText.textContent = option.textContent;\n\n this.tagsContainer?.appendChild(tagFragment);\n });\n }\n\n private swapItemClasses() {\n Array.from((this.select as HTMLSelectElement).options).forEach((option) => {\n const item = this.itemsContainer?.querySelector(`[data-value=\"${CSS.escape(option.value)}\"]`) as HTMLElement;\n if (!item) return;\n\n const checkmark = item.querySelector('[data-dropdown=item-check]') as HTMLElement | null;\n\n if (option.selected) {\n setState(item, 'dropdown', 'show');\n if (checkmark) {\n setState(checkmark, 'dropdown', 'show');\n }\n\n item.setAttribute('aria-selected', 'true');\n this.button?.setAttribute('aria-activedescendant', item.id);\n } else {\n setState(item, 'dropdown', 'hide');\n if (checkmark) {\n setState(checkmark, 'dropdown', 'hide');\n }\n\n item.setAttribute('aria-selected', 'false');\n }\n });\n\n this.updateDisplay();\n }\n\n private preparePanel() {\n this.logger.trace('preparePanel');\n if (!this.select) {\n throw new Error('Select element not found');\n }\n if (this.itemsContainer) {\n this.itemsContainer.innerHTML = '';\n }\n\n Array.from(this.select.children).forEach((child) => {\n if (child.tagName === 'OPTGROUP') {\n const groupedOptions = Array.from(child.children).filter((c) => c.tagName === 'OPTION');\n if (groupedOptions.length > 0) {\n this.appendGroupHeader((child as HTMLOptGroupElement).label);\n groupedOptions.forEach((o) => this.appendOption(o as HTMLOptionElement));\n }\n } else if (child.tagName === 'OPTION') {\n this.appendOption(child as HTMLOptionElement);\n }\n });\n\n this.swapItemClasses();\n }\n\n /**\n * An <option disabled> gives an item that stays visible (the reader knows it exists) but cannot be taken: no\n * click, no focus, and the classes the template declares for that state (data-dropdown-disabled).\n */\n private appendOption(option: HTMLOptionElement) {\n const item = (this.optionTemplate as HTMLTemplateElement).content.cloneNode(true) as DocumentFragment;\n const button = item.querySelector('button') as HTMLButtonElement;\n\n button.role = 'option';\n button.id = `bleet-option-${option.value}-${Math.random().toString(36).substring(2, 9)}`;\n\n const itemText = item.querySelector('[data-dropdown=item-text]') as HTMLElement;\n const itemValue = item.querySelector('[data-value]') as HTMLElement;\n itemValue.dataset.value = option.value;\n itemText.innerHTML = option.innerHTML;\n\n if (option.disabled) {\n button.disabled = true;\n button.setAttribute('aria-disabled', 'true');\n const disabledClasses = (button.getAttribute('data-dropdown-disabled') ?? '').split(' ').filter((c) => c !== '');\n button.classList.add(...disabledClasses);\n }\n\n this.itemsContainer?.append(item);\n }\n\n private appendGroupHeader(label: string) {\n if (!this.groupTemplate) return;\n const fragment = this.groupTemplate.content.cloneNode(true) as DocumentFragment;\n const groupLabel = fragment.querySelector('[data-dropdown=group-label]') as HTMLElement | null;\n if (groupLabel) {\n groupLabel.textContent = label;\n }\n this.itemsContainer?.append(fragment);\n }\n}\n","import {customAttribute, ILogger, INode, resolve} from \"aurelia\";\nimport {setState} from '../utils/state-classes';\n\n/**\n * Password field rendered by the PHP Input widget: [data-password=toggle] switches the input between password and\n * text, and sets the data-password-show / data-password-hide classes of [data-password=icon-hidden] and\n * [data-password=icon-visible].\n */\n@customAttribute('bleet-password')\nexport class BleetPasswordCustomAttribute\n{\n private button?: HTMLElement;\n private iconHidden?: HTMLElement;\n private iconVisible?: HTMLElement;\n private input?: HTMLInputElement;\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-password'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n ) {\n }\n\n public attaching(): void\n {\n this.button = this.element.querySelector('[data-password=toggle]') ?? undefined;\n this.iconHidden = this.button?.querySelector('[data-password=icon-hidden]') ?? undefined;\n this.iconVisible = this.button?.querySelector('[data-password=icon-visible]') ?? undefined;\n this.input = this.element.querySelector('input') ?? undefined;\n }\n\n public attached(): void\n {\n this.button?.addEventListener('click', this.onToggle);\n }\n\n public detaching(): void\n {\n this.button?.removeEventListener('click', this.onToggle);\n }\n\n private onToggle = (event: MouseEvent): void => {\n event.preventDefault();\n\n const isPassword = this.input?.type === 'password';\n\n if (this.input) {\n this.input.type = isPassword ? 'text' : 'password';\n }\n\n if (this.iconHidden) {\n setState(this.iconHidden, 'password', isPassword ? 'hide' : 'show');\n }\n if (this.iconVisible) {\n setState(this.iconVisible, 'password', isPassword ? 'show' : 'hide');\n }\n }\n}","import {customAttribute, ILogger, INode, IPlatform, resolve} from \"aurelia\";\n\n/**\n * Tabs rendered by the PHP Tabs widget: [data-tabs=tab-N] buttons and the [data-tabs=select]\n * mobile select switch the [data-tabs=panel-N] panels (hidden attribute); button classes are\n * copied from the active and inactive buttons of the markup.\n */\n@customAttribute('bleet-tabs')\nexport class BleetTabsCustomAttribute {\n\n private activeClasses: string = '';\n private inactiveClasses: string = '';\n private select?: HTMLSelectElement;\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-tabs'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n const activeButton = this.element.querySelector('[data-tabs^=\"tab-\"][aria-selected=\"true\"]');\n const inactiveButton = this.element.querySelector('[data-tabs^=\"tab-\"][aria-selected=\"false\"]');\n\n this.activeClasses = activeButton?.className || '';\n this.inactiveClasses = inactiveButton?.className || '';\n\n this.select = this.element.querySelector('select') as HTMLSelectElement;\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.element.querySelectorAll('[data-tabs^=\"tab-\"]').forEach((button: Element) => {\n button.addEventListener('click', this.onClickTab);\n });\n\n if (this.select) {\n this.select.addEventListener('change', this.onChangeSelect);\n }\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.element.querySelectorAll('[data-tabs^=\"tab-\"]').forEach((button: Element) => {\n button.removeEventListener('click', this.onClickTab);\n });\n\n if (this.select) {\n this.select.removeEventListener('change', this.onChangeSelect);\n }\n }\n\n private onClickTab = (event: Event) => {\n this.logger.trace('onClickTab', event);\n event.preventDefault();\n const tabIndex = (event.currentTarget as HTMLElement).getAttribute('data-tabs')?.replace('tab-', '') || '0';\n\n this.element.querySelectorAll('[data-tabs^=\"tab-\"]').forEach((button: Element) => {\n const buttonTabIndex = button.getAttribute('data-tabs')?.replace('tab-', '') || '0';\n if (buttonTabIndex === tabIndex) {\n button.setAttribute('aria-selected', 'true');\n button.className = this.activeClasses;\n } else {\n button.setAttribute('aria-selected', 'false');\n button.className = this.inactiveClasses;\n }\n });\n\n this.element.querySelectorAll('[data-tabs^=\"panel-\"]').forEach((panel: Element) => {\n const panelIndex = panel.getAttribute('data-tabs')?.replace('panel-', '') || '0';\n if (panelIndex === tabIndex) {\n (panel as HTMLElement).hidden = false;\n panel.setAttribute('aria-hidden', 'false');\n } else {\n (panel as HTMLElement).hidden = true;\n panel.setAttribute('aria-hidden', 'true');\n }\n });\n\n if (this.select && this.select.value !== tabIndex) {\n this.select.value = tabIndex;\n this.select.dispatchEvent(new Event('change', { bubbles: true }));\n }\n }\n\n private onChangeSelect = (event: Event) => {\n this.logger.trace('onChangeSelect', event);\n const tabIndex = this.select?.value;\n const button = this.element.querySelector(`[data-tabs=\"tab-${tabIndex}\"]`) as HTMLElement;\n\n if (button) {\n button.click();\n }\n }\n}","import {bindable, customAttribute, IDisposable, IEventAggregator, ILogger, INode, IPlatform, resolve} from \"aurelia\";\nimport {Channels, ProfileAction, ProfileStatus} from '../enums/event-aggregator';\nimport {IProfile, IProfileStatus} from '../interfaces/event-aggregator';\nimport {ITransitionService} from '../services/transition-service';\nimport {ITrapFocusService} from '../services/trap-focus-service';\nimport {setState} from '../utils/state-classes';\n\n/**\n * Profile menu rendered by the PHP Profile widget: [data-profile=toggle] opens the\n * [data-profile=panel] (hidden attribute, then data-profile-show / data-profile-hide classes\n * of the panel) and traps the focus while it is open.\n */\n@customAttribute({ name: 'bleet-profile', defaultProperty: 'id' })\nexport class BleetProfileCustomAttribute\n{\n\n @bindable id: string = '';\n private disposable?: IDisposable;\n private toggleButton?: HTMLButtonElement;\n private panel?: HTMLDivElement;\n private isOpen: boolean = false;\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-profile'),\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly transitionService: ITransitionService = resolve(ITransitionService),\n private readonly p: IPlatform = resolve(IPlatform),\n private readonly trapFocusService: ITrapFocusService = resolve(ITrapFocusService),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n this.toggleButton = this.element.querySelector('[data-profile=toggle]') as HTMLButtonElement;\n this.panel = this.element.querySelector('[data-profile=panel]') as HTMLDivElement;\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.disposable = this.ea.subscribe(Channels.Profile, this.onProfileEvent);\n this.toggleButton?.addEventListener('click', this.onClickToggle);\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.toggleButton?.removeEventListener('click', this.onClickToggle);\n if (this.isOpen) {\n this.trapFocusService.stop();\n }\n this.disposable?.dispose();\n }\n public dispose() {\n this.logger.trace('dispose');\n this.disposable?.dispose();\n }\n\n private onClickToggle = (event: MouseEvent) => {\n this.logger.trace('onClickToggle', event);\n event.preventDefault();\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n private onStopTrapFocus = () => {\n this.logger.trace('onStopTrapFocus');\n this.isOpen = false;\n this.toggleButton?.setAttribute('aria-expanded', 'false');\n this.transitionService.run(this.panel!, (element) => {\n this.ea.publish(Channels.Profile, <IProfile>{action: ProfileAction.Close, id: this.id});\n this.ea.publish(Channels.ProfileStatus, <IProfileStatus>{status: ProfileStatus.Closing, id: this.id});\n this.p.requestAnimationFrame(() => {\n setState(element, 'profile', 'hide');\n });\n }, (element) => {\n element.hidden = true;\n this.ea.publish(Channels.ProfileStatus, <IProfileStatus>{status: ProfileStatus.Closed, id: this.id});\n });\n return Promise.resolve();\n }\n\n private open() {\n this.logger.trace('open');\n this.isOpen = true;\n this.toggleButton?.setAttribute('aria-expanded', 'true');\n\n const firstItem = this.panel?.querySelector('a, button') as HTMLElement;\n\n return this.trapFocusService.start(\n this.toggleButton as HTMLButtonElement,\n this.panel as HTMLElement,\n this.element,\n undefined,\n this.onStopTrapFocus,\n firstItem\n ).then(() => {\n this.panel!.hidden = false;\n this.transitionService.run(this.panel!, (element) => {\n this.ea.publish(Channels.Profile, <IProfile>{action: ProfileAction.Open, id: this.id});\n this.ea.publish(Channels.ProfileStatus, <IProfileStatus>{status: ProfileStatus.Opening, id: this.id});\n this.p.requestAnimationFrame(() => {\n setState(element, 'profile', 'show');\n });\n }, () => {\n this.ea.publish(Channels.ProfileStatus, <IProfileStatus>{status: ProfileStatus.Opened, id: this.id});\n });\n });\n }\n\n private close() {\n this.logger.trace('close');\n this.trapFocusService.stop();\n }\n\n private onProfileEvent = (data: IProfile) => {\n this.logger.trace('onProfileEvent', data);\n const isTargeted = (data.id === undefined || data.id === this.id);\n if (data.action === ProfileAction.Close && isTargeted && this.isOpen) {\n this.logger.trace('Profile Close action received');\n this.close();\n }\n }\n\n}\n","import {bindable, customAttribute, IEventAggregator, ILogger, INode, resolve} from \"aurelia\";\nimport {Channels, ToasterAction, UiColor, UiToastIcon} from '../enums/event-aggregator';\nimport {IToaster} from '../interfaces/event-aggregator';\n\n/**\n * Click on the element: publishes one toast (id, color, icon, title, content, duration) on Channels.Toaster.\n */\n@customAttribute({ name: 'bleet-toaster-trigger', defaultProperty: 'id' })\nexport class BleetToasterTriggerCustomAttribute {\n\n @bindable id: string = '';\n @bindable() public color: UiColor = UiColor.Info;\n @bindable() public icon: UiToastIcon = UiToastIcon.Info;\n @bindable() public title: string = '';\n @bindable() public content: string = '';\n @bindable() public duration: number = 0; // Duration in milliseconds\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-toaster-trigger'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.element.addEventListener('click', this.onClick);\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.element.removeEventListener('click', this.onClick);\n }\n\n private onClick = (event: Event) => {\n this.logger.trace('onClick', event);\n event.preventDefault();\n this.ea.publish(Channels.Toaster, <IToaster>{\n action: ToasterAction.Add, toast:\n {\n id: this.id,\n duration: this.duration,\n color: this.color,\n icon: this.icon,\n title: this.title,\n content: this.content\n }\n });\n }\n}","import {customAttribute, ILogger, INode, IPlatform, resolve} from \"aurelia\";\nimport {ITransitionService} from '../services/transition-service';\nimport {setState} from '../utils/state-classes';\n\n/**\n * Dismissible alert rendered by the PHP Alert widget: [data-alert=close] collapses it\n * (data-alert-hide classes, height to 0) then removes it.\n */\n@customAttribute('bleet-alert')\nexport class BleetAlertCustomAttribute {\n\n private closeButton?: HTMLButtonElement;\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-alert'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly p: IPlatform = resolve(IPlatform),\n private readonly transitionService: ITransitionService = resolve(ITransitionService),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n this.closeButton = this.element.querySelector('[data-alert=close]') as HTMLButtonElement;\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.closeButton?.addEventListener('click', this.onClose);\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.closeButton?.removeEventListener('click', this.onClose);\n }\n private onClose = (event: Event) => {\n this.logger.trace('onClose', event);\n event.preventDefault();\n this.transitionService.run(this.element, (element: HTMLElement) => {\n const currentHeight = element.scrollHeight;\n element.style.height = currentHeight + 'px';\n element.offsetHeight;\n element.style.height = '0px';\n setState(element, 'alert', 'hide');\n }, (element: HTMLElement) => {\n\n element.hidden = true;\n this.p.requestAnimationFrame(() => {\n element.style.height = '';\n element.remove();\n });\n });\n }\n}","import {bindable, customAttribute, IEventAggregator, ILogger, INode, resolve} from \"aurelia\";\nimport {Channels, ModalAction} from '../enums/event-aggregator';\nimport {IModal} from '../interfaces/event-aggregator';\n\n/**\n * Click on the element: publishes ModalAction.Toggle on Channels.Modal with the id and url of the dialog to open\n * (rendered by Bleet::modal($id)->trigger($url) / Bleet::drawer($id)->trigger($url)).\n */\n@customAttribute({ name: 'bleet-modal-trigger', defaultProperty: 'id' })\nexport class BleetModalTriggerCustomAttribute {\n\n @bindable id: string = '';\n @bindable() url: string = '';\n @bindable() color: string = 'primary';\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-modal-trigger'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.element.addEventListener('click', this.onClick);\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.element.removeEventListener('click', this.onClick);\n }\n public dispose()\n {\n this.logger.trace('dispose');\n }\n\n private onClick = (event: Event): void => {\n this.logger.trace('onClick', event);\n event.preventDefault();\n\n this.ea.publish(Channels.Modal, <IModal>{\n action: ModalAction.Toggle,\n id: this.id,\n url: this.url,\n color: this.color,\n });\n };\n\n}\n","import {customAttribute, ILogger, INode, IPlatform, resolve} from \"aurelia\";\n\n/**\n * Pager rendered by the PHP Pager widget: changing [data-pager=select] clicks the [data-pager=page-N] link of the\n * chosen page.\n */\n@customAttribute('bleet-pager')\nexport class BleetPagerCustomAttribute {\n\n private select?: HTMLSelectElement;\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-pager'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n this.select = this.element.querySelector('[data-pager=\"select\"]') as HTMLSelectElement;\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.select?.addEventListener('change', this.onChangeSelect);\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.select?.removeEventListener('change', this.onChangeSelect);\n }\n\n private onChangeSelect = (event: Event) => {\n this.logger.trace('onChangeSelect', event);\n const pageNumber = this.select?.value;\n const link = this.element.querySelector(`[data-pager=\"page-${pageNumber}\"]`) as HTMLElement;\n\n if (link) {\n link.click();\n }\n }\n}","import {bindable, customAttribute, IEventAggregator, ILogger, INode, IPlatform, resolve} from \"aurelia\";\nimport {AjaxifyAction, AjaxifyTriggerMode, Channels, ToasterAction, UiColor} from '../enums/event-aggregator';\nimport {IAjaxify, IAjaxifyResponse, IToast, IToaster} from '../interfaces/event-aggregator';\nimport {IApiService} from '@blackcube/aurelia-api';\n\n/**\n * Generic AJAX trigger attribute for elements.\n * Placed on the element that triggers the AJAX call.\n * Looks up parent form with closest() to get URL/verb if not specified.\n * Sends only the inputs contained within this.element.\n * Pessimistic UI: state changes only on server response.\n *\n * Bindables:\n * - url (primary): URL to call. Falls back to closest form.action.\n * - verb: HTTP method. Falls back to closest form.method or 'POST'.\n * - event: DOM event to listen for (default: 'click')\n * - id: If set, also collects inputs with data-ajaxify=\"{id}\" from closest form\n * - mode: AjaxifyTriggerMode.Classic (default) or AjaxifyTriggerMode.PublishOnly\n * - target: bleet-ajaxify id to publish the event to (publishOnly mode)\n * - method: HTTP method for the ajaxify event (publishOnly mode, default: 'POST')\n * - errorTitle / errorContent: texts of the danger toast when the request fails, given by the application\n * (Bleet::ajaxify()->errorTitle()->errorContent()); without content, the error is only logged\n */\n@customAttribute({ name: 'bleet-ajaxify-trigger', defaultProperty: 'url' })\nexport class BleetAjaxifyTriggerCustomAttribute {\n\n @bindable url: string = '';\n @bindable() verb: string = '';\n @bindable() event: string = 'click';\n @bindable() id: string = '';\n @bindable() mode: string = AjaxifyTriggerMode.Classic;\n @bindable() target: string = '';\n @bindable() method: string = 'POST';\n @bindable() errorTitle: string = '';\n @bindable() errorContent: string = '';\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-ajaxify-trigger'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly apiService: IApiService = resolve(IApiService),\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor');\n }\n\n public attached(): void {\n this.logger.trace('attached', { url: this.url, verb: this.verb, event: this.event, mode: this.mode });\n this.element.addEventListener(this.event, this.onTrigger);\n }\n\n public detaching(): void {\n this.logger.trace('detaching');\n this.element.removeEventListener(this.event, this.onTrigger);\n }\n\n private onTrigger = (event: Event): void => {\n event.preventDefault();\n event.stopPropagation();\n this.logger.trace('onTrigger', event);\n\n if (this.mode === AjaxifyTriggerMode.PublishOnly) {\n this.onTriggerPublishOnly();\n return;\n }\n\n this.onTriggerClassic(event);\n };\n\n /**\n * PublishOnly mode: enable disabled child inputs, publish ajaxify event.\n * No server call — bleet-ajaxify will collect the form and handle the request.\n *\n * Linked elements (data-ajaxify=\"{id}\") can specify data-ajaxify-target\n * to copy their value into a matching hidden input inside this.element.\n */\n private onTriggerPublishOnly(): void {\n this.logger.debug('onTriggerPublishOnly', { target: this.target, method: this.method });\n\n if (this.id) {\n const form = this.element.closest('form');\n if (form) {\n const linkedElements = form.querySelectorAll(`[data-ajaxify=\"${this.id}\"]`);\n for (const linked of Array.from(linkedElements)) {\n if (linked instanceof HTMLSelectElement || linked instanceof HTMLInputElement || linked instanceof HTMLTextAreaElement) {\n const targetName = linked.dataset.ajaxifyTarget;\n if (targetName) {\n const hidden = this.element.querySelector(`input[name=\"${targetName}\"]`) as HTMLInputElement;\n if (hidden) {\n hidden.value = linked.value;\n }\n }\n }\n }\n }\n }\n\n const disabledInputs = this.element.querySelectorAll('input:disabled, select:disabled, textarea:disabled');\n for (const input of Array.from(disabledInputs)) {\n (input as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement).disabled = false;\n }\n\n this.ea.publish(Channels.Ajaxify, <IAjaxify>{\n action: AjaxifyAction.Run,\n id: this.target,\n url: this.url || undefined,\n method: this.method,\n });\n }\n\n /**\n * Classic mode: POST to server, process response (existing behavior).\n */\n private onTriggerClassic(event: Event): void {\n const form = this.element.closest('form');\n const url = this.resolveUrl(form);\n const verb = this.resolveVerb(form);\n\n if (!url) {\n this.logger.warn('No URL found for ajaxify-trigger');\n return;\n }\n\n this.logger.debug('onTriggerClassic', { url, verb });\n\n const formData = this.buildFormData(event);\n\n this.apiService\n .url(url)\n .fromMultipart(formData)\n .request<IAjaxifyResponse>(verb)\n .then((response) => {\n this.logger.debug('response', response.body);\n\n if (response.body.element) {\n this.updateElement(response.body.element);\n }\n\n if (response.body.toast) {\n this.ea.publish(Channels.Toaster, <IToaster>{\n action: ToasterAction.Add,\n toast: response.body.toast\n });\n }\n\n if (response.body.ajaxify) {\n this.ea.publish(Channels.Ajaxify, response.body.ajaxify);\n }\n })\n .catch((error) => {\n this.logger.error('AJAX request failed', error);\n\n if (this.errorContent !== '') {\n this.ea.publish(Channels.Toaster, <IToaster>{\n action: ToasterAction.Add,\n toast: {\n color: UiColor.Danger,\n title: this.errorTitle,\n content: this.errorContent,\n duration: 5000,\n } as IToast\n });\n }\n });\n }\n\n private buildFormData(event: Event): FormData {\n const formData = new FormData();\n\n const inputs = this.element.querySelectorAll('input, select, textarea');\n this.appendInputsToFormData(formData, inputs);\n\n if (event instanceof SubmitEvent && event.submitter) {\n const submitter = event.submitter as HTMLButtonElement | HTMLInputElement;\n if (submitter.name) {\n formData.append(submitter.name, submitter.value || '');\n }\n }\n\n const form = this.element.closest('form');\n if (form) {\n const csrfInput = form.querySelector('input[name=\"_csrf\"]') as HTMLInputElement | null;\n if (csrfInput) {\n formData.append('_csrf', csrfInput.value);\n }\n\n if (this.id) {\n const ajaxifyInputs = form.querySelectorAll(`[data-ajaxify=\"${this.id}\"]`);\n this.appendInputsToFormData(formData, ajaxifyInputs);\n }\n }\n\n return formData;\n }\n\n private appendInputsToFormData(formData: FormData, inputs: NodeListOf<Element>): void {\n for (const input of Array.from(inputs)) {\n if (input instanceof HTMLInputElement) {\n if (input.type === 'checkbox' || input.type === 'radio') {\n if (input.checked && input.name) {\n formData.append(input.name, input.value || 'on');\n }\n } else if (input.name) {\n formData.append(input.name, input.value);\n }\n } else if (input instanceof HTMLSelectElement && input.name) {\n formData.append(input.name, input.value);\n } else if (input instanceof HTMLTextAreaElement && input.name) {\n formData.append(input.name, input.value);\n }\n }\n }\n\n private resolveUrl(form: HTMLFormElement | null): string {\n if (this.url) {\n return this.url;\n }\n if (form) {\n return form.action || '';\n }\n return '';\n }\n\n private resolveVerb(form: HTMLFormElement | null): string {\n if (this.verb) {\n return this.verb;\n }\n if (form) {\n return form.method || 'POST';\n }\n return 'POST';\n }\n\n private updateElement(html: string): void {\n const template = this.p.document.createElement('template');\n template.innerHTML = html.trim();\n const newElement = template.content.firstElementChild;\n\n if (newElement) {\n this.syncElement(this.element, newElement);\n }\n }\n\n private syncElement(current: Element, incoming: Element): void {\n for (const attr of Array.from(incoming.attributes)) {\n current.setAttribute(attr.name, attr.value);\n }\n\n for (const attr of Array.from(current.attributes)) {\n if (!incoming.hasAttribute(attr.name)) {\n current.removeAttribute(attr.name);\n }\n }\n\n if (current instanceof HTMLInputElement && incoming instanceof HTMLInputElement) {\n if (current.type === 'checkbox' || current.type === 'radio') {\n current.checked = incoming.checked;\n } else {\n current.value = incoming.value;\n }\n }\n\n const currentChildren = Array.from(current.children);\n const incomingChildren = Array.from(incoming.children);\n\n for (let i = 0; i < incomingChildren.length; i++) {\n if (i < currentChildren.length) {\n this.syncElement(currentChildren[i], incomingChildren[i]);\n }\n }\n }\n}\n","import {bindable, customAttribute, IDisposable, IEventAggregator, ILogger, INode, IPlatform, resolve} from 'aurelia';\nimport {Channels, PopoverAction, PopoverStatus} from '../enums/event-aggregator';\nimport {IPopover, IPopoverStatus} from '../interfaces/event-aggregator';\nimport {setState} from '../utils/state-classes';\n\n/**\n * Popover positioned next to the rectangle given by its trigger; shown and hidden with\n * data-popover-show / data-popover-hide of its markup.\n */\n@customAttribute({name: 'bleet-popover', defaultProperty: 'id'})\nexport class BleetPopoverCustomAttribute {\n @bindable id: string = '';\n\n private isOpen: boolean = false;\n private subscription: IDisposable | null = null;\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-popover'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor');\n }\n\n public attaching(): void {\n this.logger.trace('attaching');\n this.subscription = this.ea.subscribe(Channels.Popover, this.onPopover);\n }\n\n public attached(): void {\n this.logger.trace('attached');\n }\n\n public detaching(): void {\n this.logger.trace('detaching');\n this.subscription?.dispose();\n }\n\n public dispose() {\n this.logger.trace('dispose');\n this.subscription?.dispose();\n }\n\n private onPopover = (payload: IPopover) => {\n if (payload.id !== this.id) return;\n\n switch (payload.action) {\n case PopoverAction.Open:\n this.open(payload.rect);\n break;\n case PopoverAction.Close:\n this.close();\n break;\n case PopoverAction.Toggle:\n if (this.isOpen) {\n this.close();\n } else {\n this.open(payload.rect);\n }\n break;\n }\n };\n\n private open(rect?: DOMRect) {\n this.isOpen = true;\n setState(this.element, 'popover', 'show');\n if (rect) {\n this.positionAt(rect);\n }\n this.ea.publish(Channels.PopoverStatus, <IPopoverStatus>{\n status: PopoverStatus.Opened,\n id: this.id,\n });\n }\n\n private close() {\n this.isOpen = false;\n setState(this.element, 'popover', 'hide');\n this.ea.publish(Channels.PopoverStatus, <IPopoverStatus>{\n status: PopoverStatus.Closed,\n id: this.id,\n });\n }\n\n private positionAt(rect: DOMRect) {\n this.element.style.visibility = 'hidden';\n this.element.style.display = 'block';\n\n const popoverRect = this.element.getBoundingClientRect();\n\n let top = rect.top - popoverRect.height - 10;\n let left = rect.left + (rect.width / 2) - (popoverRect.width / 2);\n\n if (top < 4) top = rect.bottom + 10;\n\n if (left < 4) left = 4;\n if (left + popoverRect.width > this.p.window.innerWidth - 4) {\n left = this.p.window.innerWidth - popoverRect.width - 4;\n }\n\n this.element.style.top = `${top}px`;\n this.element.style.left = `${left}px`;\n this.element.style.visibility = '';\n this.element.style.display = '';\n }\n}\n","import {bindable, customAttribute, IEventAggregator, ILogger, INode, resolve} from 'aurelia';\nimport {Channels, PopoverAction} from '../enums/event-aggregator';\nimport {IPopover} from '../interfaces/event-aggregator';\n\n@customAttribute({name: 'bleet-popover-trigger', defaultProperty: 'id'})\nexport class BleetPopoverTriggerCustomAttribute {\n @bindable id: string = '';\n @bindable() absolute: boolean = true;\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-popover-trigger'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n ) {\n this.logger.trace('constructor');\n }\n\n public attached() {\n this.logger.trace('attached');\n this.element.addEventListener('mouseenter', this.onMouseEnter);\n this.element.addEventListener('mouseleave', this.onMouseLeave);\n }\n\n public detaching() {\n this.logger.trace('detaching');\n this.element.removeEventListener('mouseenter', this.onMouseEnter);\n this.element.removeEventListener('mouseleave', this.onMouseLeave);\n }\n\n public dispose() {\n this.logger.trace('dispose');\n }\n\n private onMouseEnter = () => {\n this.ea.publish(Channels.Popover, <IPopover>{\n id: this.id,\n action: PopoverAction.Open,\n rect: this.absolute ? this.element.getBoundingClientRect() : undefined,\n });\n };\n\n private onMouseLeave = () => {\n this.ea.publish(Channels.Popover, <IPopover>{\n id: this.id,\n action: PopoverAction.Close,\n });\n };\n}\n","import {customAttribute, IDisposable, IEventAggregator, ILogger, INode, IPlatform, resolve} from \"aurelia\";\nimport {Channels, ToasterAction, UiColor, UiToastIcon} from '../enums/event-aggregator';\nimport {IToast, IToaster} from '../interfaces/event-aggregator';\nimport {ITransitionService} from '../services/transition-service';\nimport {setState} from '../utils/state-classes';\n\ninterface IToastEntry {\n element: HTMLElement;\n closing: boolean;\n closeTimeout?: number;\n}\n\n/**\n * Toast container: clones the toast template of the requested color\n * (template[data-toaster=color]) and the icon template of the requested icon\n * (template[data-toaster=icon-name]), both rendered by the PHP Toaster widget.\n * When the container is a manual popover (popover=\"manual\"), it is shown again on each toast so that it passes over\n * a dialog opened by showModal() (top layer), and hidden once the last toast is gone.\n */\n@customAttribute('bleet-toaster')\nexport class BleetToasterCustomAttribute {\n\n private disposable?: IDisposable;\n private toasts: Map<string, IToastEntry> = new Map<string, IToastEntry>();\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-toaster'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly p: IPlatform = resolve(IPlatform),\n private readonly transitionService: ITransitionService = resolve(ITransitionService),\n ) {\n this.logger.trace('constructor')\n }\n\n public attaching()\n {\n this.logger.trace('attaching');\n this.disposable = this.ea.subscribe(Channels.Toaster, this.onToasterEvent);\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.disposable?.dispose();\n this.toasts.forEach((entry) => {\n if (entry.closeTimeout !== undefined) {\n this.p.clearTimeout(entry.closeTimeout);\n }\n });\n }\n\n private onToasterEvent = (data: IToaster) => {\n this.logger.trace('onToasterEvent', data);\n if (data.action === ToasterAction.Add && data.toast) {\n const toast: IToast = {\n id: data.toast.id || `toast-${Math.random().toString(36).substring(2, 15)}`,\n color: data.toast.color || UiColor.Info,\n icon: data.toast.icon || UiToastIcon.Info,\n duration: data.toast.duration || 0,\n title: data.toast.title,\n content: data.toast.content,\n };\n if (!this.toasts.has(toast.id)) {\n this.add(toast);\n }\n } else if (data.action === ToasterAction.Remove && data.toast?.id) {\n this.close(data.toast.id);\n }\n }\n\n private add(toast: IToast)\n {\n const template = this.element.querySelector(`template[data-toaster=\"${toast.color}\"]`) as HTMLTemplateElement | null;\n if (template === null) {\n this.logger.warn(`No toast template for color ${toast.color}`);\n } else {\n const fragment = template.content.cloneNode(true) as DocumentFragment;\n const toastElement = fragment.firstElementChild as HTMLElement;\n\n const iconTemplate = this.element.querySelector(`template[data-toaster=\"icon-${toast.icon}\"]`) as HTMLTemplateElement | null;\n const iconSlot = toastElement.querySelector('[data-toaster=\"icon\"]');\n if (iconTemplate !== null && iconSlot !== null) {\n iconSlot.appendChild(iconTemplate.content.cloneNode(true));\n }\n\n const titleElement = toastElement.querySelector('[data-toaster=\"title\"]');\n if (toast.title) {\n titleElement?.replaceChildren(toast.title);\n } else {\n titleElement?.remove();\n }\n\n const contentElement = toastElement.querySelector('[data-toaster=\"content\"]');\n if (contentElement !== null) {\n contentElement.innerHTML = toast.content || '';\n }\n\n toastElement.querySelector('[data-toaster=\"close\"]')?.addEventListener('click', (event: Event) => {\n event.preventDefault();\n this.close(toast.id);\n });\n\n const entry: IToastEntry = { element: toastElement, closing: false };\n this.toasts.set(toast.id, entry);\n this.element.appendChild(toastElement);\n this.raise();\n this.logger.debug(`Toast added with ID: ${toast.id}`);\n\n this.transitionService.run(toastElement, (element: HTMLElement) => {\n if (toast.duration > 0) {\n entry.closeTimeout = this.p.setTimeout(() => {\n this.close(toast.id);\n }, toast.duration);\n }\n setState(element, 'toaster', 'show');\n });\n }\n }\n\n private close(id: string)\n {\n const entry = this.toasts.get(id);\n if (entry !== undefined && entry.closing === false) {\n entry.closing = true;\n if (entry.closeTimeout !== undefined) {\n this.p.clearTimeout(entry.closeTimeout);\n }\n this.transitionService.run(entry.element, (element: HTMLElement) => {\n setState(element, 'toaster', 'hide');\n }, (element: HTMLElement) => {\n element.remove();\n this.toasts.delete(id);\n if (this.toasts.size === 0) {\n this.lower();\n }\n this.logger.debug(`Toast removed with ID: ${id}`);\n });\n }\n }\n\n /**\n * Popover container: shown again when it already was, so that it passes over what opened since.\n */\n private raise(): void\n {\n if (this.element.hasAttribute('popover') === true) {\n if (this.element.matches(':popover-open') === true) {\n this.element.hidePopover();\n }\n this.element.showPopover();\n }\n }\n\n private lower(): void\n {\n if (this.element.hasAttribute('popover') === true && this.element.matches(':popover-open') === true) {\n this.element.hidePopover();\n }\n }\n}\n","import {bindable, customAttribute, IEventAggregator, ILogger, IPlatform, queueTask, resolve} from \"aurelia\";\nimport {Channels, ToasterAction, UiColor, UiToastIcon} from '../enums/event-aggregator';\nimport {IToaster} from '../interfaces/event-aggregator';\n\n/**\n * Publishes a toast on page load (rendered by the PHP Toast widget as a hidden element).\n */\n@customAttribute({ name: 'bleet-toast', defaultProperty: 'id' })\nexport class BleetToastCustomAttribute {\n\n @bindable id: string = '';\n @bindable() public color: UiColor = UiColor.Info;\n @bindable() public icon: UiToastIcon = UiToastIcon.Info;\n @bindable() public title: string = '';\n @bindable() public content: string = '';\n @bindable() public duration: number = 0; // Duration in milliseconds\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-toast'),\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor')\n }\n\n public attached()\n {\n this.logger.trace('attached');\n if (this.p.document.readyState === 'loading') {\n this.p.document.addEventListener('DOMContentLoaded', () => {\n this.publish();\n }, { once: true });\n } else {\n this.publish();\n }\n }\n\n private publish = () => {\n this.logger.trace('publish');\n queueTask(() => {\n this.ea.publish(Channels.Toaster, <IToaster>{\n action: ToasterAction.Add, toast:\n {\n id: this.id,\n duration: this.duration,\n color: this.color,\n icon: this.icon,\n title: this.title,\n content: this.content\n }\n });\n });\n }\n}\n","import {customAttribute, IDisposable, IEventAggregator, ILogger, INode, IPlatform, resolve} from \"aurelia\";\nimport {Channels, OverlayAction, OverlayStatus} from '../enums/event-aggregator';\nimport {IOverlay, IOverlayStatus} from '../interfaces/event-aggregator';\nimport {ITransitionService} from '../services/transition-service';\nimport {setState} from '../utils/state-classes';\n\n/**\n * Backdrop of modals and drawers, rendered hidden by the PHP Bleet::overlay() helper.\n * Shown and hidden through the hidden attribute and data-overlay-show / data-overlay-hide.\n */\n@customAttribute('bleet-overlay')\nexport class BleetOverlayCustomAttribute {\n\n private disposable?: IDisposable;\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-overlay'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly p: IPlatform = resolve(IPlatform),\n private readonly transitionService: ITransitionService = resolve(ITransitionService),\n ) {\n this.logger.trace('constructor')\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.disposable = this.ea.subscribe(Channels.Overlay, this.onOverlayEvent);\n this.element.addEventListener('click', this.onClickOverlay);\n }\n\n public detaching()\n {\n this.logger.trace('detaching');\n this.element.removeEventListener('click', this.onClickOverlay);\n this.disposable?.dispose();\n }\n\n private toggle(fromOverlay: boolean = false) {\n if (this.element.hidden) {\n this.open(fromOverlay);\n } else {\n this.close(fromOverlay);\n }\n }\n private open(fromOverlay: boolean = false) {\n if (this.element.hidden) {\n this.logger.trace('open');\n this.transitionService.run(this.element, (element: HTMLElement) => {\n if (fromOverlay) {\n this.ea.publish(Channels.Overlay, <IOverlay>{action: OverlayAction.Open});\n }\n this.ea.publish(Channels.OverlayStatus, <IOverlayStatus>{status: OverlayStatus.Opening});\n element.hidden = false;\n this.p.requestAnimationFrame(() => {\n setState(element, 'overlay', 'show');\n });\n this.logger.trace('open before()');\n }, (element: HTMLElement) => {\n this.ea.publish(Channels.OverlayStatus, <IOverlayStatus>{status: OverlayStatus.Opened});\n this.logger.trace('open after()');\n });\n }\n }\n private close(fromOverlay: boolean = false) {\n if (!this.element.hidden) {\n this.transitionService.run(this.element, (element: HTMLElement) => {\n if (fromOverlay) {\n this.ea.publish(Channels.Overlay, <IOverlay>{action: OverlayAction.Close});\n }\n this.ea.publish(Channels.OverlayStatus, <IOverlayStatus>{status: OverlayStatus.Closing});\n setState(element, 'overlay', 'hide');\n this.logger.trace('close before()');\n }, (element: HTMLElement) => {\n element.hidden = true;\n this.logger.trace('close after()');\n this.ea.publish(Channels.OverlayStatus, <IOverlayStatus>{status: OverlayStatus.Closed});\n });\n }\n }\n private onOverlayEvent = (data: IOverlay) => {\n if (data.action === OverlayAction.Open) {\n this.logger.trace('onOverlayEvent', data);\n this.open();\n } else if (data.action === OverlayAction.Close) {\n this.logger.trace('onOverlayEvent', data);\n this.close();\n } else if (data.action === OverlayAction.Toggle) {\n this.logger.trace('onOverlayEvent', data);\n this.toggle();\n } else {\n this.logger.trace('onOverlayEvent unhandled', data);\n }\n }\n private onClickOverlay = (event: MouseEvent) => {\n this.logger.trace('onClickOverlay', event);\n event.preventDefault();\n this.close(true);\n }\n\n}\n","import {customAttribute, ILogger, INode, IPlatform, resolve} from \"aurelia\";\n\n/**\n * An element that takes the focus as it appears (shown later by a condition of the page, or loaded with a fragment):\n * focused on the next frame, the browser brings it into view.\n */\n@customAttribute('bleet-focus')\nexport class BleetFocusCustomAttribute\n{\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('bleet-focus'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly p: IPlatform = resolve(IPlatform),\n ) {\n this.logger.trace('constructor')\n }\n\n public attached()\n {\n this.logger.trace('attached');\n this.p.requestAnimationFrame(() => {\n this.element.focus();\n });\n }\n\n}\n","import { CustomElement } from '@aurelia/runtime-html';\nexport const name = \"bleet-ajaxify\";\nexport const template = \"<template>\\n <au-slot if.bind=\\\"!ajaxedView\\\"></au-slot>\\n <au-compose if.bind=\\\"ajaxedView\\\" template.bind=\\\"ajaxedView\\\"></au-compose>\\n</template>\\n\";\nexport default template;\nexport const dependencies = [ ];\nexport const bindables = {};\nlet _e;\nexport function register(container) {\n if (!_e) {\n _e = CustomElement.define({ name, template, dependencies, bindables });\n }\n container.register(_e);\n}\n","import {customElement, bindable, IEventAggregator, resolve, ILogger, IDisposable, INode} from 'aurelia';\nimport {IApiService} from '@blackcube/aurelia-api';\nimport {IAjaxify} from '../interfaces/event-aggregator';\nimport {AjaxifyAction, Channels} from '../enums/event-aggregator';\nimport {AjaxifyCodec} from '@blackcube/aurelia-api';\n\n@customElement('bleet-ajaxify')\nexport class BleetAjaxify {\n @bindable() id: string = '';\n @bindable() url?: string;\n\n private ajaxedView: string | null = null;\n private disposable?: IDisposable;\n\n public constructor(\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly logger: ILogger = resolve(ILogger).scopeTo('<bleet-ajaxify>'),\n private readonly apiService: IApiService = resolve(IApiService),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n ) {\n this.logger.trace('constructor');\n }\n\n public attaching() {\n this.logger.trace('attaching')\n this.disposable = this.ea.subscribe(Channels.Ajaxify, this.onEvent);\n }\n\n public detaching() {\n this.logger.trace('detaching');\n this.disposable?.dispose();\n }\n\n public dispose() {\n this.logger.trace('dispose');\n this.disposable?.dispose();\n }\n\n private findForm(): HTMLFormElement | null {\n return this.element.querySelector('form') ?? this.element.closest('form');\n }\n\n private onEvent = (data: IAjaxify) => {\n this.logger.trace('onEvent', data);\n if (!(data.id && data.id == this.id)) {\n return;\n }\n\n if (data.action === AjaxifyAction.Refresh) {\n this.handleRefresh(data);\n } else if (data.action === AjaxifyAction.Run) {\n this.handleRun(data);\n }\n }\n\n /**\n * Refresh: GET to fetch fresh content (existing behavior).\n */\n private handleRefresh(data: IAjaxify): void {\n const url = data.url ? data.url : this.url;\n if (!url || url.length <= 1) {\n return;\n }\n\n this.logger.debug(`Refresh id=${this.id} from url=${url}`);\n\n this.apiService\n .url(url)\n .withInputCodec(AjaxifyCodec.codec)\n .toText()\n .get<string>()\n .then((response) => {\n this.logger.debug(`Received for id=${this.id}`);\n this.ajaxedView = response.body;\n })\n .catch((error) => {\n this.logger.error(`Error for id=${this.id}: `, error);\n });\n }\n\n /**\n * Run: collect form data (or use provided body) and send with the specified method.\n * URL fallback: event url -> component url -> closest form action.\n */\n private handleRun(data: IAjaxify): void {\n let url = data.url || this.url;\n if (!url || url.length <= 1) {\n const form = this.findForm();\n if (form) {\n url = form.action;\n }\n }\n if (!url || url.length <= 1) {\n this.logger.warn(`No URL found for Run id=${this.id}`);\n return;\n }\n\n const method = (data.method || 'POST').toUpperCase();\n this.logger.debug(`Run id=${this.id} method=${method} url=${url}`);\n\n let builder = this.apiService\n .url(url)\n .withInputCodec(AjaxifyCodec.codec)\n .toText();\n\n if (data.body !== undefined) {\n if (data.body instanceof FormData) {\n builder = builder.fromMultipart(data.body);\n } else {\n builder = builder.fromJson(data.body);\n }\n } else {\n const form = this.findForm();\n if (form) {\n builder = builder.fromMultipart(new FormData(form));\n }\n }\n\n builder\n .request<string>(method)\n .then((response) => {\n this.logger.debug(`Received for id=${this.id}`);\n this.ajaxedView = response.body;\n })\n .catch((error) => {\n this.logger.error(`Error for id=${this.id}: `, error);\n });\n }\n}\n","import { CustomElement } from '@aurelia/runtime-html';\nexport const name = \"bleet-dialog\";\nexport const template = \"<template>\\n <dialog ref=\\\"dialogElement\\\" class.bind=\\\"dialogClass\\\">\\n <au-slot name=\\\"loader\\\" if.bind=\\\"loading\\\"><progress></progress></au-slot>\\n <template else>\\n <au-compose if.bind=\\\"contentView\\\" template.bind=\\\"contentView\\\"></au-compose>\\n <au-slot else></au-slot>\\n </template>\\n </dialog>\\n</template>\\n\";\nexport default template;\nexport const dependencies = [ ];\nexport const bindables = {};\nlet _e;\nexport function register(container) {\n if (!_e) {\n _e = CustomElement.define({ name, template, dependencies, bindables });\n }\n container.register(_e);\n}\n","import { bindable, customElement, IDisposable, IEventAggregator, ILogger, INode, IPlatform, resolve } from 'aurelia';\nimport { Channels, DialogAction, ModalAction, ModalStatus, OverlayAction, ToasterAction, UiColor } from '../enums/event-aggregator';\nimport { IModal, IModalStatus, IOverlay, IToast, IToaster } from '../interfaces/event-aggregator';\nimport { IDialogResponse } from '../interfaces/dialog';\nimport { ITransitionService } from '../services/transition-service';\nimport { IApiService } from '@blackcube/aurelia-api';\nimport { setState } from '../utils/state-classes';\n\n/**\n * Dialog (modal, drawer…) rendered by the PHP Modal and Drawer widgets. It holds no markup: the dialog classes come\n * from data-dialog-class, the loader from the \"loader\" slot, and everything else from the server HTML it loads, from\n * the HTML given with the opening (content), or — opened with neither (a SPA) — from its default slot, whose frame\n * reads the title and the color of the opening on $host. Every closing goes through close() (Escape included), so\n * that the hide transition runs; an Open received while the dialog is closing cancels the closing.\n */\n@customElement('bleet-dialog')\nexport class BleetDialog {\n @bindable id: string = '';\n @bindable({ attribute: 'data-dialog-class' }) dialogClass: string = '';\n @bindable loadError: string = '';\n @bindable submitError: string = '';\n\n public title: string = '';\n public color: string = '';\n\n private dialogElement!: HTMLDialogElement;\n private disposable?: IDisposable;\n private loading: boolean = false;\n private closing: boolean = false;\n private contentView: string | null = null;\n\n public constructor(\n private readonly logger: ILogger = resolve(ILogger).scopeTo('<bleet-dialog>'),\n private readonly element: HTMLElement = resolve(INode) as HTMLElement,\n private readonly ea: IEventAggregator = resolve(IEventAggregator),\n private readonly p: IPlatform = resolve(IPlatform),\n private readonly transitionService: ITransitionService = resolve(ITransitionService),\n private readonly apiService: IApiService = resolve(IApiService),\n ) {}\n\n public attached(): void {\n this.disposable = this.ea.subscribe(Channels.Modal, this.onModalEvent);\n this.dialogElement.addEventListener('cancel', this.onCancelEvent);\n }\n\n public detaching(): void {\n this.dialogElement.removeEventListener('cancel', this.onCancelEvent);\n this.unbindDialogEvents();\n this.disposable?.dispose();\n }\n\n private bindDialogEvents(): void {\n this.dialogElement.addEventListener('submit', this.onFormSubmit);\n this.dialogElement.addEventListener('click', this.onDialogClick);\n }\n\n private unbindDialogEvents(): void {\n this.dialogElement.removeEventListener('submit', this.onFormSubmit);\n this.dialogElement.removeEventListener('click', this.onDialogClick);\n }\n\n private onModalEvent = (data: IModal): void => {\n if (this.id && this.id !== '' && data.id === this.id) {\n const isOpen = this.dialogElement.open === true && this.closing === false;\n if (data.action === ModalAction.Open && isOpen === false) {\n this.show(data);\n } else if (data.action === ModalAction.Close && isOpen === true) {\n this.close();\n } else if (data.action === ModalAction.Toggle) {\n if (isOpen === true) {\n this.close();\n } else {\n this.show(data);\n }\n }\n }\n }\n\n /**\n * Escape: the browser would close the dialog at once, the hide transition runs instead. A cancel bubbling from\n * an <input type=\"file\"> (file chooser dismissed) is not for the dialog. A menu open inside (bleet-dropdown,\n * bleet-profile: aria-expanded) is closed first, by its own button: the dialog stays, and what was typed in it.\n */\n private onCancelEvent = (event: Event): void => {\n if (event.target === this.dialogElement) {\n const menu = this.dialogElement.querySelector<HTMLElement>('[aria-expanded=\"true\"]');\n event.preventDefault();\n if (menu === null) {\n this.close();\n } else {\n menu.click();\n }\n }\n }\n\n private onDialogClick = (event: MouseEvent): void => {\n const target = event.target as HTMLElement;\n if (target.closest('[data-dialog=\"close\"]')) {\n event.preventDefault();\n this.close();\n }\n }\n\n /**\n * A form of the server HTML is posted by the element, unless it is marked data-dialog=\"native\" (download, plain\n * post). A form of the default slot belongs to the page that projects it.\n */\n private onFormSubmit = (event: SubmitEvent): void => {\n const form = (event.target as HTMLElement).closest('form');\n if (form && this.contentView !== null && form.getAttribute('data-dialog') !== 'native') {\n event.preventDefault();\n\n const formData = new FormData(form);\n\n if (event.submitter instanceof HTMLButtonElement && event.submitter.name) {\n formData.append(event.submitter.name, event.submitter.value || '');\n }\n\n const method = (formData.get('_method') as string) || form.getAttribute('method') || 'POST';\n\n this.apiService\n .url(form.action)\n .fromMultipart(formData)\n .request<IDialogResponse>(method)\n .then((response) => {\n this.applyResponse(response.body);\n })\n .catch((error) => {\n this.logger.error('form submit failed', error);\n this.publishError(this.submitError);\n });\n }\n }\n\n /**\n * Opening: with a url, the server HTML is loaded; else, the content given with the opening is shown as the\n * server HTML would be; else, the default slot. The title and the color of the opening are kept for the frame of\n * the slot ($host).\n */\n private show(data: IModal): void {\n this.title = data.title ?? '';\n this.color = data.color ?? '';\n if (data.url) {\n this.loadFromUrl(data.url);\n } else {\n this.contentView = data.content ?? null;\n this.open();\n }\n }\n\n private loadFromUrl(url: string): void {\n this.loading = true;\n this.open();\n\n this.apiService.url(url).get<IDialogResponse>()\n .then((response) => {\n this.applyResponse(response.body);\n })\n .catch((error) => {\n this.logger.error('loadFromUrl failed', error);\n this.close();\n this.publishError(this.loadError);\n })\n .finally(() => {\n this.loading = false;\n });\n }\n\n private applyResponse(response: IDialogResponse): void {\n if (response.content) {\n this.contentView = response.content;\n }\n this.executeActions(response);\n }\n\n private executeActions(response: IDialogResponse): void {\n const refresh = response.refresh === true || response.action === DialogAction.RefreshAndClose;\n if (response.action === DialogAction.Close || response.action === DialogAction.RefreshAndClose) {\n this.close();\n }\n\n if (response.toast) {\n this.ea.publish(Channels.Toaster, <IToaster>{\n action: ToasterAction.Add,\n toast: response.toast\n });\n }\n if (response.ajaxify) {\n this.ea.publish(Channels.Ajaxify, response.ajaxify);\n } else if (response.redirect) {\n this.p.window.location.href = response.redirect;\n } else if (refresh === true) {\n this.p.window.location.reload();\n }\n }\n\n /**\n * Danger toast with the text given by the PHP widget (load-error / submit-error); none without text.\n */\n private publishError(content: string): void {\n if (content !== '') {\n this.ea.publish(Channels.Toaster, <IToaster>{\n action: ToasterAction.Add,\n toast: { color: UiColor.Danger, content } as IToast\n });\n }\n }\n\n private open(): void {\n this.closing = false;\n this.bindDialogEvents();\n this.transitionService.run(this.dialogElement, (element) => {\n this.ea.publish(Channels.Overlay, <IOverlay>{ action: OverlayAction.Open });\n this.ea.publish(Channels.ModalStatus, <IModalStatus>{ status: ModalStatus.Opening, id: this.id });\n (element as HTMLDialogElement).showModal();\n this.p.requestAnimationFrame(() => {\n setState(element, 'dialog', 'show', this.element);\n });\n }, () => {\n this.ea.publish(Channels.ModalStatus, <IModalStatus>{ status: ModalStatus.Opened, id: this.id });\n });\n }\n\n private close(): void {\n this.closing = true;\n this.transitionService.run(this.dialogElement, (element) => {\n if (this.closing === true) {\n this.ea.publish(Channels.ModalStatus, <IModalStatus>{ status: ModalStatus.Closing, id: this.id });\n this.ea.publish(Channels.Overlay, <IOverlay>{ action: OverlayAction.Close });\n setState(element, 'dialog', 'hide', this.element);\n }\n }, (element) => {\n if (this.closing === true) {\n this.closing = false;\n (element as HTMLDialogElement).close();\n this.unbindDialogEvents();\n this.contentView = null;\n this.loading = false;\n this.title = '';\n this.color = '';\n this.ea.publish(Channels.ModalStatus, <IModalStatus>{ status: ModalStatus.Closed, id: this.id });\n }\n });\n }\n}\n","import { IContainer, IRegistry } from 'aurelia';\nimport { ApiConfiguration, type ConfigInterface } from '@blackcube/aurelia-api';\nimport { IStorageService } from './services/storage-service';\nimport { ITransitionService } from './services/transition-service';\nimport { ITrapFocusService } from './services/trap-focus-service';\nimport { setState, type StateName } from './utils/state-classes';\n\nimport {\n BleetAlertCustomAttribute,\n BleetBadgeCustomAttribute,\n BleetBurgerCustomAttribute,\n BleetDropdownCustomAttribute,\n BleetMenuCustomAttribute,\n BleetModalTriggerCustomAttribute,\n BleetPagerCustomAttribute,\n BleetPasswordCustomAttribute,\n BleetProfileCustomAttribute,\n BleetTabsCustomAttribute,\n BleetToasterTriggerCustomAttribute,\n BleetAjaxifyTriggerCustomAttribute,\n BleetPopoverCustomAttribute,\n BleetPopoverTriggerCustomAttribute,\n BleetToasterCustomAttribute,\n BleetToastCustomAttribute,\n BleetOverlayCustomAttribute,\n BleetFocusCustomAttribute\n} from './attributes';\n\nimport {\n BleetAjaxify,\n BleetDialog\n} from './components';\n\nimport {\n Channels,\n OverlayAction,\n OverlayStatus,\n ProfileAction,\n ProfileStatus,\n ModalAction,\n ModalStatus,\n ToasterAction,\n ToasterStatus,\n MenuAction,\n MenuStatus,\n BadgeAction,\n UiColor,\n UiToastIcon,\n UiIcon,\n DialogAction,\n AjaxifyAction,\n AjaxifyTriggerMode,\n PopoverAction,\n PopoverStatus,\n UploadAction\n} from './enums/event-aggregator';\n\nimport type { IDialogResponse } from './interfaces/dialog';\n\nimport type {\n IOverlay,\n IOverlayStatus,\n IModal,\n IModalStatus,\n IToaster,\n IToasterStatus,\n IToast,\n IMenu,\n IMenuStatus,\n IBadge,\n IProfile,\n IProfileStatus,\n IAjaxify,\n IPopover,\n IPopoverStatus,\n IUpload\n} from './interfaces/event-aggregator';\n\nexport {\n BleetAlertCustomAttribute,\n BleetBadgeCustomAttribute,\n BleetBurgerCustomAttribute,\n BleetDropdownCustomAttribute,\n BleetMenuCustomAttribute,\n BleetModalTriggerCustomAttribute,\n BleetPagerCustomAttribute,\n BleetPasswordCustomAttribute,\n BleetProfileCustomAttribute,\n BleetTabsCustomAttribute,\n BleetToasterTriggerCustomAttribute,\n BleetAjaxifyTriggerCustomAttribute,\n BleetPopoverCustomAttribute,\n BleetPopoverTriggerCustomAttribute,\n BleetToasterCustomAttribute,\n BleetToastCustomAttribute,\n BleetOverlayCustomAttribute,\n BleetFocusCustomAttribute,\n BleetAjaxify,\n BleetDialog,\n Channels,\n OverlayAction,\n OverlayStatus,\n ProfileAction,\n ProfileStatus,\n ModalAction,\n ModalStatus,\n ToasterAction,\n AjaxifyAction,\n AjaxifyTriggerMode,\n PopoverAction,\n PopoverStatus,\n UploadAction,\n ToasterStatus,\n MenuAction,\n MenuStatus,\n BadgeAction,\n UiColor,\n UiToastIcon,\n UiIcon,\n DialogAction,\n IStorageService,\n ITransitionService,\n ITrapFocusService,\n setState\n};\n\n/** The interfaces and the types: named apart, as a bundler transpiling file by file cannot tell them from the values. */\nexport type {\n IOverlay,\n IOverlayStatus,\n IModal,\n IModalStatus,\n IToaster,\n IToasterStatus,\n IToast,\n IMenu,\n IMenuStatus,\n IBadge,\n IProfile,\n IProfileStatus,\n IDialogResponse,\n IAjaxify,\n IPopover,\n IPopoverStatus,\n IUpload,\n StateName\n};\nconst DefaultComponents: IRegistry[] = [\n BleetAlertCustomAttribute as unknown as IRegistry,\n BleetBurgerCustomAttribute as unknown as IRegistry,\n BleetDropdownCustomAttribute as unknown as IRegistry,\n BleetMenuCustomAttribute as unknown as IRegistry,\n BleetModalTriggerCustomAttribute as unknown as IRegistry,\n BleetPagerCustomAttribute as unknown as IRegistry,\n BleetProfileCustomAttribute as unknown as IRegistry,\n BleetPasswordCustomAttribute as unknown as IRegistry,\n BleetBadgeCustomAttribute as unknown as IRegistry,\n BleetTabsCustomAttribute as unknown as IRegistry,\n BleetToasterTriggerCustomAttribute as unknown as IRegistry,\n BleetAjaxifyTriggerCustomAttribute as unknown as IRegistry,\n BleetPopoverCustomAttribute as unknown as IRegistry,\n BleetPopoverTriggerCustomAttribute as unknown as IRegistry,\n BleetToasterCustomAttribute as unknown as IRegistry,\n BleetToastCustomAttribute as unknown as IRegistry,\n BleetOverlayCustomAttribute as unknown as IRegistry,\n BleetFocusCustomAttribute as unknown as IRegistry,\n BleetAjaxify as unknown as IRegistry,\n BleetDialog as unknown as IRegistry\n];\n\nfunction createBleetConfiguration(optionsCallback?: (options: ConfigInterface) => void) {\n return {\n register(container: IContainer) {\n const apiConfiguration = optionsCallback ? ApiConfiguration.customize(optionsCallback) : ApiConfiguration;\n apiConfiguration.register(container);\n\n return container.register(...DefaultComponents);\n },\n customize(callback: (options: ConfigInterface) => void) {\n return createBleetConfiguration(callback);\n }\n };\n}\n\nexport const BleetConfiguration = createBleetConfiguration();\n"],"mappings":"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"}