@echodial/deck 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1327 -0
- package/bin/deck.mjs +219 -0
- package/build.mjs +338 -0
- package/dist/api-buckets.json +10486 -0
- package/dist/api.json +57896 -0
- package/dist/brand/deck-apple-touch-icon.png +0 -0
- package/dist/brand/deck-logo-dark.svg +1 -0
- package/dist/brand/deck-logo-light.svg +1 -0
- package/dist/brand/deck-logo-stacked.svg +1 -0
- package/dist/brand/deck-logo.svg +1 -0
- package/dist/brand/deck-mark.svg +7 -0
- package/dist/brand/deck-og.png +0 -0
- package/dist/collisions.json +223 -0
- package/dist/deck-adapters.js +482 -0
- package/dist/deck-adapters.min.js +23 -0
- package/dist/deck-extras.js +823 -0
- package/dist/deck-extras.min.js +5 -0
- package/dist/deck-icons.svg +184 -0
- package/dist/deck.bundle.js +2638 -0
- package/dist/deck.bundle.min.js +86 -0
- package/dist/deck.css +7904 -0
- package/dist/deck.esm.js +2644 -0
- package/dist/deck.js +1331 -0
- package/dist/deck.min.css +32 -0
- package/dist/deck.min.js +60 -0
- package/dist/layers/anchor.css +192 -0
- package/dist/layers/buttons.css +210 -0
- package/dist/layers/charts.css +337 -0
- package/dist/layers/combobox.css +248 -0
- package/dist/layers/components.css +868 -0
- package/dist/layers/container.css +199 -0
- package/dist/layers/datagrid.css +335 -0
- package/dist/layers/datepicker.css +305 -0
- package/dist/layers/forms.css +401 -0
- package/dist/layers/gradients.css +302 -0
- package/dist/layers/inputs.css +522 -0
- package/dist/layers/layers.css +87 -0
- package/dist/layers/layout.css +235 -0
- package/dist/layers/logical.css +226 -0
- package/dist/layers/media.css +400 -0
- package/dist/layers/mobile.css +245 -0
- package/dist/layers/motion.css +379 -0
- package/dist/layers/nav.css +771 -0
- package/dist/layers/perf.css +234 -0
- package/dist/layers/print.css +198 -0
- package/dist/layers/reset.css +103 -0
- package/dist/layers/space3d.css +280 -0
- package/dist/layers/toasts.css +201 -0
- package/dist/layers/tokens.css +229 -0
- package/dist/layers/type.css +114 -0
- package/dist/layers/utilities.css +241 -0
- package/dist/sizes.json +52 -0
- package/dist/usage.json +6340 -0
- package/package.json +94 -0
- package/src/00-layers.css +87 -0
- package/src/01-tokens.css +229 -0
- package/src/02-reset.css +103 -0
- package/src/03-type.css +114 -0
- package/src/04-layout.css +235 -0
- package/src/05-buttons.css +210 -0
- package/src/06-forms.css +401 -0
- package/src/07-components.css +868 -0
- package/src/08-mobile.css +245 -0
- package/src/09-utilities.css +241 -0
- package/src/10-datepicker.css +305 -0
- package/src/11-combobox.css +248 -0
- package/src/12-datagrid.css +335 -0
- package/src/13-toasts.css +201 -0
- package/src/14-charts.css +337 -0
- package/src/16-motion.css +379 -0
- package/src/18-container.css +199 -0
- package/src/19-logical.css +226 -0
- package/src/20-gradients.css +302 -0
- package/src/21-space3d.css +280 -0
- package/src/22-nav.css +771 -0
- package/src/23-inputs.css +522 -0
- package/src/24-media.css +400 -0
- package/src/25-anchor.css +192 -0
- package/src/26-perf.css +234 -0
- package/src/99-print.css +198 -0
- package/src/brand/deck-apple-touch-icon.png +0 -0
- package/src/brand/deck-logo-dark.svg +1 -0
- package/src/brand/deck-logo-light.svg +1 -0
- package/src/brand/deck-logo-stacked.svg +1 -0
- package/src/brand/deck-logo.svg +1 -0
- package/src/brand/deck-mark.svg +7 -0
- package/src/brand/deck-og.png +0 -0
- package/src/brand/sources.json +7 -0
- package/src/deck-icons.svg +184 -0
- package/src/js/deck-adapters.js +482 -0
- package/src/js/deck-extras.js +823 -0
- package/src/js/deck.js +1331 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/*! ==========================================================================
|
|
2
|
+
* deck.js v0.1 — behaviour for Deck
|
|
3
|
+
* No dependencies. No build step. Drop it in and it wires itself up.
|
|
4
|
+
*
|
|
5
|
+
* <script src="/assets/deck/deck.js" defer><\/script>
|
|
6
|
+
*
|
|
7
|
+
* deck-icons.svg is expected to sit beside this file.
|
|
8
|
+
*
|
|
9
|
+
* Anything with a data-deck-* attribute is initialised on DOMContentLoaded
|
|
10
|
+
* and again whenever you call Deck.init(container) after injecting HTML.
|
|
11
|
+
* ======================================================================== */const Deck=(()=>{"use strict";const H=(()=>{const e=typeof document<"u"?document.currentScript:null;if(e&&e.dataset.deckIcons)return e.dataset.deckIcons;if(e&&e.src)try{return new URL("deck-icons.svg",e.src).href}catch{}return"/assets/deck-icons.svg"})(),L=(e,t=document)=>t.querySelector(e),m=(e,t=document)=>Array.from(t.querySelectorAll(e)),B=(e,t,s)=>{const n=document.createElement(e);return t&&(n.className=t),s!=null&&(n.innerHTML=s),n},j=(e,t="icon")=>`<svg class="${t}" aria-hidden="true"><use href="${y.iconSprite}#${e}"></use></svg>`,J=864e5,z=e=>`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`,Q=e=>{if(!e)return null;const[t,s,n]=e.split("-").map(Number);return t&&s&&n?new Date(t,s-1,n):null},K=(e,t)=>e&&t&&e.toDateString()===t.toDateString(),Z=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()),tt=(e,t)=>new Date(e.getFullYear(),e.getMonth()+t,1),et=new Map;function st(e){const t=e||"auto";if(et.has(t))return et.get(t);const s=e||document.documentElement.lang||navigator.language||"en",n=new Intl.DateTimeFormat(s,{month:"long"}),r=new Intl.DateTimeFormat(s,{month:"short"}),c=new Intl.DateTimeFormat(s,{weekday:"short"}),u={locale:s,months:Array.from({length:12},(k,h)=>n.format(new Date(2021,h,1))),monthsShort:Array.from({length:12},(k,h)=>r.format(new Date(2021,h,1))),days:Array.from({length:7},(k,h)=>c.format(new Date(2021,7,1+h))),weekStart:(()=>{try{const k=new Intl.Locale(s).getWeekInfo?.()||new Intl.Locale(s).weekInfo;return k?k.firstDay===7?0:k.firstDay:0}catch{return 0}})(),long:new Intl.DateTimeFormat(s,{dateStyle:"medium"}),full:new Intl.DateTimeFormat(s,{dateStyle:"full"})};return et.set(t,u),u}function b(e,t,s){if(!e)return"";if(t==="iso")return z(e);if(t==="long")return st(s).long.format(e);const n=e.getFullYear(),r=e.getMonth()+1,c=e.getDate(),u=k=>String(k).padStart(2,"0");return t==="dmy"?`${u(c)}/${u(r)}/${n}`:t==="ymd"?`${n}-${u(r)}-${u(c)}`:`${u(r)}/${u(c)}/${n}`}class A{constructor(t){this.root=t,this.input=L("input",t),this.mode=t.dataset.mode||"single",this.format=t.dataset.format||"mdy",this.min=Q(t.dataset.min),this.max=Q(t.dataset.max),this.showPresets=t.hasAttribute("data-presets"),this.locale=t.dataset.locale||null,this.i18n=st(this.locale),this.weekStart=t.dataset.weekStart!=null?Number(t.dataset.weekStart):this.i18n.weekStart,this.months=Number(t.dataset.months||(this.mode==="range"?2:1)),this.start=Q(this.input.value)||null,this.end=null,this.view=Z(this.start||new Date),this.view.setDate(1),this.jump=null,this.build(),this.bind(),this.render()}build(){const t=this.root;L(".icon",t)||t.insertAdjacentHTML("afterbegin",j("calendar")),L(".datefield-clear",t)||t.insertAdjacentHTML("beforeend",`<button type="button" class="datefield-clear" aria-label="Clear date">${j("x","icon icon-sm")}</button>`),this.input.readOnly=!0,this.input.setAttribute("aria-haspopup","dialog"),this.id="dp-"+Math.random().toString(36).slice(2,8),this.panel=B("div","datepicker"),this.panel.id=this.id,this.panel.setAttribute("popover",""),document.body.append(this.panel),this.input.setAttribute("popovertarget",this.id),this.input.style.cursor="pointer"}bind(){this.input.addEventListener("click",()=>this.panel.showPopover()),this.input.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" "||t.key==="ArrowDown")&&(t.preventDefault(),this.panel.showPopover())}),L(".datefield-clear",this.root).addEventListener("click",t=>{t.stopPropagation(),this.start=this.end=null,this.commit(),this.render()}),this.panel.addEventListener("toggle",t=>{t.newState==="open"&&this.position()}),this.panel.addEventListener("click",t=>this.onClick(t)),this.panel.addEventListener("mouseover",t=>{const s=t.target.closest(".datepicker-day");this.mode!=="range"||!this.start||this.end||!s||(this.hover=Q(s.dataset.date),this.paintRange())}),window.addEventListener("resize",()=>{this.panel.matches(":popover-open")&&this.position()})}position(){if(CSS.supports("anchor-name: --a")||window.innerWidth<=480)return;const t=this.root.getBoundingClientRect(),s=this.panel;s.style.insetInlineStart=Math.max(8,Math.min(t.left,window.innerWidth-s.offsetWidth-8))+"px";const n=window.innerHeight-t.bottom;s.style.insetBlockStart=n>s.offsetHeight+12||n>t.top?t.bottom+6+"px":Math.max(8,t.top-s.offsetHeight-6)+"px"}blocked(t){return this.min&&t<this.min||this.max&&t>this.max}onClick(t){const s=t.target.closest(".datepicker-day");if(s)return this.pick(Q(s.dataset.date));const n=t.target.closest("[data-nav]");if(n)return this.view=tt(this.view,Number(n.dataset.nav)),this.render();if(t.target.closest(".datepicker-title"))return this.jump=this.jump?null:"month",this.render();const c=t.target.closest("[data-month]");if(c)return this.view=new Date(this.view.getFullYear(),Number(c.dataset.month),1),this.jump=null,this.render();const u=t.target.closest("[data-preset]");if(u){const k=Number(u.dataset.preset),h=Z(new Date);this.mode==="range"?(this.end=h,this.start=k===0?h:new Date(h-(k-1)*J)):(this.start=new Date(h-k*J),this.end=null),this.commit(),this.render(),this.mode!=="range"&&this.panel.hidePopover();return}t.target.closest("[data-apply]")&&(this.commit(),this.panel.hidePopover()),t.target.closest("[data-cancel]")&&this.panel.hidePopover()}pick(t){!t||this.blocked(t)||(this.mode==="range"?!this.start||this.end?(this.start=t,this.end=null):t<this.start?(this.end=this.start,this.start=t):this.end=t:(this.start=t,this.end=null),this.commit(),this.render(),(this.mode!=="range"||this.end)&&setTimeout(()=>this.panel.hidePopover(),120))}commit(){const t=s=>b(s,this.format,this.locale);this.input.value=this.mode==="range"?this.start?t(this.start)+(this.end?" \u2013 "+t(this.end):""):"":t(this.start),this.root.classList.toggle("has-value",!!this.input.value),this.input.dispatchEvent(new CustomEvent("deck:change",{bubbles:!0,detail:{start:this.start?z(this.start):null,end:this.end?z(this.end):null}}))}monthHTML(t){const s=new Date(t.getFullYear(),t.getMonth(),1);let n=(s.getDay()-this.weekStart+7)%7;const r=[],c=new Date(s);c.setDate(1-n);for(let E=0;E<42&&(r.push(new Date(c)),c.setDate(c.getDate()+1),!(E>=34&&c.getMonth()!==t.getMonth()&&c.getDay()===this.weekStart));E++);const u=this.i18n.days,k=u.slice(this.weekStart).concat(u.slice(0,this.weekStart)),h=Z(new Date);return`<div class="datepicker-month">
|
|
12
|
+
<div class="datepicker-grid">${k.map(E=>`<div class="datepicker-dow">${E}</div>`).join("")}</div>
|
|
13
|
+
<div class="datepicker-grid">${r.map(E=>{const D=["datepicker-day"];return E.getMonth()!==t.getMonth()&&D.push("is-outside"),K(E,h)&&D.push("is-today"),this.blocked(E)&&D.push("is-blocked"),`<button type="button" class="${D.join(" ")}" data-date="${z(E)}"
|
|
14
|
+
${this.blocked(E)?"disabled":""}
|
|
15
|
+
aria-label="${this.i18n.full.format(E)}">${E.getDate()}</button>`}).join("")}</div>
|
|
16
|
+
</div>`}render(){const t=this.showPresets?`
|
|
17
|
+
<div class="datepicker-presets">
|
|
18
|
+
${(this.mode==="range"?[["Today",0],["Last 7 days",7],["Last 30 days",30],["Last 90 days",90]]:[["Today",0],["Yesterday",1],["A week ago",7],["A month ago",30]]).map(([u,k])=>`<button type="button" class="datepicker-preset" data-preset="${k}">${u}</button>`).join("")}
|
|
19
|
+
</div>`:"",s=this.jump?`<div class="datepicker-jump">${this.i18n.monthsShort.map((u,k)=>`<button type="button" data-month="${k}" aria-selected="${k===this.view.getMonth()}">${u}</button>`).join("")}</div>`:`<div class="datepicker-months">${Array.from({length:this.months},(u,k)=>this.monthHTML(tt(this.view,k))).join("")}</div>`,n=this.months>1&&!this.jump?`${this.i18n.monthsShort[this.view.getMonth()]} \u2013 ${this.i18n.monthsShort[tt(this.view,this.months-1).getMonth()]} ${this.view.getFullYear()}`:`${this.i18n.months[this.view.getMonth()]} ${this.view.getFullYear()}`,r=u=>b(u,this.format,this.locale),c=this.mode==="range"?this.start?`${r(this.start)} \u2013 ${this.end?r(this.end):"\u2026"}`:"Pick a start date":this.start?r(this.start):"No date selected";this.panel.innerHTML=`
|
|
20
|
+
<div class="datepicker-layout">
|
|
21
|
+
${t}
|
|
22
|
+
<div class="datepicker-main">
|
|
23
|
+
<div class="datepicker-head">
|
|
24
|
+
<button type="button" class="datepicker-nav" data-nav="-1" aria-label="Previous month">${j("chevron-left","icon icon-sm")}</button>
|
|
25
|
+
<button type="button" class="datepicker-title">${n} ${j("chevron-down","icon icon-sm")}</button>
|
|
26
|
+
<button type="button" class="datepicker-nav" data-nav="1" aria-label="Next month">${j("chevron-right","icon icon-sm")}</button>
|
|
27
|
+
</div>
|
|
28
|
+
${s}
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
<div class="datepicker-foot">
|
|
32
|
+
<span class="datepicker-readout">${c}</span>
|
|
33
|
+
<button type="button" class="btn btn-sm" data-cancel>Cancel</button>
|
|
34
|
+
<button type="button" class="btn btn-sm btn-primary" data-apply>Apply</button>
|
|
35
|
+
</div>`,this.paintRange(),this.root.classList.toggle("has-value",!!this.input.value)}paintRange(){m(".datepicker-day",this.panel).forEach(t=>{const s=Q(t.dataset.date),n=this.end||(this.mode==="range"&&this.start&&this.hover>this.start?this.hover:null);t.classList.toggle("is-selected",K(s,this.start)||K(s,this.end)),t.classList.toggle("is-range-start",!!n&&K(s,this.start)),t.classList.toggle("is-range-end",!!n&&K(s,n)),t.classList.toggle("is-in-range",!!(n&&this.start&&s>this.start&&s<n))})}}class T{constructor(t){this.root=t,this.select=L("select",t),this.multi=t.hasAttribute("data-multi")||this.select&&this.select.multiple,this.allowCreate=t.hasAttribute("data-create"),this.placeholder=t.dataset.placeholder||"Search",this.remote=t.dataset.url||null,this.minChars=Number(t.dataset.minChars||0),this.open=!1,this.activeIndex=-1,this.query="",this.options=this.select?m("option",this.select).map(s=>({value:s.value,label:s.textContent.trim(),sub:s.dataset.sub||"",group:s.dataset.group||(s.parentElement.tagName==="OPTGROUP"?s.parentElement.label:""),disabled:s.disabled,selected:s.selected})):[],this.select&&(this.select.hidden=!0),this.build(),this.bind(),this.renderTokens()}get selected(){return this.options.filter(t=>t.selected)}build(){this.control=B("div","combo-control"),this.control.innerHTML=`
|
|
36
|
+
<span class="combo-tokens"></span>
|
|
37
|
+
<input class="combo-input" type="text" role="combobox" autocomplete="off"
|
|
38
|
+
aria-expanded="false" aria-autocomplete="list" placeholder="${this.placeholder}">
|
|
39
|
+
<button type="button" class="combo-toggle" tabindex="-1" aria-label="Toggle list">${j("chevron-down","icon icon-sm")}</button>`,this.list=B("div","combo-list"),this.list.setAttribute("role","listbox"),this.root.append(this.control,this.list),this.input=L(".combo-input",this.control),this.tokens=L(".combo-tokens",this.control)}bind(){this.control.addEventListener("mousedown",t=>{t.target.closest(".combo-token > button")||(t.target!==this.input&&(t.preventDefault(),this.input.focus()),t.target.closest(".combo-toggle")?this.toggle():this.open||this.show())}),this.input.addEventListener("input",()=>{this.query=this.input.value,this.activeIndex=0,this.remote?this.fetch():this.render(),this.show()}),this.input.addEventListener("keydown",t=>this.onKey(t)),this.input.addEventListener("blur",()=>setTimeout(()=>this.hide(),130)),this.list.addEventListener("mousedown",t=>{const s=t.target.closest(".combo-option");s&&(t.preventDefault(),s.dataset.create!=null?this.create(this.query):this.choose(s.dataset.value))}),this.list.addEventListener("mousemove",t=>{const s=t.target.closest(".combo-option");s&&(this.activeIndex=Number(s.dataset.index),this.paintActive())}),this.tokens.addEventListener("click",t=>{const s=t.target.closest("button");s&&this.choose(s.dataset.value,!0)})}matches(){const t=this.query.trim().toLowerCase();return t.length<this.minChars?[]:t?this.options.filter(s=>s.label.toLowerCase().includes(t)||s.sub.toLowerCase().includes(t)||s.value.toLowerCase().includes(t)):this.options}render(){const t=this.matches();if(this.visible=t,!t.length){this.list.innerHTML=this.allowCreate&&this.query.trim()?`<button type="button" class="combo-option" data-create data-index="0">${j("plus","icon icon-sm")}
|
|
40
|
+
<span class="combo-option-main"><span>Add \u201C${x(this.query.trim())}\u201D</span></span></button>`:`<div class="combo-empty">${j("search","icon icon-sm")} No matches for \u201C${x(this.query)}\u201D</div>`;return}let s="",n=null;t.forEach((r,c)=>{r.group&&r.group!==n&&(n=r.group,s+=`<div class="combo-group">${x(n)}</div>`),s+=`<button type="button" class="combo-option" role="option" data-index="${c}"
|
|
41
|
+
data-value="${x(r.value)}"
|
|
42
|
+
aria-selected="${r.selected}" ${r.disabled?'aria-disabled="true"':""}>
|
|
43
|
+
<span class="combo-option-main">
|
|
44
|
+
<span>${O(r.label,this.query)}</span>
|
|
45
|
+
${r.sub?`<span class="combo-option-sub">${O(r.sub,this.query)}</span>`:""}
|
|
46
|
+
</span>
|
|
47
|
+
${this.multi?`<span class="combo-check">${j("check","icon icon-sm")}</span>`:""}
|
|
48
|
+
</button>`}),this.allowCreate&&this.query.trim()&&!t.some(r=>r.label.toLowerCase()===this.query.trim().toLowerCase())&&(s+=`<div class="combo-create"><button type="button" class="combo-option" data-create data-index="${t.length}">
|
|
49
|
+
${j("plus","icon icon-sm")}<span class="combo-option-main"><span>Add \u201C${x(this.query.trim())}\u201D</span></span></button></div>`),s+='<div class="combo-hint"><span><kbd>\u2191</kbd><kbd>\u2193</kbd> move</span><span><kbd>enter</kbd> select</span><span><kbd>esc</kbd> close</span></div>',this.list.innerHTML=s,this.paintActive()}paintActive(){const t=m(".combo-option",this.list);t.forEach(n=>n.classList.remove("is-active"));const s=t[this.activeIndex];s&&(s.classList.add("is-active"),s.scrollIntoView({block:"nearest"}))}onKey(t){const s=m(".combo-option",this.list);if(t.key==="ArrowDown"||t.key==="ArrowUp"){t.preventDefault(),this.open||this.show();const n=t.key==="ArrowDown"?1:-1;this.activeIndex=(this.activeIndex+n+s.length)%(s.length||1),this.paintActive()}else if(t.key==="Enter"){if(!this.open)return;t.preventDefault();const n=s[this.activeIndex];if(!n)return;n.dataset.create!=null?this.create(this.query):this.choose(n.dataset.value)}else if(t.key==="Escape")this.open&&(t.stopPropagation(),this.hide());else if(t.key==="Backspace"&&!this.input.value&&this.multi){const n=this.selected.at(-1);n&&this.choose(n.value,!0)}}choose(t,s){const n=this.options.find(r=>r.value===t);!n||n.disabled||(this.multi?n.selected=s?!1:!n.selected:(this.options.forEach(r=>{r.selected=!1}),n.selected=!0,this.input.value=n.label,this.query="",this.hide()),this.multi&&(this.input.value="",this.query=""),this.sync(),this.renderTokens(),this.render())}create(t){const s=t.trim();if(!s)return;const n={value:s,label:s,sub:"",group:"",disabled:!1,selected:!1};this.options.push(n),this.select&&this.select.append(new Option(s,s)),this.choose(s),this.root.dispatchEvent(new CustomEvent("deck:create",{bubbles:!0,detail:{value:s}}))}renderTokens(){if(!this.multi){const n=this.selected[0];n&&document.activeElement!==this.input&&(this.input.value=n.label),this.tokens.innerHTML="";return}const t=Number(this.root.dataset.maxTokens||4),s=this.selected;this.tokens.innerHTML=s.slice(0,t).map(n=>`<span class="combo-token"><span>${x(n.label)}</span>
|
|
50
|
+
<button type="button" data-value="${x(n.value)}" aria-label="Remove ${x(n.label)}">${j("x","icon icon-sm")}</button>
|
|
51
|
+
</span>`).join("")+(s.length>t?`<span class="combo-count">+${s.length-t}</span>`:""),this.input.placeholder=s.length?"":this.placeholder}sync(){this.select&&(m("option",this.select).forEach(t=>{const s=this.options.find(n=>n.value===t.value);t.selected=!!(s&&s.selected)}),this.select.dispatchEvent(new Event("change",{bubbles:!0})),this.root.dispatchEvent(new CustomEvent("deck:change",{bubbles:!0,detail:{values:this.selected.map(t=>t.value)}})))}async fetch(){const t=this.query.trim();t.length<this.minChars||(this.list.innerHTML='<div class="combo-loading"><span class="spinner"></span> Searching</div>',clearTimeout(this._t),this._t=setTimeout(async()=>{try{const n=await(await window.fetch(this.remote+encodeURIComponent(t),{headers:{Accept:"application/json"}})).json(),r=this.selected;this.options=n.map(c=>({value:String(c.value??c.id),label:String(c.label??c.name),sub:c.sub||"",group:c.group||"",disabled:!!c.disabled,selected:r.some(u=>u.value===String(c.value??c.id))})),this.render()}catch{this.list.innerHTML='<div class="combo-empty">Could not load results. Try again.</div>'}},Number(this.root.dataset.debounce||220)))}show(){if(this.open)return;this.open=!0,this.root.classList.add("is-open"),this.input.setAttribute("aria-expanded","true"),this.render();const t=this.control.getBoundingClientRect();this.list.classList.toggle("is-above",window.innerWidth>480&&window.innerHeight-t.bottom<240&&t.top>240)}toggle(){this.open?this.hide():this.show()}hide(){if(this.open){if(this.open=!1,this.root.classList.remove("is-open"),this.input.setAttribute("aria-expanded","false"),this.multi)this.input.value="";else{const t=this.selected[0];this.input.value=t?t.label:""}this.query=""}}}function x(e){return String(e).replace(/[&<>"']/g,t=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[t])}function O(e,t){const s=t.trim(),n=x(e);if(!s)return n;const r=e.toLowerCase().indexOf(s.toLowerCase());return r<0?n:x(e.slice(0,r))+"<mark>"+x(e.slice(r,r+s.length))+"</mark>"+x(e.slice(r+s.length))}class R{constructor(t){this.wrap=t,this.table=L(".dg",t),this.table&&(this.measurePins(),this.wireSort(),this.wireSelect(),this.wireResize(),CSS.supports("container-type: scroll-state")||(this.shadows(),t.addEventListener("scroll",()=>this.shadows(),{passive:!0})),new ResizeObserver(()=>this.measurePins()).observe(this.table))}measurePins(){const t=L("thead .dg-pin-start",this.table);t&&this.wrap.style.setProperty("--dg-pin-start",t.offsetWidth+"px")}shadows(){const t=this.wrap,s=Math.abs(t.scrollLeft);t.classList.toggle("is-scrolled-x",s>0),t.classList.toggle("is-scrolled-end",s+t.clientWidth<t.scrollWidth-1)}wireSort(){m("th[data-sort]",this.table).forEach((t,s)=>{if(L(".dg-sort",t))return;const n=t.textContent.trim();t.innerHTML=`<button type="button" class="dg-sort">${x(n)}
|
|
52
|
+
<svg class="icon dg-sort-icon" aria-hidden="true"><use href="${y.iconSprite}#chevron-up"></use></svg></button>`,L(".dg-sort",t).addEventListener("click",()=>this.sort(t))})}sort(t){const s=m("th",this.table.tHead.rows[0]),n=s.indexOf(t),r=t.dataset.sort,c=t.getAttribute("aria-sort")==="ascending"?"descending":"ascending";s.forEach(E=>E.removeAttribute("aria-sort")),t.setAttribute("aria-sort",c);const u=this.table.tBodies[0],k=Array.from(u.rows),h=E=>{const D=E.cells[n],U=D?.dataset.value??D?.textContent.trim()??"";return r==="num"?parseFloat(U.replace(/[^0-9.\-]/g,""))||0:r==="date"?new Date(U).getTime()||0:U.toLowerCase()};k.sort((E,D)=>{const U=h(E),G=h(D);return(U<G?-1:U>G?1:0)*(c==="ascending"?1:-1)}),k.forEach(E=>u.append(E)),this.wrap.dispatchEvent(new CustomEvent("deck:sort",{bubbles:!0,detail:{index:n,dir:c,kind:r}}))}wireSelect(){const t=L("thead .dg-check input",this.table),s=()=>m("tbody .dg-check input",this.table),n=()=>{const r=s(),c=r.filter(k=>k.checked);r.forEach(k=>k.closest("tr").setAttribute("aria-selected",k.checked)),t&&(t.checked=c.length>0&&c.length===r.length,t.indeterminate=c.length>0&&c.length<r.length);const u=L("[data-dg-selection]",this.wrap.parentElement||document);if(u){u.hidden=c.length===0;const k=L("[data-dg-count]",u);k&&(k.textContent=c.length)}this.wrap.dispatchEvent(new CustomEvent("deck:select",{bubbles:!0,detail:{count:c.length}}))};t&&t.addEventListener("change",()=>{s().forEach(r=>{r.checked=t.checked}),n()}),this.table.addEventListener("change",r=>{r.target.closest(".dg-check")&&n()}),n()}wireResize(){m("th[data-resize]",this.table).forEach(t=>{if(L(".dg-resize",t))return;t.style.position="sticky";const s=B("div","dg-resize");t.append(s);let n=0,r=0;const c=k=>{const h=k.touches?k.touches[0].clientX:k.clientX;t.style.width=Math.max(64,r+(h-n))+"px",this.measurePins()},u=()=>{this.wrap.classList.remove("is-resizing"),document.removeEventListener("pointermove",c),document.removeEventListener("pointerup",u)};s.addEventListener("pointerdown",k=>{k.preventDefault(),n=k.clientX,r=t.offsetWidth,this.wrap.classList.add("is-resizing"),document.addEventListener("pointermove",c),document.addEventListener("pointerup",u)})})}}const M={region:null,items:[],max:3,stacked:!0,mount(){return this.region?this.region:(this.region=L(".toast-region")||B("div","toast-region"),this.stacked&&this.region.classList.add("toast-region-stacked"),this.region.setAttribute("role","region"),this.region.setAttribute("aria-label","Notifications"),this.region.isConnected||document.body.append(this.region),this.region)},icons:{good:"check-circle",bad:"x-circle",warn:"alert-triangle",info:"info",loading:null},push(e){typeof e=="string"&&(e={title:e});const t=Object.assign({kind:"",duration:5e3,actions:[],dismissible:!0},e),s=this.mount(),n=B("div","toast"+(t.kind?" toast-"+t.kind:""));n.setAttribute("role",t.kind==="bad"?"alert":"status"),n.style.setProperty("--toast-duration",t.duration+"ms");const r={node:n,opts:t,dismiss:()=>this.dismiss(r),update:c=>this.update(r,c)};for(this.paintBody(r),this.wireSwipe(r),s.prepend(n),this.items.unshift(r),requestAnimationFrame(()=>{n.style.setProperty("--toast-h",n.offsetHeight+"px"),this.reflow()}),t.duration>0&&this.arm(r);this.items.length>8;)this.dismiss(this.items.at(-1));return r},paintBody(e){const t=e.opts,s=t.kind==="loading"?'<span class="spinner toast-icon"></span>':this.icons[t.kind]?j(this.icons[t.kind],"icon toast-icon"):"";e.node.innerHTML=`
|
|
53
|
+
${s}
|
|
54
|
+
<div class="toast-main">
|
|
55
|
+
${t.title?`<div class="toast-title">${x(t.title)}</div>`:""}
|
|
56
|
+
${t.text?`<div class="toast-text">${x(t.text)}</div>`:""}
|
|
57
|
+
${t.actions.length?`<div class="toast-actions">${t.actions.map((n,r)=>`<button type="button" class="toast-action" data-action="${r}">${x(n.label)}</button>`).join("")}</div>`:""}
|
|
58
|
+
</div>
|
|
59
|
+
${t.dismissible?`<button type="button" class="toast-close" aria-label="Dismiss">${j("x","icon icon-sm")}</button>`:""}
|
|
60
|
+
${t.duration>0?'<span class="toast-timer"></span>':""}`,L(".toast-close",e.node)?.addEventListener("click",()=>this.dismiss(e)),m(".toast-action",e.node).forEach(n=>{n.addEventListener("click",()=>{const r=t.actions[Number(n.dataset.action)];r?.onClick?.(e),r?.close!==!1&&this.dismiss(e)})})},update(e,t){return Object.assign(e.opts,t),e.node.className="toast"+(e.opts.kind?" toast-"+e.opts.kind:""),e.node.style.setProperty("--toast-duration",e.opts.duration+"ms"),this.paintBody(e),this.wireSwipe(e),clearTimeout(e.timer),e.opts.duration>0&&this.arm(e),e},arm(e){clearTimeout(e.timer),e.timer=setTimeout(()=>this.dismiss(e),e.opts.duration);const t=this.region,s=()=>clearTimeout(e.timer),n=()=>{e.opts.duration>0&&this.arm(e)};t.addEventListener("mouseenter",s,{once:!0}),t.addEventListener("mouseleave",n,{once:!0})},dismiss(e){!e||e.leaving||(e.leaving=!0,clearTimeout(e.timer),e.node.classList.add("is-leaving"),e.node.addEventListener("transitionend",()=>e.node.remove(),{once:!0}),setTimeout(()=>e.node.remove(),500),this.items=this.items.filter(t=>t!==e),this.reflow(),e.opts.onDismiss?.(e))},clear(){[...this.items].forEach(e=>this.dismiss(e))},reflow(){this.items.forEach((e,t)=>e.node.setAttribute("aria-hidden",t>=this.max?"true":"false"))},wireSwipe(e){const t=e.node;let s=null,n=0;t.addEventListener("pointerdown",c=>{c.target.closest("button")||(s=c.clientX,t.classList.add("is-dragging"),t.setPointerCapture(c.pointerId))}),t.addEventListener("pointermove",c=>{s!==null&&(n=c.clientX-s,t.style.translate=`${n}px 0`,t.style.opacity=String(Math.max(0,1-Math.abs(n)/220)))});const r=()=>{s!==null&&(t.classList.remove("is-dragging"),Math.abs(n)>90?(t.style.setProperty("--toast-exit-x",(n>0?400:-400)+"px"),this.dismiss(e)):(t.style.translate="",t.style.opacity=""),s=null,n=0)};t.addEventListener("pointerup",r),t.addEventListener("pointercancel",r)}},o=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches;function a(e){m(".ripple",e).forEach(t=>{t.dataset.deckWired||(t.dataset.deckWired="1",t.addEventListener("pointerdown",s=>{if(o())return;const n=t.getBoundingClientRect(),r=B("span","ripple-ink");r.style.setProperty("--rx",s.clientX-n.left+"px"),r.style.setProperty("--ry",s.clientY-n.top+"px"),t.append(r),r.addEventListener("animationend",()=>r.remove(),{once:!0}),setTimeout(()=>r.remove(),900)}))})}function i(e){if(CSS.supports("animation-timeline: view()"))return;const t=m(".reveal, .reveal-fade, .reveal-pop",e).filter(n=>!n.dataset.deckWired);if(!t.length)return;if(o())return t.forEach(n=>{n.style.opacity="1"});const s=new IntersectionObserver(n=>{n.forEach(r=>{r.isIntersecting&&(r.target.classList.add("is-revealed"),s.unobserve(r.target))})},{rootMargin:"0px 0px -8% 0px",threshold:.08});t.forEach(n=>{n.dataset.deckWired="1",s.observe(n)})}function l(e){m(".field",e).forEach(t=>{t.dataset.deckWired||(t.dataset.deckWired="1",t.addEventListener("animationend",()=>t.classList.add("was-shaken")),m("input, textarea, select",t).forEach(s=>{s.addEventListener("input",()=>{s.checkValidity()&&t.classList.remove("is-invalid","was-shaken")})}))})}function d(){"startViewTransition"in document&&(window.addEventListener("popstate",()=>{document.documentElement.dataset.vt="back"}),window.addEventListener("pageswap",()=>{performance.getEntriesByType("navigation")[0]&&delete document.documentElement.dataset.vt}))}function $(e){m("[data-deck-tick]",e).forEach(t=>{if(t.dataset.deckWired)return;t.dataset.deckWired="1",t.classList.add("tick");let s=parseFloat(t.textContent.replace(/[^0-9.\-]/g,""))||0;new MutationObserver(()=>{const n=parseFloat(t.textContent.replace(/[^0-9.\-]/g,""))||0;n!==s&&(t.classList.remove("is-up","is-down"),t.offsetWidth,t.classList.add(n>s?"is-up":"is-down"),s=n)}).observe(t,{childList:!0,characterData:!0,subtree:!0})})}function p(e){window.matchMedia("(hover: hover)").matches&&m(".tilt",e).forEach(t=>{if(t.dataset.deckWired)return;t.dataset.deckWired="1";const s=Number(t.dataset.tilt||9),n=c=>{if(o())return;const u=t.getBoundingClientRect(),k=(c.clientX-u.left)/u.width-.5,h=(c.clientY-u.top)/u.height-.5,E=Math.hypot(k,h)*s*2;t.style.setProperty("--tilt-axis",`${h.toFixed(3)} ${(-k).toFixed(3)} 0`),t.style.setProperty("--tilt-amount",E.toFixed(2)+"deg"),t.style.setProperty("--gx",((k+.5)*100).toFixed(1)+"%"),t.style.setProperty("--gy",((h+.5)*100).toFixed(1)+"%")},r=()=>{t.classList.remove("is-tilting"),t.style.setProperty("--tilt-amount","0deg")};t.addEventListener("pointerenter",()=>t.classList.add("is-tilting")),t.addEventListener("pointermove",n),t.addEventListener("pointerleave",r),t.addEventListener("blur",r)})}function S(e){m("[data-deck-flip]",e).forEach(t=>{if(t.dataset.deckWired)return;t.dataset.deckWired="1";const s=t.dataset.deckFlip?L(t.dataset.deckFlip):t.closest(".flip, .flip-x");s&&t.addEventListener("click",()=>{const n=s.classList.toggle("is-flipped");t.setAttribute("aria-pressed",String(n)),m(".flip-front, .flip-back",s).forEach((r,c)=>{r.inert=n?c===0:c===1})})})}function P(e){m(".coverflow",e).forEach(t=>{if(t.dataset.deckWired)return;t.dataset.deckWired="1";const s=Array.from(t.children),n=()=>{const r=t.scrollLeft+t.clientWidth/2,c=getComputedStyle(t).direction==="rtl";s.forEach(u=>{const h=u.offsetLeft+u.offsetWidth/2-r;u.classList.toggle("is-front",Math.abs(h)<u.offsetWidth/2),u.classList.toggle("is-behind-start",h<-u.offsetWidth/2!==c&&Math.abs(h)>=u.offsetWidth/2),u.classList.toggle("is-behind-end",h>u.offsetWidth/2!==c&&Math.abs(h)>=u.offsetWidth/2)})};t.addEventListener("scroll",()=>requestAnimationFrame(n),{passive:!0}),new ResizeObserver(n).observe(t),n()})}function g(e){m(".pile",e).forEach(t=>{t.dataset.deckWired||(t.dataset.deckWired="1",t.addEventListener("deck:advance",()=>{const s=t.querySelector(":scope > *:not(.is-dismissed)");s&&(s.classList.add("is-dismissed"),setTimeout(()=>t.append(s),400))}))})}function C(e){m(".segmented, .tabs",e).forEach(t=>{t.dataset.deckWired||(t.dataset.deckWired="1",t.addEventListener("click",s=>{const n=s.target.closest("[aria-selected]");n&&(m("[aria-selected]",t).forEach(r=>r.setAttribute("aria-selected","false")),n.setAttribute("aria-selected","true"),t.dispatchEvent(new CustomEvent("deck:change",{bubbles:!0,detail:{value:n.dataset.value??n.textContent.trim()}})))}))})}let W=0;function Y(e){CSS.supports("anchor-name: --a")&&m("[popovertarget]",e).forEach(t=>{const s=document.getElementById(t.getAttribute("popovertarget"));if(!s||t.dataset.deckAnchored)return;t.dataset.deckAnchored="1";const n=s.style.getPropertyValue("--anchor")||`--dk-a${++W}`;t.classList.add("anchor"),t.style.setProperty("--anchor",n),s.style.setProperty("--anchor",n),t.setAttribute("data-deck-anchor","#"+s.id)})}function N(e){m("[data-deck-theme]",e).forEach(t=>{t.dataset.deckWired||(t.dataset.deckWired="1",t.addEventListener("click",()=>{const s=document.documentElement.getAttribute("data-theme"),n=s?s==="dark":matchMedia("(prefers-color-scheme: dark)").matches;y.theme(n?"light":"dark")}))})}let F=null;function _(e){if(CSS.supports("animation-timeline: scroll()")||o())return;const t=m(".back-to-top",e).filter(n=>!n.dataset.deckBtt);if(!t.length)return;t.forEach(n=>{n.dataset.deckBtt="1"});let s=document.getElementById("dk-btt-sentinel");s||(s=document.createElement("div"),s.id="dk-btt-sentinel",s.setAttribute("aria-hidden","true"),s.style.cssText="position:absolute;inset-block-start:0;inset-inline-start:0;inline-size:1px;block-size:400px;visibility:hidden;pointer-events:none;",document.body.prepend(s)),F&&F.disconnect(),F=new IntersectionObserver(n=>{const r=!n[n.length-1].isIntersecting;m(".back-to-top[data-deck-btt]").forEach(c=>c.classList.toggle("is-visible",r))}),F.observe(s)}const y={iconSprite:H,version:"0.1",init(e=document){return m("[data-deck-datepicker]",e).forEach(t=>{t._deck||(t._deck=new A(t))}),m("[data-deck-combo]",e).forEach(t=>{t._deck||(t._deck=new T(t))}),m("[data-deck-grid]",e).forEach(t=>{t._deck||(t._deck=new R(t))}),C(e),Y(e),N(e),_(e),a(e),i(e),l(e),$(e),p(e),S(e),P(e),g(e),y},toast(e){return M.push(e)},toasts:M,theme(e){if(!e)return document.documentElement.getAttribute("data-theme")||"auto";document.documentElement.setAttribute("data-theme",e);try{localStorage.setItem("deck-theme",e)}catch{}return e},hue(e){document.documentElement.style.setProperty("--hue-brand",e)},locale(e){return st(e)},transition(e,t={}){if(o()||!document.startViewTransition){const n=e();return{finished:Promise.resolve(n),ready:Promise.resolve()}}t.direction&&(document.documentElement.dataset.vt=t.direction);const s=document.startViewTransition(e);return s.finished.finally(()=>{delete document.documentElement.dataset.vt}),s},play(e,t){return e?(e.classList.remove(t),e.offsetWidth,e.classList.add(t,"is-animating"),new Promise(s=>{const n=()=>{e.classList.remove(t,"is-animating"),s(e)};e.addEventListener("animationend",n,{once:!0}),setTimeout(n,2e3)})):Promise.resolve()},toggle(e,t){const s=t??!e.classList.contains("is-open");return e.classList.add("expand"),e.classList.toggle("is-open",s),s},dir(e){if(!e)return document.documentElement.getAttribute("dir")||"ltr";document.documentElement.setAttribute("dir",e);try{localStorage.setItem("deck-dir",e)}catch{}return e},flip(e,t){return e.classList.toggle("is-flipped",t)},advance(e){e.dispatchEvent(new CustomEvent("deck:advance"))},face(e,t){return e.dataset.face=t,t},reduced:o};return d(),document.addEventListener("DOMContentLoaded",()=>{try{const e=localStorage.getItem("deck-theme");e&&document.documentElement.setAttribute("data-theme",e);const t=localStorage.getItem("deck-dir");t&&document.documentElement.setAttribute("dir",t)}catch{}y.init()}),y})();typeof window<"u"&&(window.Deck=Deck),typeof globalThis<"u"&&(globalThis.Deck=Deck),typeof module<"u"&&module.exports&&(module.exports=Deck);/*! ==========================================================================
|
|
61
|
+
* deck-extras.js v0.1 — behaviour for the extended component set
|
|
62
|
+
* Loads after deck.js and registers itself with Deck.init.
|
|
63
|
+
* No dependencies, including the QR encoder.
|
|
64
|
+
* ======================================================================== */(function(H){"use strict";if(!H){console.warn("deck-extras.js: load deck.js first");return}const L=(o,a=document)=>a.querySelector(o),m=(o,a=document)=>Array.from(a.querySelectorAll(o)),B=o=>o.dataset.deckX?!1:(o.dataset.deckX="1",!0),j=()=>matchMedia("(prefers-reduced-motion: reduce)").matches;function J(o){m("[data-deck-carousel]",o).forEach(a=>{if(!B(a))return;const i=L(".carousel-track",a);if(!i)return;const l=m(".carousel-slide",i),d=!CSS.supports("selector(::scroll-marker)"),$=d?L(".carousel-dots",a):null,p=d?L(".carousel-prev",a):null,S=d?L(".carousel-next",a):null,P=()=>getComputedStyle(i).direction==="rtl";$&&!$.children.length&&($.innerHTML=l.map((N,F)=>`<button type="button" class="carousel-dot" data-go="${F}" aria-label="Slide ${F+1}"></button>`).join(""));const g=()=>{const N=i.scrollLeft+i.clientWidth/2;let F=0,_=1/0;return l.forEach((y,e)=>{const t=Math.abs(y.offsetLeft+y.offsetWidth/2-N);t<_&&(_=t,F=e)}),F},C=N=>{const F=l[Math.max(0,Math.min(l.length-1,N))];F&&i.scrollTo({left:F.offsetLeft-(i.clientWidth-F.offsetWidth)/2,behavior:j()?"auto":"smooth"})},W=()=>{const N=g();$&&m(".carousel-dot",$).forEach((F,_)=>F.setAttribute("aria-current",String(_===N))),p&&(p.disabled=N===0),S&&(S.disabled=N===l.length-1),a.dispatchEvent(new CustomEvent("deck:slide",{bubbles:!0,detail:{index:N}}))};i.addEventListener("scroll",()=>requestAnimationFrame(W),{passive:!0}),p?.addEventListener("click",()=>C(g()-1)),S?.addEventListener("click",()=>C(g()+1)),$?.addEventListener("click",N=>{const F=N.target.closest("[data-go]");F&&C(Number(F.dataset.go))}),a.addEventListener("keydown",N=>{const F=P()?"ArrowRight":"ArrowLeft",_=P()?"ArrowLeft":"ArrowRight";N.key===F&&(N.preventDefault(),C(g()-1)),N.key===_&&(N.preventDefault(),C(g()+1))});const Y=Number(a.dataset.autoplay||0);if(Y>0&&!j()){let F=function(){const e=g();C(e>=l.length-1?0:e+1)},N=setInterval(F,Y);const _=()=>clearInterval(N),y=()=>{_(),N=setInterval(F,Y)};a.addEventListener("pointerenter",_),a.addEventListener("pointerleave",y),a.addEventListener("focusin",_),document.addEventListener("visibilitychange",()=>document.hidden?_():y())}W(),a.carousel={go:C,current:g,paint:W}})}function z(o){m("[data-deck-drawer]",o).forEach(a=>{if(!B(a))return;const i=L(a.dataset.deckDrawer);i&&(a.addEventListener("click",()=>i.showModal()),i.addEventListener("click",l=>{l.target===i&&i.close()}),m("[data-drawer-close]",i).forEach(l=>l.addEventListener("click",()=>i.close())))})}function Q(o){m("[data-deck-mega]",o).forEach(a=>{if(!B(a))return;const i=L(a.dataset.deckMega);if(!i)return;const l=()=>{if(CSS.supports("anchor-name: --a"))return;const d=a.getBoundingClientRect();i.style.insetBlockStart=d.bottom+8+"px";const $=i.offsetWidth,p=Math.min(Math.max(8,d.left+d.width/2-$/2),innerWidth-$-8);i.style.insetInlineStart=p+"px"};if(i.addEventListener("toggle",d=>{d.newState==="open"&&l()}),addEventListener("resize",()=>{i.matches(":popover-open")&&l()}),matchMedia("(hover: hover)").matches){let d;const $=()=>{clearTimeout(d),d=setTimeout(()=>i.showPopover(),90)},p=()=>{clearTimeout(d),d=setTimeout(()=>i.hidePopover(),180)};[a,i].forEach(S=>{S.addEventListener("pointerenter",$),S.addEventListener("pointerleave",p)})}})}function K(o){m(".speed-dial",o).forEach(a=>{if(!B(a))return;const i=L(".fab",a),l=d=>{a.classList.toggle("is-open",d),i?.setAttribute("aria-expanded",String(d))};i?.addEventListener("click",()=>l(!a.classList.contains("is-open"))),document.addEventListener("click",d=>{a.contains(d.target)||l(!1)}),a.addEventListener("keydown",d=>{d.key==="Escape"&&(l(!1),i?.focus())})})}function Z(o){m(".banner",o).forEach(a=>{if(!B(a))return;const i=a.dataset.dismissKey;if(i)try{if(localStorage.getItem("deck-banner-"+i)){a.hidden=!0;return}}catch{}L(".banner-close",a)?.addEventListener("click",()=>{if(a.hidden=!0,i)try{localStorage.setItem("deck-banner-"+i,"1")}catch{}})})}function tt(o){m(".number",o).forEach(a=>{if(!B(a))return;const i=L("input",a),l=Number(i.step)||1,d=i.min===""?-1/0:Number(i.min),$=i.max===""?1/0:Number(i.max),p=(String(l).split(".")[1]||"").length,S=g=>{const C=Number(i.value)||0,W=Math.min($,Math.max(d,C+g*l));i.value=W.toFixed(p),i.dispatchEvent(new Event("input",{bubbles:!0})),i.dispatchEvent(new Event("change",{bubbles:!0})),P()},P=()=>{const g=Number(i.value);m("button",a).forEach(C=>{const W=Number(C.dataset.step||(C===a.firstElementChild?-1:1));C.disabled=W<0?g<=d:g>=$})};m("button",a).forEach(g=>{const C=Number(g.dataset.step||(g===a.firstElementChild?-1:1));let W,Y;const N=_=>{_.preventDefault(),S(C),W=setTimeout(()=>{Y=setInterval(()=>S(C),70)},420)},F=()=>{clearTimeout(W),clearInterval(Y)};g.addEventListener("pointerdown",N),["pointerup","pointerleave","pointercancel"].forEach(_=>g.addEventListener(_,F))}),i.addEventListener("input",P),P()})}function et(o){m(".phone",o).forEach(a=>{if(!B(a))return;const i=L("input",a),l=L("select",a),d=L(".phone-code",a),$=L(".phone-flag",a),p=()=>{const P=l?.selectedOptions[0];P&&(d&&(d.textContent=P.dataset.code||""),$&&($.textContent=P.dataset.flag||""),i.placeholder=P.dataset.mask?P.dataset.mask.replace(/#/g,"0"):i.placeholder)};l?.addEventListener("change",()=>{p(),S()});const S=()=>{const P=l?.selectedOptions[0]?.dataset.mask,g=i.value.replace(/\D/g,"");if(!P){i.value=g;return}let C="",W=0;for(const N of P){if(W>=g.length)break;C+=N==="#"?g[W++]:N}i.value=C;const Y=(P.match(/#/g)||[]).length;a.classList.toggle("is-valid",g.length===Y)};i.addEventListener("input",S),i.addEventListener("blur",()=>{a.dispatchEvent(new CustomEvent("deck:change",{bubbles:!0,detail:{code:l?.selectedOptions[0]?.dataset.code||"",number:i.value.replace(/\D/g,""),e164:(l?.selectedOptions[0]?.dataset.code||"")+i.value.replace(/\D/g,"")}}))}),p()})}function st(o){m(".range-pair",o).forEach(a=>{if(!B(a))return;const[i,l]=m('input[type="range"]',a);if(!i||!l)return;const d=Number(i.min||0),$=Number(i.max||100),p=g=>(g-d)/($-d)*100,S=Number(a.dataset.gap||0),P=()=>{Number(i.value)>Number(l.value)-S&&(document.activeElement===i?i.value=String(Number(l.value)-S):l.value=String(Number(i.value)+S)),a.style.setProperty("--lo",p(Number(i.value)).toFixed(2)),a.style.setProperty("--hi",p(Number(l.value)).toFixed(2));const g=a.parentElement?.querySelector(".range-readout");if(g){const[C,W]=g.children;C&&(C.textContent=i.dataset.prefix?i.dataset.prefix+i.value:i.value),W&&(W.textContent=l.dataset.prefix?l.dataset.prefix+l.value:l.value)}a.dispatchEvent(new CustomEvent("deck:change",{bubbles:!0,detail:{min:Number(i.value),max:Number(l.value)}}))};[i,l].forEach(g=>g.addEventListener("input",P)),P()})}async function b(o){try{return await navigator.clipboard.writeText(o),!0}catch{const i=document.createElement("textarea");i.value=o,i.setAttribute("readonly",""),i.style.cssText="position:fixed;opacity:0;pointer-events:none",document.body.append(i),i.select();let l=!1;try{l=document.execCommand("copy")}catch{}return i.remove(),l}}function A(o){m("[data-deck-copy]",o).forEach(a=>{B(a)&&a.addEventListener("click",async()=>{const i=a.dataset.deckCopy,l=i&&i!=="true"?L(i)?.value??L(i)?.textContent??i:a.closest(".copy")?.querySelector("code, .copy-value")?.textContent??a.previousElementSibling?.textContent??"",d=await b(String(l).trim());a.classList.toggle("is-copied",d),a.setAttribute("aria-live","polite"),d&&!a.classList.contains("copy-inline")&&!L(".copy-done",a)&&H.toast({kind:"good",title:"Copied",duration:2e3}),setTimeout(()=>a.classList.remove("is-copied"),1800)})})}function T(o){m(".editor",o).forEach(a=>{if(!B(a))return;const i=L(".editor-content",a),l=a.dataset.target?L(a.dataset.target):null,d=L(".editor-count",a),$=Number(a.dataset.limit||0);if(!i)return;i.contentEditable="true",i.setAttribute("role","textbox"),i.setAttribute("aria-multiline","true");const p=(g,C=null)=>{i.focus(),document.execCommand(g,!1,C),S(),P()},S=()=>{if(m("[data-cmd]",a).forEach(g=>{let C=!1;try{C=document.queryCommandState(g.dataset.cmd)}catch{}g.setAttribute("aria-pressed",String(C))}),d){const g=i.textContent.trim().length;d.textContent=$?`${g} / ${$}`:`${g} characters`,d.classList.toggle("is-over",$>0&&g>$)}},P=()=>{l&&(l.value=i.innerHTML),a.dispatchEvent(new CustomEvent("deck:change",{bubbles:!0,detail:{html:i.innerHTML,text:i.textContent}}))};a.addEventListener("click",g=>{const C=g.target.closest("[data-cmd]");if(!C)return;g.preventDefault();const W=C.dataset.cmd;if(W==="createLink"){const Y=prompt("Link address");Y&&p("createLink",Y);return}p(W,C.dataset.value||null)}),m(".editor-select",a).forEach(g=>{g.addEventListener("change",()=>p("formatBlock",g.value))}),i.addEventListener("paste",g=>{g.preventDefault();const C=(g.clipboardData||window.clipboardData).getData("text/plain");document.execCommand("insertText",!1,C)}),i.addEventListener("input",()=>{S(),P()}),i.addEventListener("keyup",S),i.addEventListener("mouseup",S),document.addEventListener("selectionchange",()=>{i.contains(document.getSelection()?.anchorNode)&&S()}),l&&l.value&&(i.innerHTML=l.value),S()})}function x(o){const a=m(".lazy img, img[data-src]",o).filter(d=>!d.dataset.deckX);if(!a.length)return;const i=d=>{d.dataset.deckX="1",d.dataset.src&&(d.src=d.dataset.src),d.dataset.srcset&&(d.srcset=d.dataset.srcset);const $=()=>d.classList.add("is-loaded");d.complete&&d.naturalWidth?$():d.addEventListener("load",$,{once:!0}),d.addEventListener("error",()=>d.closest(".lazy")?.classList.add("is-error"),{once:!0})};if(!("IntersectionObserver"in window))return a.forEach(i);const l=new IntersectionObserver(d=>{d.forEach($=>{$.isIntersecting&&(i($.target),l.unobserve($.target))})},{rootMargin:"200px"});a.forEach(d=>l.observe(d))}const O=(()=>{const o=new Uint8Array(512),a=new Uint8Array(256);for(let y=0,e=1;y<255;y++)o[y]=e,a[e]=y,e<<=1,e&256&&(e^=285);for(let y=255;y<512;y++)o[y]=o[y-255];const i=(y,e)=>y&&e?o[a[y]+a[e]]:0,l={1:[[7,1,19,0,0],[10,1,16,0,0],[13,1,13,0,0],[17,1,9,0,0]],2:[[10,1,34,0,0],[16,1,28,0,0],[22,1,22,0,0],[28,1,16,0,0]],3:[[15,1,55,0,0],[26,1,44,0,0],[18,2,17,0,0],[22,2,13,0,0]],4:[[20,1,80,0,0],[18,2,32,0,0],[26,2,24,0,0],[16,4,9,0,0]],5:[[26,1,108,0,0],[24,2,43,0,0],[18,2,15,2,16],[22,2,11,2,12]],6:[[18,2,68,0,0],[16,4,27,0,0],[24,4,19,0,0],[28,4,15,0,0]],7:[[20,2,78,0,0],[18,4,31,0,0],[18,2,14,4,15],[26,4,13,1,14]],8:[[24,2,97,0,0],[22,2,38,2,39],[22,4,18,2,19],[26,4,14,2,15]],9:[[30,2,116,0,0],[22,3,36,2,37],[20,4,16,4,17],[24,4,12,4,13]],10:[[18,2,68,2,69],[26,4,43,1,44],[24,6,19,2,20],[28,6,15,2,16]]},d={1:[],2:[6,18],3:[6,22],4:[6,26],5:[6,30],6:[6,34],7:[6,22,38],8:[6,24,42],9:[6,26,46],10:[6,28,50]},$={L:0,M:1,Q:2,H:3},p={L:1,M:0,Q:3,H:2};function S(y){let e=[1];for(let t=0;t<y;t++){const s=new Array(e.length+1).fill(0);for(let n=0;n<e.length;n++)s[n]^=i(e[n],o[t]),s[n+1]^=e[n];e=s}return e}function P(y,e){const t=S(e),s=new Array(e).fill(0);for(const n of y){const r=n^s[0];s.shift(),s.push(0);for(let c=0;c<e;c++)s[c]^=i(t[c+1],r)}return s}function g(y,e){const t=p[y]<<3|e;let s=t;for(let n=0;n<10;n++)s=s<<1^(s>>9)*1335;return(t<<10|s)^21522}function C(y){let e=y;for(let t=0;t<12;t++)e=e<<1^(e>>11)*7973;return y<<12|e}function W(y,e){for(let t=1;t<=10;t++){const[s,n,r,c,u]=l[t][$[e]],k=n*r+c*u,h=t<10?8:16;if(y<=Math.floor((k*8-4-h)/8))return t}throw new Error("QR: content too long for versions 1 to 10. Shorten it or link to it.")}function Y(y,e="M"){const t=Array.from(new TextEncoder().encode(y)),s=W(t.length,e),[n,r,c,u,k]=l[s][$[e]],h=r*c+u*k,E=s<10?8:16,D=[],U=(w,V)=>{for(let nt=V-1;nt>=0;nt--)D.push(w>>nt&1)};U(4,4),U(t.length,E),t.forEach(w=>U(w,8));for(let w=0;w<4&&D.length<h*8;w++)D.push(0);for(;D.length%8;)D.push(0);const G=[];for(let w=0;w<D.length;w+=8)G.push(parseInt(D.slice(w,w+8).join(""),2));const it=[236,17];for(let w=0;G.length<h;w++)G.push(it[w%2]);const f=[],v=[];let q=0;for(let w=0;w<r+u;w++){const V=w<r?c:k,nt=G.slice(q,q+V);q+=V,f.push(nt),v.push(P(nt,n))}const I=[],X=Math.max(c,k);for(let w=0;w<X;w++)f.forEach(V=>{w<V.length&&I.push(V[w])});for(let w=0;w<n;w++)v.forEach(V=>I.push(V[w]));return{version:s,ecl:e,codewords:I}}function N(y,e="M"){const{version:t,codewords:s}=Y(y,e),n=t*4+17,r=Array.from({length:n},()=>new Array(n).fill(null)),c=Array.from({length:n},()=>new Array(n).fill(!1)),u=(f,v,q,I=!0)=>{f<0||v<0||f>=n||v>=n||(r[v][f]=q,I&&(c[v][f]=!0))};[[0,0],[n-7,0],[0,n-7]].forEach(([f,v])=>{for(let q=-1;q<=7;q++)for(let I=-1;I<=7;I++){const X=I>=0&&I<=6&&(q===0||q===6)||q>=0&&q<=6&&(I===0||I===6)||I>=2&&I<=4&&q>=2&&q<=4;u(f+I,v+q,X?1:0)}});for(let f=8;f<n-8;f++)u(f,6,f%2===0?1:0),u(6,f,f%2===0?1:0);const k=d[t];k.forEach(f=>k.forEach(v=>{if(!(v===6&&f===6||v===6&&f===n-7||v===n-7&&f===6))for(let q=-2;q<=2;q++)for(let I=-2;I<=2;I++){const X=Math.max(Math.abs(I),Math.abs(q))!==1;u(v+I,f+q,X?1:0)}})),u(8,n-8,1);for(let f=0;f<9;f++)c[8][f]=!0,c[f][8]=!0;for(let f=0;f<8;f++)c[8][n-1-f]=!0,c[n-1-f][8]=!0;if(t>=7){const f=C(t);for(let v=0;v<18;v++){const q=f>>v&1,I=Math.floor(v/3),X=v%3;r[I][n-11+X]=q,c[I][n-11+X]=!0,r[n-11+X][I]=q,c[n-11+X][I]=!0}}let h=0;const E=[];s.forEach(f=>{for(let v=7;v>=0;v--)E.push(f>>v&1)});let D=!0;for(let f=n-1;f>0;f-=2){f===6&&(f=5);for(let v=0;v<n;v++){const q=D?n-1-v:v;for(let I=0;I<2;I++){const X=f-I;c[q][X]||(r[q][X]=h<E.length?E[h++]:0)}}D=!D}const U=[(f,v)=>(f+v)%2===0,(f,v)=>v%2===0,(f,v)=>f%3===0,(f,v)=>(f+v)%3===0,(f,v)=>(Math.floor(v/2)+Math.floor(f/3))%2===0,(f,v)=>f*v%2+f*v%3===0,(f,v)=>(f*v%2+f*v%3)%2===0,(f,v)=>((f+v)%2+f*v%3)%2===0];let G=null,it=1/0;for(let f=0;f<8;f++){const v=r.map(w=>w.slice());for(let w=0;w<n;w++)for(let V=0;V<n;V++)!c[w][V]&&U[f](V,w)&&(v[w][V]^=1);const q=g(e,f),I=w=>q>>w&1;for(let w=0;w<=5;w++)v[w][8]=I(w);v[7][8]=I(6),v[8][8]=I(7),v[8][7]=I(8);for(let w=9;w<=14;w++)v[8][14-w]=I(w);for(let w=0;w<=7;w++)v[8][n-1-w]=I(w);for(let w=8;w<=14;w++)v[n-15+w][8]=I(w);v[n-8][8]=1;const X=F(v,n);X<it&&(it=X,G=v)}return{modules:G,size:n,version:t}}function F(y,e){let t=0;const s=h=>{let E=0,D=1;for(let U=1;U<e;U++)h[U]===h[U-1]?D++:(D>=5&&(E+=D-2),D=1);return D>=5&&(E+=D-2),E};for(let h=0;h<e;h++)t+=s(y[h]);for(let h=0;h<e;h++)t+=s(y.map(E=>E[h]));for(let h=0;h<e-1;h++)for(let E=0;E<e-1;E++){const D=y[h][E];D===y[h][E+1]&&D===y[h+1][E]&&D===y[h+1][E+1]&&(t+=3)}const n=[1,0,1,1,1,0,1,0,0,0,0],r=[0,0,0,0,1,0,1,1,1,0,1],c=h=>{let E=0;for(let D=0;D<=e-11;D++){const U=h.slice(D,D+11).join("");(U===n.join("")||U===r.join(""))&&(E+=40)}return E};for(let h=0;h<e;h++)t+=c(y[h]);for(let h=0;h<e;h++)t+=c(y.map(E=>E[h]));let u=0;for(let h=0;h<e;h++)for(let E=0;E<e;E++)u+=y[h][E];const k=Math.abs(u*100/(e*e)-50);return t+=Math.floor(k/5)*10,t}function _(y,e="M"){const{modules:t,size:s}=N(y,e);let n="";for(let r=0;r<s;r++){let c=0;for(;c<s;){if(!t[r][c]){c++;continue}let u=1;for(;c+u<s&&t[r][c+u];)u++;n+=`<rect x="${c}" y="${r}" width="${u}" height="1"/>`,c+=u}}return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${s} ${s}" role="img"><g>${n}</g></svg>`}return{svg:_,build:N,encode:Y}})();function R(o){m("[data-deck-qr]",o).forEach(a=>{if(!B(a))return;const i=a.dataset.deckQr||a.textContent.trim(),l=(a.dataset.ecl||"M").toUpperCase();try{a.innerHTML=O.svg(i,l)+(a.dataset.caption?`<span class="qr-caption">${a.dataset.caption}</span>`:"")}catch(d){a.innerHTML=`<span class="text-sm text-muted">${d.message}</span>`}})}const M=H.init.bind(H);H.init=function(o=document){return M(o),J(o),z(o),Q(o),K(o),Z(o),tt(o),et(o),st(o),A(o),T(o),x(o),R(o),H},H.qr=O,H.copy=b,document.readyState!=="loading"?H.init():document.addEventListener("DOMContentLoaded",()=>H.init())})(typeof window<"u"&&window.Deck?window.Deck:typeof Deck<"u"?Deck:null);/*! ==========================================================================
|
|
65
|
+
* deck-adapters.js v0.1
|
|
66
|
+
*
|
|
67
|
+
* Deck's core is zero-dependency on purpose. This file is the opposite: it
|
|
68
|
+
* is a set of adapters that light up ONLY if the corresponding library is
|
|
69
|
+
* already on the page. Load none of them and everything still works; load
|
|
70
|
+
* one and Deck hands that job over to a better engine and keeps providing
|
|
71
|
+
* the styling.
|
|
72
|
+
*
|
|
73
|
+
* Detected, in order of how much they actually add:
|
|
74
|
+
*
|
|
75
|
+
* Floating UI window.FloatingUIDOM collision-aware placement, for
|
|
76
|
+
* browsers without CSS anchor
|
|
77
|
+
* positioning
|
|
78
|
+
* Quill window.Quill replaces the deprecated
|
|
79
|
+
* Tiptap window.Tiptap document.execCommand editor
|
|
80
|
+
* Chart.js window.Chart real axes, tooltips, time scales
|
|
81
|
+
* SortableJS window.Sortable drag reordering and kanban
|
|
82
|
+
* Lucide window.lucide 1500 icons instead of Deck's 56
|
|
83
|
+
*
|
|
84
|
+
* Nothing here is required and nothing here is bundled. Add a script tag for
|
|
85
|
+
* the ones you want.
|
|
86
|
+
* ======================================================================== */(function(H){"use strict";if(!H){console.warn("deck-adapters.js: load deck.js first");return}const L=(b,A=document)=>A.querySelector(b),m=(b,A=document)=>Array.from(A.querySelectorAll(b)),B=b=>b.dataset.deckA?!1:(b.dataset.deckA="1",!0),j=b=>getComputedStyle(document.documentElement).getPropertyValue(b).trim(),J=CSS.supports("anchor-name: --a"),z={get floating(){return!!window.FloatingUIDOM},get quill(){return!!window.Quill},get tiptap(){return!!(window.Tiptap&&window.Tiptap.Editor)},get chart(){return!!window.Chart},get sortable(){return!!window.Sortable},get lucide(){return!!window.lucide}};function Q(b){if(J||!z.floating)return;const{computePosition:A,autoUpdate:T,offset:x,flip:O,shift:R,arrow:M,size:o}=window.FloatingUIDOM;m("[data-deck-anchor]",b).forEach(a=>{if(!B(a))return;const i=L(a.dataset.deckAnchor);if(!i)return;const l=L(".tip-arrow",i),d=i.dataset.placement||"bottom",$=i.classList.contains("menu-match")||i.classList.contains("combo-list"),p=[x(8),O({fallbackAxisSideDirection:"start"}),R({padding:8}),o({padding:8,apply({availableHeight:g,rects:C,elements:W}){Object.assign(W.floating.style,{maxHeight:`${Math.max(120,g)}px`,...$?{width:`${C.reference.width}px`}:{}})}})];l&&p.push(M({element:l,padding:6}));const S=async()=>{const g=await A(a,i,{placement:d,strategy:"fixed",middleware:p});if(Object.assign(i.style,{left:`${g.x}px`,top:`${g.y}px`,position:"fixed"}),l&&g.middlewareData.arrow){const{x:C,y:W}=g.middlewareData.arrow,Y={top:"bottom",right:"left",bottom:"top",left:"right"}[g.placement.split("-")[0]];Object.assign(l.style,{left:C!=null?`${C}px`:"",top:W!=null?`${W}px`:"",[Y]:"-4px"})}};let P=null;i.addEventListener("toggle",g=>{g.newState==="open"?(S(),P=T(a,i,S)):(P?.(),P=null)})})}function K(b){!z.quill&&!z.tiptap||m(".editor",b).forEach(A=>{if(!B(A))return;const T=L(".editor-content",A),x=A.dataset.target?L(A.dataset.target):null,O=L(".editor-count",A),R=Number(A.dataset.limit||0);if(!T)return;T.contentEditable="false",T.removeAttribute("role");const M=o=>{if(!O)return;const a=o.trim().length;O.textContent=R?`${a} / ${R}`:`${a} characters`,O.classList.toggle("is-over",R>0&&a>R)};if(z.tiptap){const{Editor:o}=window.Tiptap,a=window.Tiptap.StarterKit?[window.Tiptap.StarterKit]:[],i=new o({element:T,extensions:a,content:x?.value||T.innerHTML||"",onUpdate:({editor:p})=>{x&&(x.value=p.getHTML()),M(p.getText()),$(p),A.dispatchEvent(new CustomEvent("deck:change",{bubbles:!0,detail:{html:p.getHTML(),text:p.getText()}}))}}),l={bold:p=>p.chain().focus().toggleBold().run(),italic:p=>p.chain().focus().toggleItalic().run(),underline:p=>p.chain().focus().toggleUnderline?.().run(),strikeThrough:p=>p.chain().focus().toggleStrike().run(),insertUnorderedList:p=>p.chain().focus().toggleBulletList().run(),insertOrderedList:p=>p.chain().focus().toggleOrderedList().run(),formatBlock:(p,S)=>S==="p"?p.chain().focus().setParagraph().run():p.chain().focus().toggleHeading({level:Number(S.replace("h",""))}).run(),undo:p=>p.chain().focus().undo().run(),redo:p=>p.chain().focus().redo().run(),createLink:p=>{const S=prompt("Link address");S&&p.chain().focus().setLink({href:S}).run()}},d={bold:"bold",italic:"italic",underline:"underline",strikeThrough:"strike",insertUnorderedList:"bulletList",insertOrderedList:"orderedList"},$=p=>m("[data-cmd]",A).forEach(S=>{const P=d[S.dataset.cmd];P&&S.setAttribute("aria-pressed",String(p.isActive(P)))});A.addEventListener("click",p=>{const S=p.target.closest("[data-cmd]");S&&(p.preventDefault(),l[S.dataset.cmd]?.(i,S.dataset.value),$(i))}),m(".editor-select",A).forEach(p=>p.addEventListener("change",()=>l.formatBlock(i,p.value))),A.deckEditor=i,M(i.getText())}else{const o=new window.Quill(T,{theme:null,placeholder:T.dataset.placeholder||"",modules:{toolbar:!1}});x?.value&&o.clipboard.dangerouslyPasteHTML(x.value);const a=()=>{const l=o.getFormat();m("[data-cmd]",A).forEach(d=>{const p={bold:"bold",italic:"italic",underline:"underline",strikeThrough:"strike"}[d.dataset.cmd];p&&d.setAttribute("aria-pressed",String(!!l[p])),d.dataset.cmd==="insertUnorderedList"&&d.setAttribute("aria-pressed",String(l.list==="bullet")),d.dataset.cmd==="insertOrderedList"&&d.setAttribute("aria-pressed",String(l.list==="ordered"))})},i={bold:()=>o.format("bold",!o.getFormat().bold),italic:()=>o.format("italic",!o.getFormat().italic),underline:()=>o.format("underline",!o.getFormat().underline),strikeThrough:()=>o.format("strike",!o.getFormat().strike),insertUnorderedList:()=>o.format("list",o.getFormat().list==="bullet"?!1:"bullet"),insertOrderedList:()=>o.format("list",o.getFormat().list==="ordered"?!1:"ordered"),formatBlock:l=>o.format("header",l==="p"?!1:Number(l.replace("h",""))),undo:()=>o.history.undo(),redo:()=>o.history.redo(),createLink:()=>{const l=prompt("Link address");l&&o.format("link",l)}};A.addEventListener("click",l=>{const d=l.target.closest("[data-cmd]");d&&(l.preventDefault(),i[d.dataset.cmd]?.(d.dataset.value),a())}),m(".editor-select",A).forEach(l=>l.addEventListener("change",()=>i.formatBlock(l.value))),o.on("text-change",()=>{x&&(x.value=o.root.innerHTML),M(o.getText()),A.dispatchEvent(new CustomEvent("deck:change",{bubbles:!0,detail:{html:o.root.innerHTML,text:o.getText()}}))}),o.on("selection-change",a),A.deckEditor=o,M(o.getText())}})}function Z(){if(!z.chart)return null;const b=window.Chart,A=O=>j(`--c${O%6+1}`)||j("--brand-500"),T=()=>{b.defaults.font.family=j("--font-sans"),b.defaults.font.size=12,b.defaults.color=j("--text-muted"),b.defaults.borderColor=j("--line"),b.defaults.elements.line.tension=.3,b.defaults.elements.line.borderWidth=2,b.defaults.elements.point.radius=0,b.defaults.elements.point.hoverRadius=5,b.defaults.elements.bar.borderRadius=4,b.defaults.elements.bar.borderSkipped="bottom",b.defaults.plugins.legend.labels.usePointStyle=!0,b.defaults.plugins.legend.labels.boxWidth=8,b.defaults.plugins.legend.labels.boxHeight=8,b.defaults.plugins.legend.labels.padding=14,Object.assign(b.defaults.plugins.tooltip,{backgroundColor:j("--ink-900"),titleColor:j("--ink-50"),bodyColor:j("--ink-100"),borderColor:"transparent",cornerRadius:6,padding:10,displayColors:!0,usePointStyle:!0,boxPadding:4,titleFont:{weight:"620"}}),b.defaults.scale.grid.color=j("--line"),b.defaults.scale.grid.drawTicks=!1,b.defaults.scale.border={display:!1},b.defaults.scale.ticks.padding=8};T();const x=()=>{T(),Object.values(b.instances||{}).forEach(O=>{O.data.datasets.forEach((R,M)=>{R.deckSeries!==!1&&(R.borderColor=A(M),R.backgroundColor=R.fill?`color-mix(in oklab, ${A(M)} 18%, transparent)`:A(M))}),O.update("none")})};return new MutationObserver(x).observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme","style"]}),matchMedia("(prefers-color-scheme: dark)").addEventListener("change",x),H.chart=(O,R)=>((R.data?.datasets||[]).forEach((M,o)=>{M.borderColor==null&&(M.borderColor=A(o)),M.backgroundColor==null&&(M.backgroundColor=M.fill?`color-mix(in oklab, ${A(o)} 18%, transparent)`:A(o))}),new b(O,R)),{apply:T,repaint:x,series:A}}function tt(b){m("[data-deck-sortable]",b).forEach(T=>{if(!B(T))return;const x=T.dataset.deckSortable||void 0,O=T.dataset.handle||null,R=o=>T.dispatchEvent(new CustomEvent("deck:reorder",{bubbles:!0,detail:o}));if(z.sortable){window.Sortable.create(T,{group:x&&x!=="true"?{name:x,pull:!0,put:!0}:void 0,handle:O,animation:H.reduced?.()?0:180,easing:"cubic-bezier(.22,1,.36,1)",ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",forceFallback:!1,fallbackOnBody:!0,swapThreshold:.66,delay:matchMedia("(pointer: coarse)").matches?140:0,delayOnTouchOnly:!0,onEnd:o=>{A(),R({item:o.item,from:o.from,to:o.to,oldIndex:o.oldIndex,newIndex:o.newIndex,order:Array.from(o.to.children).map(a=>a.dataset.id??null)})}});return}Array.from(T.children).forEach(o=>{o.draggable=!0});let M=null;T.addEventListener("dragstart",o=>{M=o.target.closest('[draggable="true"]'),M&&(M.classList.add("sortable-chosen"),o.dataTransfer.effectAllowed="move",o.dataTransfer.setData("text/plain",M.dataset.id||""))}),T.addEventListener("dragover",o=>{o.preventDefault();const a=o.target.closest('[draggable="true"]');if(!a||a===M||!M)return;const i=a.getBoundingClientRect(),l=(o.clientY-i.top)/i.height>.5;a.parentElement.insertBefore(M,l?a.nextSibling:a)}),T.addEventListener("dragend",()=>{M?.classList.remove("sortable-chosen"),A(),R({item:M,from:T,to:T,order:Array.from(T.children).map(o=>o.dataset.id??null)}),M=null})});function A(){m(".kanban-col").forEach(T=>{const x=m(".kanban-card",T).length,O=L(".kanban-count",T);O&&(O.textContent=x)})}A()}function et(b){if(!z.lucide)return;const A=T=>T.replace(/(^\w|-\w)/g,x=>x.replace("-","").toUpperCase());m("[data-icon]",b).forEach(T=>{if(!B(T))return;const x=T.dataset.icon,O=window.lucide.icons?.[A(x)]||window.lucide[A(x)];if(!O){console.warn(`deck: no Lucide icon "${x}"`);return}const R=Array.isArray(O)?O[2]:O.children||[],M=document.createElementNS("http://www.w3.org/2000/svg","svg");M.setAttribute("viewBox","0 0 24 24"),M.setAttribute("aria-hidden","true"),M.setAttribute("class",T.className||"icon"),R.forEach(([o,a])=>{const i=document.createElementNS("http://www.w3.org/2000/svg",o);Object.entries(a).forEach(([l,d])=>i.setAttribute(l,d)),M.append(i)}),T.replaceWith(M)})}const st=H.init.bind(H);H.init=function(b=document){return st(b),Q(b),K(b),tt(b),et(b),H},H.adapters={get available(){return Object.fromEntries(Object.keys(z).map(b=>[b,z[b]]))},report(){const b=this.available;return{placement:J?"CSS anchor positioning":b.floating?"Floating UI":"Deck built-in",editor:b.tiptap?"Tiptap":b.quill?"Quill":"Deck built-in (execCommand)",charts:b.chart?"Chart.js, themed by Deck":"Deck CSS charts",dragDrop:b.sortable?"SortableJS":"native drag and drop",icons:b.lucide?"Lucide + Deck sprite":"Deck sprite (74 icons)",virtualization:CSS.supports("content-visibility: auto")?"content-visibility (engine)":"none"}}},z.chart&&(H.chartTheme=Z()),document.readyState!=="loading"?H.init():document.addEventListener("DOMContentLoaded",()=>H.init())})(typeof window<"u"&&window.Deck?window.Deck:typeof Deck<"u"?Deck:null);
|