rikiki-deck 0.4.0 → 0.5.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Cédric Chartier
3
+ Copyright (c) 2026 Cédric Chariere Fiedler
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,8 +1,12 @@
1
1
  # Rikiki
2
2
 
3
+ [![npm](https://img.shields.io/npm/v/rikiki-deck)](https://www.npmjs.com/package/rikiki-deck)
4
+ [![license](https://img.shields.io/npm/l/rikiki-deck)](./LICENSE)
5
+ ![zero-build](https://img.shields.io/badge/build-zero-brightgreen)
6
+
3
7
  A tiny **Lit Web Components** framework for technical presentations. Drop a folder anywhere, open `index.html`, give the talk. No build step on the consumer side · the framework itself is built from TypeScript, but the output is plain ES modules you import directly.
4
8
 
5
- This documentation tracks rikiki v0.4.0.
9
+ This documentation tracks rikiki v0.5.0.
6
10
 
7
11
  ## TL;DR
8
12
 
@@ -155,6 +159,23 @@ element out.
155
159
  <deck-root mouse-nav="wheel arrows"> <!-- pick from: click wheel arrows aux -->
156
160
  ```
157
161
 
162
+ ## Rendering
163
+
164
+ By default a deck renders into a fixed logical canvas (1920×1080, set via
165
+ `width` / `height` on `<deck-root>`) scaled uniformly to fit, so a slide's
166
+ layout is identical at any window size and the deck is letterboxed when the
167
+ screen aspect differs. Add `fluid` to opt out · the deck then fills its box and
168
+ reflows like a web page:
169
+
170
+ ```html
171
+ <deck-root> <!-- zoom-to-fit canvas (default) -->
172
+ <deck-root fluid> <!-- fills its box, reflows, no letterbox -->
173
+ ```
174
+
175
+ Both modes are embed-safe · a `<deck-root>` placed inside a larger page scales
176
+ to (or fills) its own container and never touches the host page's scroll or
177
+ typography.
178
+
158
179
  ## Themes
159
180
 
160
181
  Picking a theme is one `<link>` change:
@@ -1 +1 @@
1
- var D="data-click",v="data-click-hide",$="data-click-auto",S="data-click-stagger",Z="data-click-children";function J(t){return!t.hasAttribute(S)&&(t.parentElement?.hasAttribute(S)??!1)}function C(t){return x()?0:parseInt(t.getAttribute("data-anim-delay")??"",10)||0}var P=new WeakSet;function Q(t){t.querySelectorAll(`[${Z}]`).forEach(e=>{P.has(e)||(P.add(e),Array.from(e.children).forEach(n=>{let r=n;r.hasAttribute(D)||r.setAttribute(D,"");for(let s of["data-anim","data-anim-duration","data-anim-delay","data-anim-ease"]){let a=e.getAttribute(s);a&&!r.hasAttribute(s)&&r.setAttribute(s,a)}}))})}function tt(t){return z(t).reduce((e,n)=>Math.max(e,n.step),0)}function z(t){Q(t);let e=[],n=0,r=0;return t.querySelectorAll(`[${D}], [${v}], [${$}], [${S}]`).forEach(s=>{if(s.hasAttribute(S)){let m=parseInt(s.getAttribute(S)??"",10),b=Number.isFinite(m)?Math.max(0,m):80,G=++n;r=0,Array.from(s.children).forEach((A,o)=>{let i=A;e.push({el:i,step:G,hide:i.hasAttribute(v),delay:o*b+C(i),scheduled:!0})});return}if(J(s))return;if(s.hasAttribute($)){r+=parseInt(s.getAttribute($)??"",10)||0,e.push({el:s,step:n,hide:!1,delay:r+C(s),scheduled:!0});return}let a=s.hasAttribute(v),u=s.getAttribute(a?v:D)??"",c=parseInt(u,10),p=Number.isFinite(c)&&c>0,d=p?c:++n;p?n=Math.max(n,c):r=0,e.push({el:s,step:d,hide:a,delay:0})}),e}var O="data-morph",y=!1;function T(t){let e=new Map;return t.querySelectorAll(`[${O}]`).forEach(n=>{let r=n.getAttribute(O);r&&e.set(r,[...e.get(r)??[],n])}),e}function N(t){let e=getComputedStyle(t);return e.display==="none"||e.visibility==="hidden"?!1:(t.style.opacity!==""?t.style.opacity:e.opacity)!=="0"&&t.getClientRects().length>0}function et(t,e){let n=T(e);return Array.from(T(t).keys()).filter(r=>n.has(r))}var nt=t=>t.replace(/[^a-zA-Z0-9_-]/g,"_");function _(t,e){t.forEach((n,r)=>{let s=!1;n.forEach(a=>{let c=(e?.get(a)??N(a))&&!s;c&&(s=!0),a.style.viewTransitionName=c?`rk-morph-${nt(r)}`:"none"})})}function j(t,e){return t.find(n=>e?.get(n)??N(n))}function F(t){let e=new Map;return t.forEach((n,r)=>{let s=j(n);s&&e.set(r,s.getBoundingClientRect())}),e}var X=360,rt="cubic-bezier(0.22, 1, 0.3, 1)";function W(t,e,n){t.forEach((r,s)=>{let a=e.get(s),u=j(r,n);if(!a||!u)return;let c=u.getBoundingClientRect();if(!c.width||!c.height||!a.width||!a.height)return;let p=a.left-c.left,d=a.top-c.top,m=a.width/c.width,b=a.height/c.height;!p&&!d&&m===1&&b===1||u.animate([{transformOrigin:"top left",transform:`translate(${p}px, ${d}px) scale(${m}, ${b})`},{transformOrigin:"top left",transform:"none"}],{duration:X,easing:rt})})}var q=new WeakSet,ot={out:"cubic-bezier(0.22, 1, 0.36, 1)",spring:"cubic-bezier(0.5, 1.8, 0.3, 1)","in-out":"cubic-bezier(0.45, 0, 0.55, 1)"};function x(){return window.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1}function st(t){if(x())return{dur:1,delay:0,ease:"linear"};let e=parseInt(t.getAttribute("data-anim-duration")??"",10)||320,n=parseInt(t.getAttribute("data-anim-delay")??"",10)||0,r=t.getAttribute("data-anim-ease")??"out";return{dur:e,delay:n,ease:ot[r]??r}}var it="path, line, polyline, polygon, circle, ellipse, rect";function B(t){return t instanceof SVGGeometryElement?[t]:Array.from(t.querySelectorAll(it))}function at(t,e){B(t).forEach(n=>{let r=n.getTotalLength?.()??0;r&&(n.style.strokeDasharray=String(r),n.style.transition=e)})}function ct(t,e){B(t).forEach(n=>{let r=n.getTotalLength?.()??0;r&&(n.style.strokeDashoffset=e?"0":String(r))}),t.style.pointerEvents=e?"":"none"}function lt(t,e,n=!1){if(q.has(t))return;q.add(t);let{dur:r,delay:s,ease:a}=st(t),u=n?0:s,c=t.getAttribute("data-anim"),p=c==="blur"?["opacity","transform","filter"]:c==="draw"?["stroke-dashoffset"]:["opacity","transform"],d=p.map(m=>`${m} ${r}ms ${a} ${u}ms`).join(", ");c==="draw"?at(t,d):(t.style.transition=d,t.style.willChange=p.join(", ")),R(t,e)}function ut(t){switch(t.getAttribute("data-anim")){case"slide-up":return"translateY(16px)";case"slide-down":return"translateY(-16px)";case"slide-left":return"translateX(16px)";case"slide-right":return"translateX(-16px)";case"scale":return"scale(0.92)";case"flip-up":return"perspective(600px) rotateX(35deg)";default:return"none"}}function R(t,e){if(t.getAttribute("data-anim")==="draw"){ct(t,e);return}t.style.opacity=e?"1":"0",t.style.transform=e?"none":ut(t),t.getAttribute("data-anim")==="blur"&&(t.style.filter=e?"none":"blur(12px)"),t.style.pointerEvents=e?"":"none"}function dt(){let t=customElements.get("deck-root");if(!t){console.warn("[rikiki/click-stages] <deck-root> is not defined yet \xB7 import rikiki first");return}let e=t.prototype;if(e._clickStagesInstalled)return;e._clickStagesInstalled=!0;let n=e._maxSteps;e._maxSteps=function(){let o=n.call(this),i=this.slides?.[this.current],l=i?tt(i):0;return Math.max(o,l)};let r=new WeakMap;function s(o){let i=r.get(o);i!==void 0&&(window.clearTimeout(i),r.delete(o))}function a(o,i,l){s(o),r.set(o,window.setTimeout(()=>{r.delete(o),R(o,i)},l))}let u=null;function c(o,i,l){u?u.push({el:o,target:i,delay:l}):a(o,i,l)}function p(){u=[]}function d(){let o=u??[];u=null,o.forEach(({el:i,target:l,delay:f})=>a(i,l,f))}function m(o){s(o),u&&(u=u.filter(i=>i.el!==o))}let b=new WeakMap,G=e._applyStep;e._applyStep=function(){G.call(this);let o=this.slides?.[this.current];if(!o)return;let i=b.get(this),l=i&&i.slide===this.current?i.step:-1;b.set(this,{slide:this.current,step:this.step});let f=z(o),E=()=>f.forEach(({el:g,step:M,hide:L,delay:H,scheduled:K})=>{lt(g,L,K),m(g);let w=this.step>=M,V=L?!w:w,Y=w&&this.step===M&&l<M,U=w&&M===0&&l===-1;H>0&&(Y||U)?(R(g,L),c(g,V,H)):R(g,V)}),I=document.startViewTransition?.bind(document),h=l!==-1&&l!==this.step&&!y&&!x()?T(o):null;if(h&&h.size>0){let g=new Map(f.map(({el:M,step:L,hide:H})=>[M,H?this.step<L:this.step>=L]));if(I){_(h),y=!0,p();try{I(()=>{E(),_(h,g)}).finished.finally(()=>{y=!1,d()})}catch{y=!1,E(),d()}}else{let M=F(h);E(),W(h,M,g)}}else E()};let A=e._goTo;e._goTo=function(o){let i=this.slides??[],l=i[this.current],f=i[Math.max(0,Math.min(i.length-1,o))],E=document.startViewTransition?.bind(document);if((l&&f&&l!==f?et(l,f):[]).length===0||y||x()){A.call(this,o);return}let k=this;if(!E){let h=F(T(l));k.__rkMorphActive=!0,A.call(this,o),W(T(f),h),window.setTimeout(()=>{k.__rkMorphActive=!1},X+40);return}_(T(l)),y=!0,k.__rkMorphActive=!0,p();try{E(()=>{A.call(this,o),_(T(f))}).finished.finally(()=>{y=!1,k.__rkMorphActive=!1,d()})}catch{y=!1,k.__rkMorphActive=!1,A.call(this,o),d()}},document.querySelectorAll("deck-root").forEach(o=>{o._applyStep?.()})}export{dt as installClickStages};
1
+ var D="data-click",v="data-click-hide",$="data-click-auto",S="data-click-stagger",Z="data-click-children";function J(t){return!t.hasAttribute(S)&&(t.parentElement?.hasAttribute(S)??!1)}function C(t){return x()?0:parseInt(t.getAttribute("data-anim-delay")??"",10)||0}var P=new WeakSet;function Q(t){t.querySelectorAll(`[${Z}]`).forEach(e=>{P.has(e)||(P.add(e),Array.from(e.children).forEach(n=>{let r=n;r.hasAttribute(D)||r.setAttribute(D,"");for(let s of["data-anim","data-anim-duration","data-anim-delay","data-anim-ease"]){let a=e.getAttribute(s);a&&!r.hasAttribute(s)&&r.setAttribute(s,a)}}))})}function tt(t){return z(t).reduce((e,n)=>Math.max(e,n.step),0)}function z(t){Q(t);let e=[],n=0,r=0;return t.querySelectorAll(`[${D}], [${v}], [${$}], [${S}]`).forEach(s=>{if(s.hasAttribute(S)){let m=parseInt(s.getAttribute(S)??"",10),b=Number.isFinite(m)?Math.max(0,m):80,G=++n;r=0,Array.from(s.children).forEach((A,o)=>{let i=A;e.push({el:i,step:G,hide:i.hasAttribute(v),delay:o*b+C(i),scheduled:!0})});return}if(J(s))return;if(s.hasAttribute($)){r+=parseInt(s.getAttribute($)??"",10)||0,e.push({el:s,step:n,hide:!1,delay:r+C(s),scheduled:!0});return}let a=s.hasAttribute(v),u=s.getAttribute(a?v:D)??"",c=parseInt(u,10),p=Number.isFinite(c)&&c>0,d=p?c:++n;p?n=Math.max(n,c):r=0,e.push({el:s,step:d,hide:a,delay:0})}),e}var O="data-morph",y=!1;function T(t){let e=new Map;return t.querySelectorAll(`[${O}]`).forEach(n=>{let r=n.getAttribute(O);r&&e.set(r,[...e.get(r)??[],n])}),e}function N(t){let e=getComputedStyle(t);return e.display==="none"||e.visibility==="hidden"?!1:(t.style.opacity!==""?t.style.opacity:e.opacity)!=="0"&&t.getClientRects().length>0}function et(t,e){let n=T(e);return Array.from(T(t).keys()).filter(r=>n.has(r))}var nt=t=>t.replace(/[^a-zA-Z0-9_-]/g,"_");function _(t,e){t.forEach((n,r)=>{let s=!1;n.forEach(a=>{let c=(e?.get(a)??N(a))&&!s;c&&(s=!0),a.style.viewTransitionName=c?`rk-morph-${nt(r)}`:"none"})})}function j(t,e){return t.find(n=>e?.get(n)??N(n))}function F(t){let e=new Map;return t.forEach((n,r)=>{let s=j(n);s&&e.set(r,s.getBoundingClientRect())}),e}var X=360,rt="cubic-bezier(0.22, 1, 0.3, 1)";function W(t,e,n){t.forEach((r,s)=>{let a=e.get(s),u=j(r,n);if(!a||!u)return;let c=u.getBoundingClientRect();if(!c.width||!c.height||!a.width||!a.height)return;let p=a.left-c.left,d=a.top-c.top,m=a.width/c.width,b=a.height/c.height;!p&&!d&&m===1&&b===1||u.animate([{transformOrigin:"top left",transform:`translate(${p}px, ${d}px) scale(${m}, ${b})`},{transformOrigin:"top left",transform:"none"}],{duration:X,easing:rt})})}var q=new WeakSet,ot={out:"cubic-bezier(0.22, 1, 0.36, 1)",spring:"cubic-bezier(0.5, 1.8, 0.3, 1)","in-out":"cubic-bezier(0.45, 0, 0.55, 1)"};function x(){return window.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1}function st(t){if(x())return{dur:1,delay:0,ease:"linear"};let e=parseInt(t.getAttribute("data-anim-duration")??"",10)||320,n=parseInt(t.getAttribute("data-anim-delay")??"",10)||0,r=t.getAttribute("data-anim-ease")??"out";return{dur:e,delay:n,ease:ot[r]??r}}var it="path, line, polyline, polygon, circle, ellipse, rect";function B(t){return t instanceof SVGGeometryElement?[t]:Array.from(t.querySelectorAll(it))}function at(t,e){B(t).forEach(n=>{let r=n.getTotalLength?.()??0;r&&(n.style.strokeDasharray=String(r),n.style.transition=e)})}function ct(t,e){B(t).forEach(n=>{let r=n.getTotalLength?.()??0;r&&(n.style.strokeDashoffset=e?"0":String(r))}),t.style.pointerEvents=e?"":"none"}function lt(t,e,n=!1){if(q.has(t))return;q.add(t);let{dur:r,delay:s,ease:a}=st(t),u=n?0:s,c=t.getAttribute("data-anim"),p=c==="blur"?["opacity","transform","filter"]:c==="draw"?["stroke-dashoffset"]:["opacity","transform"],d=p.map(m=>`${m} ${r}ms ${a} ${u}ms`).join(", ");c==="draw"?at(t,d):(t.style.transition=d,t.style.willChange=p.join(", ")),R(t,e)}function ut(t){switch(t.getAttribute("data-anim")){case"slide-up":return"translateY(16px)";case"slide-down":return"translateY(-16px)";case"slide-left":return"translateX(16px)";case"slide-right":return"translateX(-16px)";case"scale":return"scale(0.92)";case"flip-up":return"perspective(600px) rotateX(35deg)";default:return"none"}}function R(t,e){if(t.getAttribute("data-anim")==="draw"){ct(t,e);return}t.style.opacity=e?"1":"0",t.style.transform=e?"none":ut(t),t.getAttribute("data-anim")==="blur"&&(t.style.filter=e?"none":"blur(12px)"),t.style.pointerEvents=e?"":"none"}function dt(){let t=customElements.get("deck-root");if(!t){console.warn("[rikiki/click-stages] <deck-root> is not defined yet \xB7 import rikiki first");return}let e=t.prototype;if(e._clickStagesInstalled)return;e._clickStagesInstalled=!0;let n=e._maxSteps;e._maxSteps=function(){let o=n.call(this),i=this.slides?.[this.current],l=i?tt(i):0;return Math.max(o,l)};let r=new WeakMap;function s(o){let i=r.get(o);i!==void 0&&(window.clearTimeout(i),r.delete(o))}function a(o,i,l){s(o),r.set(o,window.setTimeout(()=>{r.delete(o),R(o,i)},l))}let u=null;function c(o,i,l){u?u.push({el:o,target:i,delay:l}):a(o,i,l)}function p(){u=[]}function d(){let o=u??[];u=null,o.forEach(({el:i,target:l,delay:f})=>{a(i,l,f)})}function m(o){s(o),u&&(u=u.filter(i=>i.el!==o))}let b=new WeakMap,G=e._applyStep;e._applyStep=function(){G.call(this);let o=this.slides?.[this.current];if(!o)return;let i=b.get(this),l=i&&i.slide===this.current?i.step:-1;b.set(this,{slide:this.current,step:this.step});let f=z(o),E=()=>f.forEach(({el:g,step:M,hide:L,delay:H,scheduled:K})=>{lt(g,L,K),m(g);let w=this.step>=M,V=L?!w:w,Y=w&&this.step===M&&l<M,U=w&&M===0&&l===-1;H>0&&(Y||U)?(R(g,L),c(g,V,H)):R(g,V)}),I=document.startViewTransition?.bind(document),h=l!==-1&&l!==this.step&&!y&&!x()?T(o):null;if(h&&h.size>0){let g=new Map(f.map(({el:M,step:L,hide:H})=>[M,H?this.step<L:this.step>=L]));if(I){_(h),y=!0,p();try{I(()=>{E(),_(h,g)}).finished.finally(()=>{y=!1,d()})}catch{y=!1,E(),d()}}else{let M=F(h);E(),W(h,M,g)}}else E()};let A=e._goTo;e._goTo=function(o){let i=this.slides??[],l=i[this.current],f=i[Math.max(0,Math.min(i.length-1,o))],E=document.startViewTransition?.bind(document);if((l&&f&&l!==f?et(l,f):[]).length===0||y||x()){A.call(this,o);return}let k=this;if(!E){let h=F(T(l));k.__rkMorphActive=!0,A.call(this,o),W(T(f),h),window.setTimeout(()=>{k.__rkMorphActive=!1},X+40);return}_(T(l)),y=!0,k.__rkMorphActive=!0,p();try{E(()=>{A.call(this,o),_(T(f))}).finished.finally(()=>{y=!1,k.__rkMorphActive=!1,d()})}catch{y=!1,k.__rkMorphActive=!1,A.call(this,o),d()}},document.querySelectorAll("deck-root").forEach(o=>{o._applyStep?.()})}export{dt as installClickStages};
package/dist/color.js ADDED
@@ -0,0 +1 @@
1
+ function e(a){if(!a||a==="transparent")return!1;let s=a.match(/^(?:rgb|hsl)a?\(([^)]*)\)$/i);if(s){let t=s[1].split(",");return t.length<4||parseFloat(t[3])>=1}let n=a.match(/\/\s*([\d.]+%?)\s*\)$/);if(n){let t=n[1];return(t.endsWith("%")?parseFloat(t)/100:parseFloat(t))>=1}return!0}export{e as isOpaqueColor};
package/dist/deck-code.js CHANGED
@@ -1,2 +1,2 @@
1
- var m=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var l=(d,n,e,s)=>{for(var r=s>1?void 0:s?h(n,e):n,a=d.length-1,i;a>=0;a--)(i=d[a])&&(r=(s?i(n,e,r):i(r))||r);return s&&r&&m(n,e,r),r};import{LitElement as v,html as u,css as y}from"./vendor/lit.js";import{customElement as f,property as g,state as k}from"./vendor/lit.js";function _(d,n){let e=d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),s=[],r=(t,c)=>{let p="P"+s.length+"E";return s.push('<span class="'+t+'">'+c+"</span>"),p};return n==="html"||n==="xml"||n==="svg"?(e=e.replace(/(&lt;!--[\s\S]*?--&gt;)/g,t=>r("cmt",t)),e=e.replace(/(&lt;!doctype[^&]*&gt;)/gi,t=>r("cmt",t)),e=e.replace(/("[^"]*"|'[^']*')/g,t=>r("str",t)),e=e.replace(/(&lt;\/?)([a-zA-Z][a-zA-Z0-9:-]*)/g,(t,c,p)=>c+r("kw",p)),e=e.replace(/\b([a-zA-Z][a-zA-Z0-9-]*)(?==)/g,t=>r("prop",t))):n==="css"||n==="scss"||n==="less"?(e=e.replace(/(\/\*[\s\S]*?\*\/)/g,t=>r("cmt",t)),e=e.replace(/("[^"]*"|'[^']*')/g,t=>r("str",t)),e=e.replace(/([a-zA-Z-]+)(?=\s*:)/g,t=>r("prop",t)),e=e.replace(/(#[0-9a-fA-F]{3,8})\b/g,t=>r("num",t)),e=e.replace(/\b(\d+(?:\.\d+)?)(px|rem|em|%|vh|vw|vmin|vmax|s|ms|deg)?/g,(t,c,p)=>r("num",c+(p??"")))):(e=e.replace(/(\/\/[^\n]*)/g,t=>r("cmt",t)),e=e.replace(/(['"`])((?:\\.|(?!\1)[^\\])*)\1/g,t=>r("str",t)),e=e.replace(/\b(const|let|var|function|return|if|else|for|while|class|extends|new|export|import|from|as|await|async|of|in|typeof|instanceof|true|false|null|undefined)\b/g,t=>r("kw",t)),e=e.replace(/\b(\d+(?:\.\d+)?)\b/g,t=>r("num",t))),e=e.replace(/P(\d+)E/g,(t,c)=>s[+c]??""),e}var o=class extends v{constructor(){super(...arguments);this.lang="";this.hero=!1;this.nested=!1;this._html="";this._groups=null}connectedCallback(){super.connectedCallback(),this._highlight();try{this._groups=JSON.parse(this.getAttribute("step-groups")??"null")}catch{this._groups=null}}_highlight(){let s=(this.textContent??"").split(`
2
- `);for(;s.length&&!s[0].trim();)s.shift();for(;s.length&&!s[s.length-1].trim();)s.pop();let r=s.filter(i=>i.trim().length>0).reduce((i,t)=>Math.min(i,t.match(/^ */)?.[0].length??0),1/0),a=r===1/0?s:s.map(i=>i.slice(r));this._html=a.map((i,t)=>'<span class="line" data-line="'+(t+1)+'">'+_(i||" ",this.lang)+"</span>").join("")}applyStep(e){if(!this._groups)return;let s=this.shadowRoot?.querySelectorAll(".line");if(s)if(e===0)s.forEach(r=>r.classList.remove("dim","lit"));else{let r=this._groups[Math.min(e-1,this._groups.length-1)]??[];s.forEach(a=>{let i=parseInt(a.dataset.line??"0",10);a.classList.toggle("lit",r.includes(i)),a.classList.toggle("dim",!r.includes(i))})}}render(){return u`<pre><code .innerHTML="${this._html}"></code></pre>`}};o.styles=y`:host{display:block;background:var(--deck-code-bg,var(--rik-code__bg));border:1px solid var(--deck-code-border,var(--rik-code__border));border-radius:var(--deck-code-radius,var(--rik-radius-md));padding:var(--deck-code-padding-y,var(--rik-space-3)) var(--deck-code-padding-x,var(--rik-space-4));font-family:var(--rik-font-mono);font-size:var(--rik-font-size-mono);line-height:1.7;color:var(--deck-code-text,var(--rik-code__text));box-shadow:var(--rik-elevation-2);overflow:auto;white-space:pre}:host([hero]){display:flex;align-items:safe center;padding:var(--deck-code-padding-y,var(--rik-space-4)) var(--deck-code-padding-x,var(--rik-space-5))}:host([nested]){box-shadow:none;border-radius:var(--rik-radius-sm);padding:var(--deck-code-padding-y,var(--rik-space-2)) var(--deck-code-padding-x,var(--rik-space-3))}pre{margin:0;font:inherit;color:inherit}code{display:block;width:100%;font:inherit;color:inherit}.line{transition:opacity 0.25s ease;display:block}.line.dim{opacity:0.25}.line.lit{opacity:1}.kw{color:var(--deck-code-syntax-kw,var(--rik-code__syntax-keyword))}.fn{color:var(--deck-code-syntax-fn,var(--rik-code__syntax-function))}.str{color:var(--deck-code-syntax-str,var(--rik-code__syntax-string))}.num{color:var(--deck-code-syntax-num,var(--rik-code__syntax-number))}.cmt{color:var(--deck-code-syntax-cmt,var(--rik-code__syntax-comment));font-style:italic}.ty{color:var(--deck-code-syntax-ty,var(--rik-code__syntax-type))}.prop{color:var(--deck-code-syntax-prop,var(--rik-code__syntax-property))}`,l([g({type:String})],o.prototype,"lang",2),l([g({type:Boolean,reflect:!0})],o.prototype,"hero",2),l([g({type:Boolean,reflect:!0})],o.prototype,"nested",2),l([g({type:String,attribute:"step-groups"})],o.prototype,"stepGroups",2),l([k()],o.prototype,"_html",2),o=l([f("deck-code")],o);export{o as DeckCode};
1
+ var m=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var l=(d,n,e,s)=>{for(var r=s>1?void 0:s?h(n,e):n,a=d.length-1,i;a>=0;a--)(i=d[a])&&(r=(s?i(n,e,r):i(r))||r);return s&&r&&m(n,e,r),r};import{LitElement as v,html as u,css as y}from"./vendor/lit.js";import{customElement as f,property as g,state as k}from"./vendor/lit.js";function _(d,n){let e=d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),s=[],r=(t,c)=>{let p=`P${s.length}E`;return s.push(`<span class="${t}">${c}</span>`),p};return n==="html"||n==="xml"||n==="svg"?(e=e.replace(/(&lt;!--[\s\S]*?--&gt;)/g,t=>r("cmt",t)),e=e.replace(/(&lt;!doctype[^&]*&gt;)/gi,t=>r("cmt",t)),e=e.replace(/("[^"]*"|'[^']*')/g,t=>r("str",t)),e=e.replace(/(&lt;\/?)([a-zA-Z][a-zA-Z0-9:-]*)/g,(t,c,p)=>c+r("kw",p)),e=e.replace(/\b([a-zA-Z][a-zA-Z0-9-]*)(?==)/g,t=>r("prop",t))):n==="css"||n==="scss"||n==="less"?(e=e.replace(/(\/\*[\s\S]*?\*\/)/g,t=>r("cmt",t)),e=e.replace(/("[^"]*"|'[^']*')/g,t=>r("str",t)),e=e.replace(/([a-zA-Z-]+)(?=\s*:)/g,t=>r("prop",t)),e=e.replace(/(#[0-9a-fA-F]{3,8})\b/g,t=>r("num",t)),e=e.replace(/\b(\d+(?:\.\d+)?)(px|rem|em|%|vh|vw|vmin|vmax|s|ms|deg)?/g,(t,c,p)=>r("num",c+(p??"")))):(e=e.replace(/(\/\/[^\n]*)/g,t=>r("cmt",t)),e=e.replace(/(['"`])((?:\\.|(?!\1)[^\\])*)\1/g,t=>r("str",t)),e=e.replace(/\b(const|let|var|function|return|if|else|for|while|class|extends|new|export|import|from|as|await|async|of|in|typeof|instanceof|true|false|null|undefined)\b/g,t=>r("kw",t)),e=e.replace(/\b(\d+(?:\.\d+)?)\b/g,t=>r("num",t))),e=e.replace(/P(\d+)E/g,(t,c)=>s[+c]??""),e}var o=class extends v{constructor(){super(...arguments);this.lang="";this.hero=!1;this.nested=!1;this._html="";this._groups=null}connectedCallback(){super.connectedCallback(),this._highlight();try{this._groups=JSON.parse(this.getAttribute("step-groups")??"null")}catch{this._groups=null}}_highlight(){let s=(this.textContent??"").split(`
2
+ `);for(;s.length&&!s[0].trim();)s.shift();for(;s.length&&!s[s.length-1].trim();)s.pop();let r=s.filter(i=>i.trim().length>0).reduce((i,t)=>Math.min(i,t.match(/^ */)?.[0].length??0),1/0),a=r===1/0?s:s.map(i=>i.slice(r));this._html=a.map((i,t)=>'<span class="line" data-line="'+(t+1)+'">'+_(i||" ",this.lang)+"</span>").join("")}applyStep(e){if(!this._groups)return;let s=this.shadowRoot?.querySelectorAll(".line");if(s)if(e===0)s.forEach(r=>{r.classList.remove("dim","lit")});else{let r=this._groups[Math.min(e-1,this._groups.length-1)]??[];s.forEach(a=>{let i=parseInt(a.dataset.line??"0",10);a.classList.toggle("lit",r.includes(i)),a.classList.toggle("dim",!r.includes(i))})}}render(){return u`<pre><code .innerHTML="${this._html}"></code></pre>`}};o.styles=y`:host{display:block;background:var(--deck-code-bg,var(--rik-code__bg));border:1px solid var(--deck-code-border,var(--rik-code__border));border-radius:var(--deck-code-radius,var(--rik-radius-md));padding:var(--deck-code-padding-y,var(--rik-space-3)) var(--deck-code-padding-x,var(--rik-space-4));font-family:var(--rik-font-mono);font-size:var(--rik-font-size-mono);line-height:1.7;color:var(--deck-code-text,var(--rik-code__text));box-shadow:var(--rik-elevation-2);overflow:auto;white-space:pre}:host([hero]){display:flex;align-items:safe center;padding:var(--deck-code-padding-y,var(--rik-space-4)) var(--deck-code-padding-x,var(--rik-space-5))}:host([nested]){box-shadow:none;border-radius:var(--rik-radius-sm);padding:var(--deck-code-padding-y,var(--rik-space-2)) var(--deck-code-padding-x,var(--rik-space-3))}pre{margin:0;font:inherit;color:inherit}code{display:block;width:100%;font:inherit;color:inherit}.line{transition:opacity 0.25s ease;display:block}.line.dim{opacity:0.25}.line.lit{opacity:1}.kw{color:var(--deck-code-syntax-kw,var(--rik-code__syntax-keyword))}.fn{color:var(--deck-code-syntax-fn,var(--rik-code__syntax-function))}.str{color:var(--deck-code-syntax-str,var(--rik-code__syntax-string))}.num{color:var(--deck-code-syntax-num,var(--rik-code__syntax-number))}.cmt{color:var(--deck-code-syntax-cmt,var(--rik-code__syntax-comment));font-style:italic}.ty{color:var(--deck-code-syntax-ty,var(--rik-code__syntax-type))}.prop{color:var(--deck-code-syntax-prop,var(--rik-code__syntax-property))}`,l([g({type:String})],o.prototype,"lang",2),l([g({type:Boolean,reflect:!0})],o.prototype,"hero",2),l([g({type:Boolean,reflect:!0})],o.prototype,"nested",2),l([g({type:String,attribute:"step-groups"})],o.prototype,"stepGroups",2),l([k()],o.prototype,"_html",2),o=l([f("deck-code")],o);export{o as DeckCode};
@@ -1,4 +1,4 @@
1
- var I="data-deck-overview",$="data-overview-tokens",z=`
1
+ var q="data-deck-overview",I="data-overview-tokens",R=`
2
2
  :host([overview]) ::slotted(*) { display: none !important; }
3
3
  :host([overview]) #overview-grid {
4
4
  position: fixed; inset: 0;
@@ -181,17 +181,17 @@ var I="data-deck-overview",$="data-overview-tokens",z=`
181
181
  from { background-position: 100% 0; }
182
182
  to { background-position: -100% 0; }
183
183
  }
184
+ /* The thumb mirrors the letterboxed stage, so make it a size container too \xB7
185
+ the cloned slide's cqw/cqh then resolve exactly as they do live instead of
186
+ falling back to the (larger) window. */
184
187
  :host([overview]) .ov-thumb {
185
188
  position: absolute; top: 0; left: 0;
186
189
  width: var(--ov-thumb-w, 1920px); height: var(--ov-thumb-h, 1080px);
187
190
  transform: scale(var(--overview-scale, 0.2));
188
191
  transform-origin: top left;
189
192
  pointer-events: none;
193
+ container-type: size;
190
194
  }
191
- /* Fixed-viewport decks: the thumb mirrors the letterboxed stage, so make it a
192
- size container too \xB7 the cloned slide's cqw/cqh then resolve exactly as they
193
- do live instead of falling back to the (larger) window. */
194
- :host([overview]) #overview-grid[data-fixed] .ov-thumb { container-type: size; }
195
195
  :host([overview]) .ov-thumb > * { display: flex !important; }
196
196
  :host([overview]) .ov-mermaid-snap {
197
197
  display: flex; align-items: center; justify-content: center;
@@ -215,4 +215,4 @@ var I="data-deck-overview",$="data-overview-tokens",z=`
215
215
  pointer-events: none;
216
216
  }
217
217
  :host(:not([overview])) #overview-grid { display: none; }
218
- `;function P(r){if(r.querySelector(`style[${I}]`))return;let o=document.createElement("style");o.setAttribute(I,"1"),o.textContent=z,r.appendChild(o)}function W(r,o){if(r.querySelector(`link[${$}]`))return;let t=document.createElement("link");t.rel="stylesheet",t.setAttribute($,"1"),t.href=new URL("../tokens.css",o).href,r.appendChild(t)}function O(r){let t=r.slides[0]?.querySelector("h1");return t?Array.from(t.childNodes).map(e=>e.nodeName==="BR"?" ":e.textContent??"").join("").replace(/\s+/g," ").trim()||`Slide ${r.startIdx+1}`:`Slide ${r.startIdx+1}`}function _(r){return(r.textContent||"").replace(/\s+/g," ").trim().slice(0,400).toLowerCase()}var B=["fill","stroke","clip-path","mask","filter","marker-start","marker-mid","marker-end","style"];function D(r,o){let t=new Map;if(r.querySelectorAll("[id]").forEach(i=>{t.set(i.id,i.id+o),i.id=i.id+o}),t.size===0)return;let e=i=>i.replace(/url\(['"]?#([^'")]+)['"]?\)/g,(n,l)=>t.has(l)?`url(#${t.get(l)})`:n);r.querySelectorAll("*").forEach(i=>{for(let n of B){let l=i.getAttribute(n);l&&l.includes("url(")&&i.setAttribute(n,e(l))}for(let n of["href","xlink:href"]){let l=i.getAttribute(n);l&&l.startsWith("#")&&t.has(l.slice(1))&&i.setAttribute(n,"#"+t.get(l.slice(1)))}});let v=r.querySelectorAll("style");if(v.length){let i=n=>n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");v.forEach(n=>{let l=n.textContent??"";t.forEach((w,k)=>{l=l.replace(new RegExp("#"+i(k)+"(?![\\w-])","g"),"#"+w)}),n.textContent=l})}}function F(r,o){let t=r.querySelectorAll("svg");o.querySelectorAll("svg").forEach((e,v)=>{let i=t[v]?.getBoundingClientRect();if(i&&i.width>0)e.setAttribute("width",String(Math.round(i.width))),e.setAttribute("height",String(Math.round(i.height))),e.style.maxWidth="100%";else if(e.hasAttribute("viewBox")&&!e.hasAttribute("width")){let n=(e.getAttribute("viewBox")??"").split(/[\s,]+/).map(Number);n.length===4&&n[2]>0&&(e.setAttribute("width",String(n[2])),e.setAttribute("height",String(n[3])),e.style.maxWidth="100%",e.style.height="auto")}})}function G(r,o){let t=r.querySelectorAll("deck-mermaid");o.querySelectorAll("deck-mermaid").forEach((e,v)=>{let i=t[v],n=document.createElement("div");n.className="ov-mermaid-snap",n.innerHTML=i?.renderedSvg??"";let l=i?.getBoundingClientRect();l&&l.width>0&&(n.style.width=l.width+"px",n.style.height=l.height+"px"),e.replaceWith(n)})}function V(r){r.querySelectorAll("[data-click], [data-click-auto], [data-click-children], [data-click-stagger] > *").forEach(o=>{o.style.opacity="",o.style.transform="",o.style.filter="",o.style.pointerEvents="",o.querySelectorAll("path, line, polyline, polygon, circle, ellipse, rect").forEach(t=>{t.style.strokeDashoffset=""})})}function U(r,o){let t=r.cloneNode(!0);return t.setAttribute("active",""),V(t),F(r,t),G(r,t),D(t,`-ov${o}`),t}async function Y(r,o){let t=Array.from(o.querySelectorAll("deck-mermaid")).map(v=>v.whenRendered).filter(v=>!!v);t.length&&await Promise.all(t).catch(()=>{});let e=document.createElement("div");e.className="ov-thumb",e.appendChild(U(o,Number(r.dataset.idx))),r.insertBefore(e,r.firstChild),r.dataset.loaded="1",delete r.dataset.building}function K(r,o){let t=r.shadowRoot;if(!t)return()=>{};P(t),W(t,import.meta.url);let e=t.querySelector("#overview-grid");e||(e=document.createElement("div"),e.id="overview-grid",t.appendChild(e)),e.innerHTML="";let v=o.slides.length,i=v>60,n=v>300?140:v>150?160:v>60?180:220;e.style.setProperty("--ov-cell-min",n+"px");let l=r.hasAttribute("fixed"),w=l?t.querySelector("#stage"):null,k=w?.clientWidth||window.innerWidth,R=w?.clientHeight||window.innerHeight;l&&(e.dataset.fixed="1"),e.style.setProperty("--ov-thumb-w",`${k}px`),e.style.setProperty("--ov-thumb-h",`${R}px`),requestAnimationFrame(()=>{let s=e.querySelector(".ov-cell")?.clientWidth??n;e.style.setProperty("--overview-scale",String(s/k))});let b=document.createElement("div");b.className="ov-bar";let f=document.createElement("input");f.className="ov-search",f.type="search",f.placeholder=`Search ${v} slides \xB7 type to filter`,f.spellcheck=!1,b.appendChild(f);let C=document.createElement("span");C.className="ov-count",C.textContent=`${v} slides \xB7 ${o.chapters.length} chapters`,b.appendChild(C);let L=document.createElement("span");L.className="ov-hint",L.textContent="O \xB7 Esc \xB7 close",b.appendChild(L),e.appendChild(b);let y=document.createElement("div");y.className="ov-body"+(i?"":" compact"),e.appendChild(y);let x=i?document.createElement("aside"):null;x&&(x.className="ov-aside",y.appendChild(x));let E=document.createElement("div");E.className="ov-main"+(i?"":" ov-path"),y.appendChild(E);let M=[],A=[],N=new WeakMap,S=new IntersectionObserver(s=>{for(let m of s){if(!m.isIntersecting)continue;let a=m.target;if(a.dataset.loaded||a.dataset.building)continue;let p=N.get(a);p&&(a.dataset.building="1",S.unobserve(a),Y(a,p).catch(d=>{let u=Number(a.dataset.tries??"0")+1;a.dataset.tries=String(u),console.warn("[rikiki/overview] thumbnail build failed",d),delete a.dataset.building,u<3&&S.observe(a)}))}},{root:null,rootMargin:"300px 0px",threshold:0});o.chapters.forEach((s,m)=>{let a=document.createElement("section");if(a.className="ov-chapter",a.id=`ov-chapter-${m}`,i){let d=document.createElement("header");d.className="ov-chapter-head";let u=document.createElement("span");u.className="ov-chapter-num",u.textContent=String(m+1).padStart(2,"0"),d.appendChild(u);let h=document.createElement("span");h.className="ov-chapter-title",h.textContent=O(s),d.appendChild(h);let c=document.createElement("span");c.className="ov-chapter-count",c.textContent=`${s.slides.length} slide${s.slides.length>1?"s":""}`,d.appendChild(c),a.appendChild(d)}let p=document.createElement("div");if(p.className="ov-row",s.slides.forEach((d,u)=>{if(!i&&u>0){let q=document.createElement("div");q.className="ov-connector",p.appendChild(q)}let h=s.startIdx+u,c=document.createElement("div");c.className="ov-cell",c.dataset.idx=String(h),c.dataset.search=_(d),h===o.currentIdx&&(c.dataset.current="1"),N.set(c,d),S.observe(c);let g=document.createElement("span");g.className="ov-cell-label",g.textContent=String(h+1),c.appendChild(g),c.addEventListener("click",()=>o.onPick(h)),p.appendChild(c)}),a.appendChild(p),E.appendChild(a),M.push(a),x){let d=document.createElement("button");d.type="button",d.className="ov-aside-item",o.currentIdx>=s.startIdx&&o.currentIdx<s.startIdx+s.slides.length&&(d.dataset.active="1");let h=document.createElement("span");h.className="ov-aside-num",h.textContent=String(m+1).padStart(2,"0"),d.appendChild(h);let c=document.createElement("span");c.className="ov-aside-text",c.textContent=O(s);let g=document.createElement("div");g.className="ov-aside-count",g.textContent=`${s.slides.length} slide${s.slides.length>1?"s":""}`,c.appendChild(g),d.appendChild(c),d.addEventListener("click",()=>{a.scrollIntoView({behavior:"smooth",block:"start"})}),x.appendChild(d),A.push(d)}});let T=null;x&&(T=new IntersectionObserver(s=>{let m=s.filter(a=>a.isIntersecting).sort((a,p)=>a.boundingClientRect.top-p.boundingClientRect.top);if(m.length>0){let a=M.indexOf(m[0].target);a>=0&&A.forEach((p,d)=>{d===a?p.dataset.active="1":delete p.dataset.active})}},{root:E,rootMargin:"0px 0px -70% 0px",threshold:0}),M.forEach(s=>T.observe(s)));let H=e.querySelectorAll(".ov-cell");return f.addEventListener("input",()=>{let s=f.value.trim().toLowerCase();if(!s){H.forEach(m=>delete m.dataset.filteredOut);return}H.forEach(m=>{(m.dataset.search||"").includes(s)?delete m.dataset.filteredOut:m.dataset.filteredOut="1"})}),requestAnimationFrame(()=>{let s=e.querySelector(".ov-cell[data-current]");s&&s.scrollIntoView({block:"center"})}),()=>{T?.disconnect(),S.disconnect(),e&&(e.innerHTML="")}}export{K as mountOverview};
218
+ `;function z(r){if(r.querySelector(`style[${q}]`))return;let o=document.createElement("style");o.setAttribute(q,"1"),o.textContent=R,r.appendChild(o)}function P(r,o){if(r.querySelector(`link[${I}]`))return;let e=document.createElement("link");e.rel="stylesheet",e.setAttribute(I,"1"),e.href=new URL("../tokens.css",o).href,r.appendChild(e)}function O(r){let e=r.slides[0]?.querySelector("h1");return e?Array.from(e.childNodes).map(t=>t.nodeName==="BR"?" ":t.textContent??"").join("").replace(/\s+/g," ").trim()||`Slide ${r.startIdx+1}`:`Slide ${r.startIdx+1}`}function W(r){return(r.textContent||"").replace(/\s+/g," ").trim().slice(0,400).toLowerCase()}var _=["fill","stroke","clip-path","mask","filter","marker-start","marker-mid","marker-end","style"];function B(r,o){let e=new Map;if(r.querySelectorAll("[id]").forEach(i=>{e.set(i.id,i.id+o),i.id=i.id+o}),e.size===0)return;let t=i=>i.replace(/url\(['"]?#([^'")]+)['"]?\)/g,(n,l)=>e.has(l)?`url(#${e.get(l)})`:n);r.querySelectorAll("*").forEach(i=>{for(let n of _){let l=i.getAttribute(n);l?.includes("url(")&&i.setAttribute(n,t(l))}for(let n of["href","xlink:href"]){let l=i.getAttribute(n);l?.startsWith("#")&&e.has(l.slice(1))&&i.setAttribute(n,`#${e.get(l.slice(1))}`)}});let v=r.querySelectorAll("style");if(v.length){let i=n=>n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");v.forEach(n=>{let l=n.textContent??"";e.forEach((w,S)=>{l=l.replace(new RegExp(`#${i(S)}(?![\\w-])`,"g"),`#${w}`)}),n.textContent=l})}}function D(r,o){let e=r.querySelectorAll("svg");o.querySelectorAll("svg").forEach((t,v)=>{let i=e[v]?.getBoundingClientRect();if(i&&i.width>0)t.setAttribute("width",String(Math.round(i.width))),t.setAttribute("height",String(Math.round(i.height))),t.style.maxWidth="100%";else if(t.hasAttribute("viewBox")&&!t.hasAttribute("width")){let n=(t.getAttribute("viewBox")??"").split(/[\s,]+/).map(Number);n.length===4&&n[2]>0&&(t.setAttribute("width",String(n[2])),t.setAttribute("height",String(n[3])),t.style.maxWidth="100%",t.style.height="auto")}})}function G(r,o){let e=r.querySelectorAll("deck-mermaid");o.querySelectorAll("deck-mermaid").forEach((t,v)=>{let i=e[v],n=document.createElement("div");n.className="ov-mermaid-snap",n.innerHTML=i?.renderedSvg??"";let l=i?.getBoundingClientRect();l&&l.width>0&&(n.style.width=`${l.width}px`,n.style.height=`${l.height}px`),t.replaceWith(n)})}function V(r){r.querySelectorAll("[data-click], [data-click-auto], [data-click-children], [data-click-stagger] > *").forEach(o=>{o.style.opacity="",o.style.transform="",o.style.filter="",o.style.pointerEvents="",o.querySelectorAll("path, line, polyline, polygon, circle, ellipse, rect").forEach(e=>{e.style.strokeDashoffset=""})})}function F(r,o){let e=r.cloneNode(!0);return e.setAttribute("active",""),V(e),D(r,e),G(r,e),B(e,`-ov${o}`),e}async function U(r,o){let e=Array.from(o.querySelectorAll("deck-mermaid")).map(v=>v.whenRendered).filter(v=>!!v);e.length&&await Promise.all(e).catch(()=>{});let t=document.createElement("div");t.className="ov-thumb",t.appendChild(F(o,Number(r.dataset.idx))),r.insertBefore(t,r.firstChild),r.dataset.loaded="1",delete r.dataset.building}function Y(r,o){let e=r.shadowRoot;if(!e)return()=>{};z(e),P(e,import.meta.url);let t=e.querySelector("#overview-grid");t||(t=document.createElement("div"),t.id="overview-grid",e.appendChild(t)),t.innerHTML="";let v=o.slides.length,i=v>60,n=v>300?140:v>150?160:v>60?180:220;t.style.setProperty("--ov-cell-min",`${n}px`);let l=e.querySelector("#stage"),w=l?.clientWidth||window.innerWidth,S=l?.clientHeight||window.innerHeight;t.style.setProperty("--ov-thumb-w",`${w}px`),t.style.setProperty("--ov-thumb-h",`${S}px`),requestAnimationFrame(()=>{let s=t.querySelector(".ov-cell")?.clientWidth??n;t.style.setProperty("--overview-scale",String(s/w))});let b=document.createElement("div");b.className="ov-bar";let f=document.createElement("input");f.className="ov-search",f.type="search",f.placeholder=`Search ${v} slides \xB7 type to filter`,f.spellcheck=!1,b.appendChild(f);let C=document.createElement("span");C.className="ov-count",C.textContent=`${v} slides \xB7 ${o.chapters.length} chapters`,b.appendChild(C);let L=document.createElement("span");L.className="ov-hint",L.textContent="O \xB7 Esc \xB7 close",b.appendChild(L),t.appendChild(b);let k=document.createElement("div");k.className=`ov-body${i?"":" compact"}`,t.appendChild(k);let x=i?document.createElement("aside"):null;x&&(x.className="ov-aside",k.appendChild(x));let y=document.createElement("div");y.className=`ov-main${i?"":" ov-path"}`,k.appendChild(y);let T=[],A=[],N=new WeakMap,E=new IntersectionObserver(s=>{for(let m of s){if(!m.isIntersecting)continue;let a=m.target;if(a.dataset.loaded||a.dataset.building)continue;let p=N.get(a);p&&(a.dataset.building="1",E.unobserve(a),U(a,p).catch(d=>{let u=Number(a.dataset.tries??"0")+1;a.dataset.tries=String(u),console.warn("[rikiki/overview] thumbnail build failed",d),delete a.dataset.building,u<3&&E.observe(a)}))}},{root:null,rootMargin:"300px 0px",threshold:0});o.chapters.forEach((s,m)=>{let a=document.createElement("section");if(a.className="ov-chapter",a.id=`ov-chapter-${m}`,i){let d=document.createElement("header");d.className="ov-chapter-head";let u=document.createElement("span");u.className="ov-chapter-num",u.textContent=String(m+1).padStart(2,"0"),d.appendChild(u);let h=document.createElement("span");h.className="ov-chapter-title",h.textContent=O(s),d.appendChild(h);let c=document.createElement("span");c.className="ov-chapter-count",c.textContent=`${s.slides.length} slide${s.slides.length>1?"s":""}`,d.appendChild(c),a.appendChild(d)}let p=document.createElement("div");if(p.className="ov-row",s.slides.forEach((d,u)=>{if(!i&&u>0){let $=document.createElement("div");$.className="ov-connector",p.appendChild($)}let h=s.startIdx+u,c=document.createElement("div");c.className="ov-cell",c.dataset.idx=String(h),c.dataset.search=W(d),h===o.currentIdx&&(c.dataset.current="1"),N.set(c,d),E.observe(c);let g=document.createElement("span");g.className="ov-cell-label",g.textContent=String(h+1),c.appendChild(g),c.addEventListener("click",()=>o.onPick(h)),p.appendChild(c)}),a.appendChild(p),y.appendChild(a),T.push(a),x){let d=document.createElement("button");d.type="button",d.className="ov-aside-item",o.currentIdx>=s.startIdx&&o.currentIdx<s.startIdx+s.slides.length&&(d.dataset.active="1");let h=document.createElement("span");h.className="ov-aside-num",h.textContent=String(m+1).padStart(2,"0"),d.appendChild(h);let c=document.createElement("span");c.className="ov-aside-text",c.textContent=O(s);let g=document.createElement("div");g.className="ov-aside-count",g.textContent=`${s.slides.length} slide${s.slides.length>1?"s":""}`,c.appendChild(g),d.appendChild(c),d.addEventListener("click",()=>{a.scrollIntoView({behavior:"smooth",block:"start"})}),x.appendChild(d),A.push(d)}});let M=null;x&&(M=new IntersectionObserver(s=>{let m=s.filter(a=>a.isIntersecting).sort((a,p)=>a.boundingClientRect.top-p.boundingClientRect.top);if(m.length>0){let a=T.indexOf(m[0].target);a>=0&&A.forEach((p,d)=>{d===a?p.dataset.active="1":delete p.dataset.active})}},{root:y,rootMargin:"0px 0px -70% 0px",threshold:0}),T.forEach(s=>{M.observe(s)}));let H=t.querySelectorAll(".ov-cell");return f.addEventListener("input",()=>{let s=f.value.trim().toLowerCase();if(!s){H.forEach(m=>{delete m.dataset.filteredOut});return}H.forEach(m=>{(m.dataset.search||"").includes(s)?delete m.dataset.filteredOut:m.dataset.filteredOut="1"})}),requestAnimationFrame(()=>{let s=t.querySelector(".ov-cell[data-current]");s&&s.scrollIntoView({block:"center"})}),()=>{M?.disconnect(),E.disconnect(),t&&(t.innerHTML="")}}export{Y as mountOverview};
@@ -143,14 +143,14 @@ ${e.themeHref?`<link rel="stylesheet" href="${e.themeHref}">`:""}
143
143
  // Mark the cloned slide [active] so its real component CSS applies
144
144
  // (:host([active]){display:flex}) instead of forcing display via !important.
145
145
  const activeSlide = slideHtml.replace(/^(\\s*<deck-[a-z-]+)/i, '$1 active');
146
- // Render the preview in fixed-viewport mode so the slide keeps its 16:9
147
- // proportions (letterboxed) regardless of the pane's shape, and drop the
148
- // hint / nav-arrow chrome \xB7 a clean, correctly-shaped thumbnail.
146
+ // The deck always letterboxes into its logical canvas, so the slide keeps
147
+ // its 16:9 proportions regardless of the pane's shape \xB7 just drop the
148
+ // hint / nav-arrow chrome for a clean, correctly-shaped thumbnail.
149
149
  return '<!doctype html><html><head><meta charset="UTF-8">' + themeLink + themeStyle +
150
150
  bundleTag +
151
151
  '<style>html,body{margin:0;padding:0;height:100%;overflow:hidden;background:#0f1422}' +
152
152
  'deck-root{position:absolute;inset:0}</style>' +
153
- '</head><body><deck-root fixed no-hint no-arrows>' + activeSlide + '</deck-root></body></html>';
153
+ '</head><body><deck-root no-hint no-arrows>' + activeSlide + '</deck-root></body></html>';
154
154
  }
155
155
 
156
156
  channel.onmessage = (e) => {
@@ -177,4 +177,4 @@ ${e.themeHref?`<link rel="stylesheet" href="${e.themeHref}">`:""}
177
177
  channel.postMessage({ type: 'hello' });
178
178
  <\/script>
179
179
  </body>
180
- </html>`;function x(e){if(o=o??new WeakSet,o.has(e)){t?.close(),t=null;return}o.add(e),l=new BroadcastChannel(c),e.addEventListener("slide-change",()=>d(e)),l.addEventListener("message",a=>{let n=a.data;n?.type==="key"&&n.key&&window.dispatchEvent(new KeyboardEvent("keydown",{key:n.key,shiftKey:!!n.shift,bubbles:!0})),n?.type==="hello"&&d(e)});let r=p(e);if(t=window.open("","rikiki-presenter","width=1280,height=800,popup=yes"),!t){console.warn("[rikiki/presenter] popup was blocked \xB7 allow popups for this site"),o.delete(e);return}t.document.open(),t.document.write(y(r)),t.document.close();let s=setInterval(()=>{t&&t.closed&&(clearInterval(s),o?.delete(e),t=null)},1e3)}export{x as installPresenter};
180
+ </html>`;function x(e){if(o=o??new WeakSet,o.has(e)){t?.close(),t=null;return}o.add(e),l=new BroadcastChannel(c),e.addEventListener("slide-change",()=>d(e)),l.addEventListener("message",a=>{let n=a.data;n?.type==="key"&&n.key&&window.dispatchEvent(new KeyboardEvent("keydown",{key:n.key,shiftKey:!!n.shift,bubbles:!0})),n?.type==="hello"&&d(e)});let r=p(e);if(t=window.open("","rikiki-presenter","width=1280,height=800,popup=yes"),!t){console.warn("[rikiki/presenter] popup was blocked \xB7 allow popups for this site"),o.delete(e);return}t.document.open(),t.document.write(y(r)),t.document.close();let s=setInterval(()=>{t?.closed&&(clearInterval(s),o?.delete(e),t=null)},1e3)}export{x as installPresenter};
package/dist/deck-root.js CHANGED
@@ -1,10 +1,10 @@
1
- var _=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var o=(p,c,t,e)=>{for(var r=e>1?void 0:e?m(c,t):c,i=p.length-1,s;i>=0;i--)(s=p[i])&&(r=(e?s(c,t,r):s(r))||r);return e&&r&&_(c,t,r),r};import{LitElement as b,html as d,css as k}from"./vendor/lit.js";import{customElement as y,property as l,state as u}from"./vendor/lit.js";var n=class extends b{constructor(){super(...arguments);this.current=0;this.step=0;this.blank=null;this.overview=!1;this.fixed=!1;this.width=1920;this.height=1080;this.noHint=!1;this.noArrows=!1;this.transition=null;this.autoplay=0;this.loop=!1;this.swipe=!1;this.mouseNav=null;this.nav=null;this.slides=[];this.chapters=[];this._overviewTeardown=null;this._transitionLoaded=!1;this._autoplayTimer=null;this._autoplayPaused=!1;this._swipeStartX=0;this._swipeStartY=0;this._swipePointerId=null;this._navDownX=0;this._navDownY=0;this._wheelAccum=0;this._wheelLockUntil=0;this._onHoverEnter=()=>{this._autoplayPaused=!0,this._stopAutoplay()};this._onHoverLeave=()=>{this._autoplayPaused=!1,this.autoplay>0&&this._startAutoplay()};this._onPointerDown=t=>{!this.swipe||t.pointerType==="mouse"&&t.button!==0||t.target?.closest("a, button, input, textarea, [contenteditable]")||(this._swipePointerId=t.pointerId,this._swipeStartX=t.clientX,this._swipeStartY=t.clientY)};this._onPointerUp=t=>{if(this._swipePointerId===null||t.pointerId!==this._swipePointerId)return;let e=t.clientX-this._swipeStartX,r=t.clientY-this._swipeStartY;this._swipePointerId=null,!(Math.abs(e)<60||Math.abs(e)<Math.abs(r)*2)&&(this._stopAutoplay(),e<0?this._advance():this._back(),this._restartAutoplay())};this._onNavPointerDown=t=>{this._navDownX=t.clientX,this._navDownY=t.clientY};this._onClickNav=t=>{if(!this._mouseEnabled("click")||this.overview||this.blank||this.shadowRoot?.querySelector("#kb-overlay.open")||Math.hypot(t.clientX-this._navDownX,t.clientY-this._navDownY)>5)return;let e=window.getSelection();e&&!e.isCollapsed||t.composedPath().some(i=>i instanceof HTMLElement?i.matches?.("a, button, input, textarea, select, [contenteditable], [data-no-advance]")?!0:i.id==="blank"||i.id==="kb-overlay"||i.id==="overview-grid"||i.id==="nav-arrows"||i.id==="kb-hint":!1)||(this._restartAutoplay(),t.shiftKey?this._back():this._advance())};this._onWheel=t=>{if(!this._mouseEnabled("wheel")||this.overview||this.blank||this._wheelTargetScrolls(t))return;t.preventDefault();let e=performance.now();if(e<this._wheelLockUntil||(this._wheelAccum+=t.deltaY,Math.abs(this._wheelAccum)<50))return;let r=this._wheelAccum>0;this._wheelAccum=0,this._wheelLockUntil=e+400,this._restartAutoplay(),r?this._advance():this._back()};this._onAuxUp=t=>{this._mouseEnabled("aux")&&(t.button!==3&&t.button!==4||(t.preventDefault(),this._restartAutoplay(),t.button===3?this._back():this._advance()))};this._onAuxClick=t=>{this._mouseEnabled("aux")&&(t.button===3||t.button===4)&&t.preventDefault()};this._onHash=()=>{this._readHash(!1)};this._onKey=t=>{if(!(t.target&&t.target.matches?.("input,textarea,[contenteditable]"))){if(this._restartAutoplay(),this.overview){(t.key==="Escape"||t.key==="o"||t.key==="O"||t.key==="Enter")&&(t.preventDefault(),this.overview=!1);return}if(this.blank){t.preventDefault(),this.blank=null;return}if(t.key==="."||t.key==="b"||t.key==="B"){t.preventDefault(),this.blank="black";return}if(t.key===","||t.key==="w"||t.key==="W"){t.preventDefault(),this.blank="white";return}if(t.key==="?"||t.key==="h"||t.key==="H"){this._toggleHelp();return}if(t.key==="Escape"){this._closeHelp();return}if(t.key==="o"||t.key==="O"){t.preventDefault(),this.overview=!0;return}if(t.key==="p"||t.key==="P"){t.preventDefault(),this._togglePresenter();return}if(t.key==="Home"){this._goTo(0);return}if(t.key==="End"){this._goTo(this.slides.length-1);return}if(t.key===" "||t.key==="PageDown"){t.preventDefault(),this._advance();return}if(t.key==="PageUp"){t.preventDefault(),this._back();return}if(this._has2DNav()){let{c:e,i:r}=this._coords(this.current);if(t.key==="ArrowRight"){t.preventDefault(),e+1<this.chapters.length?this._goToCoords(e+1,0):this._advance();return}if(t.key==="ArrowLeft"){t.preventDefault(),e-1>=0?this._goToCoords(e-1,0):this._back();return}if(t.key==="ArrowDown"){t.preventDefault();let i=this.chapters[e];i&&r+1<i.slides.length?this._goToCoords(e,r+1):this._advance();return}if(t.key==="ArrowUp"){t.preventDefault(),r-1>=0?this._goToCoords(e,r-1):this._back();return}}else{if(t.key==="ArrowRight"||t.key==="ArrowDown"){t.preventDefault(),this._advance();return}if(t.key==="ArrowLeft"||t.key==="ArrowUp"){t.preventDefault(),this._back();return}}}}}firstUpdated(){this.fixed&&this._applyCanvasVars(),this._scopeSlideStyles(),this.slides=Array.from(this.querySelectorAll(":scope > *")).filter(t=>t.tagName?.toLowerCase().startsWith("deck-")&&t.tagName?.toLowerCase()!=="deck-root"),this._buildChapters(),this._readHash(!0),this._applyActive(),this._applyStep(),this._updateUI(),this.requestUpdate(),window.addEventListener("keydown",this._onKey),window.addEventListener("hashchange",this._onHash),this.addEventListener("pointerdown",this._onNavPointerDown),this.addEventListener("click",this._onClickNav),this.addEventListener("wheel",this._onWheel,{passive:!1}),window.addEventListener("mouseup",this._onAuxUp),window.addEventListener("auxclick",this._onAuxClick),this.autoplay>0&&this._startAutoplay(),this.swipe?(this.addEventListener("pointerdown",this._onPointerDown),this.addEventListener("pointerup",this._onPointerUp),this.addEventListener("pointercancel",this._onPointerUp),this.addEventListener("mouseenter",this._onHoverEnter),this.addEventListener("mouseleave",this._onHoverLeave)):this.autoplay>0&&(this.addEventListener("mouseenter",this._onHoverEnter),this.addEventListener("mouseleave",this._onHoverLeave))}_scopeSlideStyles(){this.querySelectorAll("style[scoped]").forEach(t=>{t.dataset.rikScoped||(t.dataset.rikScoped="1",t.textContent=`@scope {
1
+ var m=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var a=(d,h,t,e)=>{for(var i=e>1?void 0:e?b(h,t):h,r=d.length-1,s;r>=0;r--)(s=d[r])&&(i=(e?s(h,t,i):s(i))||i);return e&&i&&m(h,t,i),i};import{LitElement as y,html as p,css as k}from"./vendor/lit.js";import{customElement as w,property as l,state as v}from"./vendor/lit.js";function f(d){if(!d||d==="transparent")return!1;let h=d.match(/^(?:rgb|hsl)a?\(([^)]*)\)$/i);if(h){let e=h[1].split(",");return e.length<4||parseFloat(e[3])>=1}let t=d.match(/\/\s*([\d.]+%?)\s*\)$/);if(t){let e=t[1];return(e.endsWith("%")?parseFloat(e)/100:parseFloat(e))>=1}return!0}var n=class extends y{constructor(){super(...arguments);this.current=0;this.step=0;this.blank=null;this.overview=!1;this.fluid=!1;this.width=1920;this.height=1080;this.noHint=!1;this.noArrows=!1;this.transition=null;this.autoplay=0;this.loop=!1;this.swipe=!1;this.mouseNav=null;this.nav=null;this.slides=[];this.chapters=[];this._overviewTeardown=null;this._transitionLoaded=!1;this._autoplayTimer=null;this._autoplayPaused=!1;this._swipeStartX=0;this._swipeStartY=0;this._swipePointerId=null;this._navDownX=0;this._navDownY=0;this._wheelAccum=0;this._wheelLockUntil=0;this._applyScale=()=>{if(this.fluid){this.style.removeProperty("--deck-scale");return}let t=Math.min(this.clientWidth/this.width,this.clientHeight/this.height);t>0&&this.style.setProperty("--deck-scale",String(t))};this._resizeObserver=null;this._onHoverEnter=()=>{this._autoplayPaused=!0,this._stopAutoplay()};this._onHoverLeave=()=>{this._autoplayPaused=!1,this.autoplay>0&&this._startAutoplay()};this._onPointerDown=t=>{!this.swipe||t.pointerType==="mouse"&&t.button!==0||t.target?.closest("a, button, input, textarea, [contenteditable]")||(this._swipePointerId=t.pointerId,this._swipeStartX=t.clientX,this._swipeStartY=t.clientY)};this._onPointerUp=t=>{if(this._swipePointerId===null||t.pointerId!==this._swipePointerId)return;let e=t.clientX-this._swipeStartX,i=t.clientY-this._swipeStartY;this._swipePointerId=null,!(Math.abs(e)<60||Math.abs(e)<Math.abs(i)*2)&&(this._stopAutoplay(),e<0?this._advance():this._back(),this._restartAutoplay())};this._onNavPointerDown=t=>{this._navDownX=t.clientX,this._navDownY=t.clientY};this._onClickNav=t=>{if(!this._mouseEnabled("click")||this.overview||this.blank||this.shadowRoot?.querySelector("#kb-overlay.open")||Math.hypot(t.clientX-this._navDownX,t.clientY-this._navDownY)>5)return;let e=window.getSelection();e&&!e.isCollapsed||t.composedPath().some(r=>r instanceof HTMLElement?r.matches?.("a, button, input, textarea, select, [contenteditable], [data-no-advance]")?!0:r.id==="blank"||r.id==="kb-overlay"||r.id==="overview-grid"||r.id==="nav-arrows"||r.id==="kb-hint":!1)||(this._restartAutoplay(),t.shiftKey?this._back():this._advance())};this._onWheel=t=>{if(!this._mouseEnabled("wheel")||this.overview||this.blank||this._wheelTargetScrolls(t))return;t.preventDefault();let e=performance.now();if(e<this._wheelLockUntil||(this._wheelAccum+=t.deltaY,Math.abs(this._wheelAccum)<50))return;let i=this._wheelAccum>0;this._wheelAccum=0,this._wheelLockUntil=e+400,this._restartAutoplay(),i?this._advance():this._back()};this._onAuxUp=t=>{this._mouseEnabled("aux")&&(t.button!==3&&t.button!==4||(t.preventDefault(),this._restartAutoplay(),t.button===3?this._back():this._advance()))};this._onAuxClick=t=>{this._mouseEnabled("aux")&&(t.button===3||t.button===4)&&t.preventDefault()};this._onHash=()=>{this._readHash(!1)};this._onKey=t=>{if(!(t.target&&t.target.matches?.("input,textarea,[contenteditable]"))){if(this._restartAutoplay(),this.overview){(t.key==="Escape"||t.key==="o"||t.key==="O"||t.key==="Enter")&&(t.preventDefault(),this.overview=!1);return}if(this.blank){t.preventDefault(),this.blank=null;return}if(t.key==="."||t.key==="b"||t.key==="B"){t.preventDefault(),this.blank="black";return}if(t.key===","||t.key==="w"||t.key==="W"){t.preventDefault(),this.blank="white";return}if(t.key==="?"||t.key==="h"||t.key==="H"){this._toggleHelp();return}if(t.key==="Escape"){this._closeHelp();return}if(t.key==="o"||t.key==="O"){t.preventDefault(),this.overview=!0;return}if(t.key==="p"||t.key==="P"){t.preventDefault(),this._togglePresenter();return}if(t.key==="Home"){this._goTo(0);return}if(t.key==="End"){this._goTo(this.slides.length-1);return}if(t.key===" "||t.key==="PageDown"){t.preventDefault(),this._advance();return}if(t.key==="PageUp"){t.preventDefault(),this._back();return}if(this._has2DNav()){let{c:e,i}=this._coords(this.current);if(t.key==="ArrowRight"){t.preventDefault(),e+1<this.chapters.length?this._goToCoords(e+1,0):this._advance();return}if(t.key==="ArrowLeft"){t.preventDefault(),e-1>=0?this._goToCoords(e-1,0):this._back();return}if(t.key==="ArrowDown"){t.preventDefault();let r=this.chapters[e];r&&i+1<r.slides.length?this._goToCoords(e,i+1):this._advance();return}if(t.key==="ArrowUp"){t.preventDefault(),i-1>=0?this._goToCoords(e,i-1):this._back();return}}else{if(t.key==="ArrowRight"||t.key==="ArrowDown"){t.preventDefault(),this._advance();return}if(t.key==="ArrowLeft"||t.key==="ArrowUp"){t.preventDefault(),this._back();return}}}}}firstUpdated(){this._installRuntime(),this._scopeSlideStyles(),this.slides=Array.from(this.querySelectorAll(":scope > *")).filter(t=>t.tagName?.toLowerCase().startsWith("deck-")&&t.tagName?.toLowerCase()!=="deck-root"),this._buildChapters(),this._readHash(!0),this._applyActive(),this._applyStep(),this._updateUI(),this.requestUpdate()}_installRuntime(){this._applyCanvasVars(),this._applyScale(),this._resizeObserver=new ResizeObserver(this._applyScale),this._resizeObserver.observe(this),window.addEventListener("keydown",this._onKey),window.addEventListener("hashchange",this._onHash),this.addEventListener("pointerdown",this._onNavPointerDown),this.addEventListener("click",this._onClickNav),this.addEventListener("wheel",this._onWheel,{passive:!1}),window.addEventListener("mouseup",this._onAuxUp),window.addEventListener("auxclick",this._onAuxClick),this.autoplay>0&&this._startAutoplay(),this.swipe?(this.addEventListener("pointerdown",this._onPointerDown),this.addEventListener("pointerup",this._onPointerUp),this.addEventListener("pointercancel",this._onPointerUp),this.addEventListener("mouseenter",this._onHoverEnter),this.addEventListener("mouseleave",this._onHoverLeave)):this.autoplay>0&&(this.addEventListener("mouseenter",this._onHoverEnter),this.addEventListener("mouseleave",this._onHoverLeave))}_scopeSlideStyles(){this.querySelectorAll("style[scoped]").forEach(t=>{t.dataset.rikScoped||(t.dataset.rikScoped="1",t.textContent=`@scope {
2
2
  ${t.textContent??""}
3
- }`)})}_applyCanvasVars(){let t=document.documentElement;t.style.setProperty("--deck-canvas-w",String(this.width)),t.style.setProperty("--deck-canvas-h",String(this.height))}disconnectedCallback(){super.disconnectedCallback(),this.fixed&&(document.documentElement.style.removeProperty("--deck-canvas-w"),document.documentElement.style.removeProperty("--deck-canvas-h")),window.removeEventListener("keydown",this._onKey),window.removeEventListener("hashchange",this._onHash),this.removeEventListener("pointerdown",this._onNavPointerDown),this.removeEventListener("click",this._onClickNav),this.removeEventListener("wheel",this._onWheel),window.removeEventListener("mouseup",this._onAuxUp),window.removeEventListener("auxclick",this._onAuxClick),this._stopAutoplay(),this.removeEventListener("pointerdown",this._onPointerDown),this.removeEventListener("pointerup",this._onPointerUp),this.removeEventListener("pointercancel",this._onPointerUp),this.removeEventListener("mouseenter",this._onHoverEnter),this.removeEventListener("mouseleave",this._onHoverLeave)}_startAutoplay(){this._stopAutoplay(),!(this.autoplay<=0||this._autoplayPaused)&&(this._autoplayTimer=window.setInterval(()=>this._autoTick(),this.autoplay))}_stopAutoplay(){this._autoplayTimer!==null&&(window.clearInterval(this._autoplayTimer),this._autoplayTimer=null)}_autoTick(){if(this.overview)return;this.current>=this.slides.length-1&&this.step>=this._maxSteps()&&this.loop?this._goTo(0):this._advance()}_restartAutoplay(){this.autoplay>0&&!this._autoplayPaused&&this._startAutoplay()}_wheelTargetScrolls(t){let e=t.deltaY>0,r=t.deltaX>0;for(let i of t.composedPath()){if(i===this)return!1;if(!(i instanceof Element))continue;let s=i.scrollHeight>i.clientHeight,a=i.scrollWidth>i.clientWidth;if(!s&&!a)continue;let h=getComputedStyle(i);if(s&&/auto|scroll/.test(h.overflowY)&&(e?i.scrollTop+i.clientHeight<i.scrollHeight-1:i.scrollTop>0)||a&&/auto|scroll/.test(h.overflowX)&&(r?i.scrollLeft+i.clientWidth<i.scrollWidth-1:i.scrollLeft>0))return!0}return!1}_buildChapters(){this.chapters=[];let t=null;this.slides.forEach((e,r)=>{e.tagName?.toLowerCase()==="deck-section"||!t?(t={startIdx:r,slides:[e]},this.chapters.push(t)):t.slides.push(e)})}_has2DNav(){return this.nav==="2d"&&this.chapters.length>1&&this.chapters.some(t=>t.slides.length>1)}_mouseEnabled(t){let e=(this.mouseNav??"all").trim();return e==="none"?!1:e===""||e==="all"?!0:e.split(/\s+/).includes(t)}_coords(t){for(let e=0;e<this.chapters.length;e++){let r=this.chapters[e],i=t-r.startIdx;if(i>=0&&i<r.slides.length)return{c:e,i}}return{c:0,i:0}}_flatFromCoords(t,e){let r=this.chapters[Math.max(0,Math.min(this.chapters.length-1,t))];return r?r.startIdx+Math.max(0,Math.min(r.slides.length-1,e)):0}_readHash(t){let e=location.hash,r=e.match(/^#(\d+)\.(\d+)(?:s(\d+))?$/),i=e.match(/^#(\d+)(?:\.(\d+))?$/),s=this.current,a=this.step;if(this._has2DNav()&&r){let v=parseInt(r[1],10)-1,f=parseInt(r[2],10)-1;s=this._flatFromCoords(Math.max(0,v),Math.max(0,f)),a=r[3]?parseInt(r[3],10):0}else if(i)s=parseInt(i[1],10)-1,a=i[2]?parseInt(i[2],10):0;else return;if(s===this.current&&a===this.step&&!t)return;this.current=Math.max(0,Math.min(this.slides.length-1,s));let h=this._maxSteps();this.step=h>0?Math.max(0,Math.min(h,a)):Math.max(0,a),t||(this._applyActive(),this._applyStep(),this._updateUI())}_writeHash(){let t=`#${this.current+1}`+(this.step>0?`.${this.step}`:"");if(location.hash!==t)try{history.replaceState(null,"",t)}catch{}}async _toggleHelp(){(await import("./deck-help.js")).toggleHelp(this)}async _togglePresenter(){(await import("./deck-presenter.js")).installPresenter(this)}async _closeHelp(){(await import("./deck-help.js")).closeHelp(this)}async _renderOverviewIfActive(){if(!this.overview){this._overviewTeardown?.(),this._overviewTeardown=null;return}let{mountOverview:t}=await import("./deck-overview.js");this._overviewTeardown=t(this,{slides:this.slides,chapters:this.chapters,currentIdx:this.current,onPick:e=>{this.overview=!1,this._goTo(e)}})}_maxSteps(){let t=this.slides[this.current];if(!t)return 0;let e=parseInt(t.getAttribute("steps")||t.dataset?.steps||"0",10);if(e>0)return e;let r=t.querySelector("deck-code[step-groups]");if(r)try{return JSON.parse(r.getAttribute("step-groups")).length}catch{}return 0}_advance(){let t=this._maxSteps();this.step<t?(this.step++,this._applyStep(),this._updateUI(),this._writeHash()):this.current<this.slides.length-1?this._goTo(this.current+1):this.loop&&this._goTo(0)}_back(){this.step>0?(this.step--,this._applyStep(),this._updateUI(),this._writeHash()):this.current>0?(this._goTo(this.current-1),this.step=this._maxSteps(),this._applyStep(),this._updateUI(),this._writeHash()):this.loop&&(this._goTo(this.slides.length-1),this.step=this._maxSteps(),this._applyStep(),this._updateUI(),this._writeHash())}_goTo(t){this.current=Math.max(0,Math.min(this.slides.length-1,t)),this.step=0,this._applyActive(),this._applyStep(),this._updateUI(),this._writeHash()}_goToCoords(t,e){let r=Math.max(0,Math.min(this.chapters.length-1,t)),i=this.chapters[r];if(!i)return;let s=Math.max(0,Math.min(i.slides.length-1,e));this._goTo(this._flatFromCoords(r,s))}_applyActive(){let t=this.slides.find(r=>r.hasAttribute("active"))??null,e=this.slides[this.current]??null;this.slides.forEach((r,i)=>{let s=i===this.current;r.toggleAttribute("active",s),s&&r.querySelectorAll("deck-mermaid").forEach(a=>a.render?.())}),this.transition&&!this._transitionLoaded&&(this._transitionLoaded=!0,import("./deck-transition.js").then(r=>r.installTransitions(this))),t!==e&&this.dispatchEvent(new CustomEvent("slide-change",{detail:{current:e,previous:t},bubbles:!1}))}_applyStep(){let t=this.slides[this.current];t&&(t.applyStep?.(this.step),t.querySelectorAll("*").forEach(e=>e.applyStep?.(this.step)),t.querySelectorAll("[data-step-block]").forEach(e=>{let r=parseInt(e.dataset.stepBlock,10);e.style.transition="opacity 0.25s ease",e.style.opacity=this.step===0||r<=this.step?"1":"0.15"}))}_updateUI(){let t=this.slides.length,e=this.current+1,r=this.renderRoot.querySelector("#progress"),i=this.renderRoot.querySelector("#counter"),s=this.renderRoot.querySelector("#step-dots");r&&(r.style.width=e/t*100+"%"),i&&(i.textContent=`${e} / ${t}`);let a=this._maxSteps();s&&(s.innerHTML=a===0?"":Array.from({length:a},(h,v)=>`<div class="dot${v<this.step?" active":""}"></div>`).join(""))}updated(){this._updateUI(),this._renderOverviewIfActive()}_navArrows(){if(this.noArrows||!this._mouseEnabled("arrows")||this.overview)return"";let t=this.slides.length;if(t===0)return"";let e=this.current===0&&this.step===0,r=this.current>=t-1&&this.step>=this._maxSteps();if(this._has2DNav()){let{c:i,i:s}=this._coords(this.current),a=this.chapters[i];return d`<div id="nav-arrows"> <button class="nav-btn" title="Previous chapter" ?disabled=${!this.loop&&this.current===0} @click=${()=>i>0?this._goToCoords(i-1,0):this._back()}>&lsaquo;</button> <button class="nav-btn" title="Up" ?disabled=${s===0} @click=${()=>this._goToCoords(i,s-1)}>&uarr;</button> <button class="nav-btn" title="Down" ?disabled=${!a||s+1>=a.slides.length} @click=${()=>this._goToCoords(i,s+1)}>&darr;</button> <button class="nav-btn" title="Next chapter" ?disabled=${!this.loop&&r} @click=${()=>i+1<this.chapters.length?this._goToCoords(i+1,0):this._advance()}>&rsaquo;</button> </div>`}return d`<div id="nav-arrows"> <button class="nav-btn" title="Previous" ?disabled=${!this.loop&&e} @click=${()=>this._back()}>&lsaquo;</button> <button class="nav-btn" title="Next" ?disabled=${!this.loop&&r} @click=${()=>this._advance()}>&rsaquo;</button> </div>`}render(){return d`<div id="progress"></div> <div id="counter"></div> <div id="step-dots"></div> ${this.noHint?"":d`
3
+ }`)})}_applyCanvasVars(){let t=document.documentElement;if(this.fluid){t.style.removeProperty("--deck-canvas-w"),t.style.removeProperty("--deck-canvas-h");return}t.style.setProperty("--deck-canvas-w",String(this.width)),t.style.setProperty("--deck-canvas-h",String(this.height))}_applyLetterbox(t){if(this.fluid){this.style.removeProperty("--deck-letterbox-bg");return}let e=t?getComputedStyle(t).backgroundColor:"";e&&f(e)?this.style.setProperty("--deck-letterbox-bg",e):this.style.removeProperty("--deck-letterbox-bg")}static _injectGlobals(){if(typeof document>"u"||document.getElementById("rik-deck-globals"))return;let t=document.createElement("style");t.id="rik-deck-globals",t.textContent="html:has(> body > deck-root){overflow:hidden;height:100%}html:has(> body > deck-root) body{margin:0;overflow:hidden;height:100%}html:has(> body > deck-root:not([fluid])){font-size:calc(var(--deck-canvas-h,1080)*0.0235px)}html:has(> body > deck-root[fluid]){font-size:clamp(14px,2.35vh,42px)}",document.head.appendChild(t)}connectedCallback(){super.connectedCallback(),n._injectGlobals(),this.hasUpdated&&this._installRuntime()}disconnectedCallback(){super.disconnectedCallback(),document.documentElement.style.removeProperty("--deck-canvas-w"),document.documentElement.style.removeProperty("--deck-canvas-h"),document.querySelector("deck-root")||document.getElementById("rik-deck-globals")?.remove(),this._resizeObserver?.disconnect(),this._resizeObserver=null,window.removeEventListener("keydown",this._onKey),window.removeEventListener("hashchange",this._onHash),this.removeEventListener("pointerdown",this._onNavPointerDown),this.removeEventListener("click",this._onClickNav),this.removeEventListener("wheel",this._onWheel),window.removeEventListener("mouseup",this._onAuxUp),window.removeEventListener("auxclick",this._onAuxClick),this._stopAutoplay(),this.removeEventListener("pointerdown",this._onPointerDown),this.removeEventListener("pointerup",this._onPointerUp),this.removeEventListener("pointercancel",this._onPointerUp),this.removeEventListener("mouseenter",this._onHoverEnter),this.removeEventListener("mouseleave",this._onHoverLeave)}_startAutoplay(){this._stopAutoplay(),!(this.autoplay<=0||this._autoplayPaused)&&(this._autoplayTimer=window.setInterval(()=>this._autoTick(),this.autoplay))}_stopAutoplay(){this._autoplayTimer!==null&&(window.clearInterval(this._autoplayTimer),this._autoplayTimer=null)}_autoTick(){if(this.overview)return;this.current>=this.slides.length-1&&this.step>=this._maxSteps()&&this.loop?this._goTo(0):this._advance()}_restartAutoplay(){this.autoplay>0&&!this._autoplayPaused&&this._startAutoplay()}_wheelTargetScrolls(t){let e=t.deltaY>0,i=t.deltaX>0;for(let r of t.composedPath()){if(r===this)return!1;if(!(r instanceof Element))continue;let s=r.scrollHeight>r.clientHeight,o=r.scrollWidth>r.clientWidth;if(!s&&!o)continue;let c=getComputedStyle(r);if(s&&/auto|scroll/.test(c.overflowY)&&(e?r.scrollTop+r.clientHeight<r.scrollHeight-1:r.scrollTop>0)||o&&/auto|scroll/.test(c.overflowX)&&(i?r.scrollLeft+r.clientWidth<r.scrollWidth-1:r.scrollLeft>0))return!0}return!1}_buildChapters(){this.chapters=[];let t=null;this.slides.forEach((e,i)=>{e.tagName?.toLowerCase()==="deck-section"||!t?(t={startIdx:i,slides:[e]},this.chapters.push(t)):t.slides.push(e)})}_has2DNav(){return this.nav==="2d"&&this.chapters.length>1&&this.chapters.some(t=>t.slides.length>1)}_mouseEnabled(t){let e=(this.mouseNav??"all").trim();return e==="none"?!1:e===""||e==="all"?!0:e.split(/\s+/).includes(t)}_coords(t){for(let e=0;e<this.chapters.length;e++){let i=this.chapters[e],r=t-i.startIdx;if(r>=0&&r<i.slides.length)return{c:e,i:r}}return{c:0,i:0}}_flatFromCoords(t,e){let i=this.chapters[Math.max(0,Math.min(this.chapters.length-1,t))];return i?i.startIdx+Math.max(0,Math.min(i.slides.length-1,e)):0}_readHash(t){let e=location.hash,i=e.match(/^#(\d+)\.(\d+)(?:s(\d+))?$/),r=e.match(/^#(\d+)(?:\.(\d+))?$/),s=this.current,o=this.step;if(this._has2DNav()&&i){let u=parseInt(i[1],10)-1,_=parseInt(i[2],10)-1;s=this._flatFromCoords(Math.max(0,u),Math.max(0,_)),o=i[3]?parseInt(i[3],10):0}else if(r)s=parseInt(r[1],10)-1,o=r[2]?parseInt(r[2],10):0;else return;if(s===this.current&&o===this.step&&!t)return;this.current=Math.max(0,Math.min(this.slides.length-1,s));let c=this._maxSteps();this.step=c>0?Math.max(0,Math.min(c,o)):Math.max(0,o),t||(this._applyActive(),this._applyStep(),this._updateUI())}_writeHash(){let t=`#${this.current+1}${this.step>0?`.${this.step}`:""}`;if(location.hash!==t)try{history.replaceState(null,"",t)}catch{}}async _toggleHelp(){(await import("./deck-help.js")).toggleHelp(this)}async _togglePresenter(){(await import("./deck-presenter.js")).installPresenter(this)}async _closeHelp(){(await import("./deck-help.js")).closeHelp(this)}async _renderOverviewIfActive(){if(!this.overview){this._overviewTeardown?.(),this._overviewTeardown=null;return}let{mountOverview:t}=await import("./deck-overview.js");this._overviewTeardown=t(this,{slides:this.slides,chapters:this.chapters,currentIdx:this.current,onPick:e=>{this.overview=!1,this._goTo(e)}})}_maxSteps(){let t=this.slides[this.current];if(!t)return 0;let e=parseInt(t.getAttribute("steps")||t.dataset?.steps||"0",10);if(e>0)return e;let i=t.querySelector("deck-code[step-groups]");if(i)try{return JSON.parse(i.getAttribute("step-groups")).length}catch{}return 0}_advance(){let t=this._maxSteps();this.step<t?(this.step++,this._applyStep(),this._updateUI(),this._writeHash()):this.current<this.slides.length-1?this._goTo(this.current+1):this.loop&&this._goTo(0)}_back(){this.step>0?(this.step--,this._applyStep(),this._updateUI(),this._writeHash()):this.current>0?(this._goTo(this.current-1),this.step=this._maxSteps(),this._applyStep(),this._updateUI(),this._writeHash()):this.loop&&(this._goTo(this.slides.length-1),this.step=this._maxSteps(),this._applyStep(),this._updateUI(),this._writeHash())}_goTo(t){this.current=Math.max(0,Math.min(this.slides.length-1,t)),this.step=0,this._applyActive(),this._applyStep(),this._updateUI(),this._writeHash()}_goToCoords(t,e){let i=Math.max(0,Math.min(this.chapters.length-1,t)),r=this.chapters[i];if(!r)return;let s=Math.max(0,Math.min(r.slides.length-1,e));this._goTo(this._flatFromCoords(i,s))}_applyActive(){let t=this.slides.find(i=>i.hasAttribute("active"))??null,e=this.slides[this.current]??null;this.slides.forEach((i,r)=>{let s=r===this.current;i.toggleAttribute("active",s),s&&i.querySelectorAll("deck-mermaid").forEach(o=>{o.render?.()})}),this._applyLetterbox(e),this.transition&&!this._transitionLoaded&&(this._transitionLoaded=!0,import("./deck-transition.js").then(i=>i.installTransitions(this))),t!==e&&this.dispatchEvent(new CustomEvent("slide-change",{detail:{current:e,previous:t},bubbles:!1}))}_applyStep(){let t=this.slides[this.current];t&&(t.applyStep?.(this.step),t.querySelectorAll("*").forEach(e=>{e.applyStep?.(this.step)}),t.querySelectorAll("[data-step-block]").forEach(e=>{let i=parseInt(e.dataset.stepBlock,10);e.style.transition="opacity 0.25s ease",e.style.opacity=this.step===0||i<=this.step?"1":"0.15"}))}_updateUI(){let t=this.slides.length,e=this.current+1,i=this.renderRoot.querySelector("#progress"),r=this.renderRoot.querySelector("#counter"),s=this.renderRoot.querySelector("#step-dots");i&&(i.style.width=`${e/t*100}%`),r&&(r.textContent=`${e} / ${t}`);let o=this._maxSteps();s&&(s.innerHTML=o===0?"":Array.from({length:o},(c,u)=>`<div class="dot${u<this.step?" active":""}"></div>`).join(""))}updated(t){(t.has("width")||t.has("height")||t.has("fluid"))&&(this._applyCanvasVars(),this._applyScale()),t.has("fluid")&&this._applyLetterbox(this.slides[this.current]??null),this._updateUI(),this._renderOverviewIfActive()}_navArrows(){if(this.noArrows||!this._mouseEnabled("arrows")||this.overview)return"";let t=this.slides.length;if(t===0)return"";let e=this.current===0&&this.step===0,i=this.current>=t-1&&this.step>=this._maxSteps();if(this._has2DNav()){let{c:r,i:s}=this._coords(this.current),o=this.chapters[r];return p`<div id="nav-arrows"> <button class="nav-btn" title="Previous chapter" ?disabled=${!this.loop&&this.current===0} @click=${()=>r>0?this._goToCoords(r-1,0):this._back()}>&lsaquo;</button> <button class="nav-btn" title="Up" ?disabled=${s===0} @click=${()=>this._goToCoords(r,s-1)}>&uarr;</button> <button class="nav-btn" title="Down" ?disabled=${!o||s+1>=o.slides.length} @click=${()=>this._goToCoords(r,s+1)}>&darr;</button> <button class="nav-btn" title="Next chapter" ?disabled=${!this.loop&&i} @click=${()=>r+1<this.chapters.length?this._goToCoords(r+1,0):this._advance()}>&rsaquo;</button> </div>`}return p`<div id="nav-arrows"> <button class="nav-btn" title="Previous" ?disabled=${!this.loop&&e} @click=${()=>this._back()}>&lsaquo;</button> <button class="nav-btn" title="Next" ?disabled=${!this.loop&&i} @click=${()=>this._advance()}>&rsaquo;</button> </div>`}render(){return p`<div id="progress"></div> <div id="counter"></div> <div id="step-dots"></div> ${this.noHint?"":p`
4
4
  <div id="kb-hint">
5
5
  <kbd title="Previous" @click=${()=>this._back()}>←</kbd
6
6
  ><kbd title="Next" @click=${()=>this._advance()}>→</kbd>
7
- ${this._has2DNav()?d`<kbd title="Previous" @click=${()=>this._back()}>↑</kbd ><kbd title="Next" @click=${()=>this._advance()}>↓</kbd>`:""}
7
+ ${this._has2DNav()?p`<kbd title="Previous" @click=${()=>this._back()}>↑</kbd ><kbd title="Next" @click=${()=>this._advance()}>↓</kbd>`:""}
8
8
  <span>·</span>
9
9
  <kbd title="Overview" @click=${()=>{this.overview=!this.overview}}>O</kbd>
10
10
  <span>·</span>
@@ -14,5 +14,5 @@ ${t.textContent??""}
14
14
  </div>`}
15
15
  ${this._navArrows()}
16
16
  <div id="stage"><slot></slot></div>
17
- ${this.blank?d`<div id="blank" data-tone="${this.blank}" @click=${()=>{this.blank=null}}></div>`:""}
18
- `}};n.styles=k`:host{display:block;width:100vw;height:100vh;position:relative;background:var(--deck-root-bg,var(--rik-surface-page))}#stage{position:absolute;inset:0}:host([fixed]){display:flex;align-items:center;justify-content:center;overflow:hidden;background:var(--deck-letterbox-bg,var(--deck-root-bg,var(--rik-surface-page)))}:host([fixed]) #stage{position:relative;inset:auto;width:min(100vw,calc(100vh * var(--deck-canvas-w,1920) / var(--deck-canvas-h,1080)));height:min(100vh,calc(100vw * var(--deck-canvas-h,1080) / var(--deck-canvas-w,1920)));container-type:size}#progress{position:fixed;bottom:0;left:0;height:var(--deck-root-progress-height,3px);background:var(--deck-root-progress-color,linear-gradient(90deg,var(--rik-accent),var(--rik-accent--soft)));transition:width 0.25s ease;z-index:100}#counter{position:fixed;bottom:1rem;right:1.5rem;font-size:var(--rik-font-size-xs);color:var(--deck-root-counter-color,var(--rik-text-default--faint));font-family:var(--rik-font-mono);z-index:100}#step-dots{position:fixed;bottom:1rem;left:50%;transform:translateX(-50%);display:flex;gap:6px;z-index:100}.dot{width:6px;height:6px;border-radius:50%;background:var(--deck-root-dot-bg,#d4d4d0);transition:background 0.2s}.dot.active{background:var(--deck-root-dot-active-bg,var(--rik-accent))}#kb-hint{position:fixed;bottom:1rem;left:1.5rem;display:inline-flex;align-items:center;gap:6px;font:600 0.62rem/1 var(--rik-font-mono);color:var(--deck-root-kb-hint-color,var(--rik-text-default--faint));z-index:100;opacity:0.5;transition:opacity 0.2s ease;cursor:help}#kb-hint:hover{opacity:1}#kb-hint kbd{background:var(--rik-surface-raised);border:1px solid var(--rik-border-default);border-bottom:2px solid var(--rik-border-default);border-radius:4px;padding:2px 6px;color:var(--rik-text-default);font:inherit;min-width:16px;text-align:center;cursor:pointer}#kb-hint kbd:hover{border-color:var(--rik-accent)}#kb-hint .sep{opacity:0.4}#nav-arrows{position:fixed;bottom:2.4rem;right:1.5rem;display:flex;gap:4px;z-index:100;opacity:var(--deck-root-nav-opacity,0.35);transition:opacity 0.2s ease}#nav-arrows:hover{opacity:1}.nav-btn{appearance:none;cursor:pointer;width:30px;height:30px;display:grid;place-items:center;font:700 1rem/1 var(--rik-font-mono);color:var(--deck-root-nav-color,var(--rik-text-default));background:var(--deck-root-nav-bg,var(--rik-surface-raised));border:1px solid var(--rik-border-default);border-radius:6px;padding:0}.nav-btn:hover:not(:disabled){border-color:var(--rik-accent)}.nav-btn:disabled{opacity:0.3;cursor:default}#blank{position:fixed;inset:0;z-index:9999;cursor:pointer}#blank[data-tone="black"]{background:#000}#blank[data-tone="white"]{background:#fff}`,o([u()],n.prototype,"current",2),o([u()],n.prototype,"step",2),o([u()],n.prototype,"blank",2),o([l({type:Boolean,reflect:!0})],n.prototype,"overview",2),o([l({type:Boolean,reflect:!0})],n.prototype,"fixed",2),o([l({type:Number})],n.prototype,"width",2),o([l({type:Number})],n.prototype,"height",2),o([l({type:Boolean,reflect:!0,attribute:"no-hint"})],n.prototype,"noHint",2),o([l({type:Boolean,reflect:!0,attribute:"no-arrows"})],n.prototype,"noArrows",2),o([l({type:String,reflect:!0})],n.prototype,"transition",2),o([l({type:Number,reflect:!0})],n.prototype,"autoplay",2),o([l({type:Boolean,reflect:!0})],n.prototype,"loop",2),o([l({type:Boolean,reflect:!0})],n.prototype,"swipe",2),o([l({type:String,reflect:!0,attribute:"mouse-nav"})],n.prototype,"mouseNav",2),o([l({type:String,reflect:!0})],n.prototype,"nav",2),n=o([y("deck-root")],n);export{n as DeckRoot};
17
+ ${this.blank?p`<div id="blank" data-tone="${this.blank}" @click=${()=>{this.blank=null}}></div>`:""}
18
+ `}};n.styles=k`:host{display:flex;align-items:center;justify-content:center;width:100%;height:100%;overflow:hidden;background:var(--deck-letterbox-bg,var(--deck-root-bg,var(--rik-surface-page)))}#stage{flex:none;width:calc(var(--deck-canvas-w,1920) * 1px);height:calc(var(--deck-canvas-h,1080) * 1px);transform:scale(var(--deck-scale,1));transform-origin:center center;container-type:size}:host([fluid]) #stage{width:100%;height:100%;transform:none}#progress{position:fixed;bottom:0;left:0;height:var(--deck-root-progress-height,3px);background:var(--deck-root-progress-color,linear-gradient(90deg,var(--rik-accent),var(--rik-accent--soft)));transition:width 0.25s ease;z-index:100}#counter{position:fixed;bottom:1rem;right:1.5rem;font-size:var(--rik-font-size-xs);color:var(--deck-root-counter-color,var(--rik-text-default--faint));font-family:var(--rik-font-mono);z-index:100}#step-dots{position:fixed;bottom:1rem;left:50%;transform:translateX(-50%);display:flex;gap:6px;z-index:100}.dot{width:6px;height:6px;border-radius:50%;background:var(--deck-root-dot-bg,#d4d4d0);transition:background 0.2s}.dot.active{background:var(--deck-root-dot-active-bg,var(--rik-accent))}#kb-hint{position:fixed;bottom:1rem;left:1.5rem;display:inline-flex;align-items:center;gap:6px;font:600 0.62rem/1 var(--rik-font-mono);color:var(--deck-root-kb-hint-color,var(--rik-text-default--faint));z-index:100;opacity:0.5;transition:opacity 0.2s ease;cursor:help}#kb-hint:hover{opacity:1}#kb-hint kbd{background:var(--rik-surface-raised);border:1px solid var(--rik-border-default);border-bottom:2px solid var(--rik-border-default);border-radius:4px;padding:2px 6px;color:var(--rik-text-default);font:inherit;min-width:16px;text-align:center;cursor:pointer}#kb-hint kbd:hover{border-color:var(--rik-accent)}#kb-hint .sep{opacity:0.4}#nav-arrows{position:fixed;bottom:2.4rem;right:1.5rem;display:flex;gap:4px;z-index:100;opacity:var(--deck-root-nav-opacity,0.35);transition:opacity 0.2s ease}#nav-arrows:hover{opacity:1}.nav-btn{appearance:none;cursor:pointer;width:30px;height:30px;display:grid;place-items:center;font:700 1rem/1 var(--rik-font-mono);color:var(--deck-root-nav-color,var(--rik-text-default));background:var(--deck-root-nav-bg,var(--rik-surface-raised));border:1px solid var(--rik-border-default);border-radius:6px;padding:0}.nav-btn:hover:not(:disabled){border-color:var(--rik-accent)}.nav-btn:disabled{opacity:0.3;cursor:default}#blank{position:fixed;inset:0;z-index:9999;cursor:pointer}#blank[data-tone="black"]{background:#000}#blank[data-tone="white"]{background:#fff}`,a([v()],n.prototype,"current",2),a([v()],n.prototype,"step",2),a([v()],n.prototype,"blank",2),a([l({type:Boolean,reflect:!0})],n.prototype,"overview",2),a([l({type:Boolean,reflect:!0})],n.prototype,"fluid",2),a([l({type:Number})],n.prototype,"width",2),a([l({type:Number})],n.prototype,"height",2),a([l({type:Boolean,reflect:!0,attribute:"no-hint"})],n.prototype,"noHint",2),a([l({type:Boolean,reflect:!0,attribute:"no-arrows"})],n.prototype,"noArrows",2),a([l({type:String,reflect:!0})],n.prototype,"transition",2),a([l({type:Number,reflect:!0})],n.prototype,"autoplay",2),a([l({type:Boolean,reflect:!0})],n.prototype,"loop",2),a([l({type:Boolean,reflect:!0})],n.prototype,"swipe",2),a([l({type:String,reflect:!0,attribute:"mouse-nav"})],n.prototype,"mouseNav",2),a([l({type:String,reflect:!0})],n.prototype,"nav",2),n=a([w("deck-root")],n);export{n as DeckRoot};
@@ -1,4 +1,4 @@
1
- var e={slide:560,"slide-up":520,"slide-down":520,"slide-right":560,fade:480,zoom:520,flip:560},r="var(--rik-motion__ease-out, cubic-bezier(0.16, 1, 0.3, 1))",y="var(--rik-motion__ease-spring, cubic-bezier(0.5, 1.8, 0.3, 1))",w=`
1
+ var e={slide:560,"slide-up":520,"slide-down":520,"slide-right":560,fade:480,zoom:520,flip:560},r="var(--rik-motion__ease-out, cubic-bezier(0.16, 1, 0.3, 1))",y="var(--rik-motion__ease-spring, cubic-bezier(0.5, 1.8, 0.3, 1))",$=`
2
2
  /* Incoming \xB7 from right (forward) */
3
3
  @keyframes rk-slide-in { from { transform: translateX(100%); } to { transform: translateX(0); } }
4
4
  /* Outgoing \xB7 pushed off to the left (forward) */
@@ -48,4 +48,4 @@ var e={slide:560,"slide-up":520,"slide-down":520,"slide-right":560,fade:480,zoom
48
48
  ::slotted([active][class*='rk-enter-']),
49
49
  ::slotted(.rk-leaving) { animation: none; }
50
50
  }
51
- `,g=["rk-enter-slide","rk-enter-slide-up","rk-enter-slide-down","rk-enter-slide-right","rk-enter-fade","rk-enter-zoom","rk-enter-flip"],$=["rk-exit-slide","rk-exit-slide-up","rk-exit-slide-down","rk-exit-slide-right","rk-exit-fade","rk-exit-zoom","rk-exit-flip"];function x(s){if(s.__rkTransitions)return s.__rkTransitions;let f=s.shadowRoot;if(!f)return()=>{};let a=document.createElement("style");a.textContent=w,a.setAttribute("data-rik-transitions",""),f.appendChild(a);function h(m,n){if(!n)return 0;let t=m.compareDocumentPosition(n);return t&Node.DOCUMENT_POSITION_PRECEDING?1:t&Node.DOCUMENT_POSITION_FOLLOWING?-1:0}let d=m=>{if(s.__rkMorphActive)return;let n=m,t=n.detail.current,o=n.detail.previous;if(!t)return;let i=t.dataset.transition||s.transition||"fade",l=h(t,o);i==="slide"&&l<0?i="slide-right":i==="slide-right"&&l>0?i="slide":i==="slide-up"&&l<0?i="slide-down":i==="slide-down"&&l>0&&(i="slide-up");let u=`rk-enter-${i}`,p=`rk-exit-${i}`,v=e[i]??480;o&&o!==t&&(o.classList.remove(...g,...$,"rk-leaving"),o.style.display="flex",o.style.zIndex="1",o.offsetWidth,o.classList.add("rk-leaving",p),window.setTimeout(()=>{o.classList.remove("rk-leaving",p),o.style.display="",o.style.zIndex=""},v+40)),t.classList.remove(...g),t.style.zIndex="2",t.offsetWidth,t.classList.add(u),window.setTimeout(()=>{t.classList.remove(u),t.style.zIndex=""},v+40)};s.addEventListener("slide-change",d);let k=s.querySelector(":scope > [active]");k&&d(new CustomEvent("slide-change",{detail:{current:k,previous:null}}));let c=()=>{s.removeEventListener("slide-change",d),a.remove(),delete s.__rkTransitions};return s.__rkTransitions=c,c}export{x as installTransitions};
51
+ `,h=["rk-enter-slide","rk-enter-slide-up","rk-enter-slide-down","rk-enter-slide-right","rk-enter-fade","rk-enter-zoom","rk-enter-flip"],x=["rk-exit-slide","rk-exit-slide-up","rk-exit-slide-down","rk-exit-slide-right","rk-exit-fade","rk-exit-zoom","rk-exit-flip"];function E(s){let a=s;if(a.__rkTransitions)return a.__rkTransitions;let k=s.shadowRoot;if(!k)return()=>{};let l=document.createElement("style");l.textContent=$,l.setAttribute("data-rik-transitions",""),k.appendChild(l);function w(f,n){if(!n)return 0;let t=f.compareDocumentPosition(n);return t&Node.DOCUMENT_POSITION_PRECEDING?1:t&Node.DOCUMENT_POSITION_FOLLOWING?-1:0}let m=f=>{if(s.__rkMorphActive)return;let n=f,t=n.detail.current,o=n.detail.previous;if(!t)return;let i=t.dataset.transition||s.transition||"fade",d=w(t,o);i==="slide"&&d<0?i="slide-right":i==="slide-right"&&d>0?i="slide":i==="slide-up"&&d<0?i="slide-down":i==="slide-down"&&d>0&&(i="slide-up");let p=`rk-enter-${i}`,v=`rk-exit-${i}`,g=e[i]??480;o&&o!==t&&(o.classList.remove(...h,...x,"rk-leaving"),o.style.display="flex",o.style.zIndex="1",o.offsetWidth,o.classList.add("rk-leaving",v),window.setTimeout(()=>{o.classList.remove("rk-leaving",v),o.style.display="",o.style.zIndex=""},g+40)),t.classList.remove(...h),t.style.zIndex="2",t.offsetWidth,t.classList.add(p),window.setTimeout(()=>{t.classList.remove(p),t.style.zIndex=""},g+40)};s.addEventListener("slide-change",m);let c=s.querySelector(":scope > [active]");c&&m(new CustomEvent("slide-change",{detail:{current:c,previous:null}}));let u=()=>{s.removeEventListener("slide-change",m),l.remove(),delete a.__rkTransitions};return a.__rkTransitions=u,u}export{E as installTransitions};