steppy-dev 0.3.0__py3-none-any.whl
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.
- steppy/CHANGELOG.md +862 -0
- steppy/__init__.py +9 -0
- steppy/__main__.py +13 -0
- steppy/_cli_common.py +183 -0
- steppy/_docker/Dockerfile.installed +53 -0
- steppy/_parallel/__init__.py +7 -0
- steppy/_parallel/compose.py +349 -0
- steppy/_parallel/event_bus.py +418 -0
- steppy/_parallel/failures.py +267 -0
- steppy/_parallel/fingerprint.py +141 -0
- steppy/_parallel/image.py +380 -0
- steppy/_parallel/lastfailed.py +125 -0
- steppy/_parallel/lifecycle.py +90 -0
- steppy/_parallel/preauth.py +109 -0
- steppy/_parallel/progress.py +101 -0
- steppy/_parallel/queue.py +385 -0
- steppy/_parallel/renderer.py +489 -0
- steppy/_parallel/retry.py +316 -0
- steppy/_player_bundle/THIRD_PARTY_LICENSES.txt +158 -0
- steppy/_player_bundle/__init__.py +100 -0
- steppy/_player_bundle/steppy-cursor-legacy.js +2 -0
- steppy/_player_bundle/steppy-cursor-legacy.js.map +1 -0
- steppy/_player_bundle/steppy-player.js +5419 -0
- steppy/_player_bundle/steppy-player.js.map +1 -0
- steppy/_player_bundle/steppy-video.js +472 -0
- steppy/_player_bundle/steppy-video.js.map +1 -0
- steppy/_templating.py +117 -0
- steppy/assertions.py +251 -0
- steppy/auth.py +493 -0
- steppy/build.py +2798 -0
- steppy/build_models.py +669 -0
- steppy/buildid.py +134 -0
- steppy/bundle/__init__.py +47 -0
- steppy/bundle/archive.py +239 -0
- steppy/bundle/classify.py +329 -0
- steppy/bundle/create.py +490 -0
- steppy/bundle/hashing.py +28 -0
- steppy/bundle/manifest.py +334 -0
- steppy/bundle/results.py +546 -0
- steppy/bundle_cli.py +455 -0
- steppy/captures.py +207 -0
- steppy/cli.py +2489 -0
- steppy/cloud/__init__.py +58 -0
- steppy/cloud/client.py +267 -0
- steppy/cloud/upload.py +497 -0
- steppy/compat.py +109 -0
- steppy/config.py +231 -0
- steppy/config_schema.py +87 -0
- steppy/contracts/__init__.py +54 -0
- steppy/contracts/bundle.py +215 -0
- steppy/contracts/report.py +346 -0
- steppy/contracts/tours.py +505 -0
- steppy/coordinator.py +1352 -0
- steppy/coverage/__init__.py +9 -0
- steppy/coverage/gaps.py +190 -0
- steppy/coverage/manifest.py +193 -0
- steppy/coverage/merge.py +363 -0
- steppy/coverage/normalize.py +174 -0
- steppy/coverage/report.py +178 -0
- steppy/coverage/sourcemap.py +219 -0
- steppy/coverage/store.py +473 -0
- steppy/coverage/triage.py +151 -0
- steppy/coverage_cli.py +265 -0
- steppy/durations.py +48 -0
- steppy/exclusive.py +178 -0
- steppy/flaky_cli.py +169 -0
- steppy/generator.py +633 -0
- steppy/guide.py +1467 -0
- steppy/history.py +352 -0
- steppy/init_cli.py +330 -0
- steppy/locales.py +282 -0
- steppy/migrate/__init__.py +35 -0
- steppy/migrate/apply.py +194 -0
- steppy/migrate/plan.py +199 -0
- steppy/migrate/rules.py +465 -0
- steppy/migrate/verify.py +163 -0
- steppy/migrate_cli.py +152 -0
- steppy/models.py +2539 -0
- steppy/naming.py +37 -0
- steppy/parser.py +475 -0
- steppy/pdf.py +193 -0
- steppy/presets.py +284 -0
- steppy/record_cli.py +796 -0
- steppy/report/__init__.py +37 -0
- steppy/report/assets.py +197 -0
- steppy/report/build.py +261 -0
- steppy/report/coverage_source.py +277 -0
- steppy/report/model.py +423 -0
- steppy/report/render.py +303 -0
- steppy/report/source.py +238 -0
- steppy/report_cli.py +173 -0
- steppy/runmeta.py +114 -0
- steppy/selection.py +183 -0
- steppy/sitemap.py +205 -0
- steppy/skills/steppy-app-tours/SKILL.md +448 -0
- steppy/skills/steppy-ci-report/SKILL.md +567 -0
- steppy/skills/steppy-scenario-author/SKILL.md +2176 -0
- steppy/skills/steppy-template/SKILL.md +676 -0
- steppy/templates/_steppy_events.py +291 -0
- steppy/templates/_steppy_tours.py +404 -0
- steppy/templates/angular/component-interactive.ts.j2 +109 -0
- steppy/templates/angular/component-video.ts.j2 +112 -0
- steppy/templates/angular/component.ts.j2 +229 -0
- steppy/templates/angular/content.ts.j2 +31 -0
- steppy/templates/angular/gitignore.j2 +3 -0
- steppy/templates/angular/group.component.ts.j2 +39 -0
- steppy/templates/angular/onboarding.component.ts.j2 +43 -0
- steppy/templates/angular/routes.ts.j2 +34 -0
- steppy/templates/ci/github-actions.yml +284 -0
- steppy/templates/ci/gitlab-ci.yml +178 -0
- steppy/templates/conftest.py.j2 +2405 -0
- steppy/templates/guide.book.html.j2 +145 -0
- steppy/templates/guide.fragment.html.j2 +257 -0
- steppy/templates/guide.html.j2 +301 -0
- steppy/templates/guide.md.j2 +18 -0
- steppy/templates/init/config.yaml +124 -0
- steppy/templates/init/credentials.yaml.example +30 -0
- steppy/templates/init/scenarios/example--first-flow.md +53 -0
- steppy/templates/report/_head.html.j2 +14 -0
- steppy/templates/report/_mark.html.j2 +3 -0
- steppy/templates/report/coverage.html.j2 +124 -0
- steppy/templates/report/index.html.j2 +203 -0
- steppy/templates/report/report.css +401 -0
- steppy/templates/report/scenario.html.j2 +137 -0
- steppy/templates/static/_headers.j2 +30 -0
- steppy/templates/static/_mode_links.html.j2 +22 -0
- steppy/templates/static/_seo_head.html.j2 +37 -0
- steppy/templates/static/cursor.js.j2 +10 -0
- steppy/templates/static/group.html.j2 +78 -0
- steppy/templates/static/guides.css +678 -0
- steppy/templates/static/index.html.j2 +79 -0
- steppy/templates/static/interactive.html.j2 +100 -0
- steppy/templates/static/onboarding.html.j2 +64 -0
- steppy/templates/static/page.html.j2 +145 -0
- steppy/templates/static/robots.txt.j2 +7 -0
- steppy/templates/static/video.html.j2 +135 -0
- steppy/templates/test_scenario.py.j2 +767 -0
- steppy/testids.py +166 -0
- steppy/totp.py +26 -0
- steppy/tour_spec.py +163 -0
- steppy/tours/__init__.py +22 -0
- steppy/tours/actions.py +402 -0
- steppy/tours/compiler.py +144 -0
- steppy/tours/diagnostics.py +137 -0
- steppy/tours/emit.py +239 -0
- steppy/tours/ids.py +40 -0
- steppy/tours/inference.py +399 -0
- steppy/tours/model.py +120 -0
- steppy/tours/paths.py +126 -0
- steppy/tours/pipeline.py +277 -0
- steppy/tours/publish.py +124 -0
- steppy/tours/replay.py +234 -0
- steppy/tours/routes.py +175 -0
- steppy/tours/settings.py +164 -0
- steppy/tours/text.py +237 -0
- steppy/tours_cli.py +219 -0
- steppy/tts/__init__.py +280 -0
- steppy/tts/cache.py +185 -0
- steppy/tts/presets.py +125 -0
- steppy/tts/providers/__init__.py +6 -0
- steppy/tts/providers/http.py +184 -0
- steppy/tts/providers/local.py +207 -0
- steppy/tts/providers/null.py +28 -0
- steppy/tts/registry.py +201 -0
- steppy/tts/track.py +158 -0
- steppy/tts/types.py +94 -0
- steppy/update_cli.py +460 -0
- steppy/video.py +730 -0
- steppy/video_cache.py +239 -0
- steppy/video_cli.py +271 -0
- steppy/worker.py +301 -0
- steppy_dev-0.3.0.dist-info/METADATA +1335 -0
- steppy_dev-0.3.0.dist-info/RECORD +177 -0
- steppy_dev-0.3.0.dist-info/WHEEL +4 -0
- steppy_dev-0.3.0.dist-info/entry_points.txt +2 -0
- steppy_dev-0.3.0.dist-info/licenses/LICENSE +202 -0
- steppy_dev-0.3.0.dist-info/licenses/NOTICE +13 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steppy-player.js","sources":["../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/lit-html/lit-html.js","../node_modules/lit-element/lit-element.js","../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/state.js","../node_modules/lit-html/directive-helpers.js","../node_modules/lit-html/directive.js","../node_modules/lit-html/async-directive.js","../node_modules/lit-html/directives/ref.js","../src/cursor/types.ts","../src/cursor/animator.ts","../src/ui/strings.ts","../src/i18n/ui-strings.ts","../src/ui/placement.ts","../src/interaction/positioning.ts","../src/ui/markdown.ts","../src/manifest/content.ts","../node_modules/zod/v3/helpers/util.js","../node_modules/zod/v3/ZodError.js","../node_modules/zod/v3/locales/en.js","../node_modules/zod/v3/errors.js","../node_modules/zod/v3/helpers/parseUtil.js","../node_modules/zod/v3/helpers/errorUtil.js","../node_modules/zod/v3/types.js","../src/manifest/schema.ts","../src/manifest/parse.ts","../src/ui/tokens.ts","../src/templates/base-styles.ts","../src/templates/controls.ts","../src/templates/inline.ts","../src/templates/overlay.ts","../src/templates/sidebar.ts","../src/templates/index.ts","../src/steppy-guide.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.3\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:t}=o,i=o=>o,n=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,e={HTML:1,SVG:2,MATHML:3},l=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,d=o=>null!=o?._$litType$?.h,c=o=>void 0!==o?._$litDirective$,f=o=>o?._$litDirective$,r=o=>void 0===o.strings,s=()=>document.createComment(\"\"),v=(o,n,e)=>{const l=o._$AA.parentNode,d=void 0===n?o._$AB:n._$AA;if(void 0===e){const i=l.insertBefore(s(),d),n=l.insertBefore(s(),d);e=new t(i,n,o,o.options)}else{const t=e._$AB.nextSibling,n=e._$AM,c=n!==o;if(c){let t;e._$AQ?.(o),e._$AM=o,void 0!==e._$AP&&(t=o._$AU)!==n._$AU&&e._$AP(t)}if(t!==d||c){let o=e._$AA;for(;o!==t;){const t=i(o).nextSibling;i(l).insertBefore(o,d),o=t}}}return e},u=(o,t,i=o)=>(o._$AI(t,i),o),m={},p=(o,t=m)=>o._$AH=t,M=o=>o._$AH,h=o=>{o._$AR(),o._$AA.remove()},j=o=>{o._$AR()};export{e as TemplateResultType,j as clearPart,M as getCommittedValue,f as getDirectiveClass,v as insertPart,d as isCompiledTemplateResult,c as isDirectiveResult,n as isPrimitive,r as isSingleExpression,l as isTemplateResult,h as removePart,u as setChildPartValue,p as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{isSingleExpression as i}from\"./directive-helpers.js\";import{Directive as t,PartType as e}from\"./directive.js\";export{directive}from\"./directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=(i,t)=>{const e=i._$AN;if(void 0===e)return!1;for(const i of e)i._$AO?.(t,!1),s(i,t);return!0},o=i=>{let t,e;do{if(void 0===(t=i._$AM))break;e=t._$AN,e.delete(i),i=t}while(0===e?.size)},r=i=>{for(let t;t=i._$AM;i=t){let e=t._$AN;if(void 0===e)t._$AN=e=new Set;else if(e.has(i))break;e.add(i),c(t)}};function h(i){void 0!==this._$AN?(o(this),this._$AM=i,r(this)):this._$AM=i}function n(i,t=!1,e=0){const r=this._$AH,h=this._$AN;if(void 0!==h&&0!==h.size)if(t)if(Array.isArray(r))for(let i=e;i<r.length;i++)s(r[i],!1),o(r[i]);else null!=r&&(s(r,!1),o(r));else s(this,i)}const c=i=>{i.type==e.CHILD&&(i._$AP??=n,i._$AQ??=h)};class f extends t{constructor(){super(...arguments),this._$AN=void 0}_$AT(i,t,e){super._$AT(i,t,e),r(this),this.isConnected=i._$AU}_$AO(i,t=!0){i!==this.isConnected&&(this.isConnected=i,i?this.reconnected?.():this.disconnected?.()),t&&(s(this,i),o(this))}setValue(t){if(i(this._$Ct))this._$Ct._$AI(t,this);else{const i=[...this._$Ct._$AH];i[this._$Ci]=t,this._$Ct._$AI(i,this,0)}}disconnected(){}reconnected(){}}export{f as AsyncDirective,t as Directive,e as PartType};\n//# sourceMappingURL=async-directive.js.map\n","import{nothing as t}from\"../lit-html.js\";import{AsyncDirective as i}from\"../async-directive.js\";import{directive as s}from\"../directive.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const e=()=>new h;class h{}const o=new WeakMap,n=s(class extends i{render(i){return t}update(i,[s]){const e=s!==this.G;return e&&this.rt(void 0),(e||this.lt!==this.ct)&&(this.G=s,this.ht=i.options?.host,this.rt(this.ct=i.element)),t}rt(t){if(void 0!==this.G)if(this.isConnected||(t=void 0),\"function\"==typeof this.G){const i=this.ht??globalThis;let s=o.get(i);void 0===s&&(s=new WeakMap,o.set(i,s)),void 0!==s.get(this.G)&&this.G.call(this.ht,void 0),s.set(this.G,t),void 0!==t&&this.G.call(this.ht,t)}else this.G.value=t}get lt(){return\"function\"==typeof this.G?o.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});export{e as createRef,n as ref};\n//# sourceMappingURL=ref.js.map\n","/**\n * Cursor data shapes — shared by the Lit player, the legacy IIFE bundle, and\n * the manifest validator. Kept dependency-free (no Zod) so the legacy IIFE\n * stays a tiny standalone bundle.\n *\n * The manifest schema in ``../manifest/schema.ts`` produces types that are\n * structurally identical to these — by design.\n */\n\nexport interface Bbox {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface Viewport {\n width: number;\n height: number;\n}\n\nexport interface SingleTarget {\n selector?: string;\n bbox: Bbox;\n}\n\nexport interface MultiTarget extends SingleTarget {\n value?: string;\n}\n\nexport type CursorBehavior =\n | { kind: 'click'; target: SingleTarget }\n | { kind: 'hover'; target: SingleTarget }\n | { kind: 'type'; target: SingleTarget; value?: string }\n | { kind: 'type-multi'; targets: MultiTarget[] };\n\nexport interface CursorTimings {\n pre_action_ms: number;\n action_ms: number;\n post_action_ms: number;\n travel_speed_px_per_ms: number;\n}\n\nexport const DEFAULT_TIMINGS: CursorTimings = {\n pre_action_ms: 200,\n action_ms: 300,\n post_action_ms: 150,\n travel_speed_px_per_ms: 1.5,\n};\n\nexport interface AnimatorFrame {\n cursor: CursorBehavior | null;\n viewport: Viewport | null;\n}\n\n/** A scaled, displayed-space rect derived from a bbox + image size + viewport. */\nexport interface DisplayRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface DisplayScale {\n sx: number;\n sy: number;\n}\n","/**\n * Cursor animation — canonical TS port of the inline JS that previously lived\n * in ``templates/static/cursor.js.j2`` and ``templates/guide.html.j2``. Both\n * the new ``<steppy-guide>`` Lit element and the legacy stepbystep templates\n * consume this module (the latter via ``legacy-iife.ts``).\n *\n * Two animation modes are supported off the same primitives:\n *\n * - **Full frame** (stepbystep): ``animateFrame(frame)`` walks every target in\n * the frame and runs travel → pre-action → action → post-action without\n * pause. Matches the historical behavior of the inline JS.\n * - **Interactive** (the new player): ``travelToTarget`` /\n * ``playTargetAction`` split the sequence so the player can wait for the\n * user to click a hotspot between phases.\n *\n * The animator owns the cursor / ripple / kbd DOM elements (it does not\n * create them — the host provides them via ``opts.stage`` and the elements\n * inside that stage). Coordinates are scaled at animation time from the\n * frame's capture-space viewport to the displayed image size; this is the\n * single point where capture-space → display-space conversion happens.\n */\n\nimport {\n AnimatorFrame,\n Bbox,\n CursorBehavior,\n CursorTimings,\n DEFAULT_TIMINGS,\n DisplayRect,\n DisplayScale,\n MultiTarget,\n SingleTarget,\n Viewport,\n} from './types.js';\n\nexport type TargetKind = 'click' | 'hover' | 'type';\n\nexport interface NormalizedTarget {\n bbox: Bbox;\n value?: string;\n selector?: string;\n kind: TargetKind;\n}\n\nconst sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));\n\nexport function easeInOut(t: number): number {\n // Smoothstep — symmetric S-curve, matches the legacy inline JS.\n return t * t * (3 - 2 * t);\n}\n\nexport function getDisplayScale(\n img: HTMLElement,\n viewport: Viewport | null | undefined,\n): DisplayScale | null {\n if (!viewport || !viewport.width || !viewport.height) return null;\n const rect = img.getBoundingClientRect();\n if (!rect.width || !rect.height) return null;\n return { sx: rect.width / viewport.width, sy: rect.height / viewport.height };\n}\n\nexport function scaleRect(bbox: Bbox, scale: DisplayScale): DisplayRect {\n return {\n x: bbox.x * scale.sx,\n y: bbox.y * scale.sy,\n width: bbox.width * scale.sx,\n height: bbox.height * scale.sy,\n };\n}\n\nexport function rectCenter(rect: DisplayRect): { x: number; y: number } {\n return { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 };\n}\n\n/**\n * Legacy entry point preserved verbatim for the IIFE bundle: capture-space\n * bbox + image + viewport → display-space center point.\n */\nexport function scaleBbox(\n bbox: Bbox | null | undefined,\n img: HTMLElement,\n viewport: Viewport | null | undefined,\n): { x: number; y: number } | null {\n if (!bbox) return null;\n const scale = getDisplayScale(img, viewport);\n if (!scale) return null;\n return rectCenter(scaleRect(bbox, scale));\n}\n\n/**\n * Quadratic-Bezier travel duration. Pulled out so it's unit-testable\n * without DOM. ``speed`` is in capture-space px per ms.\n */\nexport function travelDuration(\n from: { x: number; y: number },\n to: { x: number; y: number },\n speed: number,\n): number {\n const dx = to.x - from.x;\n const dy = to.y - from.y;\n const dist = Math.hypot(dx, dy);\n return Math.max(150, dist / (speed || 1.5));\n}\n\n/**\n * Compute a quadratic-Bezier control point offset 15% perpendicular to the\n * straight line between ``from`` and ``to``. Same formula the inline JS uses.\n */\nexport function bezierControlPoint(\n from: { x: number; y: number },\n to: { x: number; y: number },\n): { x: number; y: number } {\n const dx = to.x - from.x;\n const dy = to.y - from.y;\n const dist = Math.hypot(dx, dy);\n if (!dist) return { x: from.x, y: from.y };\n const mx = (from.x + to.x) / 2;\n const my = (from.y + to.y) / 2;\n const nx = -dy / dist;\n const ny = dx / dist;\n return { x: mx + nx * dist * 0.15, y: my + ny * dist * 0.15 };\n}\n\nexport interface AnimatorOptions {\n /** The stage element. Must contain ``.steppy-cursor``, ``.steppy-ripple``,\n * ``.steppy-kbd`` descendants and a single ``img`` (the screenshot). */\n stage: HTMLElement;\n timings?: Partial<CursorTimings>;\n /** Hook called when the cursor moves to or fires on a target. Used by the\n * Lit player to broadcast progress events. */\n onPhaseChange?: (phase: 'travel' | 'pre-action' | 'action' | 'post-action' | 'idle', target?: NormalizedTarget) => void;\n}\n\nexport class CursorAnimator {\n private stage: HTMLElement;\n private timings: CursorTimings;\n private onPhaseChange: AnimatorOptions['onPhaseChange'];\n private cursorEl: HTMLElement | null = null;\n private rippleEl: HTMLElement | null = null;\n private kbdEl: HTMLElement | null = null;\n private imgEl: HTMLElement | null = null;\n private currentPos: { x: number; y: number } = { x: 8, y: 8 };\n private aborted = false;\n\n constructor(opts: AnimatorOptions) {\n this.stage = opts.stage;\n this.timings = { ...DEFAULT_TIMINGS, ...(opts.timings ?? {}) };\n this.onPhaseChange = opts.onPhaseChange;\n this.refreshDom();\n }\n\n setTimings(t: Partial<CursorTimings>): void {\n this.timings = { ...this.timings, ...t };\n }\n\n /** Re-point the animator at a (possibly relocated) stage element and re-read\n * its children. Needed when a host re-mounts the stage subtree — e.g. the\n * Lit player switching presentation templates moves ``.steppy-stage`` to a\n * new DOM position, and the cached ``stage`` ref would otherwise go stale. */\n setStage(stage: HTMLElement): void {\n this.stage = stage;\n this.refreshDom();\n }\n\n abort(): void {\n this.aborted = true;\n }\n\n hide(): void {\n if (this.cursorEl) this.cursorEl.classList.remove('visible');\n if (this.kbdEl) this.kbdEl.classList.remove('visible');\n this.onPhaseChange?.('idle');\n }\n\n /** Re-read stage children. Call after the stage's DOM has been re-rendered. */\n refreshDom(): void {\n this.cursorEl = this.stage.querySelector<HTMLElement>('.steppy-cursor');\n this.rippleEl = this.stage.querySelector<HTMLElement>('.steppy-ripple');\n this.kbdEl = this.stage.querySelector<HTMLElement>('.steppy-kbd');\n this.imgEl = this.stage.querySelector<HTMLImageElement>('img');\n }\n\n /**\n * Normalize a frame's cursor behavior into an ordered list of targets.\n * ``type-multi`` expands into N targets of kind ``type``; single-target\n * variants produce a single entry. Returns ``[]`` when there's nothing to\n * animate (cursor is null or no targets).\n */\n static normalizeTargets(behavior: CursorBehavior | null): NormalizedTarget[] {\n if (!behavior) return [];\n if (behavior.kind === 'type-multi') {\n return behavior.targets.map(\n (t: MultiTarget): NormalizedTarget => ({\n bbox: t.bbox,\n value: t.value,\n selector: t.selector,\n kind: 'type',\n }),\n );\n }\n const tgt = behavior.target as SingleTarget;\n const value = behavior.kind === 'type' ? behavior.value : undefined;\n return [\n {\n bbox: tgt.bbox,\n value,\n selector: tgt.selector,\n kind: behavior.kind === 'click' ? 'click' : behavior.kind === 'hover' ? 'hover' : 'type',\n },\n ];\n }\n\n /** Wait for the screenshot ``<img>`` to be ready (load or error). */\n async waitImageReady(): Promise<void> {\n const img = this.imgEl as HTMLImageElement | null;\n if (!img) return;\n if (img.complete && img.naturalWidth) return;\n await new Promise<void>((resolve) => {\n const done = () => resolve();\n img.addEventListener('load', done, { once: true });\n img.addEventListener('error', done, { once: true });\n });\n }\n\n /**\n * Full sequence over every target in ``frame.cursor`` — historical\n * stepbystep behavior. No user interaction.\n */\n async animateFrame(frame: AnimatorFrame): Promise<void> {\n this.aborted = false;\n this.refreshDom();\n if (!this.cursorEl) return;\n if (!frame.cursor) {\n this.hide();\n return;\n }\n await this.waitImageReady();\n const targets = CursorAnimator.normalizeTargets(frame.cursor);\n this.currentPos = { x: 8, y: 8 };\n this.cursorEl.classList.add('visible');\n for (let i = 0; i < targets.length; i++) {\n if (this.aborted) return;\n await this.travelToTargetIndex(frame, targets, i);\n if (this.aborted) return;\n await this.playTargetActionIndex(frame, targets, i);\n if (this.aborted) return;\n await sleep(this.timings.post_action_ms);\n }\n }\n\n /**\n * Interactive mode: move the cursor to ``targetIndex`` and pulse it. Caller\n * waits for user input before invoking ``playTargetAction``.\n */\n async travelToTarget(frame: AnimatorFrame, targetIndex: number): Promise<void> {\n this.aborted = false;\n this.refreshDom();\n if (!this.cursorEl) return;\n if (!frame.cursor) {\n this.hide();\n return;\n }\n await this.waitImageReady();\n const targets = CursorAnimator.normalizeTargets(frame.cursor);\n this.cursorEl.classList.add('visible');\n await this.travelToTargetIndex(frame, targets, targetIndex);\n }\n\n /**\n * Interactive mode: run the action animation for ``targetIndex`` and the\n * post-action settling beat.\n */\n async playTargetAction(frame: AnimatorFrame, targetIndex: number): Promise<void> {\n this.aborted = false;\n this.refreshDom();\n if (!frame.cursor) return;\n const targets = CursorAnimator.normalizeTargets(frame.cursor);\n await this.playTargetActionIndex(frame, targets, targetIndex);\n if (this.aborted) return;\n await sleep(this.timings.post_action_ms);\n }\n\n /**\n * Pure helper: project a capture-space bbox into the displayed coordinate\n * space. Returns ``null`` when the image hasn't laid out yet. Exposed so\n * the Lit player can place hotspots without duplicating the math.\n */\n computeDisplayRect(bbox: Bbox | null | undefined, viewport: Viewport | null | undefined): DisplayRect | null {\n const img = this.imgEl;\n if (!img || !bbox) return null;\n const scale = getDisplayScale(img, viewport);\n if (!scale) return null;\n return scaleRect(bbox, scale);\n }\n\n // ── Internal building blocks ───────────────────────────────────────────\n\n private async travelToTargetIndex(\n frame: AnimatorFrame,\n targets: NormalizedTarget[],\n index: number,\n ): Promise<void> {\n const tgt = targets[index];\n const cursor = this.cursorEl;\n if (!tgt || !cursor) return;\n const center = scaleBbox(tgt.bbox, this.imgEl!, frame.viewport);\n if (!center) return;\n\n this.onPhaseChange?.('travel', tgt);\n await this.travelTo(cursor, this.currentPos, center);\n this.currentPos = center;\n\n this.onPhaseChange?.('pre-action', tgt);\n // Pulse: drop the class, force reflow to restart the animation, re-add.\n cursor.classList.remove('pulse');\n void cursor.offsetWidth;\n cursor.classList.add('pulse');\n await sleep(this.timings.pre_action_ms);\n cursor.classList.remove('pulse');\n }\n\n private async playTargetActionIndex(\n frame: AnimatorFrame,\n targets: NormalizedTarget[],\n index: number,\n ): Promise<void> {\n const tgt = targets[index];\n if (!tgt) return;\n const center = scaleBbox(tgt.bbox, this.imgEl!, frame.viewport) || this.currentPos;\n this.onPhaseChange?.('action', tgt);\n if (tgt.kind === 'click') {\n if (this.rippleEl) this.fireClick(this.rippleEl, center);\n await sleep(this.timings.action_ms);\n } else if (tgt.kind === 'type') {\n if (this.kbdEl) await this.typeValue(this.kbdEl, center, tgt.value);\n } else {\n // hover: linger\n await sleep(this.timings.action_ms);\n }\n this.onPhaseChange?.('post-action', tgt);\n }\n\n private async travelTo(\n cursor: HTMLElement,\n from: { x: number; y: number },\n to: { x: number; y: number },\n ): Promise<void> {\n const duration = travelDuration(from, to, this.timings.travel_speed_px_per_ms);\n const cp = bezierControlPoint(from, to);\n return new Promise<void>((resolve) => {\n const start = performance.now();\n const frame = (now: number) => {\n if (this.aborted) {\n resolve();\n return;\n }\n const raw = Math.min(1, (now - start) / duration);\n const t = easeInOut(raw);\n const x = (1 - t) * (1 - t) * from.x + 2 * (1 - t) * t * cp.x + t * t * to.x;\n const y = (1 - t) * (1 - t) * from.y + 2 * (1 - t) * t * cp.y + t * t * to.y;\n cursor.style.left = `${x}px`;\n cursor.style.top = `${y}px`;\n if (raw < 1) requestAnimationFrame(frame);\n else resolve();\n };\n requestAnimationFrame(frame);\n });\n }\n\n private fireClick(ripple: HTMLElement, to: { x: number; y: number }): void {\n ripple.style.left = `${to.x}px`;\n ripple.style.top = `${to.y}px`;\n ripple.classList.remove('fire');\n void ripple.offsetWidth;\n ripple.classList.add('fire');\n }\n\n private async typeValue(\n kbd: HTMLElement,\n to: { x: number; y: number },\n value: string | undefined,\n ): Promise<void> {\n kbd.style.left = `${to.x + 16}px`;\n kbd.style.top = `${to.y + 16}px`;\n kbd.textContent = '';\n kbd.classList.add('visible');\n const chars = (value ?? '').split('');\n const per = chars.length ? this.timings.action_ms / chars.length : this.timings.action_ms;\n for (const ch of chars) {\n if (this.aborted) break;\n kbd.textContent = (kbd.textContent ?? '') + ch;\n await sleep(per);\n }\n await sleep(80);\n kbd.classList.remove('visible');\n }\n}\n","/**\n * The string mechanism both players share: placeholder formatting, locale\n * lookup with a base-language rung, and the chrome vocabulary they have in\n * common (so \"Next\" reads the same in the guide and in the tour).\n */\n\n/** Replace ``{name}`` placeholders; unknown names stay as written. */\nexport function format(template: string, vars: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, key) => (key in vars ? String(vars[key]) : `{${key}}`));\n}\n\n/**\n * Bare language subtag, lowercased (``fr-BE`` -> ``fr``). Mirrors Python's\n * ``steppy.locales.base_language``: lenient, never validates.\n */\nexport function baseLanguage(tag: string): string {\n return tag.replace(/_/g, '-').split('-', 1)[0]!.toLowerCase();\n}\n\n/**\n * The key of ``keys`` to use for ``requested``: an exact match (case- and\n * ``_``/``-``-insensitive) first, then the requested tag's base language. The\n * query is only ever truncated, never widened — ``fr`` does not match ``fr-BE``.\n */\nexport function lookupLocale(keys: Iterable<string>, requested: string | null | undefined): string | null {\n if (!requested) return null;\n const norm = (tag: string) => tag.replace(/_/g, '-').toLowerCase();\n const list = [...keys];\n const wanted = norm(requested);\n const exact = list.find((key) => norm(key) === wanted);\n if (exact !== undefined) return exact;\n const base = baseLanguage(requested);\n return list.find((key) => norm(key) === base) ?? null;\n}\n\n/**\n * Bundled ``defaults`` for ``locale`` (else ``fallback``), with the host's\n * sparse per-locale ``overrides`` merged on top. Without an override the\n * bundled object itself is returned.\n */\nexport function resolveStrings<T extends object>(\n defaults: Record<string, T>,\n locale: string,\n overrides?: Partial<Record<string, Partial<T>>>,\n fallback = 'en',\n): T {\n const key = lookupLocale(Object.keys(defaults), locale);\n const base = (key !== null ? defaults[key] : undefined) ?? defaults[fallback]!;\n const overrideKey = overrides ? lookupLocale(Object.keys(overrides), locale) : null;\n const override = overrideKey !== null ? overrides![overrideKey] : undefined;\n return override ? { ...base, ...override } : base;\n}\n\nexport interface ChromeStrings {\n next: string;\n /** Placeholders: ``{current}`` and ``{total}``. */\n progress: string;\n}\n\n/** Chrome words the guide and the tour share, per bundled locale. */\nexport const CHROME_STRINGS: Record<'en' | 'fr' | 'nl' | 'de', ChromeStrings> = {\n en: { next: 'Next', progress: 'Step {current} of {total}' },\n fr: { next: 'Suivant', progress: 'Étape {current} sur {total}' },\n nl: { next: 'Volgende', progress: 'Stap {current} van {total}' },\n de: { next: 'Weiter', progress: 'Schritt {current} von {total}' },\n};\n","/**\n * UI strings for the player chrome (locale switcher, variant toggle, restart,\n * progress label). These are NOT the manifest's per-step ``text`` — they are\n * the static chrome labels that don't come from scenarios.\n *\n * Hosts override per-locale strings via the ``uiStrings`` property on\n * ``<steppy-guide>``. Sparse overrides are merged into the bundled defaults\n * per-locale. A regional locale falls back to its base language (``fr-BE``\n * reads the ``fr`` strings) before English.\n *\n * ``next`` and ``progress`` come from ``ui/strings.ts``'s ``CHROME_STRINGS``,\n * shared with the in-app tour overlay so both say the same thing.\n */\n\nimport { CHROME_STRINGS, resolveStrings } from '../ui/strings.js';\n\nexport { format } from '../ui/strings.js';\n\nexport interface UiStrings {\n restart: string;\n next: string;\n previous: string;\n /** Used as the accessible label for the hotspot button — interpolates the\n * step's text. Placeholder: ``{step}``. */\n hotspotLabel: string;\n /** Progress label, e.g. \"Step 3 of 7\". Placeholders: ``{current}`` and ``{total}``. */\n progress: string;\n /** Tooltip shown after a wrong click. */\n miss: string;\n loading: string;\n errorTitle: string;\n errorRetry: string;\n localeSwitcher: string;\n variantSwitcher: string;\n done: string;\n /** Accessible label for the presentation-template segmented control. */\n templateSwitcher: string;\n /** Segmented-control button labels for each presentation template. */\n templateOverlay: string;\n templateSidebar: string;\n templateInline: string;\n /** Sidebar meta line. Placeholders: ``{count}`` and ``{duration}``. */\n stepsMeta: string;\n /** Duration estimate (minutes). Placeholder: ``{minutes}``. */\n durationApprox: string;\n /** Duration estimate (seconds). Placeholder: ``{seconds}``. */\n durationSeconds: string;\n /** Sub-label shown on a completed step in the sidebar timeline. */\n stepPassed: string;\n}\n\nexport const DEFAULT_UI_STRINGS: Record<string, UiStrings> = {\n en: {\n ...CHROME_STRINGS.en,\n restart: 'Restart',\n previous: 'Previous',\n hotspotLabel: 'Click here to continue: {step}',\n miss: 'Try clicking the highlighted area.',\n loading: 'Loading guide…',\n errorTitle: 'Could not load this guide',\n errorRetry: 'Retry',\n localeSwitcher: 'Language',\n variantSwitcher: 'View',\n done: 'Done!',\n templateSwitcher: 'Presentation',\n templateOverlay: 'Overlay',\n templateSidebar: 'Sidebar',\n templateInline: 'Inline',\n stepsMeta: '{count} steps · {duration}',\n durationApprox: '~{minutes} min',\n durationSeconds: '~{seconds} s',\n stepPassed: 'Done',\n },\n fr: {\n ...CHROME_STRINGS.fr,\n restart: 'Recommencer',\n previous: 'Précédent',\n hotspotLabel: 'Cliquez ici pour continuer : {step}',\n miss: 'Essayez de cliquer sur la zone surlignée.',\n loading: 'Chargement du guide…',\n errorTitle: 'Impossible de charger ce guide',\n errorRetry: 'Réessayer',\n localeSwitcher: 'Langue',\n variantSwitcher: 'Affichage',\n done: 'Terminé !',\n templateSwitcher: 'Présentation',\n templateOverlay: 'Superposé',\n templateSidebar: 'Latéral',\n templateInline: 'En ligne',\n stepsMeta: '{count} étapes · {duration}',\n durationApprox: '~{minutes} min',\n durationSeconds: '~{seconds} s',\n stepPassed: 'Terminé',\n },\n nl: {\n ...CHROME_STRINGS.nl,\n restart: 'Opnieuw',\n previous: 'Vorige',\n hotspotLabel: 'Klik hier om door te gaan: {step}',\n miss: 'Probeer op de gemarkeerde zone te klikken.',\n loading: 'Gids laden…',\n errorTitle: 'Deze gids kon niet worden geladen',\n errorRetry: 'Opnieuw proberen',\n localeSwitcher: 'Taal',\n variantSwitcher: 'Weergave',\n done: 'Klaar!',\n templateSwitcher: 'Presentatie',\n templateOverlay: 'Overlay',\n templateSidebar: 'Zijbalk',\n templateInline: 'Inline',\n stepsMeta: '{count} stappen · {duration}',\n durationApprox: '~{minutes} min',\n durationSeconds: '~{seconds} s',\n stepPassed: 'Klaar',\n },\n de: {\n ...CHROME_STRINGS.de,\n restart: 'Neu starten',\n previous: 'Zurück',\n hotspotLabel: 'Hier klicken, um fortzufahren: {step}',\n miss: 'Versuchen Sie, auf den hervorgehobenen Bereich zu klicken.',\n loading: 'Anleitung wird geladen…',\n errorTitle: 'Diese Anleitung konnte nicht geladen werden',\n errorRetry: 'Erneut versuchen',\n localeSwitcher: 'Sprache',\n variantSwitcher: 'Ansicht',\n done: 'Fertig!',\n templateSwitcher: 'Darstellung',\n templateOverlay: 'Overlay',\n templateSidebar: 'Seitlich',\n templateInline: 'Inline',\n stepsMeta: '{count} Schritte · {duration}',\n durationApprox: '~{minutes} min',\n durationSeconds: '~{seconds} s',\n stepPassed: 'Fertig',\n },\n};\n\nexport function getUiStrings(\n locale: string,\n overrides: Partial<Record<string, Partial<UiStrings>>> | undefined,\n): UiStrings {\n return resolveStrings(DEFAULT_UI_STRINGS, locale, overrides, 'en');\n}\n","/**\n * Bubble placement next to a highlighted rect, shared by the guide player's\n * tooltip and the in-app tour popover. Pure math, no DOM.\n *\n * Called without options, ``placeTooltip`` is the guide's historical rule,\n * byte for byte (guard: ``test/ui/placement.test.ts`` against a frozen copy).\n * With options it honours a preferred side, keeps a margin from the stage\n * edges, steers clear of rects to ``avoid`` and reports whether the bubble\n * could not avoid covering the hotspot.\n *\n * ``Rect`` is declared here rather than imported from ``cursor/`` so the tour's\n * type declarations do not pull the cursor animator in.\n */\n\nexport interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport type TooltipSide = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TooltipPlacement {\n side: TooltipSide;\n /** Top-left offset, in display space, of the tooltip's bounding box. */\n x: number;\n y: number;\n /** Only with options: true when no side fits and the bubble covers the hotspot. */\n overlaps?: boolean;\n}\n\nexport interface PlaceOptions {\n /** Side to try first; ``auto`` (the default) uses the historical bias. */\n preferred?: TooltipSide | 'auto';\n /** Distance kept from every stage edge (default 0). */\n margin?: number;\n /** Rects a fitting side should not cover (e.g. the next step's target). */\n avoid?: readonly Rect[];\n}\n\ntype Size = { width: number; height: number };\n\nconst OPPOSITE: Record<TooltipSide, TooltipSide> = { top: 'bottom', bottom: 'top', left: 'right', right: 'left' };\n\n/**\n * Decide which side of the hotspot the tooltip should sit on. Picks the side\n * with the most room, then biases toward ``bottom`` for ties (matches\n * Guideflow's default).\n *\n * All inputs and outputs are in display space (the same coordinate frame as\n * the hotspot rect).\n */\nexport function placeTooltip(hotspot: Rect, tooltip: Size, stage: Size, gap = 8, opts?: PlaceOptions): TooltipPlacement {\n if (opts === undefined) return legacyPlace(hotspot, tooltip, stage, gap);\n return placeWithOptions(hotspot, tooltip, stage, gap, opts);\n}\n\nfunction legacyPlace(hotspot: Rect, tooltip: Size, stage: Size, gap: number): TooltipPlacement {\n const above = hotspot.y;\n const below = stage.height - (hotspot.y + hotspot.height);\n const left = hotspot.x;\n const right = stage.width - (hotspot.x + hotspot.width);\n\n // Prefer vertical placement (above or below). Only fall back to horizontal\n // when neither vertical side has room for the tooltip's height plus gap.\n const verticalNeeded = tooltip.height + gap;\n const horizontalNeeded = tooltip.width + gap;\n const bestVertical: { side: TooltipSide; room: number } =\n below >= above ? { side: 'bottom', room: below } : { side: 'top', room: above };\n let pick: TooltipSide;\n if (bestVertical.room >= verticalNeeded) {\n pick = bestVertical.side;\n } else {\n const bestHorizontal: { side: TooltipSide; room: number } =\n right >= left ? { side: 'right', room: right } : { side: 'left', room: left };\n pick = bestHorizontal.room >= horizontalNeeded ? bestHorizontal.side : bestVertical.side;\n }\n\n const cx = hotspot.x + hotspot.width / 2;\n const cy = hotspot.y + hotspot.height / 2;\n\n let x = 0;\n let y = 0;\n if (pick === 'bottom') {\n x = clamp(cx - tooltip.width / 2, 0, stage.width - tooltip.width);\n y = Math.min(hotspot.y + hotspot.height + gap, stage.height - tooltip.height);\n } else if (pick === 'top') {\n x = clamp(cx - tooltip.width / 2, 0, stage.width - tooltip.width);\n y = Math.max(0, hotspot.y - tooltip.height - gap);\n } else if (pick === 'right') {\n x = Math.min(hotspot.x + hotspot.width + gap, stage.width - tooltip.width);\n y = clamp(cy - tooltip.height / 2, 0, stage.height - tooltip.height);\n } else {\n x = Math.max(0, hotspot.x - tooltip.width - gap);\n y = clamp(cy - tooltip.height / 2, 0, stage.height - tooltip.height);\n }\n return { side: pick, x, y };\n}\n\nfunction placeWithOptions(hotspot: Rect, tooltip: Size, stage: Size, gap: number, opts: PlaceOptions): TooltipPlacement {\n const margin = opts.margin ?? 0;\n const room: Record<TooltipSide, number> = {\n top: hotspot.y - margin,\n bottom: stage.height - (hotspot.y + hotspot.height) - margin,\n left: hotspot.x - margin,\n right: stage.width - (hotspot.x + hotspot.width) - margin,\n };\n const order = sideOrder(room, opts.preferred ?? 'auto');\n const fits = (side: TooltipSide): boolean => {\n const vertical = side === 'top' || side === 'bottom';\n const main = vertical ? tooltip.height : tooltip.width;\n const cross = vertical ? tooltip.width : tooltip.height;\n const crossStage = vertical ? stage.width : stage.height;\n return room[side] >= main + gap && cross <= crossStage - 2 * margin;\n };\n const place = (side: TooltipSide): TooltipPlacement => {\n const cx = hotspot.x + hotspot.width / 2;\n const cy = hotspot.y + hotspot.height / 2;\n const xCentred = clamp(cx - tooltip.width / 2, margin, stage.width - tooltip.width - margin);\n const yCentred = clamp(cy - tooltip.height / 2, margin, stage.height - tooltip.height - margin);\n if (side === 'bottom') return { side, x: xCentred, y: hotspot.y + hotspot.height + gap };\n if (side === 'top') return { side, x: xCentred, y: hotspot.y - gap - tooltip.height };\n if (side === 'right') return { side, x: hotspot.x + hotspot.width + gap, y: yCentred };\n return { side, x: hotspot.x - gap - tooltip.width, y: yCentred };\n };\n const avoid = opts.avoid ?? [];\n const hits = (p: TooltipPlacement): boolean =>\n avoid.some((r) => intersects({ x: p.x, y: p.y, width: tooltip.width, height: tooltip.height }, r));\n\n const fitting = order.filter(fits).map(place);\n const clear = fitting.filter((p) => !hits(p));\n const chosen = clear[0] ?? fitting[0];\n if (chosen) return { ...chosen, overlaps: false };\n\n // Nothing fits: best effort on the first side in order, kept inside the stage.\n const best = place(order[0]!);\n const x = clamp(best.x, margin, stage.width - tooltip.width - margin);\n const y = clamp(best.y, margin, stage.height - tooltip.height - margin);\n const overlaps = intersects({ x, y, width: tooltip.width, height: tooltip.height }, hotspot);\n return { side: best.side, x, y, overlaps };\n}\n\nfunction sideOrder(room: Record<TooltipSide, number>, preferred: TooltipSide | 'auto'): TooltipSide[] {\n if (preferred === 'auto') {\n const vertical: TooltipSide[] = room.bottom >= room.top ? ['bottom', 'top'] : ['top', 'bottom'];\n const horizontal: TooltipSide[] = room.right >= room.left ? ['right', 'left'] : ['left', 'right'];\n return [...vertical, ...horizontal];\n }\n const rest = (['top', 'bottom', 'left', 'right'] as TooltipSide[])\n .filter((s) => s !== preferred && s !== OPPOSITE[preferred])\n .sort((a, b) => room[b] - room[a]);\n return [preferred, OPPOSITE[preferred], ...rest];\n}\n\nfunction clamp(v: number, lo: number, hi: number): number {\n return Math.max(lo, Math.min(hi, v));\n}\n\n/** True when ``a`` and ``b`` share a positive area. */\nexport function intersects(a: Rect, b: Rect): boolean {\n return a.x < b.x + b.width && b.x < a.x + a.width && a.y < b.y + b.height && b.y < a.y + a.height;\n}\n\n/** The overlap of ``a`` and ``b``, or ``null`` when they share no area. */\nexport function intersect(a: Rect, b: Rect): Rect | null {\n const x = Math.max(a.x, b.x);\n const y = Math.max(a.y, b.y);\n const right = Math.min(a.x + a.width, b.x + b.width);\n const bottom = Math.min(a.y + a.height, b.y + b.height);\n return right > x && bottom > y ? { x, y, width: right - x, height: bottom - y } : null;\n}\n\n/** The smallest rect containing both. */\nexport function union(a: Rect, b: Rect): Rect {\n const x = Math.min(a.x, b.x);\n const y = Math.min(a.y, b.y);\n return {\n x,\n y,\n width: Math.max(a.x + a.width, b.x + b.width) - x,\n height: Math.max(a.y + a.height, b.y + b.height) - y,\n };\n}\n\n/** ``r`` grown by ``pad`` on every side. */\nexport function inflate(r: Rect, pad: number): Rect {\n return { x: r.x - pad, y: r.y - pad, width: r.width + 2 * pad, height: r.height + 2 * pad };\n}\n\nexport function containsPoint(r: Rect, x: number, y: number): boolean {\n return x >= r.x && x <= r.x + r.width && y >= r.y && y <= r.y + r.height;\n}\n","/**\n * Pure positioning helpers — hotspot rect derivation (and, re-exported from\n * ``ui/placement.ts``, tooltip placement).\n * No DOM dependencies in the math; one of the functions reads\n * ``getBoundingClientRect`` from a passed element, but the placement math is\n * separate and unit-testable.\n */\nimport type { Bbox, DisplayRect, Viewport } from '../cursor/types.js';\nimport { getDisplayScale, scaleRect } from '../cursor/animator.js';\n\n// Tooltip placement is shared with the in-app tour overlay, which must not\n// pull the cursor animator in; it lives in ui/placement.ts.\nexport { placeTooltip, type TooltipPlacement, type TooltipSide } from '../ui/placement.js';\n\n/**\n * Project a capture-space bbox into the displayed rect over an ``img``.\n * Returns ``null`` when the image hasn't laid out or the viewport is unknown.\n */\nexport function computeHotspotRect(\n img: HTMLElement,\n viewport: Viewport | null | undefined,\n bbox: Bbox | null | undefined,\n): DisplayRect | null {\n if (!bbox) return null;\n const scale = getDisplayScale(img, viewport);\n if (!scale) return null;\n return scaleRect(bbox, scale);\n}\n\n/**\n * Returns true when ``(x, y)`` (display-space) falls inside the hotspot rect.\n * Used to classify clicks as ``correct`` or ``miss``.\n */\nexport function isInsideRect(\n rect: DisplayRect,\n point: { x: number; y: number },\n): boolean {\n return (\n point.x >= rect.x &&\n point.x <= rect.x + rect.width &&\n point.y >= rect.y &&\n point.y <= rect.y + rect.height\n );\n}\n","/**\n * Inline-markdown renderer shared by the guide player and the in-app tour\n * overlay.\n *\n * Mirrors the inline subset of the server-side ``markdown-it`` ``renderInline``\n * filter (``src/steppy/guide.py``, configured ``{html:false, breaks:true,\n * linkify:true}``) used by the step-by-step guide, so the interactive player\n * renders the same content the static guide does:\n *\n * - **bold** / __bold__ , *italic* / _italic_ (recursive — emphasis nests)\n * - `inline code`\n * - [label](url) links — label is parsed recursively\n * - autolinked bare URLs (``https://…`` / ``www.…``) and emails (linkify)\n * - hard line breaks: every ``\\n`` becomes ``<br>`` (``breaks:true``)\n *\n * The manifest carries raw text (it is reused for ``alt``/``aria-label``\n * attributes, where HTML must not appear), so emphasis is rendered here, on the\n * client, only at the visible display sites.\n *\n * Returns an array of literal-string + Lit ``TemplateResult`` parts, meant to be\n * interpolated into an existing parent element (``${renderInlineMarkdown(text)}``,\n * the same shape as ``${items.map(...)}``). Literal text and ``href`` values stay\n * auto-escaped by Lit, and which link URLs become links is decided by a\n * ``LinkPolicy`` — so it is XSS-safe by construction, with no ``unsafeHTML``.\n *\n * Link policies: the guide keeps its historical set (http/https/mailto, a\n * site-relative path, an anchor) minus protocol-relative ``//host`` and\n * ``/\\host``, which browsers resolve to another origin. The tour overlay passes\n * a stricter policy of its own (same-origin routes and the guide origin only,\n * no autolinks). A URL the policy refuses leaves the whole ``[label](url)``\n * literal, exactly as an unmatched link always rendered.\n *\n * Scope is intentionally inline-only (no block constructs — ``renderInline`` does\n * not render lists/headings/blockquotes either, so there is no parity gap). The\n * regex emphasis rule is not markdown-it's full delimiter-run algorithm, so a few\n * pathological mixed-nesting cases (e.g. *italic wrapping **bold***) are not\n * matched; the common cases — bold-containing-italic, adjacent emphasis, links\n * with emphasised labels — all work.\n */\n\nimport { html, type TemplateResult } from 'lit';\n\nexport type MarkdownNode = TemplateResult | string;\n\n/** What a ``[label](url)`` becomes: a new-tab link, or a same-tab one the host routes. */\nexport type LinkTarget =\n | { kind: 'external'; href: string }\n | { kind: 'internal'; href: string; onActivate: (event: MouseEvent) => void };\n\nexport interface LinkPolicy {\n /** The link for ``url``, or ``null`` to leave the markdown literal. */\n link(url: string): LinkTarget | null;\n /** Whether bare URLs and e-mail addresses are turned into links (linkify). */\n autolink: boolean;\n}\n\n// The guide's historical link set, minus protocol-relative \"//host\" and \"/\\host\".\nconst SAFE_GUIDE_URL = /^(?:https?:\\/\\/[^\\s)]+|mailto:[^\\s)]+|\\/(?![/\\\\])[^\\s)]*|#[^\\s)]*)$/;\n\nexport const GUIDE_LINK_POLICY: LinkPolicy = {\n autolink: true,\n link: (url) => (SAFE_GUIDE_URL.test(url) ? { kind: 'external', href: url } : null),\n};\n\n// 1 code | 2 link-label 3 link-url | 4 bold-delim 5 bold | 6 em-delim 7 em | 8 url/www | 9 email\n// The link URL is any run up to \")\" without whitespace; the policy decides\n// whether it becomes a link.\nconst INLINE_SRC =\n '`([^`]+)`|\\\\[([^\\\\]]+)\\\\]\\\\(([^\\\\s)]+)\\\\)|(\\\\*\\\\*|__)(\\\\S(?:.*?\\\\S)?)\\\\4|(\\\\*|_)([^*_\\\\s](?:[^*_]*?[^*_\\\\s])?)\\\\6|(https?:\\\\/\\\\/[^\\\\s<>()]+|www\\\\.[^\\\\s<>()]+)|([\\\\w.+-]+@[\\\\w-]+\\\\.[\\\\w.-]+\\\\w)';\n\nexport function renderInlineMarkdown(src: string, policy: LinkPolicy = GUIDE_LINK_POLICY): MarkdownNode[] {\n const parts: MarkdownNode[] = [];\n // Hard line breaks: breaks:true turns every \\n into <br>.\n const pushText = (t: string) =>\n t.split('\\n').forEach((ln, i) => {\n if (i > 0) parts.push(html`<br />`);\n if (ln) parts.push(ln);\n });\n\n // A fresh regex per call: this function recurses (into emphasis/link content),\n // and a single shared /g regex would have its lastIndex clobbered by the inner\n // call, corrupting this loop. A local instance keeps each level independent.\n const re = new RegExp(INLINE_SRC, 'g');\n let last = 0;\n let m: RegExpExecArray | null;\n while ((m = re.exec(src))) {\n if (m[2] != null) {\n const target = policy.link(m[3]!);\n if (!target) {\n // Refused: no match at this position, exactly as if the link pattern\n // had not matched — scanning resumes one character later.\n re.lastIndex = m.index + 1;\n continue;\n }\n if (m.index > last) pushText(src.slice(last, m.index));\n parts.push(\n target.kind === 'external'\n ? html`<a href=${target.href} target=\"_blank\" rel=\"noopener noreferrer\"\n >${renderInlineMarkdown(m[2], policy)}</a\n >`\n : html`<a href=${target.href} @click=${target.onActivate}>${renderInlineMarkdown(m[2], policy)}</a>`,\n );\n last = m.index + m[0].length;\n continue;\n }\n if ((m[8] != null || m[9] != null) && !policy.autolink) continue; // stays literal text\n if (m.index > last) pushText(src.slice(last, m.index));\n if (m[1] != null) {\n parts.push(html`<code>${m[1]}</code>`); // code span: no recursion\n } else if (m[4] != null) {\n parts.push(html`<strong>${renderInlineMarkdown(m[5]!, policy)}</strong>`);\n } else if (m[6] != null) {\n parts.push(html`<em>${renderInlineMarkdown(m[7]!, policy)}</em>`);\n } else if (m[8] != null) {\n // Autolink; trim trailing sentence punctuation back out as text (linkify behavior).\n const raw = m[8];\n const trail = (raw.match(/[.,;:!?]+$/) ?? [''])[0];\n const url = trail ? raw.slice(0, -trail.length) : raw;\n const href = url.startsWith('www.') ? `https://${url}` : url;\n parts.push(html`<a href=${href} target=\"_blank\" rel=\"noopener noreferrer\">${url}</a>`);\n if (trail) pushText(trail);\n } else if (m[9] != null) {\n parts.push(html`<a href=${`mailto:${m[9]}`}>${m[9]}</a>`);\n }\n last = m.index + m[0].length;\n }\n if (last < src.length) pushText(src.slice(last));\n return parts;\n}\n","import type { CaptureContent, GuideManifest, ManifestStep } from './schema.js';\n\n/**\n * Resolve a step's guide text for one (locale, layout).\n *\n * Two levels, no partials: a `Capture` either carries a full `content`\n * override — the desktop/mobile twin-branch case, where the same logical step\n * is authored once per layout — or it inherits the step-level value.\n *\n * The caller must pass the layout key it also read the *frame* from. Content\n * and frame coming from the same `Capture` is the invariant that keeps a\n * viewer from ever seeing one layout's instructions above another layout's\n * screenshot; see `captureLayoutKey`.\n */\nexport function resolveStepContent(step: ManifestStep, locale: string, layoutKey: string): CaptureContent {\n const override = step.captures[locale]?.[layoutKey]?.content;\n if (override) return override;\n return {\n title: step.title?.[locale] ?? null,\n text: step.text[locale] ?? '',\n subtitle: step.subtitle?.[locale] ?? null,\n };\n}\n\n/**\n * The layout key a render should read `step.captures[locale]` under.\n *\n * Prefers the requested key, then the manifest default, then whatever the bag\n * actually holds. The schema guarantees the full (locale × layout)\n * cross-product, so the first branch is the live path; the rest only matter\n * when a host sets an unrecognised `variant`, and they exist so the fallback\n * lands on the manifest's own default rather than on object insertion order.\n */\nexport function captureLayoutKey(\n step: ManifestStep,\n locale: string,\n requested: string | null,\n manifest: Pick<GuideManifest, 'layouts' | 'defaultLayout'>,\n): string | null {\n const bag = step.captures[locale];\n if (!bag) return null;\n if (requested && requested in bag) return requested;\n const fallback = manifest.defaultLayout ?? manifest.layouts[0] ?? '_';\n if (fallback in bag) return fallback;\n return Object.keys(bag)[0] ?? null;\n}\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { z } from 'zod';\n\nexport const SUPPORTED_MAJOR_VERSION = 1;\n\nconst VERSION_RE = /^\\d+\\.\\d+$/;\n\nconst NonEmptyString = z.string().min(1);\n\nconst Bbox = z\n .object({\n x: z.number(),\n y: z.number(),\n width: z.number().positive(),\n height: z.number().positive(),\n })\n .strict();\n\nconst CaptureSize = z\n .object({\n width: z.number().positive(),\n height: z.number().positive(),\n })\n .strict();\n\nconst SingleTarget = z\n .object({\n selector: NonEmptyString.optional(),\n bbox: Bbox,\n })\n .strict();\n\nconst MultiTarget = z\n .object({\n selector: NonEmptyString.optional(),\n bbox: Bbox,\n value: z.string().optional(),\n })\n .strict();\n\nconst CursorBehavior = z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('click'), target: SingleTarget }).strict(),\n z.object({ kind: z.literal('hover'), target: SingleTarget }).strict(),\n z\n .object({\n kind: z.literal('type'),\n target: SingleTarget,\n value: z.string().optional(),\n })\n .strict(),\n z\n .object({\n kind: z.literal('type-multi'),\n targets: z.array(MultiTarget).min(1),\n })\n .strict(),\n]);\n\nconst Frame = z\n .object({\n screenshot: NonEmptyString,\n captureSize: CaptureSize,\n cursor: CursorBehavior.nullable(),\n })\n .strict();\n\n/**\n * Layout-varying guide text for one (locale, layout) cell.\n *\n * Present only when this cell's wording differs from the step-level value —\n * the desktop/mobile twin-branch pattern, where one logical step is authored\n * once per layout because the DOM path differs (\"click the row of the table\"\n * vs \"tap the card\"). Absent ⇒ inherit the step.\n *\n * Plain strings, not `LocalizedString`: `captures[locale]` is already\n * locale-scoped. All three fields are required together, so an explicit \"this\n * layout has no subtitle\" stays distinguishable from \"inherit the subtitle\" —\n * a partial override would make the sidebar show one layout's heading above\n * another layout's body.\n */\nconst CaptureContent = z\n .object({\n title: z.string().nullable(),\n text: z.string(),\n subtitle: z.string().nullable(),\n })\n .strict();\n\nconst Capture = z\n .object({\n frames: z.array(Frame).min(1),\n content: CaptureContent.optional(),\n })\n .strict();\n\nconst LayoutMap = z.record(NonEmptyString, Capture);\nconst LocaleMap = z.record(NonEmptyString, LayoutMap);\n\nconst LocalizedString = z.record(NonEmptyString, z.string().nullable());\nconst LocalizedRequired = z.record(NonEmptyString, NonEmptyString);\n\nconst ManifestAction = z.enum([\n 'navigate',\n 'click',\n 'fill',\n 'fill-form',\n 'select',\n 'wait',\n 'wait-for',\n 'wait-for-text',\n 'scroll',\n 'hover',\n 'keyboard',\n 'assert',\n 'custom',\n 'login',\n 'auth0-login',\n 'capture',\n 'upload',\n 'select-option',\n 'confirm',\n 'fill-date',\n 'toggle',\n 'pick-date',\n 'pick-time',\n 'expand',\n 'call',\n]);\n\nconst ManifestStep = z\n .object({\n id: NonEmptyString,\n index: z.number().int().positive(),\n action: ManifestAction,\n interactive: z.boolean(),\n screenshotWhen: z.enum(['before', 'after']),\n waitAfter: z.number().int().nonnegative(),\n // Short per-step heading (e.g. for the sidebar timeline). Optional + nullable\n // for back-compat with already-built manifests and locales lacking guide-text;\n // the player falls back to ``text`` when absent.\n title: LocalizedString.optional(),\n text: LocalizedString,\n subtitle: LocalizedString.optional(),\n captures: LocaleMap,\n })\n .strict();\n\nexport const CURSOR_MODES = ['arrow', 'hotspot', 'off'] as const;\nconst CursorModeSchema = z.enum(CURSOR_MODES);\n\nexport const TEMPLATE_MODES = ['sidebar', 'overlay', 'inline'] as const;\nconst TemplateModeSchema = z.enum(TEMPLATE_MODES);\n\nconst CursorTimings = z\n .object({\n pre_action_ms: z.number().int().positive(),\n action_ms: z.number().int().positive(),\n post_action_ms: z.number().int().nonnegative(),\n travel_speed_px_per_ms: z.number().positive(),\n // Optional. Absent ⇒ host attribute or 'arrow' default. See <steppy-guide>'s\n // cursor property for the precedence rules.\n mode: CursorModeSchema.optional(),\n })\n .strict();\n\nexport const GuideManifestSchema = z\n .object({\n version: z.string().regex(VERSION_RE, 'version must match \"<major>.<minor>\"'),\n slug: NonEmptyString,\n mode: z.literal('interactive'),\n role: NonEmptyString,\n title: LocalizedRequired,\n locales: z.array(NonEmptyString).min(1),\n defaultLocale: NonEmptyString,\n layouts: z.array(NonEmptyString),\n defaultLayout: NonEmptyString.nullable(),\n cursor: CursorTimings,\n // Per-guide default presentation template. Optional for back-compat; the\n // player resolves attr → persisted → this → 'overlay'.\n defaultTemplate: TemplateModeSchema.optional(),\n steps: z.array(ManifestStep).min(1),\n })\n .strict()\n .superRefine((manifest, ctx) => {\n if (!manifest.locales.includes(manifest.defaultLocale)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['defaultLocale'],\n message: `defaultLocale '${manifest.defaultLocale}' must appear in locales`,\n });\n }\n\n if (manifest.layouts.length === 0) {\n if (manifest.defaultLayout !== null) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['defaultLayout'],\n message: 'defaultLayout must be null when layouts is empty',\n });\n }\n } else {\n if (manifest.defaultLayout === null) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['defaultLayout'],\n message: 'defaultLayout must be set when layouts is non-empty',\n });\n } else if (!manifest.layouts.includes(manifest.defaultLayout)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['defaultLayout'],\n message: `defaultLayout '${manifest.defaultLayout}' must appear in layouts`,\n });\n }\n }\n\n for (const locale of manifest.locales) {\n if (!(locale in manifest.title)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['title', locale],\n message: `title missing for locale '${locale}'`,\n });\n }\n }\n\n // Layout iteration key: empty layout list ⇒ one synthetic key (\"\"),\n // matching how the build emits a single \"_\" layout slot for layout-less guides.\n const layoutKeys = manifest.layouts.length > 0 ? manifest.layouts : ['_'];\n\n const localeSet = new Set(manifest.locales);\n const layoutSet = new Set(layoutKeys);\n\n manifest.steps.forEach((step, idx) => {\n for (const locale of manifest.locales) {\n const localeBag = step.captures[locale];\n if (!localeBag) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['steps', idx, 'captures', locale],\n message: `step ${step.index}: missing captures for locale '${locale}'`,\n });\n continue;\n }\n for (const layout of layoutKeys) {\n if (!(layout in localeBag)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['steps', idx, 'captures', locale, layout],\n message: `step ${step.index}: missing captures for locale '${locale}' / layout '${layout}'`,\n });\n continue;\n }\n // An override that overrides the text with nothing renders a blank\n // caption on that layout only — invisible in the default layout the\n // author is looking at. The step-level `text` has no such hole\n // because it is `LocalizedString`, checked below.\n if (localeBag[layout]!.content?.text === '') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['steps', idx, 'captures', locale, layout, 'content', 'text'],\n message: `step ${step.index}: empty content.text for locale '${locale}' / layout '${layout}'`,\n });\n }\n }\n if (!(locale in step.text)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['steps', idx, 'text', locale],\n message: `step ${step.index}: missing text for locale '${locale}'`,\n });\n }\n }\n for (const locale of Object.keys(step.captures)) {\n if (!localeSet.has(locale)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['steps', idx, 'captures', locale],\n message: `step ${step.index}: unexpected locale '${locale}' in captures (not in manifest.locales)`,\n });\n continue;\n }\n for (const layout of Object.keys(step.captures[locale]!)) {\n if (!layoutSet.has(layout)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['steps', idx, 'captures', locale, layout],\n message: `step ${step.index}: unexpected layout '${layout}' (not in manifest.layouts)`,\n });\n }\n }\n }\n for (const locale of Object.keys(step.text)) {\n if (!localeSet.has(locale)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['steps', idx, 'text', locale],\n message: `step ${step.index}: unexpected locale '${locale}' in text`,\n });\n }\n }\n if (step.title) {\n for (const locale of Object.keys(step.title)) {\n if (!localeSet.has(locale)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['steps', idx, 'title', locale],\n message: `step ${step.index}: unexpected locale '${locale}' in title`,\n });\n }\n }\n }\n if (step.subtitle) {\n for (const locale of Object.keys(step.subtitle)) {\n if (!localeSet.has(locale)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['steps', idx, 'subtitle', locale],\n message: `step ${step.index}: unexpected locale '${locale}' in subtitle`,\n });\n }\n }\n }\n });\n\n for (const locale of Object.keys(manifest.title)) {\n if (!localeSet.has(locale)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['title', locale],\n message: `unexpected locale '${locale}' in title (not in manifest.locales)`,\n });\n }\n }\n });\n\nexport type GuideManifest = z.infer<typeof GuideManifestSchema>;\nexport type ManifestStep = z.infer<typeof ManifestStep>;\nexport type Frame = z.infer<typeof Frame>;\nexport type Capture = z.infer<typeof Capture>;\nexport type CaptureContent = z.infer<typeof CaptureContent>;\nexport type Bbox = z.infer<typeof Bbox>;\nexport type CaptureSize = z.infer<typeof CaptureSize>;\nexport type CursorBehavior = z.infer<typeof CursorBehavior>;\nexport type CursorTimings = z.infer<typeof CursorTimings>;\nexport type CursorMode = z.infer<typeof CursorModeSchema>;\nexport type TemplateMode = z.infer<typeof TemplateModeSchema>;\nexport type ManifestAction = z.infer<typeof ManifestAction>;\n","import { ZodError } from 'zod';\nimport {\n GuideManifestSchema,\n SUPPORTED_MAJOR_VERSION,\n type GuideManifest,\n} from './schema.js';\n\nexport type ParseErrorCode =\n | 'invalid_json'\n | 'version_missing'\n | 'version_unsupported'\n | 'schema_invalid'\n | 'fetch_failed'\n | 'screenshot_missing'\n | 'bad_attribute';\n\nexport interface ParseError {\n code: ParseErrorCode;\n message: string;\n issues?: Array<{ path: string; message: string }>;\n}\n\nexport type ParseResult =\n | { ok: true; manifest: GuideManifest }\n | { ok: false; error: ParseError };\n\n/**\n * Parse and validate a manifest from either a JSON string or a pre-parsed\n * value. Performs major-version compatibility check before structural\n * validation so version errors are reported with a clearer code.\n */\nexport function parseManifest(input: unknown): ParseResult {\n let value: unknown = input;\n if (typeof input === 'string') {\n try {\n value = JSON.parse(input);\n } catch (err) {\n return {\n ok: false,\n error: {\n code: 'invalid_json',\n message: err instanceof Error ? err.message : 'invalid JSON',\n },\n };\n }\n }\n\n const version = readVersion(value);\n if (version === null) {\n return {\n ok: false,\n error: {\n code: 'version_missing',\n message: 'manifest is missing a top-level \"version\" string',\n },\n };\n }\n const [majorStr] = version.split('.');\n const major = Number.parseInt(majorStr ?? '', 10);\n if (!Number.isFinite(major)) {\n return {\n ok: false,\n error: {\n code: 'version_missing',\n message: `manifest version \"${version}\" is not a valid <major>.<minor> string`,\n },\n };\n }\n if (major !== SUPPORTED_MAJOR_VERSION) {\n return {\n ok: false,\n error: {\n code: 'version_unsupported',\n message: `manifest version ${version} is not supported (player handles major ${SUPPORTED_MAJOR_VERSION}.x)`,\n },\n };\n }\n\n const result = GuideManifestSchema.safeParse(value);\n if (!result.success) {\n return {\n ok: false,\n error: schemaError(result.error),\n };\n }\n return { ok: true, manifest: result.data };\n}\n\nfunction readVersion(value: unknown): string | null {\n if (value === null || typeof value !== 'object') return null;\n const v = (value as { version?: unknown }).version;\n return typeof v === 'string' ? v : null;\n}\n\nfunction schemaError(err: ZodError): ParseError {\n return {\n code: 'schema_invalid',\n message: 'manifest failed schema validation',\n issues: err.issues.map((issue) => ({\n path: issue.path.map(String).join('.'),\n message: issue.message,\n })),\n };\n}\n","/**\n * Default look values shared by the guide player and the in-app tour overlay.\n *\n * Constants only, never data: they are interpolated into the ``css`` tagged\n * templates with ``cssValue`` (Lit's ``unsafeCSS``), which concatenates the\n * value verbatim — ``baseStyles.cssText`` is byte-identical to the literal\n * stylesheet it replaced (guard: ``test/ui/guide-styles-stable.test.ts``).\n */\n\nimport { unsafeCSS, type CSSResult } from 'lit';\n\n/** The guide's palette (``--steppy-*`` defaults in ``templates/base-styles.ts``). */\nexport const PALETTE = {\n bg: '#f4f1ea',\n surface: '#fbf9f4',\n chromeBg: '#efece3',\n fg: '#1f1d1a',\n muted: '#8a857c',\n border: '#e1ddd1',\n accent: '#d24f2c',\n accentWeak: 'rgba(210, 79, 44, 0.35)',\n success: '#3a7d44',\n} as const;\n\n/** System font stacks only: offline, no CDN. */\nexport const FONTS = {\n serif: \"ui-serif, Georgia, 'Times New Roman', serif\",\n sans: \"system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif\",\n mono: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace',\n} as const;\n\n/** The dark bubble both players draw next to a target (guide tooltip, tour popover). */\nexport const BUBBLE_LOOK = {\n padding: '8px 12px',\n radius: '6px',\n maxWidth: '280px',\n fontSize: '14px',\n lineHeight: '1.4',\n shadow: '0 4px 12px rgba(0, 0, 0, 0.2)',\n} as const;\n\nexport const BUTTON_LOOK = {\n radius: '4px',\n padding: '4px 10px',\n} as const;\n\n/**\n * Tour overlay defaults. The accent differs from the guide's on purpose:\n * ``#d24f2c`` measures 4.29:1 against white text, below WCAG AA for the\n * overlay's buttons; ``#a8410e`` measures 6.13:1 (guard: ``test/tour/small-modules.test.ts``).\n */\nexport const TOUR_DEFAULTS = {\n bubbleBg: PALETTE.fg,\n bubbleFg: PALETTE.surface,\n muted: '#c9c5bd',\n accent: '#a8410e',\n accentFg: '#ffffff',\n focus: '#f09a6a',\n scrim: 'rgba(31, 29, 26, 0.45)',\n radius: BUBBLE_LOOK.radius,\n} as const;\n\n/** A token value inside a ``css`` template (inserted verbatim, never data). */\nexport const cssValue = (value: string | number): CSSResult => unsafeCSS(value);\n","/**\n * Shared player styles: design tokens, the screenshot stage + cursor/ripple/\n * kbd/hotspot/tooltip, status/error blocks, and the shared chrome control\n * primitives (buttons, selects, segmented control) every template composes.\n *\n * Design language: warm cream surfaces, near-black text, rust-orange accent,\n * green for completed steps. Serif titles, sans body, mono meta/counters. All\n * theming flows through CSS custom properties on ``:host`` so the player stays\n * overridable; fonts use system stacks only (offline, no CDN).\n *\n * The historical engine variable names (``--steppy-hotspot-color`` etc.) are\n * preserved and merely re-pointed at the new palette so existing host overrides\n * keep working.\n */\n\nimport { css } from 'lit';\n\nimport { BUBBLE_LOOK, BUTTON_LOOK, FONTS, PALETTE, cssValue } from '../ui/tokens.js';\n\nexport const baseStyles = css`\n :host {\n display: block;\n position: relative;\n /* palette */\n --steppy-bg: ${cssValue(PALETTE.bg)};\n --steppy-surface: ${cssValue(PALETTE.surface)};\n --steppy-chrome-bg: ${cssValue(PALETTE.chromeBg)};\n --steppy-fg: ${cssValue(PALETTE.fg)};\n --steppy-muted: ${cssValue(PALETTE.muted)};\n --steppy-border: ${cssValue(PALETTE.border)};\n --steppy-accent: ${cssValue(PALETTE.accent)};\n --steppy-accent-weak: ${cssValue(PALETTE.accentWeak)};\n --steppy-success: ${cssValue(PALETTE.success)};\n /* typography */\n --steppy-font-serif: ${cssValue(FONTS.serif)};\n --steppy-font-sans: ${cssValue(FONTS.sans)};\n --steppy-font-mono: ${cssValue(FONTS.mono)};\n --steppy-font-family: var(--steppy-font-sans);\n /* engine vars (names preserved, re-pointed at the palette) */\n --steppy-cursor-size: 24px;\n --steppy-cursor-color: var(--steppy-fg);\n --steppy-ripple-color: rgba(31, 29, 26, 0.25);\n --steppy-hotspot-color: var(--steppy-accent);\n --steppy-hotspot-glow: var(--steppy-accent-weak);\n --steppy-tooltip-bg: var(--steppy-fg);\n --steppy-tooltip-fg: var(--steppy-surface);\n\n font-family: var(--steppy-font-family);\n color: var(--steppy-fg);\n }\n\n .steppy-wrapper {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n /* ── Stage ─────────────────────────────────────────────────────────── */\n .steppy-stage {\n position: relative;\n width: 100%;\n background: var(--steppy-chrome-bg);\n overflow: hidden;\n border-radius: 8px;\n user-select: none;\n }\n .steppy-stage img {\n display: block;\n /* width:auto caps display at the screenshot's intrinsic pixel width (never\n upscales), max-width:100% fills/shrinks within the stage. A dense capture\n (mobile device_scale_factor=3) downscales to fill the stage crisply; a\n low-res capture renders at native size instead of blurred. The img stays\n left-aligned (no centering) so the cursor/hotspot overlay — positioned in\n img-display-space with the stage top-left as origin — stays aligned. */\n width: auto;\n max-width: 100%;\n height: auto;\n pointer-events: none;\n }\n .steppy-cursor {\n position: absolute;\n top: 0;\n left: 0;\n width: var(--steppy-cursor-size);\n height: var(--steppy-cursor-size);\n pointer-events: none;\n opacity: 0;\n transition: opacity 200ms ease-in-out;\n background: var(--steppy-cursor-color);\n clip-path: polygon(0 0, 0 75%, 25% 55%, 45% 95%, 60% 85%, 40% 50%, 75% 40%);\n filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.3));\n transform-origin: 0 0;\n z-index: 4;\n }\n .steppy-cursor.visible {\n opacity: 1;\n }\n .steppy-cursor.pulse {\n animation: steppy-pulse 200ms ease-in-out;\n }\n @keyframes steppy-pulse {\n 0%,\n 100% {\n transform: scale(1);\n }\n 50% {\n transform: scale(1.25);\n }\n }\n .steppy-ripple {\n position: absolute;\n top: 0;\n left: 0;\n width: 12px;\n height: 12px;\n margin: -6px;\n border-radius: 50%;\n background: transparent;\n border: 2px solid var(--steppy-ripple-color);\n pointer-events: none;\n opacity: 0;\n z-index: 3;\n }\n .steppy-ripple.fire {\n animation: steppy-ripple 400ms ease-out forwards;\n }\n @keyframes steppy-ripple {\n 0% {\n transform: scale(0.6);\n opacity: 1;\n }\n 100% {\n transform: scale(3);\n opacity: 0;\n }\n }\n .steppy-kbd {\n position: absolute;\n top: 0;\n left: 0;\n background: var(--steppy-fg);\n color: var(--steppy-surface);\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 12px;\n font-family: var(--steppy-font-mono);\n opacity: 0;\n transition: opacity 120ms;\n pointer-events: none;\n z-index: 5;\n }\n .steppy-kbd.visible {\n opacity: 1;\n }\n .steppy-hotspot {\n position: absolute;\n box-sizing: border-box;\n background: transparent;\n border: 2px solid var(--steppy-hotspot-color);\n border-radius: 4px;\n cursor: pointer;\n padding: 0;\n z-index: 2;\n transition: outline-offset 120ms;\n animation: steppy-hotspot-pulse 1500ms ease-in-out infinite;\n box-shadow: 0 0 0 4px var(--steppy-hotspot-glow);\n }\n .steppy-hotspot:focus-visible {\n outline: 3px solid var(--steppy-hotspot-color);\n outline-offset: 4px;\n }\n .steppy-hotspot.miss {\n animation: steppy-hotspot-shake 400ms;\n }\n @keyframes steppy-hotspot-pulse {\n 0%,\n 100% {\n box-shadow: 0 0 0 4px var(--steppy-hotspot-glow);\n }\n 50% {\n box-shadow: 0 0 0 10px transparent;\n }\n }\n @keyframes steppy-hotspot-shake {\n 0%,\n 100% {\n transform: translateX(0);\n }\n 25% {\n transform: translateX(-6px);\n }\n 75% {\n transform: translateX(6px);\n }\n }\n .steppy-tooltip {\n position: absolute;\n background: var(--steppy-tooltip-bg);\n color: var(--steppy-tooltip-fg);\n padding: ${cssValue(BUBBLE_LOOK.padding)};\n border-radius: ${cssValue(BUBBLE_LOOK.radius)};\n max-width: ${cssValue(BUBBLE_LOOK.maxWidth)};\n font-size: ${cssValue(BUBBLE_LOOK.fontSize)};\n line-height: ${cssValue(BUBBLE_LOOK.lineHeight)};\n z-index: 6;\n pointer-events: none;\n box-shadow: ${cssValue(BUBBLE_LOOK.shadow)};\n }\n .steppy-miss-toast {\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n bottom: 16px;\n background: var(--steppy-fg);\n color: var(--steppy-surface);\n padding: 6px 14px;\n border-radius: 999px;\n font-size: 13px;\n z-index: 7;\n pointer-events: none;\n animation: steppy-toast 1400ms ease-out forwards;\n }\n @keyframes steppy-toast {\n 0%,\n 80% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n }\n .steppy-stage-click-catcher {\n position: absolute;\n inset: 0;\n z-index: 1;\n cursor: default;\n }\n\n /* ── Status / error ────────────────────────────────────────────────── */\n .steppy-state {\n padding: 24px;\n text-align: center;\n color: var(--steppy-muted);\n }\n .steppy-state.error {\n color: #b3402a;\n background: #fbeae6;\n border-radius: 6px;\n }\n .steppy-state .steppy-state-detail {\n font-size: 12px;\n margin-top: 8px;\n font-family: var(--steppy-font-mono);\n white-space: pre-wrap;\n text-align: left;\n max-height: 200px;\n overflow: auto;\n }\n\n /* ── Shared chrome controls ────────────────────────────────────────── */\n .steppy-chrome {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n background: var(--steppy-chrome-bg);\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 14px;\n }\n .steppy-progress {\n margin-right: auto;\n font-family: var(--steppy-font-mono);\n font-variant-numeric: tabular-nums;\n color: var(--steppy-muted);\n }\n .steppy-btn {\n font: inherit;\n background: var(--steppy-surface);\n border: 1px solid var(--steppy-border);\n border-radius: ${cssValue(BUTTON_LOOK.radius)};\n padding: ${cssValue(BUTTON_LOOK.padding)};\n cursor: pointer;\n color: var(--steppy-fg);\n }\n .steppy-btn:hover:not(:disabled) {\n border-color: var(--steppy-muted);\n }\n .steppy-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .steppy-field {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--steppy-muted);\n }\n .steppy-field select {\n font: inherit;\n background: var(--steppy-surface);\n border: 1px solid var(--steppy-border);\n border-radius: 4px;\n padding: 4px 8px;\n cursor: pointer;\n color: var(--steppy-fg);\n }\n /* Segmented control (pill container; active = dark fill + light text). */\n .steppy-seg {\n display: inline-flex;\n background: var(--steppy-bg);\n border: 1px solid var(--steppy-border);\n border-radius: 999px;\n padding: 2px;\n gap: 2px;\n }\n .steppy-seg-btn {\n font: inherit;\n font-size: 13px;\n border: 0;\n background: transparent;\n color: var(--steppy-muted);\n padding: 3px 12px;\n border-radius: 999px;\n cursor: pointer;\n }\n .steppy-seg-btn[aria-current='true'] {\n background: var(--steppy-fg);\n color: var(--steppy-surface);\n }\n .steppy-seg-btn:focus-visible {\n outline: 2px solid var(--steppy-accent);\n outline-offset: 1px;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .steppy-cursor,\n .steppy-cursor.pulse,\n .steppy-ripple.fire,\n .steppy-hotspot,\n .steppy-hotspot.miss,\n .steppy-miss-toast {\n animation: none !important;\n transition: none !important;\n }\n }\n`;\n","/**\n * Shared chrome fragments composed by the three templates. Pure functions over\n * {@link TemplateContext} — no state, no engine logic. Each template arranges\n * these into its own layout.\n */\n\nimport { html, nothing, type TemplateResult } from 'lit';\n\nimport { format, type UiStrings } from '../i18n/ui-strings.js';\nimport type { TemplateContext, TemplateId } from './types.js';\n\nconst TEMPLATE_LABEL_KEY: Record<TemplateId, keyof UiStrings> = {\n sidebar: 'templateSidebar',\n overlay: 'templateOverlay',\n inline: 'templateInline',\n};\n\nexport function renderProgress(ctx: TemplateContext): TemplateResult {\n return html`<span class=\"steppy-progress\" aria-live=\"polite\"\n >${format(ctx.ui.progress, { current: ctx.currentIndex, total: ctx.total })}</span\n >`;\n}\n\n/** Compact \"i/n\" counter (inline + sidebar footers). */\nexport function renderCounter(ctx: TemplateContext): TemplateResult {\n return html`<span class=\"steppy-counter\" aria-live=\"polite\"\n >${ctx.currentIndex}/${ctx.total}</span\n >`;\n}\n\nexport function renderPrev(ctx: TemplateContext): TemplateResult {\n return html`<button\n class=\"steppy-btn steppy-prev\"\n @click=${ctx.onPrev}\n ?disabled=${ctx.prevDisabled}\n >\n ${ctx.ui.previous}\n </button>`;\n}\n\nexport function renderNext(ctx: TemplateContext): TemplateResult {\n return html`<button\n class=\"steppy-btn steppy-next\"\n @click=${ctx.onNext}\n ?disabled=${ctx.nextDisabled}\n >\n ${ctx.ui.next}\n </button>`;\n}\n\nexport function renderRestart(ctx: TemplateContext): TemplateResult {\n return html`<button class=\"steppy-btn steppy-restart\" @click=${ctx.onRestart}>\n ${ctx.ui.restart}\n </button>`;\n}\n\nexport function renderLocaleSelect(ctx: TemplateContext): TemplateResult | typeof nothing {\n if (ctx.locales.length <= 1) return nothing;\n return html`<label class=\"steppy-field\">\n ${ctx.ui.localeSwitcher}\n <select @change=${ctx.onLocaleChange} .value=${ctx.activeLocale}>\n ${ctx.locales.map(\n (loc) =>\n html`<option value=${loc} ?selected=${loc === ctx.activeLocale}>${loc}</option>`,\n )}\n </select>\n </label>`;\n}\n\nexport function renderLayoutSelect(ctx: TemplateContext): TemplateResult | typeof nothing {\n if (ctx.layouts.length <= 1 || ctx.hideLayoutSwitcher) return nothing;\n return html`<label class=\"steppy-field\">\n ${ctx.ui.variantSwitcher}\n <select @change=${ctx.onLayoutChange} .value=${ctx.activeLayout ?? ''}>\n ${ctx.layouts.map(\n (lay) =>\n html`<option value=${lay} ?selected=${lay === ctx.activeLayout}>${lay}</option>`,\n )}\n </select>\n </label>`;\n}\n\n/** Segmented [Sidebar | Overlay | Inline] control (active = dark fill). */\nexport function renderTemplateSwitcher(ctx: TemplateContext): TemplateResult {\n return html`<div class=\"steppy-seg\" role=\"group\" aria-label=${ctx.ui.templateSwitcher}>\n ${ctx.templates.map((t) => {\n const active = t === ctx.activeTemplate;\n return html`<button\n type=\"button\"\n class=\"steppy-seg-btn\"\n aria-current=${active ? 'true' : 'false'}\n @click=${() => ctx.onTemplateChange(t)}\n >\n ${ctx.ui[TEMPLATE_LABEL_KEY[t]]}\n </button>`;\n })}\n </div>`;\n}\n","/**\n * Inline template — full-bleed preview with a slim full-width caption bar: the\n * step counter, the current localized description, a mono sub-label, and\n * prev/next. The switchers ride along compactly so the player stays\n * self-contained, but the bar is the only chrome over the preview.\n */\n\nimport { css, html, nothing, type TemplateResult } from 'lit';\n\nimport {\n renderCounter,\n renderLayoutSelect,\n renderLocaleSelect,\n renderNext,\n renderPrev,\n renderTemplateSwitcher,\n} from './controls.js';\nimport { renderInlineMarkdown } from '../ui/markdown.js';\nimport type { TemplateContext } from './types.js';\n\nexport function render(ctx: TemplateContext): TemplateResult {\n const cur =\n ctx.steps.find((s) => s.status === 'current') ?? ctx.steps[ctx.currentIndex - 1];\n return html`\n <div class=\"steppy-tpl-inline\">\n ${ctx.renderStage()}\n <div class=\"steppy-inline-bar\">\n ${renderCounter(ctx)}\n <span class=\"steppy-inline-desc\">${renderInlineMarkdown(cur?.description ?? '')}</span>\n ${cur?.subLabel\n ? html`<span class=\"steppy-inline-sub\">${cur.subLabel}</span>`\n : nothing}\n <span class=\"steppy-inline-controls\">\n ${renderTemplateSwitcher(ctx)} ${renderLocaleSelect(ctx)} ${renderLayoutSelect(ctx)}\n ${renderPrev(ctx)} ${renderNext(ctx)}\n </span>\n </div>\n ${ctx.completed ? html`<div class=\"steppy-state\">${ctx.ui.done}</div>` : nothing}\n </div>\n `;\n}\n\nexport const styles = css`\n .steppy-tpl-inline {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .steppy-inline-bar {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n background: var(--steppy-chrome-bg);\n border-radius: 6px;\n padding: 8px 14px;\n font-size: 14px;\n }\n .steppy-inline-bar .steppy-counter {\n font-family: var(--steppy-font-mono);\n font-weight: 600;\n color: var(--steppy-accent);\n }\n .steppy-inline-desc {\n flex: 1 1 240px;\n min-width: 0;\n color: var(--steppy-fg);\n }\n .steppy-inline-sub {\n font-family: var(--steppy-font-mono);\n font-size: 12px;\n color: var(--steppy-muted);\n }\n .steppy-inline-controls {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n flex-wrap: wrap;\n }\n`;\n","/**\n * Overlay template — the original/default player presentation: a full-bleed\n * screenshot stage with a floating callout pinned to the highlighted target,\n * and a bottom chrome bar. Lifted from the component verbatim (only the new\n * template switcher is added); engine logic is untouched.\n */\n\nimport { css, html, nothing, type TemplateResult } from 'lit';\n\nimport {\n renderLayoutSelect,\n renderLocaleSelect,\n renderNext,\n renderPrev,\n renderProgress,\n renderRestart,\n renderTemplateSwitcher,\n} from './controls.js';\nimport type { TemplateContext } from './types.js';\n\nexport function render(ctx: TemplateContext): TemplateResult {\n return html`\n <div class=\"steppy-wrapper steppy-tpl-overlay\">\n ${ctx.renderStage()}\n <div class=\"steppy-chrome\">\n ${renderProgress(ctx)} ${renderPrev(ctx)} ${renderNext(ctx)} ${renderRestart(ctx)}\n ${renderLocaleSelect(ctx)} ${renderLayoutSelect(ctx)} ${renderTemplateSwitcher(ctx)}\n </div>\n ${ctx.completed ? html`<div class=\"steppy-state\">${ctx.ui.done}</div>` : nothing}\n </div>\n `;\n}\n\nexport const styles = css`\n .steppy-tpl-overlay .steppy-seg {\n margin-left: auto;\n }\n`;\n","/**\n * Sidebar template — a fixed left rail (guide title, meta line, vertical step\n * timeline, current-step description, prev/next + counter) beside the preview.\n * The current step's full localized description is surfaced in the rail; the\n * in-stage floating tooltip is suppressed (the stage handles that based on the\n * active template). Collapses to a single column on narrow containers.\n *\n * The rail is height-capped and the timeline scrolls inside it, so a 19-step\n * guide occupies the same vertical space as a 3-step one. The component pairs\n * this with ``_scrollActiveRowIntoView`` so advancing never leaves the current\n * step off-screen. Every layout dimension the cap touches — rail width, rail\n * height, sticky offset — is a ``--steppy-*`` custom property, because a host\n * that embeds the player under its own chrome (the Angular target) cannot use\n * the ``100vh`` default.\n */\n\nimport { css, html, nothing, type TemplateResult } from 'lit';\n\nimport { format } from '../i18n/ui-strings.js';\nimport { renderInlineMarkdown } from '../ui/markdown.js';\nimport {\n renderCounter,\n renderLayoutSelect,\n renderLocaleSelect,\n renderNext,\n renderPrev,\n renderTemplateSwitcher,\n} from './controls.js';\nimport type { StepView, TemplateContext } from './types.js';\n\nfunction renderRow(ctx: TemplateContext, s: StepView): TemplateResult {\n const sub =\n s.status === 'completed'\n ? html`${ctx.ui.stepPassed} <span aria-hidden=\"true\">✓</span>`\n : s.subLabel || nothing;\n return html`\n <li\n class=\"steppy-step steppy-step--${s.status}\"\n aria-current=${s.status === 'current' ? 'step' : nothing}\n >\n <button\n class=\"steppy-step-row\"\n ?disabled=${!s.reachable}\n @click=${() => ctx.onGoTo(s.index)}\n >\n <span class=\"steppy-node\" aria-hidden=\"true\"></span>\n <span class=\"steppy-step-main\">\n <span class=\"steppy-step-title\">${renderInlineMarkdown(s.title)}</span>\n <span class=\"steppy-step-sub\">${sub}</span>\n </span>\n </button>\n ${s.status === 'current' && s.description\n ? html`<p class=\"steppy-step-desc\">${renderInlineMarkdown(s.description)}</p>`\n : nothing}\n </li>\n `;\n}\n\nexport function render(ctx: TemplateContext): TemplateResult {\n return html`\n <div class=\"steppy-tpl-sidebar\">\n <div class=\"steppy-sidebar-layout\">\n <aside class=\"steppy-rail\">\n <div class=\"steppy-rail-head\">\n <h2 class=\"steppy-guide-title\">${ctx.guideTitle}</h2>\n <p class=\"steppy-meta\">\n ${format(ctx.ui.stepsMeta, {\n count: ctx.total,\n duration: ctx.durationLabel,\n })}\n </p>\n <div class=\"steppy-rail-switchers\">\n ${renderTemplateSwitcher(ctx)} ${renderLocaleSelect(ctx)}\n ${renderLayoutSelect(ctx)}\n </div>\n </div>\n <ol class=\"steppy-timeline\">\n ${ctx.steps.map((s) => renderRow(ctx, s))}\n </ol>\n <div class=\"steppy-rail-foot\">\n ${renderPrev(ctx)} ${renderNext(ctx)} ${renderCounter(ctx)}\n </div>\n </aside>\n <div class=\"steppy-preview\">${ctx.renderStage()}</div>\n </div>\n ${ctx.completed ? html`<div class=\"steppy-state\">${ctx.ui.done}</div>` : nothing}\n </div>\n `;\n}\n\nexport const styles = css`\n .steppy-tpl-sidebar {\n container-type: inline-size;\n }\n .steppy-sidebar-layout {\n display: grid;\n grid-template-columns: var(--steppy-rail-width, 340px) 1fr;\n gap: 20px;\n align-items: start;\n }\n /* The rail is capped and sticky, never the preview: when the capture is a tall\n mobile screenshot the preview is the taller item, and sticking *it* would pin\n its top at the offset and put its bottom permanently out of reach. Sticking\n the rail instead keeps the nav in view while that image scrolls, and is a\n no-op in the common case where the rail is the taller item. */\n .steppy-rail {\n display: flex;\n flex-direction: column;\n gap: 16px;\n background: var(--steppy-surface);\n border: 1px solid var(--steppy-border);\n border-radius: 10px;\n padding: 18px;\n position: sticky;\n top: var(--steppy-sidebar-offset, 16px);\n /* border-box is required, not cosmetic: max-height sizes the *content* box\n by default, so the 18px padding and 1px border would push the rail 38px\n past its own cap and back off the bottom of the screen. */\n box-sizing: border-box;\n max-height: var(--steppy-rail-max-height, calc(100vh - 32px));\n }\n .steppy-rail-head {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .steppy-guide-title {\n margin: 0;\n font-family: var(--steppy-font-serif);\n font-size: 22px;\n font-weight: 600;\n line-height: 1.2;\n color: var(--steppy-fg);\n }\n .steppy-meta {\n margin: 0;\n font-family: var(--steppy-font-mono);\n font-size: 12px;\n color: var(--steppy-muted);\n }\n .steppy-rail-switchers {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n }\n\n /* ── Timeline ──────────────────────────────────────────────────────── */\n /* The timeline is the only part of the rail that scrolls, so the head\n (title/meta/switchers) and the foot (prev/next/counter) stay pinned however\n long the guide is. min-height:0 is load-bearing: a flex item's default\n min-height:auto refuses to shrink below its content, so without it the rail\n grows past its own max-height and nothing ever scrolls. */\n .steppy-timeline {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n scrollbar-gutter: stable;\n }\n .steppy-step {\n position: relative;\n padding-left: 4px;\n }\n /* Connecting line between nodes. */\n .steppy-step:not(:last-child) .steppy-node::after {\n content: '';\n position: absolute;\n left: 50%;\n top: 14px;\n transform: translateX(-50%);\n width: 2px;\n height: calc(100% - 6px);\n background: var(--steppy-border);\n }\n .steppy-step-row {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n width: 100%;\n background: transparent;\n border: 0;\n padding: 8px 6px;\n text-align: left;\n cursor: pointer;\n color: var(--steppy-fg);\n border-radius: 6px;\n font: inherit;\n }\n .steppy-step-row:disabled {\n cursor: default;\n }\n .steppy-step-row:hover:not(:disabled) {\n background: var(--steppy-bg);\n }\n .steppy-node {\n position: relative;\n flex: 0 0 auto;\n width: 14px;\n height: 14px;\n margin-top: 3px;\n border-radius: 50%;\n border: 2px solid var(--steppy-border);\n background: var(--steppy-surface);\n box-sizing: border-box;\n z-index: 1;\n }\n .steppy-step--completed .steppy-node {\n background: var(--steppy-success);\n border-color: var(--steppy-success);\n }\n .steppy-step--current .steppy-node {\n background: var(--steppy-accent);\n border-color: var(--steppy-accent);\n box-shadow: 0 0 0 4px var(--steppy-accent-weak);\n }\n .steppy-step-main {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n }\n .steppy-step-title {\n font-size: 14px;\n color: var(--steppy-fg);\n }\n .steppy-step--current .steppy-step-title {\n font-weight: 700;\n }\n .steppy-step--upcoming .steppy-step-title {\n color: var(--steppy-muted);\n }\n .steppy-step-sub {\n font-family: var(--steppy-font-mono);\n font-size: 11px;\n color: var(--steppy-muted);\n }\n .steppy-step-desc {\n margin: 4px 0 8px 26px;\n font-size: 13px;\n line-height: 1.45;\n color: var(--steppy-fg);\n }\n\n .steppy-rail-foot {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n .steppy-rail-foot .steppy-counter {\n margin-left: auto;\n font-family: var(--steppy-font-mono);\n font-size: 13px;\n color: var(--steppy-muted);\n }\n /* align-self overrides the grid's align-items:start for this item alone. A\n landscape capture is much shorter than a long rail, and leaving it\n top-aligned puts all the slack in one block below the image; centring splits\n it and reads as padding. When the preview is the taller item it fills the\n row and this is a no-op. Safe for the overlay coordinate system: the cursor,\n hotspot and tooltip are absolutely positioned inside .steppy-stage and\n scaled from the image's live rect, so they travel with it. */\n .steppy-preview {\n min-width: 0;\n align-self: center;\n }\n\n /* Collapse to a single column on narrow containers (rail on top). The rail\n keeps a cap — uncapped, rail-on-top reproduces the unbounded-timeline\n problem on a phone — but drops sticky, which would otherwise park most of\n the viewport on the rail and leave no room for the screenshot below it.\n Both the container and media query must carry every rule. */\n @container (max-width: 640px) {\n .steppy-sidebar-layout {\n grid-template-columns: 1fr;\n }\n .steppy-rail {\n position: static;\n max-height: var(--steppy-rail-max-height-narrow, 60vh);\n }\n .steppy-preview {\n align-self: start;\n }\n }\n @media (max-width: 640px) {\n .steppy-sidebar-layout {\n grid-template-columns: 1fr;\n }\n .steppy-rail {\n position: static;\n max-height: var(--steppy-rail-max-height-narrow, 60vh);\n }\n .steppy-preview {\n align-self: start;\n }\n }\n`;\n","/**\n * Template registry. The component dispatches ``render()`` to one of these by\n * the resolved ``template`` id; ``static styles`` aggregates every template's\n * CSS (unrendered templates simply have no matching DOM).\n */\n\nimport { baseStyles } from './base-styles.js';\nimport * as inline from './inline.js';\nimport * as overlay from './overlay.js';\nimport * as sidebar from './sidebar.js';\nimport type { TemplateId, TemplateModule } from './types.js';\n\n/**\n * The registry is the single source of truth: registering a template here is\n * the only edit needed inside this file. `ALL_TEMPLATES`, `isTemplateId` and\n * `templateStyles` are all derived from it below, so a new template can never\n * be renderable-but-unstyled or renderable-but-unlistable.\n */\nexport const TEMPLATES: Record<TemplateId, TemplateModule> = {\n overlay,\n sidebar,\n inline,\n};\n\n/**\n * Display/selection order for the segmented switcher — deliberately not the\n * registry's declaration order, which is why this one list stays explicit.\n * `templates.test.ts` asserts it covers every registered template.\n */\nexport const ALL_TEMPLATES: readonly TemplateId[] = ['sidebar', 'overlay', 'inline'];\n\n// Derived from the registry rather than from ALL_TEMPLATES: identity must\n// follow what can actually be rendered, not what the switcher chooses to show.\nconst TEMPLATE_SET: ReadonlySet<string> = new Set(Object.keys(TEMPLATES));\n\nexport function isTemplateId(value: unknown): value is TemplateId {\n return typeof value === 'string' && TEMPLATE_SET.has(value);\n}\n\n/** Aggregated styles for the component's ``static styles``. */\nexport const templateStyles = [baseStyles, ...Object.values(TEMPLATES).map((m) => m.styles)];\n\nexport type { TemplateContext, TemplateId, StepView, TemplateModule } from './types.js';\n","/**\n * ``<steppy-guide>`` — Lit-based interactive guide player.\n *\n * Public API is HTML attributes + CustomEvents. See the Stage 1 design doc for\n * the full contract. Implementation notes:\n *\n * - Manifest is fetched lazily when ``src`` is set; cached in ``manifest``\n * state. ``parseManifest`` does both JSON parsing and Zod validation.\n * - Coordinates flow capture-space → display-space at one point only:\n * ``computeHotspotRect`` (which the cursor animator also uses via\n * ``getDisplayScale``). Everything downstream — hotspot button, tooltip,\n * cursor target — derives from the same scale, so resizes can never\n * produce drift between cursor and hotspot.\n * - The cursor / ripple / kbd elements live at a fixed position in the\n * template so Lit's incremental render doesn't churn them; the animator\n * refreshes its DOM refs once on connect.\n * - Step progression is centralized in ``_advance`` and ``_playCurrentPosition``;\n * the rest of the component is rendering.\n */\n\nimport { LitElement, html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\n\nimport { CursorAnimator, type AnimatorOptions } from './cursor/animator.js';\nimport type { AnimatorFrame, DisplayRect } from './cursor/types.js';\n\n/** The animator was originally designed against legacy ``frames[i].viewport``;\n * manifest frames use ``captureSize``. They're the same shape; this helper\n * is the single point of translation. */\nfunction toAnimatorFrame(frame: ManifestFrame): AnimatorFrame {\n return { cursor: frame.cursor, viewport: frame.captureSize };\n}\nimport { DEFAULT_UI_STRINGS, format, getUiStrings, type UiStrings } from './i18n/ui-strings.js';\nimport {\n computeHotspotRect,\n placeTooltip,\n type TooltipPlacement,\n} from './interaction/positioning.js';\nimport { renderInlineMarkdown } from './ui/markdown.js';\nimport { captureLayoutKey, resolveStepContent } from './manifest/content.js';\nimport { parseManifest, type ParseError } from './manifest/parse.js';\nimport type {\n Capture,\n CaptureContent,\n CursorMode,\n Frame as ManifestFrame,\n GuideManifest,\n ManifestStep,\n TemplateMode,\n} from './manifest/schema.js';\nimport {\n ALL_TEMPLATES,\n isTemplateId,\n TEMPLATES,\n templateStyles,\n} from './templates/index.js';\nimport type { StepView, TemplateContext, TemplateId } from './templates/types.js';\n\nconst CURSOR_MODE_VALUES: readonly CursorMode[] = ['arrow', 'hotspot', 'off'];\nfunction isCursorMode(value: unknown): value is CursorMode {\n return typeof value === 'string' && (CURSOR_MODE_VALUES as readonly string[]).includes(value);\n}\n\ntype StepRuntime = ManifestStep;\n\n/** Animator-shaped subset the player actually calls. Tests can plug in a\n * stub that skips real timing without owning the full CursorAnimator API. */\nexport interface AnimatorLike {\n setTimings(t: Partial<import('./cursor/types.js').CursorTimings>): void;\n setStage(stage: HTMLElement): void;\n refreshDom(): void;\n hide(): void;\n abort(): void;\n travelToTarget(frame: AnimatorFrame, targetIndex: number): Promise<void>;\n playTargetAction(frame: AnimatorFrame, targetIndex: number): Promise<void>;\n}\n\n@customElement('steppy-guide')\nexport class SteppyGuide extends LitElement {\n /** Factory hook — overridden in tests to swap in a fast/no-op animator. */\n static createAnimator: (opts: AnimatorOptions) => AnimatorLike = (opts) =>\n new CursorAnimator(opts);\n\n // Aggregated: shared base (tokens + stage + cursor/hotspot/tooltip + chrome\n // primitives) plus each template's layout-specific CSS. Unrendered templates\n // simply contribute no matching DOM.\n static override styles = templateStyles;\n\n // ── Public API ────────────────────────────────────────────────────────\n\n @property({ type: String, reflect: true }) src = '';\n @property({ type: String, reflect: true }) locale: string | null = null;\n @property({ type: String, reflect: true }) variant: string | null = null;\n @property({ type: Boolean, reflect: true }) autoplay = false;\n @property({ type: Number, reflect: true, attribute: 'start-index' })\n startIndex = 1;\n /**\n * Cursor presentation:\n * - 'arrow' (default) animate the arrow + ripple/kbd; hotspot also pulses\n * - 'hotspot' skip arrow/ripple/kbd; hotspot pulses and user still clicks\n * - 'off' skip arrow + hotspot; auto-advance every step after waitAfter\n * Unset (null) ⇒ fall back to manifest's `cursor.mode`, then 'arrow'.\n */\n @property({ type: String, reflect: true })\n cursor: CursorMode | null = null;\n\n /**\n * Presentation template (runtime-switchable viewer setting):\n * - 'overlay' (default) floating callout pinned to the target\n * - 'sidebar' left rail with a step timeline + description\n * - 'inline' slim bottom caption bar\n * Resolution: this attribute → persisted localStorage → manifest\n * ``defaultTemplate`` → 'overlay'. Unknown strings fall through.\n */\n @property({ type: String, reflect: true })\n template: TemplateMode | null = null;\n\n /** When set, suppress the built-in layout (variant) switcher so a host can\n * own the control (the generated Angular toolbar / static page nav drives\n * `variant` directly). The locale switcher is unaffected. */\n @property({ type: Boolean, reflect: true, attribute: 'hide-layout-switcher' })\n hideLayoutSwitcher = false;\n\n /** Sparse per-locale UI string overrides. Property-only (no attribute). */\n @property({ attribute: false })\n uiStrings: Partial<Record<string, Partial<UiStrings>>> | undefined;\n\n // ── Internal state ────────────────────────────────────────────────────\n\n @state() private manifest: GuideManifest | null = null;\n @state() private loadError: ParseError | null = null;\n @state() private currentStepIndex = 0;\n @state() private currentFrameIndex = 0;\n @state() private currentTargetIndex = 0;\n @state() private waitingForInput = false;\n @state() private completed = false;\n @state() private missCount = 0;\n @state() private hotspotRect: DisplayRect | null = null;\n @state() private tooltipPlacement: TooltipPlacement | null = null;\n @state() private stageSize: { width: number; height: number } = { width: 0, height: 0 };\n\n /** Resolved presentation template the current render uses. */\n @state() private _activeTemplate: TemplateId = 'overlay';\n /** The stage element the ResizeObserver/animator are currently bound to.\n * Tracked so a template switch (which relocates the stage) re-attaches. */\n private _observedStage: HTMLElement | null = null;\n\n /** Furthest step the user has reached. Used to gate ``goTo`` / ``prev``. */\n private maxReachedStepIndex = 0;\n private animator: AnimatorLike | null = null;\n private stageRef: Ref<HTMLElement> = createRef();\n private imgRef: Ref<HTMLImageElement> = createRef();\n private cursorRef: Ref<HTMLElement> = createRef();\n private rippleRef: Ref<HTMLElement> = createRef();\n private kbdRef: Ref<HTMLElement> = createRef();\n private tooltipRef: Ref<HTMLElement> = createRef();\n private resizeObserver: ResizeObserver | null = null;\n private autoAdvanceTimer: ReturnType<typeof setTimeout> | null = null;\n /** Token bumped on every ``_playCurrentPosition`` call so stale awaits drop. */\n private playToken = 0;\n /** Resolved on the user's correct click; the running play awaits this. */\n private waitForClick: Promise<void> | null = null;\n private resolveClick: (() => void) | null = null;\n\n // ── Lifecycle ─────────────────────────────────────────────────────────\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('keydown', this._handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this._handleKeyDown);\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n if (this.autoAdvanceTimer !== null) {\n clearTimeout(this.autoAdvanceTimer);\n this.autoAdvanceTimer = null;\n }\n this.animator?.abort();\n }\n\n override willUpdate(changed: PropertyValues): void {\n if (changed.has('src')) {\n void this._loadManifest();\n }\n if (changed.has('locale') && this.manifest && this.locale) {\n this._emit('steppy:locale', {\n from: changed.get('locale') as string | null,\n to: this.locale,\n });\n }\n if (changed.has('variant') && this.manifest && this.variant) {\n this._emit('steppy:variant', {\n from: changed.get('variant') as string | null,\n to: this.variant,\n });\n }\n\n // Layout (variant) switched after the manifest loaded — e.g. a host toggle\n // or the built-in dropdown. Restart the current step in the new layout\n // (frame counts can differ between layouts), drop any pending hotspot wait,\n // and replay so the new screenshot + cursor render. Skipped on the initial\n // variant set during manifest load (handled by _restartFromStart).\n if (changed.has('variant') && this.manifest && !changed.has('manifest')) {\n this.currentFrameIndex = 0;\n this.currentTargetIndex = 0;\n this.waitingForInput = false;\n this.hotspotRect = null;\n this.tooltipPlacement = null;\n const resolve = this.resolveClick;\n this.resolveClick = null;\n resolve?.();\n void this._playCurrentPosition();\n }\n\n // Cursor mode flipped at runtime (e.g., from dev tools). Release any\n // pending hotspot wait, clear interactive state, and re-enter the current\n // frame so the new mode takes effect without stranding waitingForInput.\n // Skipped on the initial property set (handled by manifest load instead).\n if (changed.has('cursor') && this.manifest) {\n this.waitingForInput = false;\n this.hotspotRect = null;\n this.tooltipPlacement = null;\n const resolve = this.resolveClick;\n this.resolveClick = null;\n resolve?.();\n void this._playCurrentPosition();\n }\n\n // Presentation template flipped (host attribute or the built-in switcher).\n // Deliberately NO replay and NO index/waiting reset — switching template is\n // a pure re-render of the same engine state. Just re-resolve the active\n // template and persist it; the stage subtree is preserved across the switch\n // (keyed in render + reattached in updated) so the in-flight animation\n // continues. A hotspot recompute is queued below.\n if (changed.has('template')) {\n this._activeTemplate = this._resolveTemplate();\n // Persist only a deliberate, valid choice (the built-in switcher or an\n // explicit ``template`` attribute). The initial ``null`` must NOT persist\n // — doing so would pin 'overlay' and starve the manifest's\n // ``defaultTemplate`` of its turn in the resolution order.\n if (isTemplateId(this.template)) {\n this._persistTemplate(this._activeTemplate);\n }\n }\n\n // Recompute hotspot/tooltip placement here (inside willUpdate) so the\n // resulting state assignments fold into the same render cycle instead\n // of scheduling a second one.\n if (\n changed.has('waitingForInput') ||\n changed.has('currentStepIndex') ||\n changed.has('currentFrameIndex') ||\n changed.has('currentTargetIndex') ||\n changed.has('locale') ||\n changed.has('variant') ||\n changed.has('stageSize') ||\n changed.has('template')\n ) {\n this._recomputeHotspot();\n }\n }\n\n override updated(changed: PropertyValues): void {\n const stageEl = this.stageRef.value ?? null;\n if (!this.animator && stageEl) {\n this.animator = (this.constructor as typeof SteppyGuide).createAnimator({\n stage: stageEl,\n timings: this.manifest?.cursor,\n });\n this._observedStage = stageEl;\n } else if (stageEl && stageEl !== this._observedStage) {\n // The stage subtree was re-mounted at a new DOM position — almost always\n // a template switch. Re-point the animator + ResizeObserver at the live\n // element and recompute placement so the cursor/hotspot survive the move\n // without restarting the step.\n this._reattachStage(stageEl);\n } else if (this.animator && stageEl) {\n this.animator.refreshDom();\n if (this.manifest) this.animator.setTimings(this.manifest.cursor);\n }\n\n if (changed.has('manifest') && this.manifest) {\n this._setupResizeObserver();\n this._observedStage = this.stageRef.value ?? null;\n void this._restartFromStart();\n }\n\n // stageSize stands in for \"the layout moved\": it is the one observed\n // dimension that changes when the viewport resizes or the layout variant\n // swaps, both of which can shorten the rail and strand the active row.\n if (\n changed.has('currentStepIndex') ||\n changed.has('_activeTemplate') ||\n changed.has('stageSize')\n ) {\n this._scrollActiveRowIntoView();\n }\n }\n\n /** Keep the current timeline row visible. The sidebar rail is height-capped\n * and scrolls its timeline internally, so on a long guide ``next()`` would\n * otherwise advance to a row below the fold. ``block: 'nearest'`` scrolls the\n * minimum needed, which also means it does nothing when the row is already\n * visible — including in the templates that have no timeline at all. */\n private _scrollActiveRowIntoView(): void {\n if (this._activeTemplate !== 'sidebar') return;\n const row = this.renderRoot.querySelector<HTMLElement>('.steppy-step--current');\n // happy-dom (and older browsers) may not implement scrollIntoView.\n if (typeof row?.scrollIntoView !== 'function') return;\n row.scrollIntoView({ block: 'nearest' });\n }\n\n /** Re-bind the ResizeObserver + animator to a relocated stage element (e.g.\n * after a template switch) and reposition the hotspot/tooltip. Does not\n * touch step state, so the in-flight play loop continues uninterrupted. */\n private _reattachStage(stageEl: HTMLElement): void {\n this._observedStage = stageEl;\n this._setupResizeObserver();\n this.animator?.setStage(stageEl);\n if (this.manifest) this.animator?.setTimings(this.manifest.cursor);\n this.stageSize = {\n width: stageEl.clientWidth || this.stageSize.width,\n height: stageEl.clientHeight || this.stageSize.height,\n };\n this._recomputeHotspot();\n }\n\n // ── Public methods ───────────────────────────────────────────────────\n\n next(): void {\n if (!this.manifest) return;\n if (this.waitingForInput) {\n // Forward nav stands in for clicking the highlighted target: resolve the\n // pending interactive wait via the same success path as a hotspot click\n // (runs the action, then advances). Applies in every template, including\n // overlay — the in-stage hotspot still works too.\n this._confirmHotspotClick();\n return;\n }\n this._advance();\n }\n\n prev(): void {\n if (!this.manifest) return;\n if (this.currentStepIndex <= 0) return;\n this._goToStep(this.currentStepIndex - 1, { reason: 'prev' });\n }\n\n restart(): void {\n if (!this.manifest) return;\n this.completed = false;\n this.maxReachedStepIndex = 0;\n this._goToStep(0, { reason: 'restart' });\n }\n\n goTo(index: number): void {\n if (!this.manifest) return;\n const target = index - 1;\n if (target < 0 || target > this.maxReachedStepIndex) {\n this._emit('steppy:error', {\n code: 'bad_attribute',\n message: `goTo(${index}) is out of range or beyond the furthest reached step`,\n });\n return;\n }\n this._goToStep(target, { reason: 'goTo' });\n }\n\n // ── Internals ────────────────────────────────────────────────────────\n\n private async _loadManifest(): Promise<void> {\n if (!this.src) {\n this.manifest = null;\n this.loadError = null;\n return;\n }\n this.manifest = null;\n this.loadError = null;\n try {\n const response = await fetch(this.src);\n if (!response.ok) {\n this.loadError = {\n code: 'fetch_failed',\n message: `${response.status} ${response.statusText} fetching ${this.src}`,\n };\n this._emit('steppy:error', this.loadError);\n return;\n }\n const text = await response.text();\n const result = parseManifest(text);\n if (!result.ok) {\n this.loadError = result.error;\n this._emit('steppy:error', result.error);\n return;\n }\n this.manifest = result.manifest;\n // Default-fill locale/variant from the manifest if attrs weren't set.\n if (!this.locale || !this.manifest.locales.includes(this.locale)) {\n this.locale = this.manifest.defaultLocale;\n }\n const targetVariant =\n this.variant ?? this.manifest.defaultLayout ?? this._fallbackLayoutKey();\n this.variant = this._resolveVariant(targetVariant);\n // Resolve the presentation template now (needs slug + defaultTemplate) so\n // the first content paint already uses the right template.\n this._activeTemplate = this._resolveTemplate();\n } catch (err) {\n this.loadError = {\n code: 'fetch_failed',\n message: err instanceof Error ? err.message : 'fetch failed',\n };\n this._emit('steppy:error', this.loadError);\n }\n }\n\n private _fallbackLayoutKey(): string {\n return this.manifest && this.manifest.layouts.length === 0 ? '_' : 'desktop';\n }\n\n private _resolveVariant(candidate: string | null): string {\n if (!this.manifest) return '_';\n const layoutKeys =\n this.manifest.layouts.length > 0 ? this.manifest.layouts : ['_'];\n if (candidate && layoutKeys.includes(candidate)) return candidate;\n return this.manifest.defaultLayout ?? layoutKeys[0]!;\n }\n\n private async _restartFromStart(): Promise<void> {\n if (!this.manifest) return;\n const initial = Math.max(\n 0,\n Math.min(this.manifest.steps.length - 1, (this.startIndex || 1) - 1),\n );\n this.maxReachedStepIndex = initial;\n this._emit('steppy:ready', {\n slug: this.manifest.slug,\n total: this.manifest.steps.length,\n locale: this.locale,\n variant: this.variant,\n });\n this._goToStep(initial, { reason: 'init' });\n }\n\n private _setupResizeObserver(): void {\n this.resizeObserver?.disconnect();\n if (!this.stageRef.value || typeof ResizeObserver === 'undefined') return;\n this.resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n this.stageSize = {\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n };\n this._recomputeHotspot();\n });\n this.resizeObserver.observe(this.stageRef.value);\n }\n\n private _currentStep(): StepRuntime | null {\n return this.manifest?.steps[this.currentStepIndex] ?? null;\n }\n\n /**\n * The `Capture` the active render reads from — screenshots AND caption.\n *\n * Both go through this one accessor on purpose: a step's text can be\n * overridden per layout (the twin-branch pattern), so reading the frame from\n * one layout and the wording from another would put \"click the row of the\n * table\" above a screenshot of a card list.\n */\n private _captureFor(step: StepRuntime, locale: string): Capture | null {\n if (!this.manifest) return null;\n const key = captureLayoutKey(step, locale, this.variant, this.manifest);\n return key === null ? null : (step.captures[locale]?.[key] ?? null);\n }\n\n private _contentFor(step: StepRuntime, locale: string): CaptureContent {\n const key = this.manifest ? captureLayoutKey(step, locale, this.variant, this.manifest) : null;\n return resolveStepContent(step, locale, key ?? '');\n }\n\n private _currentFrame(): ManifestFrame | null {\n const step = this._currentStep();\n if (!step || !this.locale) return null;\n return this._captureFor(step, this.locale)?.frames[this.currentFrameIndex] ?? null;\n }\n\n private _currentTargetBbox(): import('./cursor/types.js').Bbox | null {\n const frame = this._currentFrame();\n if (!frame || !frame.cursor) return null;\n const targets = CursorAnimator.normalizeTargets(frame.cursor);\n return targets[this.currentTargetIndex]?.bbox ?? null;\n }\n\n private _recomputeHotspot(): void {\n const img = this.imgRef.value;\n const frame = this._currentFrame();\n if (!img || !frame || !this.waitingForInput) {\n this.hotspotRect = null;\n this.tooltipPlacement = null;\n return;\n }\n const bbox = this._currentTargetBbox();\n this.hotspotRect = computeHotspotRect(img, frame.captureSize, bbox);\n this._placeTooltip();\n }\n\n private _placeTooltip(): void {\n if (!this.hotspotRect || !this.stageRef.value) {\n this.tooltipPlacement = null;\n return;\n }\n const stageRect = this.stageRef.value.getBoundingClientRect();\n const tip = this.tooltipRef.value;\n const tipSize = tip\n ? { width: tip.offsetWidth || 240, height: tip.offsetHeight || 60 }\n : { width: 240, height: 60 };\n this.tooltipPlacement = placeTooltip(\n this.hotspotRect,\n tipSize,\n { width: stageRect.width, height: stageRect.height },\n );\n }\n\n private _goToStep(stepIndex: number, opts: { reason: string }): void {\n if (!this.manifest) return;\n if (stepIndex < 0 || stepIndex >= this.manifest.steps.length) return;\n this.currentStepIndex = stepIndex;\n this.currentFrameIndex = 0;\n this.currentTargetIndex = 0;\n this.completed = false;\n this.missCount = 0;\n this.waitingForInput = false;\n if (stepIndex > this.maxReachedStepIndex) {\n this.maxReachedStepIndex = stepIndex;\n }\n const step = this._currentStep()!;\n this._emit('steppy:step', {\n index: step.index,\n id: step.id,\n total: this.manifest.steps.length,\n action: step.action,\n interactive: step.interactive,\n reason: opts.reason,\n });\n void this._playCurrentPosition();\n }\n\n /** Resolve the effective cursor mode. Host attribute wins; manifest is the\n * fallback; 'arrow' is the final default. Unknown attribute strings fall\n * through to the manifest so a typo can't strand the player. */\n private _effectiveCursorMode(): CursorMode {\n if (isCursorMode(this.cursor)) return this.cursor;\n const manifestMode = this.manifest?.cursor.mode;\n if (isCursorMode(manifestMode)) return manifestMode;\n return 'arrow';\n }\n\n private async _playCurrentPosition(): Promise<void> {\n const myToken = ++this.playToken;\n if (this.autoAdvanceTimer !== null) {\n clearTimeout(this.autoAdvanceTimer);\n this.autoAdvanceTimer = null;\n }\n const frame = this._currentFrame();\n if (!frame) return;\n const step = this._currentStep()!;\n const mode = this._effectiveCursorMode();\n\n // Wait for Lit to flush the new screenshot into the DOM.\n await this.updateComplete;\n if (this.playToken !== myToken) return;\n this.animator?.refreshDom();\n\n if (frame.cursor === null || mode === 'off') {\n // Non-interactive frame, or 'off' mode forcing auto-advance everywhere.\n this.animator?.hide();\n const delay = Math.max(0, step.waitAfter ?? 0) || 600;\n await new Promise<void>((resolve) => {\n this.autoAdvanceTimer = setTimeout(() => {\n this.autoAdvanceTimer = null;\n resolve();\n }, delay);\n });\n if (this.playToken !== myToken) return;\n this._advance();\n return;\n }\n\n // Interactive frame: in 'arrow' mode travel the cursor first; in\n // 'hotspot' mode skip the cursor animation entirely and go straight to\n // the click wait. The hotspot pulses either way.\n if (mode === 'arrow') {\n try {\n await this.animator?.travelToTarget(toAnimatorFrame(frame), this.currentTargetIndex);\n } catch {\n /* abort signal */\n }\n if (this.playToken !== myToken) return;\n } else {\n // Belt-and-suspenders: ensure no stale .visible state from a previous\n // 'arrow' run remains visible after a mid-play mode flip.\n this.animator?.hide();\n }\n this.waitingForInput = true;\n this._recomputeHotspot();\n this.waitForClick = new Promise<void>((resolve) => {\n this.resolveClick = resolve;\n });\n await this.waitForClick;\n if (this.playToken !== myToken) return;\n this.waitingForInput = false;\n this.hotspotRect = null;\n this.tooltipPlacement = null;\n if (mode === 'arrow') {\n try {\n await this.animator?.playTargetAction(toAnimatorFrame(frame), this.currentTargetIndex);\n } catch {\n /* abort signal */\n }\n if (this.playToken !== myToken) return;\n }\n this._advance();\n }\n\n private _advance(): void {\n if (!this.manifest) return;\n const step = this._currentStep();\n if (!step) return;\n const frame = this._currentFrame();\n if (!frame) return;\n\n if (frame.cursor) {\n const targets = CursorAnimator.normalizeTargets(frame.cursor);\n if (this.currentTargetIndex + 1 < targets.length) {\n this.currentTargetIndex += 1;\n void this._playCurrentPosition();\n return;\n }\n }\n // Next frame within step\n const captures = step.captures[this.locale!]?.[this.variant!] ??\n Object.values(step.captures[this.locale!] ?? {})[0];\n const frameCount = captures?.frames.length ?? 1;\n if (this.currentFrameIndex + 1 < frameCount) {\n this.currentFrameIndex += 1;\n this.currentTargetIndex = 0;\n void this._playCurrentPosition();\n return;\n }\n // Next step\n if (this.currentStepIndex + 1 < this.manifest.steps.length) {\n this._goToStep(this.currentStepIndex + 1, { reason: 'next' });\n return;\n }\n // End of guide\n this.completed = true;\n this.animator?.hide();\n this._emit('steppy:complete', {\n slug: this.manifest.slug,\n locale: this.locale,\n variant: this.variant,\n });\n }\n\n /** Idempotent: emits ``steppy:hotspot`` with target=correct and resolves the\n * current wait. A second call is a no-op (the wait already advanced). */\n private _confirmHotspotClick(): void {\n if (!this.resolveClick) return;\n const step = this._currentStep();\n if (step) {\n this._emit('steppy:hotspot', {\n index: step.index,\n id: step.id,\n target: 'correct',\n });\n }\n const resolve = this.resolveClick;\n this.resolveClick = null;\n resolve();\n }\n\n private _onStageClick(ev: MouseEvent): void {\n if (!this.waitingForInput) return;\n // The hotspot button (if any) sits inside the stage and has its own\n // click handler that calls _confirmHotspotClick + stopPropagation, so we\n // only reach this code for clicks outside the hotspot. Classify as miss.\n const step = this._currentStep();\n if (!step) return;\n this.missCount += 1;\n this._emit('steppy:hotspot', {\n index: step.index,\n id: step.id,\n target: 'miss',\n });\n // No timer needed; the toast and shake auto-clear via CSS.\n void ev;\n }\n\n private _onHotspotClick(ev: Event): void {\n ev.stopPropagation();\n this._confirmHotspotClick();\n }\n\n private _handleKeyDown = (ev: KeyboardEvent): void => {\n if (!this.manifest) return;\n // Enter/Space on a focused hotspot button fires its native click, which\n // _onHotspotClick handles — no separate keyboard branch needed here.\n if (ev.key === 'ArrowRight') {\n // Forward-advance (resolving any pending interactive wait), matching the\n // Next button — consistent across all templates.\n this.next();\n } else if (ev.key === 'ArrowLeft') {\n this.prev();\n }\n };\n\n private _onLocaleChange = (ev: Event): void => {\n const value = (ev.target as HTMLSelectElement).value;\n if (this.manifest && this.manifest.locales.includes(value)) {\n this.locale = value;\n // Stay on the same step — re-trigger the play loop so the new locale's\n // screenshot loads and the cursor re-animates.\n void this._playCurrentPosition();\n }\n };\n\n private _onVariantChange = (ev: Event): void => {\n // Setting `variant` triggers the layout-switch replay in `willUpdate`.\n this.variant = this._resolveVariant((ev.target as HTMLSelectElement).value);\n };\n\n private _onImgLoad = (): void => {\n this._recomputeHotspot();\n };\n\n private _emit(name: string, detail: unknown): void {\n this.dispatchEvent(\n new CustomEvent(name, { detail, bubbles: true, composed: true }),\n );\n }\n\n // ── Rendering ────────────────────────────────────────────────────────\n\n override render() {\n const ui = getUiStrings(this.locale ?? 'en', this.uiStrings);\n if (this.loadError) return this._renderError(this.loadError, ui);\n if (!this.manifest) return this._renderLoading(ui);\n\n const step = this._currentStep();\n if (!step) return this._renderLoading(ui);\n\n // Dispatch to the active presentation template. All three render the shared\n // stage (via the ctx.renderStage thunk) plus their own chrome.\n const ctx = this._buildTemplateContext(ui);\n const template = TEMPLATES[this._activeTemplate] ?? TEMPLATES.overlay;\n return template.render(ctx);\n }\n\n /** The live stage subtree (screenshot + cursor/ripple/kbd + hotspot +\n * miss-toast), shared verbatim by every template via the ``renderStage``\n * thunk so the refs + handlers stay bound to the component.\n *\n * A template *switch* swaps the whole top-level template, so Lit recreates\n * the stage element. That is handled by ``updated`` → ``_reattachStage``\n * (re-point the animator + ResizeObserver, recompute placement) WITHOUT\n * resetting step state, so the in-flight animation survives the move. The\n * floating tooltip is included only in overlay mode (sidebar and inline\n * surface the description in their own chrome). */\n private _renderStage() {\n const ui = getUiStrings(this.locale ?? 'en', this.uiStrings);\n const step = this._currentStep();\n const frame = this._currentFrame();\n const screenshot = frame?.screenshot ?? '';\n // Resolved through the same layout key the frame came from, so the caption\n // always describes the screenshot beside it.\n const text = step && this.locale ? this._contentFor(step, this.locale).text : '';\n return html`\n <div class=\"steppy-stage\" ${ref(this.stageRef)} @click=${this._onStageClick}>\n <img\n ${ref(this.imgRef)}\n src=${screenshot}\n alt=${text || step?.id || ''}\n @load=${this._onImgLoad}\n />\n <div class=\"steppy-cursor\" ${ref(this.cursorRef)} aria-hidden=\"true\"></div>\n <div class=\"steppy-ripple\" ${ref(this.rippleRef)} aria-hidden=\"true\"></div>\n <div class=\"steppy-kbd\" ${ref(this.kbdRef)} aria-hidden=\"true\"></div>\n ${step ? this._renderHotspot(ui, step, text) : nothing}\n ${this._activeTemplate === 'overlay' ? this._renderTooltip(text) : nothing}\n ${this.missCount > 0 ? this._renderMissToast(ui) : nothing}\n </div>\n `;\n }\n\n private _renderHotspot(ui: UiStrings, step: StepRuntime, text: string) {\n if (!this.waitingForInput || !this.hotspotRect) return nothing;\n const r = this.hotspotRect;\n const label = format(ui.hotspotLabel, { step: text || step.id });\n const missKey = this.missCount;\n return html`\n <button\n class=\"steppy-hotspot ${this.missCount > 0 ? 'miss' : ''}\"\n style=\"left:${r.x}px;top:${r.y}px;width:${r.width}px;height:${r.height}px\"\n aria-label=${label}\n data-miss-key=${missKey}\n @click=${this._onHotspotClick}\n ></button>\n `;\n }\n\n private _renderTooltip(text: string) {\n if (!this.waitingForInput || !this.hotspotRect || !this.tooltipPlacement) {\n return nothing;\n }\n const p = this.tooltipPlacement;\n return html`\n <div\n class=\"steppy-tooltip\"\n ${ref(this.tooltipRef)}\n style=\"left:${p.x}px;top:${p.y}px\"\n data-side=${p.side}\n >\n ${renderInlineMarkdown(text)}\n </div>\n `;\n }\n\n private _renderMissToast(ui: UiStrings) {\n // Keyed by missCount so each miss re-triggers the CSS animation.\n return html`<div class=\"steppy-miss-toast\" data-key=${this.missCount}>${ui.miss}</div>`;\n }\n\n // ── Engine → template context ─────────────────────────────────────────\n\n /** Project the ordered manifest steps into presentation view models. Pure\n * projection of engine state — no behavior, no duplicated gates. */\n private _buildStepViews(locale: string): StepView[] {\n if (!this.manifest) return [];\n return this.manifest.steps.map((s): StepView => {\n const i0 = s.index - 1;\n const status: StepView['status'] =\n i0 < this.currentStepIndex\n ? 'completed'\n : i0 === this.currentStepIndex\n ? 'current'\n : 'upcoming';\n // Per step, not once: each step owns its captures bag, and a layout\n // override may exist on some steps and not others. The whole list\n // re-labels on a layout switch, not just the current row.\n const content = this._contentFor(s, locale);\n return {\n index: s.index,\n title: content.title ?? content.text ?? s.id,\n description: content.text ?? '',\n subLabel: content.subtitle ?? '',\n status,\n reachable: i0 <= this.maxReachedStepIndex,\n };\n });\n }\n\n /** Display-only duration estimate (~8s/step). Never feeds the play loop. */\n private _durationLabel(ui: UiStrings): string {\n const seconds = (this.manifest?.steps.length ?? 0) * 8;\n if (seconds < 60) return format(ui.durationSeconds, { seconds });\n return format(ui.durationApprox, {\n minutes: Math.max(1, Math.round(seconds / 60)),\n });\n }\n\n private _buildTemplateContext(ui: UiStrings): TemplateContext {\n const manifest = this.manifest!;\n const locale = this.locale ?? manifest.defaultLocale;\n const layouts = manifest.layouts.length > 0 ? manifest.layouts : [];\n return {\n steps: this._buildStepViews(locale),\n currentIndex: this.currentStepIndex + 1,\n total: manifest.steps.length,\n durationLabel: this._durationLabel(ui),\n guideTitle: manifest.title[locale] ?? Object.values(manifest.title)[0] ?? '',\n locale,\n ui,\n waitingForInput: this.waitingForInput,\n completed: this.completed,\n onNext: () => this.next(),\n onPrev: () => this.prev(),\n onRestart: () => this.restart(),\n onGoTo: (i: number) => this.goTo(i),\n prevDisabled: this.currentStepIndex <= 0,\n nextDisabled: this.completed,\n locales: manifest.locales,\n layouts,\n templates: ALL_TEMPLATES,\n activeTemplate: this._activeTemplate,\n activeLocale: this.locale ?? '',\n activeLayout: this.variant,\n hideLayoutSwitcher: this.hideLayoutSwitcher,\n onLocaleChange: this._onLocaleChange,\n onLayoutChange: this._onVariantChange,\n onTemplateChange: (t) => this._onTemplateChange(t),\n renderStage: () => this._renderStage(),\n };\n }\n\n /** The built-in template switcher routes through the reflected property so\n * ``willUpdate`` re-resolves + persists (and hosts observe the attribute). */\n private _onTemplateChange(t: TemplateId): void {\n this.template = t;\n }\n\n // ── Template persistence + resolution ──────────────────────────────────\n\n private static readonly TEMPLATE_STORAGE_KEY = 'steppy:active-template';\n\n private _readPersistedTemplate(): TemplateId | null {\n try {\n const v = localStorage.getItem(SteppyGuide.TEMPLATE_STORAGE_KEY);\n return isTemplateId(v) ? v : null;\n } catch {\n return null;\n }\n }\n\n private _persistTemplate(t: TemplateId): void {\n try {\n localStorage.setItem(SteppyGuide.TEMPLATE_STORAGE_KEY, t);\n } catch {\n /* private mode / storage unavailable — non-fatal */\n }\n }\n\n /** Resolve the effective template: explicit ``template`` attribute →\n * persisted localStorage → manifest ``defaultTemplate`` → 'overlay'.\n * Unknown attribute strings fall through so a typo can't strand the player. */\n private _resolveTemplate(): TemplateId {\n if (isTemplateId(this.template)) return this.template;\n const persisted = this._readPersistedTemplate();\n if (persisted) return persisted;\n const fromManifest = this.manifest?.defaultTemplate;\n if (isTemplateId(fromManifest)) return fromManifest;\n return 'overlay';\n }\n\n private _renderLoading(ui: UiStrings) {\n return html`<div class=\"steppy-state\" role=\"status\">${ui.loading}</div>`;\n }\n\n private _renderError(error: ParseError, ui: UiStrings) {\n const detail =\n error.issues && error.issues.length > 0\n ? html`<div class=\"steppy-state-detail\">\n ${error.issues.map((i) => html`<div>${i.path}: ${i.message}</div>`)}\n </div>`\n : html`<div class=\"steppy-state-detail\">${error.message}</div>`;\n return html`\n <div class=\"steppy-state error\" role=\"alert\">\n <strong>${ui.errorTitle}</strong>\n ${detail}\n <button\n style=\"margin-top: 12px\"\n @click=${() => void this._loadManifest()}\n >\n ${ui.errorRetry}\n </button>\n </div>\n `;\n }\n}\n\n// Reserved for future host-side strict typing.\ndeclare global {\n interface HTMLElementTagNameMap {\n 'steppy-guide': SteppyGuide;\n }\n}\n\nexport { DEFAULT_UI_STRINGS };\nexport type { UiStrings };\n"],"names":["t","e","s","o","n$5","r","n","i","S","c","h","a","l","p","d","u","f","b","y$1","y","v","_","m","g","$","x","E","A","C","P","V","N","I","L","z","H","M","R","k","Z","B","D","DEFAULT_TIMINGS","sleep","ms","resolve","easeInOut","getDisplayScale","img","viewport","rect","scaleRect","bbox","scale","rectCenter","scaleBbox","travelDuration","from","to","speed","dx","dy","dist","bezierControlPoint","mx","my","nx","ny","CursorAnimator","opts","stage","behavior","tgt","value","done","frame","targets","targetIndex","index","cursor","center","duration","cp","start","now","raw","ripple","kbd","chars","per","ch","format","template","vars","key","baseLanguage","tag","lookupLocale","keys","requested","norm","list","wanted","exact","base","resolveStrings","defaults","locale","overrides","fallback","overrideKey","override","CHROME_STRINGS","DEFAULT_UI_STRINGS","getUiStrings","placeTooltip","hotspot","tooltip","gap","legacyPlace","above","below","left","right","verticalNeeded","horizontalNeeded","bestVertical","pick","bestHorizontal","cx","cy","clamp","lo","hi","computeHotspotRect","SAFE_GUIDE_URL","GUIDE_LINK_POLICY","url","INLINE_SRC","renderInlineMarkdown","src","policy","parts","pushText","ln","html","re","last","target","trail","href","resolveStepContent","step","layoutKey","captureLayoutKey","manifest","bag","util","assertIs","_arg","assertNever","_x","items","obj","item","validKeys","filtered","object","arr","checker","val","joinValues","array","separator","objectUtil","first","second","ZodParsedType","getParsedType","data","ZodIssueCode","ZodError","issues","sub","subs","actualProto","_mapper","mapper","issue","fieldErrors","processError","error","curr","el","formErrors","firstEl","errorMap","_ctx","message","overrideErrorMap","defaultErrorMap","getErrorMap","makeIssue","params","path","errorMaps","issueData","fullPath","fullIssue","errorMessage","maps","map","addIssueToContext","ctx","overrideMap","ParseStatus","status","results","arrayValue","INVALID","pairs","syncPairs","pair","finalObject","DIRTY","OK","isAborted","isDirty","isValid","isAsync","errorUtil","ParseInputLazyPath","parent","handleResult","result","processCreateParams","invalid_type_error","required_error","description","iss","ZodType","input","err","maybeAsyncResult","check","getIssueProperties","setError","refinementData","refinement","ZodEffects","ZodFirstPartyTypeKind","def","ZodOptional","ZodNullable","ZodArray","ZodPromise","option","ZodUnion","incoming","ZodIntersection","transform","defaultValueFunc","ZodDefault","ZodBranded","catchValueFunc","ZodCatch","This","ZodPipeline","ZodReadonly","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","nanoidRegex","jwtRegex","durationRegex","emailRegex","_emojiRegex","emojiRegex","ipv4Regex","ipv4CidrRegex","ipv6Regex","ipv6CidrRegex","base64Regex","base64urlRegex","dateRegexSource","dateRegex","timeRegexSource","args","secondsRegexSource","secondsQuantifier","timeRegex","datetimeRegex","regex","isValidIP","ip","version","isValidJWT","jwt","alg","header","base64","decoded","isValidCidr","ZodString","tooBig","tooSmall","validation","options","minLength","maxLength","len","min","max","floatSafeRemainder","valDecCount","stepDecCount","decCount","valInt","stepInt","ZodNumber","kind","inclusive","ZodBigInt","ZodBoolean","ZodDate","minDate","maxDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","ZodUnknown","ZodNever","ZodVoid","schema","deepPartialify","ZodObject","newShape","fieldSchema","ZodTuple","shape","shapeKeys","extraKeys","keyValidator","unknownKeys","catchall","defaultError","augmentation","merging","mask","newField","createZodEnum","handleResults","unionErrors","childCtx","dirty","types","getDiscriminator","type","ZodLazy","ZodLiteral","ZodEnum","ZodNativeEnum","ZodDiscriminatedUnion","discriminator","discriminatorValue","optionsMap","discriminatorValues","mergeValues","aType","bType","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","handleParsed","parsedLeft","parsedRight","merged","itemIndex","rest","schemas","ZodRecord","keyType","valueType","third","ZodMap","finalMap","ZodSet","finalizeSet","elements","parsedSet","element","minSize","maxSize","size","getter","values","expectedValues","enumValues","newDef","opt","nativeEnumValues","promisified","effect","checkCtx","arg","processed","executeRefinement","acc","inner","preprocess","newCtx","ZodNaN","inResult","freeze","stringType","numberType","booleanType","arrayType","objectType","discriminatedUnionType","recordType","literalType","enumType","SUPPORTED_MAJOR_VERSION","VERSION_RE","NonEmptyString","z.string","Bbox","z.object","z.number","CaptureSize","SingleTarget","MultiTarget","CursorBehavior","z.discriminatedUnion","z.literal","z.array","Frame","CaptureContent","Capture","LayoutMap","z.record","LocaleMap","LocalizedString","LocalizedRequired","ManifestAction","z.enum","ManifestStep","z.boolean","CURSOR_MODES","CursorModeSchema","TEMPLATE_MODES","TemplateModeSchema","CursorTimings","GuideManifestSchema","z.ZodIssueCode","layoutKeys","localeSet","layoutSet","idx","localeBag","layout","parseManifest","readVersion","majorStr","major","schemaError","PALETTE","FONTS","BUBBLE_LOOK","BUTTON_LOOK","cssValue","unsafeCSS","baseStyles","css","TEMPLATE_LABEL_KEY","renderProgress","renderCounter","renderPrev","renderNext","renderRestart","renderLocaleSelect","nothing","loc","renderLayoutSelect","lay","renderTemplateSwitcher","active","render","cur","styles","renderRow","TEMPLATES","overlay","sidebar","inline","ALL_TEMPLATES","TEMPLATE_SET","isTemplateId","templateStyles","toAnimatorFrame","CURSOR_MODE_VALUES","isCursorMode","SteppyGuide","LitElement","createRef","ev","changed","stageEl","row","response","text","targetVariant","candidate","initial","entries","entry","stageRect","tip","tipSize","stepIndex","manifestMode","myToken","mode","delay","frameCount","name","detail","ui","screenshot","ref","label","missKey","i0","content","seconds","layouts","persisted","fromManifest","__decorateClass","property","state","customElement"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,19,20,21,22,23,24,25]}
|