@specbook/ui 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-viewer/THIRD-PARTY-NOTICES.txt +0 -66
- package/dist-viewer/assets/Host-ClcN3YPO.js +41 -0
- package/dist-viewer/assets/{index-BBlFcQUE.js → index-BcHcUWbc.js} +1 -1
- package/dist-viewer/assets/main-CAlriyIm.js +15 -0
- package/dist-viewer/assets/{mount-DfwluJy4.js → mount-D3holu10.js} +2 -2
- package/dist-viewer/assets/panel-l1xvY4kI.css +1 -0
- package/dist-viewer/assets/{worker-BmvGpsJS.js → worker-13v89DyZ.js} +13 -13
- package/dist-viewer/index.html +4 -4
- package/dist-viewer/specbook.js +1 -1
- package/package.json +4 -4
- package/src/app.tsx +12 -3
- package/src/branding.ts +2 -1
- package/src/engine.ts +17 -0
- package/src/panel/OperationDocs.tsx +1 -1
- package/src/panel/RequestPanel.tsx +45 -5
- package/src/panel/SequencePanel.tsx +8 -1
- package/src/store.ts +2 -0
- package/src/styles/app.css +14 -1
- package/src/styles/panel.css +2 -4
- package/src/viewer/embed.ts +9 -2
- package/src/viewer/mount.ts +3 -18
- package/src/viewer/registry.ts +9 -13
- package/dist-viewer/assets/Host-Cq-4gDuM.js +0 -41
- package/dist-viewer/assets/faker-B3c03STC.js +0 -11
- package/dist-viewer/assets/main-CSkB-O_8.js +0 -14
- package/dist-viewer/assets/panel-hNOojwiM.css +0 -1
- package/dist-viewer/assets/registry-DIHX11uY.js +0 -2
- package/src/viewer/faker-en.ts +0 -3
- /package/dist-viewer/assets/{panel-9eYU7Gz6.js → panel-nV09I7Wr.js} +0 -0
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Host-Cq-4gDuM.js","./panel-9eYU7Gz6.js","./panel-hNOojwiM.css","./mount-DfwluJy4.js","./registry-DIHX11uY.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{a as e,c as t,d as n,h as r,l as i,m as a,n as o,o as s,p as c,r as l,s as u,u as d,v as f,y as p}from"./panel-9eYU7Gz6.js";import{a as m,n as h}from"./mount-DfwluJy4.js";import{a as g,c as _,d as v,environmentStore as y,f as b,i as x,l as S,loadManifests as C,m as w,mode as T,n as E,o as D,p as ee,r as te,s as O,t as k,u as ne}from"./registry-DIHX11uY.js";var re=Object.prototype.hasOwnProperty;function ie(e,t,n){for(n of e.keys())if(A(n,t))return n}function A(e,t){var n,r,i;if(e===t)return!0;if(e&&t&&(n=e.constructor)===t.constructor){if(n===Date)return e.getTime()===t.getTime();if(n===RegExp)return e.toString()===t.toString();if(n===Array){if((r=e.length)===t.length)for(;r--&&A(e[r],t[r]););return r===-1}if(n===Set){if(e.size!==t.size)return!1;for(r of e)if(i=r,i&&typeof i==`object`&&(i=ie(t,i),!i)||!t.has(i))return!1;return!0}if(n===Map){if(e.size!==t.size)return!1;for(r of e)if(i=r[0],i&&typeof i==`object`&&(i=ie(t,i),!i)||!A(r[1],t.get(i)))return!1;return!0}if(n===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(n===DataView){if((r=e.byteLength)===t.byteLength)for(;r--&&e.getInt8(r)===t.getInt8(r););return r===-1}if(ArrayBuffer.isView(e)){if((r=e.byteLength)===t.byteLength)for(;r--&&e[r]===t[r];);return r===-1}if(!n||typeof e==`object`){for(n in r=0,e)if(re.call(e,n)&&++r&&!re.call(t,n)||!(n in t)||!A(e[n],t[n]))return!1;return Object.keys(t).length===r}}return e!==e&&t!==t}var ae,oe,se,ce,le=!0;typeof process<`u`&&({FORCE_COLOR:ae,NODE_DISABLE_COLORS:oe,NO_COLOR:se,TERM:ce}={},le=process.stdout&&process.stdout.isTTY);var j={enabled:!oe&&se==null&&ce!==`dumb`&&(ae!=null&&ae!==`0`||le),reset:M(0,0),bold:M(1,22),dim:M(2,22),italic:M(3,23),underline:M(4,24),inverse:M(7,27),hidden:M(8,28),strikethrough:M(9,29),black:M(30,39),red:M(31,39),green:M(32,39),yellow:M(33,39),blue:M(34,39),magenta:M(35,39),cyan:M(36,39),white:M(37,39),gray:M(90,39),grey:M(90,39),bgBlack:M(40,49),bgRed:M(41,49),bgGreen:M(42,49),bgYellow:M(43,49),bgBlue:M(44,49),bgMagenta:M(45,49),bgCyan:M(46,49),bgWhite:M(47,49)};function ue(e,t){let n=0,r,i=``,a=``;for(;n<e.length;n++)r=e[n],i+=r.open,a+=r.close,~t.indexOf(r.close)&&(t=t.replace(r.rgx,r.close+r.open));return i+t+a}function de(e,t){let n={has:e,keys:t};return n.reset=j.reset.bind(n),n.bold=j.bold.bind(n),n.dim=j.dim.bind(n),n.italic=j.italic.bind(n),n.underline=j.underline.bind(n),n.inverse=j.inverse.bind(n),n.hidden=j.hidden.bind(n),n.strikethrough=j.strikethrough.bind(n),n.black=j.black.bind(n),n.red=j.red.bind(n),n.green=j.green.bind(n),n.yellow=j.yellow.bind(n),n.blue=j.blue.bind(n),n.magenta=j.magenta.bind(n),n.cyan=j.cyan.bind(n),n.white=j.white.bind(n),n.gray=j.gray.bind(n),n.grey=j.grey.bind(n),n.bgBlack=j.bgBlack.bind(n),n.bgRed=j.bgRed.bind(n),n.bgGreen=j.bgGreen.bind(n),n.bgYellow=j.bgYellow.bind(n),n.bgBlue=j.bgBlue.bind(n),n.bgMagenta=j.bgMagenta.bind(n),n.bgCyan=j.bgCyan.bind(n),n.bgWhite=j.bgWhite.bind(n),n}function M(e,t){let n={open:`\x1b[${e}m`,close:`\x1b[${t}m`,rgx:RegExp(`\\x1b\\[${t}m`,`g`)};return function(t){return this!==void 0&&this.has!==void 0?(~this.has.indexOf(e)||(this.has.push(e),this.keys.push(n)),t===void 0?this:j.enabled?ue(this.keys,t+``):t+``):t===void 0?de([e],[n]):j.enabled?ue([n],t+``):t+``}}function N(){}N.prototype={diff:function(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=n.callback;typeof n==`function`&&(r=n,n={}),this.options=n;var i=this;function a(e){return r?(setTimeout(function(){r(void 0,e)},0),!0):e}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e)),t=this.removeEmpty(this.tokenize(t));var o=t.length,s=e.length,c=1,l=o+s;n.maxEditLength&&(l=Math.min(l,n.maxEditLength));var u=n.timeout??1/0,d=Date.now()+u,f=[{oldPos:-1,lastComponent:void 0}],p=this.extractCommon(f[0],t,e,0);if(f[0].oldPos+1>=s&&p+1>=o)return a([{value:this.join(t),count:t.length}]);var m=-1/0,h=1/0;function g(){for(var n=Math.max(m,-c);n<=Math.min(h,c);n+=2){var r=void 0,l=f[n-1],u=f[n+1];l&&(f[n-1]=void 0);var d=!1;if(u){var g=u.oldPos-n;d=u&&0<=g&&g<o}var _=l&&l.oldPos+1<s;if(!d&&!_)f[n]=void 0;else{if(r=!_||d&&l.oldPos+1<u.oldPos?i.addToPath(u,!0,void 0,0):i.addToPath(l,void 0,!0,1),p=i.extractCommon(r,t,e,n),r.oldPos+1>=s&&p+1>=o)return a(fe(i,r.lastComponent,t,e,i.useLongestToken));f[n]=r,r.oldPos+1>=s&&(h=Math.min(h,n-1)),p+1>=o&&(m=Math.max(m,n+1))}}c++}if(r)(function e(){setTimeout(function(){if(c>l||Date.now()>d)return r();g()||e()},0)})();else for(;c<=l&&Date.now()<=d;){var _=g();if(_)return _}},addToPath:function(e,t,n,r){var i=e.lastComponent;return i&&i.added===t&&i.removed===n?{oldPos:e.oldPos+r,lastComponent:{count:i.count+1,added:t,removed:n,previousComponent:i.previousComponent}}:{oldPos:e.oldPos+r,lastComponent:{count:1,added:t,removed:n,previousComponent:i}}},extractCommon:function(e,t,n,r){for(var i=t.length,a=n.length,o=e.oldPos,s=o-r,c=0;s+1<i&&o+1<a&&this.equals(t[s+1],n[o+1]);)s++,o++,c++;return c&&(e.lastComponent={count:c,previousComponent:e.lastComponent}),e.oldPos=o,s},equals:function(e,t){return this.options.comparator?this.options.comparator(e,t):e===t||this.options.ignoreCase&&e.toLowerCase()===t.toLowerCase()},removeEmpty:function(e){for(var t=[],n=0;n<e.length;n++)e[n]&&t.push(e[n]);return t},castInput:function(e){return e},tokenize:function(e){return e.split(``)},join:function(e){return e.join(``)}};function fe(e,t,n,r,i){for(var a=[],o;t;)a.push(t),o=t.previousComponent,delete t.previousComponent,t=o;a.reverse();for(var s=0,c=a.length,l=0,u=0;s<c;s++){var d=a[s];if(!d.removed){if(!d.added&&i){var f=n.slice(l,l+d.count);f=f.map(function(e,t){var n=r[u+t];return n.length>e.length?n:e}),d.value=e.join(f)}else d.value=e.join(n.slice(l,l+d.count));l+=d.count,d.added||(u+=d.count)}else if(d.value=e.join(r.slice(u,u+d.count)),u+=d.count,s&&a[s-1].added){var p=a[s-1];a[s-1]=a[s],a[s]=p}}var m=a[c-1];return c>1&&typeof m.value==`string`&&(m.added||m.removed)&&e.equals(``,m.value)&&(a[c-2].value+=m.value,a.pop()),a}var pe=new N;function me(e,t,n){return pe.diff(e,t,n)}var he=/^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/,ge=/\S/,_e=new N;_e.equals=function(e,t){return this.options.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e===t||this.options.ignoreWhitespace&&!ge.test(e)&&!ge.test(t)},_e.tokenize=function(e){for(var t=e.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/),n=0;n<t.length-1;n++)!t[n+1]&&t[n+2]&&he.test(t[n])&&he.test(t[n+2])&&(t[n]+=t[n+2],t.splice(n+1,2),n--);return t};var ve=new N;ve.tokenize=function(e){this.options.stripTrailingCr&&(e=e.replace(/\r\n/g,`
|
|
3
|
-
`));var t=[],n=e.split(/(\n|\r\n)/);n[n.length-1]||n.pop();for(var r=0;r<n.length;r++){var i=n[r];r%2&&!this.options.newlineIsToken?t[t.length-1]+=i:(this.options.ignoreWhitespace&&(i=i.trim()),t.push(i))}return t};function ye(e,t,n){return ve.diff(e,t,n)}var be=new N;be.tokenize=function(e){return e.split(/(\S.+?[.!?])(?=\s+|$)/)};var xe=new N;xe.tokenize=function(e){return e.split(/([{}:;,]|\s+)/)};function Se(e){"@babel/helpers - typeof";return Se=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},Se(e)}var Ce=Object.prototype.toString,we=new N;we.useLongestToken=!0,we.tokenize=ve.tokenize,we.castInput=function(e){var t=this.options,n=t.undefinedReplacement,r=t.stringifyReplacer,i=r===void 0?function(e,t){return t===void 0?n:t}:r;return typeof e==`string`?e:JSON.stringify(Te(e,null,null,i),i,` `)},we.equals=function(e,t){return N.prototype.equals.call(we,e.replace(/,([\r\n])/g,`$1`),t.replace(/,([\r\n])/g,`$1`))};function Te(e,t,n,r,i){t||=[],n||=[],r&&(e=r(i,e));for(var a=0;a<t.length;a+=1)if(t[a]===e)return n[a];var o;if(Ce.call(e)===`[object Array]`){for(t.push(e),o=Array(e.length),n.push(o),a=0;a<e.length;a+=1)o[a]=Te(e[a],t,n,r,i);return t.pop(),n.pop(),o}if(e&&e.toJSON&&(e=e.toJSON()),Se(e)===`object`&&e!==null){t.push(e),o={},n.push(o);var s=[],c;for(c in e)e.hasOwnProperty(c)&&s.push(c);for(s.sort(),a=0;a<s.length;a+=1)c=s[a],o[c]=Te(e[c],t,n,r,c);t.pop(),n.pop()}else o=e;return o}var Ee=new N;Ee.tokenize=function(e){return e.slice()},Ee.join=Ee.removeEmpty=function(e){return e};function De(e,t,n){return Ee.diff(e,t,n)}var P={"--":j.red,"··":j.grey,"++":j.green},Oe=j.dim().italic,ke=j.dim(`→`),Ae=j.dim(`·`),je=j.dim(`↵`),Me=(e,t)=>P[e](e+Pe(t))+`
|
|
4
|
-
`,Ne=(e,t)=>j.dim(`L`+String(e).padStart(t,`0`)+` `),Pe=e=>e.replace(/[ ]/g,Ae).replace(/\t/g,ke).replace(/(\r?\n)/g,je);function Fe(e,t,n){let r=e.removed?`--`:e.added?`++`:`··`,i=e.value.replace(/\r?\n$/,``).split(`
|
|
5
|
-
`),a=0,o,s=``;for(e.added?s+=P[r]().underline(Oe(`Expected:`))+`
|
|
6
|
-
`:e.removed&&(s+=P[r]().underline(Oe(`Actual:`))+`
|
|
7
|
-
`);a<i.length;a++)o=i[a],o!=null&&(t&&(s+=Ne(t+a,n)),s+=Me(r,o||`
|
|
8
|
-
`));return s}function Ie(e,t){let n=De(e,t),r=0,i=0,a=0,o,s,c,l,u,d=Me(`··`,`[`);for(;r<n.length;r++)for(c=(o=n[r]).removed?`--`:o.added?`++`:`··`,o.added?d+=P[c]().underline(Oe(`Expected:`))+`
|
|
9
|
-
`:o.removed&&(d+=P[c]().underline(Oe(`Actual:`))+`
|
|
10
|
-
`),i=0;i<o.value.length;i++)for(l=o.value[i]&&typeof o.value[i]==`object`,s=He(o.value[i]).split(/\r?\n/g),a=0;a<s.length;)u=` `+s[a++]+(l?``:`,`),l&&a===s.length&&i+1<o.value.length&&(u+=`,`),d+=Me(c,u);return d+Me(`··`,`]`)}function Le(e,t,n=0){let r=0,i,a=``,o=ye(e,t),s=String(t.split(/\r?\n/g).length-n).length;for(;r<o.length;r++)a+=Fe(i=o[r],n,s),n&&!i.removed&&(n+=i.count);return a}function Re(e,t){let n=me(e,t),r=0,i=``,a,o=e.length,s=t.length,c=Pe(e),l=Pe(t);if(a=n[r],o!==s&&a.removed&&n[r+1]){let i=a.count-n[r+1].count;i==0||(i>0?(t=` `.repeat(i)+t,l=` `.repeat(i)+l,s+=i):i<0&&(e=` `.repeat(-i)+e,c=` `.repeat(-i)+c,o+=-i))}if(i+=ze(c,l,o,s),o===s)for(a=` `;r<o;r++)a+=e[r]===t[r]?` `:`^`;else for(a=` `;r<n.length;r++)a+=(n[r].added||n[r].removed?`^`:` `).repeat(Math.max(n[r].count,0)),r+1<n.length&&(n[r].added&&n[r+1].removed||n[r].removed&&n[r+1].added)&&(n[r+1].count-=n[r].count);return i+j.red(a)}function ze(e,t,n=String(e).length,r=String(t).length){let i=4,a=Math.max(n,r),o=typeof e,s=typeof t;if(o!==s){i=2;let c=i+a-n,l=i+a-r;e+=` `.repeat(c)+j.dim(`[${o}]`),t+=` `.repeat(l)+j.dim(`[${s}]`),n+=c+o.length+2,r+=l+s.length+2,a=Math.max(n,r)}return P[`++`](`++`+t+` `.repeat(i+a-r)+Oe(`(Expected)`))+`
|
|
11
|
-
`+P[`--`](`--`+e+` `.repeat(i+a-n)+Oe(`(Actual)`))+`
|
|
12
|
-
`}function Be(e,t){var n,r=0,i,a=Array.isArray(e),o=[],s=a?Array(e.length):{};if(a)for(r=0;r<s.length;r++)i=e[r],!i||typeof i!=`object`?s[r]=i:s[r]=Be(i,t[r]);else{for(n in t)o.push(n);for(;r<o.length;r++)Object.prototype.hasOwnProperty.call(e,n=o[r])&&(!(i=e[n])||typeof i!=`object`?s[n]=i:s[n]=Be(i,t[n]));for(n in e)s.hasOwnProperty(n)||(s[n]=e[n])}return s}function Ve(){var e=new Set;return function(t,n){return n===void 0?`[__VOID__]`:typeof n==`number`&&n!==n?`[__NAN__]`:typeof n==`bigint`?n.toString():!n||typeof n!=`object`?n:e.has(n)?`[Circular]`:(e.add(n),n)}}function He(e){return JSON.stringify(e,Ve(),2).replace(/"\[__NAN__\]"/g,`NaN`).replace(/"\[__VOID__\]"/g,`undefined`)}function Ue(e,t){if(Array.isArray(t)&&Array.isArray(e))return Ie(e,t);if(t instanceof RegExp)return Re(``+e,``+t);let n=e&&typeof e==`object`,r=t&&typeof t==`object`;return n&&r&&(e=Be(e,t)),r&&(t=He(t)),n&&(e=He(e)),t&&typeof t==`object`&&(e=He(Be(e,t)),t=He(t)),n=typeof e==`string`,r=typeof t==`string`,n&&/\r?\n/.test(e)?Le(e,``+t):r&&/\r?\n/.test(t)?Le(``+e,t):n&&r?Re(e,t):ze(e,t)}var We=w({Assertion:()=>Ge,equal:()=>Je,fixture:()=>tt,instance:()=>Ze,is:()=>qe,match:()=>Qe,not:()=>L,ok:()=>Ke,snapshot:()=>$e,throws:()=>nt,type:()=>Xe,unreachable:()=>Ye});function F(e){e=e.replace(/\r?\n/g,`
|
|
13
|
-
`);let t=e.match(/^[ \t]*(?=\S)/gm),n=0,r=1/0,i=(t||[]).length;for(;n<i;n++)r=Math.min(r,t[n].length);return i&&r?e.replace(RegExp(`^[ \\t]{${r}}`,`gm`),``):e}var Ge=class extends Error{constructor(e={}){super(e.message),this.name=`Assertion`,this.code=`ERR_ASSERTION`,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.details=e.details||!1,this.generated=!!e.generated,this.operator=e.operator,this.expects=e.expects,this.actual=e.actual}};function I(e,t,n,r,i,a,o){if(e)return;let s=o||a;throw o instanceof Error?o:new Ge({actual:t,expects:n,operator:r,message:s,details:i&&i(t,n),generated:!o})}function Ke(e,t){I(!!e,!1,!0,`ok`,!1,`Expected value to be truthy`,t)}function qe(e,t,n){I(e===t,e,t,`is`,Ue,`Expected values to be strictly equal:`,n)}function Je(e,t,n){I(A(e,t),e,t,`equal`,Ue,`Expected values to be deeply equal:`,n)}function Ye(e){I(!1,!0,!1,`unreachable`,!1,`Expected not to be reached!`,e)}function Xe(e,t,n){let r=typeof e;I(r===t,r,t,`type`,!1,`Expected "${r}" to be "${t}"`,n)}function Ze(e,t,n){let r="`"+(t.name||t.constructor.name)+"`";I(e instanceof t,e,t,`instance`,!1,`Expected value to be an instance of ${r}`,n)}function Qe(e,t,n){typeof t==`string`?I(e.includes(t),e,t,`match`,!1,`Expected value to include "${t}" substring`,n):I(t.test(e),e,t,`match`,!1,`Expected value to match \`${String(t)}\` pattern`,n)}function $e(e,t,n){e=F(e),t=F(t),I(e===t,e,t,`snapshot`,Le,`Expected value to match snapshot:`,n)}var et=(e,t)=>Le(e,t,1);function tt(e,t,n){e=F(e),t=F(t),I(e===t,e,t,`fixture`,et,`Expected value to match fixture:`,n)}function nt(e,t,n){!n&&typeof t==`string`&&(n=t,t=null);try{e(),I(!1,!1,!0,`throws`,!1,`Expected function to throw`,n)}catch(e){if(e instanceof Ge)throw e;typeof t==`function`?I(t(e),!1,!0,`throws`,!1,`Expected function to throw matching exception`,n):t instanceof RegExp&&I(t.test(e.message),!1,!0,`throws`,!1,`Expected function to throw exception matching \`${String(t)}\` pattern`,n)}}function L(e,t){I(!e,!0,!1,`not`,!1,`Expected value to be falsey`,t)}L.ok=L,qe.not=function(e,t,n){I(e!==t,e,t,`is.not`,!1,`Expected values not to be strictly equal`,n)},L.equal=function(e,t,n){I(!A(e,t),e,t,`not.equal`,!1,`Expected values not to be deeply equal`,n)},L.type=function(e,t,n){let r=typeof e;I(r!==t,r,t,`not.type`,!1,`Expected "${r}" not to be "${t}"`,n)},L.instance=function(e,t,n){let r="`"+(t.name||t.constructor.name)+"`";I(!(e instanceof t),e,t,`not.instance`,!1,`Expected value not to be an instance of ${r}`,n)},L.snapshot=function(e,t,n){e=F(e),t=F(t),I(e!==t,e,t,`not.snapshot`,!1,`Expected value not to match snapshot`,n)},L.fixture=function(e,t,n){e=F(e),t=F(t),I(e!==t,e,t,`not.fixture`,!1,`Expected value not to match fixture`,n)},L.match=function(e,t,n){typeof t==`string`?I(!e.includes(t),e,t,`not.match`,!1,`Expected value not to include "${t}" substring`,n):I(!t.test(e),e,t,`not.match`,!1,`Expected value not to match \`${String(t)}\` pattern`,n)},L.throws=function(e,t,n){!n&&typeof t==`string`&&(n=t,t=null);try{e()}catch(e){typeof t==`function`?I(!t(e),!0,!1,`not.throws`,!1,`Expected function not to throw matching exception`,n):t instanceof RegExp?I(!t.test(e.message),!0,!1,`not.throws`,!1,`Expected function not to throw exception matching \`${String(t)}\` pattern`,n):t||I(!1,!0,!1,`not.throws`,!1,`Expected function not to throw`,n)}};var rt=/\u001b\[[0-9;]*m/g,it=e=>e.replace(rt,``),at=/(?:\(|at )?([^\s()]+):(\d+):(\d+)\)?\s*$/;function ot(e){if(!e)return;let t=e.split(`
|
|
14
|
-
`).slice(1).map(e=>({line:e,m:at.exec(e)})),n=t[0]?.m?.[1];for(let{line:e,m:r}of t)if(!(!r||e.includes(`/core/src/assert`)||e.includes(`node_modules`))&&r[1]!==n)return{file:r[1],line:Number(r[2]),column:Number(r[3])}}function st(e=`soft`){let t=[],n=(n,r)=>{let i=r.length-1;return(...a)=>{let o=typeof a[i]==`string`?a[i]:void 0;try{r(...a),t.push({label:o??n,operator:n,pass:!0,location:ot(Error().stack)})}catch(r){if(r?.name!==`Assertion`||(t.push({label:it(String(r.message??o??n)),operator:n,pass:!1,actual:r.actual,expected:r.expects,diff:r.details?it(String(r.details)):void 0,location:ot(Error().stack)}),e===`hard`))throw r}}},r=We,i={};for(let e of[`ok`,`is`,`equal`,`type`,`instance`,`match`,`throws`,`unreachable`,`snapshot`,`fixture`])typeof r[e]==`function`&&(i[e]=n(e,r[e]));let a=n(`not`,r.not);for(let e of Object.keys(r.not??{}))typeof r.not[e]==`function`&&(a[e]=n(`not.${e}`,r.not[e]));return i.not=a,{assert:i,results:t}}var ct=e=>typeof e.opts.default==`function`;function lt(e){return typeof e==`function`?e():e}var ut=class extends Error{};function dt(e,t){let n=e.opts.value;return n?n(t):t}function ft(e,t){return e===t||JSON.stringify(e)===JSON.stringify(t)}function pt(e,t,n){switch(t.kind){case`select`:{let r=t.opts.options;if(r.length===0)throw new ut(`No options available for "${e}"`);let i=r.map(e=>dt(t,e));if(n!==void 0){if(!i.some(e=>ft(e,n)))throw new ut(`Value for "${e}" is not one of the available options`);return n}let a=t.opts.default;return typeof a==`number`&&Number.isInteger(a)&&a>=0&&a<i.length&&typeof i[0]!=`number`?i[a]:typeof a==`function`?a(r):a!==void 0&&i.some(e=>ft(e,a))?a:i[0]}case`multiselect`:{let e=t.opts.options;if(n!==void 0)return n;let r=t.opts.default;return typeof r==`function`?r(e):r??[]}case`object`:{let e=t.opts.shape,r=n??{};return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,pt(e,t,r[e])]))}case`array`:{let r=n??t.opts.default??[],{min:i,max:a}=t.opts;if(i!==void 0&&r.length<i)throw new ut(`"${e}" needs at least ${i} items`);if(a!==void 0&&r.length>a)throw new ut(`"${e}" allows at most ${a} items`);return r.map(n=>pt(e,t.opts.item,n))}case`boolean`:return n??lt(t.opts.default)??!1;case`number`:return n??lt(t.opts.default)??0;default:return n??lt(t.opts.default)??``}}function mt(e,t={}){return Object.fromEntries(Object.entries(e).map(([e,n])=>[e,pt(e,n,t[e])]))}function ht(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>{if(t.kind===`select`||t.kind===`multiselect`){let n=t.opts.label,r=t.opts.options.map(e=>({label:n?n(e):String(dt(t,e)),value:dt(t,e)}));return[e,{kind:t.kind,options:r}]}return[e,{kind:t.kind,default:lt(t.opts.default),generated:ct(t)}]}))}var R=class extends Error{variable;constructor(e,t){super(e),this.variable=t,this.name=`AddressError`}},gt=[`authorizationUrl`,`tokenUrl`,`openIdConnectUrl`,`clientId`];function _t(e,t,n={},r={}){return{...e.vars,...e.environments?.[t]?.vars,...n,...r}}function vt(e,t,n){for(let t of x(e))if(D(t)||O(t))throw new R(`${n} cannot use {{${t}}}: only environment variables are available`);let r;try{r=ne(e,t)}catch(e){throw e instanceof te?new R(`${n}: set ${e.variable}`,e.variable):e}if(typeof r==`object`&&r)throw new R(`${n} is not a text value`);let i=r==null?``:String(r).trim();if(/\{\{/.test(i))throw new R(`${n} still contains a placeholder: ${i}`);return i}function yt(e,t,n,r){let i=e.services[t]?.baseUrl,a=typeof i==`string`?i:i?.[n];if(!a)return;let o=`No base URL for ${t} in ${n}`,s=/\{\{/.test(a)?vt(a,r,o):a.trim();return s?s.replace(/\/+$/,``):void 0}function bt(e,t,n=`sign-in`){let r={...e};for(let e of gt){let i=r[e];if(typeof i!=`string`||!/\{\{/.test(i))continue;let a=vt(i,t,`${n} ${e}`);a?r[e]=a:delete r[e]}return r}function xt(e,t=[],n=[]){let r=new Set([`mock`]),i=Object.values(e.services??{});i.some(e=>typeof e.baseUrl==`string`)&&r.add(`live`);for(let e of i)if(e.baseUrl&&typeof e.baseUrl==`object`)for(let t of Object.keys(e.baseUrl))r.add(t);for(let t of Object.keys(e.environments??{}))r.add(t);for(let e of t)r.add(e);for(let e of n)r.add(e);return[...r]}function St(e){let t={},n=e=>{if(!(D(e)||O(e)))return t[e]??={services:[],profiles:[]},t[e]};for(let[t,r]of Object.entries(e.services??{})){let e=typeof r.baseUrl==`string`?[r.baseUrl]:Object.values(r.baseUrl??{});for(let r of e)for(let e of x(r)){let r=n(e);r&&!r.services.includes(t)&&r.services.push(t)}}for(let[t,r]of Object.entries(e.auth??{}))for(let e of gt){let i=r.oauth?.[e];if(typeof i==`string`)for(let r of x(i))n(r)?.profiles.push({profile:t,field:e})}return t}var Ct={comma:`,`,space:` `,pipe:`|`},wt=e=>typeof Blob<`u`&&e instanceof Blob;function Tt(e,t=`indices`,n=``,r=[]){if(typeof t==`string`||n||typeof e!=`object`||!e)Et(n,e,r,typeof t==`string`?t:`indices`);else for(let[n,i]of Object.entries(e))Et(n,i,r,t[n]??`indices`);return r}function Et(e,t,n,r){if(t!=null){if(Array.isArray(t)&&r in Ct&&t.every(e=>typeof e!=`object`||!e))n.push([e,t.map(String).join(Ct[r])]);else if(Array.isArray(t))t.forEach((t,i)=>{Et(r===`indices`||r in Ct?`${e}[${i}]`:r===`brackets`?`${e}[]`:e,t,n,r)});else if(typeof t==`object`)for(let[i,a]of Object.entries(t))Et(e?`${e}[${i}]`:i,a,n,r);else n.push([e,String(t)])}}function Dt(e,t=`indices`){return Tt(e,t).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join(`&`)}function Ot(e){let t=new FormData,n=(e,n)=>{n!=null&&(wt(n)?t.append(e,n,n.name??`file`):typeof n==`object`?t.append(e,new Blob([JSON.stringify(n)],{type:`application/json`})):t.append(e,String(n)))};for(let[t,r]of Object.entries(e??{}))if(Array.isArray(r))for(let e of r)n(t,e);else n(t,r);return t}function kt(e){return JSON.stringify(typeof e==`string`?{query:e}:e)}function At(e,t,n,r){switch(e){case`json`:return{body:JSON.stringify(t),contentType:`application/json`};case`graphql`:return{body:kt(t),contentType:`application/json`};case`form`:return{body:Dt(t,n),contentType:`application/x-www-form-urlencoded`};case`text`:return{body:String(t),contentType:`text/plain`};case`multipart`:return{body:Ot(t)};case`binary`:return{body:t,contentType:r||(wt(t)&&t.type?t.type:`application/octet-stream`)};default:return{body:t}}}function jt(e){if(wt(e)){let t=e;return{file:t.name??`file`,type:t.type,size:t.size}}return Array.isArray(e)?e.map(jt):typeof e==`object`&&e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,jt(t)])):e}var z=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Mt=e=>[`string`,`number`,`boolean`].includes(typeof e);function Nt(e,t){return typeof t==`number`&&typeof e==`string`&&e.trim()!==``&&!Number.isNaN(Number(e))?Number(e):typeof t==`string`&&typeof e==`number`?String(e):e}function Pt(e,t){if(z(e)&&z(t)){let n={...e};for(let[e,r]of Object.entries(t))e in n&&(n[e]=Pt(n[e],r));return n}if(Array.isArray(e)&&Array.isArray(t)){if(t.length===0)return e;if(t.every(Mt)&&e.every(Mt))return t;let n=e[0];return z(n)&&t.every(z)?t.map(e=>Pt(n,e)):e}return Mt(t)&&Mt(e)&&typeof t==typeof e?t:typeof e==`number`&&typeof t==`string`&&t.trim()!==``&&!Number.isNaN(Number(t))?Number(t):e}function Ft(e,t){let n={...e},r=Object.entries(t).filter(([,e])=>e!==void 0&&e!==``);for(let[e,t]of r)e in n&&!z(n[e])&&!Array.isArray(n[e])?n[e]=Nt(t,n[e]):r.length===1&&`id`in n&&/^(id|.*[a-z]Id|.*_id)$/.test(e)&&!z(n.id)&&!Array.isArray(n.id)&&(n.id=Nt(t,n.id));return n}var It=e=>Mt(e),Lt=new Set([`id`,`object`,`type`,`kind`,`created`,`updated`,`url`,`livemode`,`metadata`,`status`]);function Rt(e,t=[],n=[],r=0){if(r>6)return n;if(z(e))for(let[i,a]of Object.entries(e))Rt(a,[...t,i],n,r+1);else Array.isArray(e)?e.length&&Rt(e[0],[...t,0],n,r+1):It(e)&&n.push({path:t,value:e});return n}var zt=(e,t)=>{let n=e;for(let e of t){if(typeof n!=`object`||!n)return;n=n[e]}return n};function Bt(e,t,n=[],r=[],i=0){if(i>5)return r;if(z(e))for(let[a,o]of Object.entries(e))a===t&&It(o)?r.push([...n,a]):Bt(o,t,[...n,a],r,i+1);else Array.isArray(e)&&e.length&&Bt(e[0],t,[...n,0],r,i+1);return r}var Vt=(e,t)=>typeof e==typeof t||typeof t==`number`&&typeof e==`string`&&e.trim()!==``&&!Number.isNaN(Number(e));function Ht(e,t,n){let r=zt(e,t.slice(0,-1));typeof r==`object`&&r&&(r[t[t.length-1]]=n)}function Ut(e,t,n){let r=structuredClone(e),i=new Set(Rt(n).map(e=>e.path.join(`\0`)));for(let e of Rt(t)){if(zt(r,e.path)!==void 0)continue;let t=String(e.path[e.path.length-1]);if(Lt.has(t)||typeof e.path[e.path.length-1]==`number`)continue;let n=Bt(r,t).filter(e=>!i.has(e.join(`\0`)));if(n.length!==1)continue;let a=n[0],o=zt(r,a);Vt(e.value,o)&&(Ht(r,a,Nt(e.value,o)),i.add(a.join(`\0`)))}return r}var Wt=/^(limit|per_?page|page_?size|size|count|max|max_?results|take)$/i;function Gt(e){return Array.isArray(e)?e[0]:typeof e==`string`&&e.includes(`,`)?e.split(`,`)[0]?.trim():e}function Kt(e,t){let n=Object.entries(t).map(([e,t])=>[e,Gt(t)]).filter(([,e])=>It(e)&&e!==``);if(n.length===0)return e;let r=e=>{let t={...e};for(let[e,r]of n)e in t&&It(t[e])&&Vt(r,t[e])&&(t[e]=Nt(r,t[e]));return t},i=n.find(([e])=>Wt.test(e))?.[1],a=i!==void 0&&Number.isFinite(Number(i))?Math.min(Math.max(Math.trunc(Number(i)),1),10):void 0,o=e=>{if(!e.every(z))return e;let t=e.map(e=>r(e));if(a===void 0||t.length===0||t.length>=a)return t.slice(0,a??t.length);let n=t[0];return Array.from({length:a},(e,r)=>r<t.length?t[r]:{...n,...typeof n.id==`number`?{id:n.id+r}:{}})};if(Array.isArray(e))return o(e);if(z(e)){let t={...e},n=Object.entries(t).filter(([,e])=>Array.isArray(e)&&e.length>0&&e.every(z));if(n.length===1)t[n[0]?.[0]]=o(n[0]?.[1]);else return r(t);return t}return e}function qt(e,t){let n=e;if(t.body!==void 0){let e=z(n)&&Array.isArray(t.body)&&t.body.length>0&&t.body.every(z)?t.body[0]:t.body;(z(n)&&z(e)||Array.isArray(n)&&Array.isArray(e))&&(n=Pt(n,e),z(n)&&z(e)&&(n=Ut(n,e,e)))}return z(n)&&t.path&&(n=Ft(n,t.path)),t.query&&(n=Kt(n,t.query)),n}var Jt=e=>e>=200&&e<300,Yt=e=>e===void 0?e:JSON.parse(JSON.stringify(e));function Xt(e){let t=e.sleep??((e,t)=>new Promise((n,r)=>{if(t?.aborted)return r(Error(`Stopped before the API answered.`));let i=setTimeout(n,e);t?.addEventListener(`abort`,()=>{clearTimeout(i),r(Error(`Stopped before the API answered.`))},{once:!0})}));return async(n,r)=>{let i=n.mock,a=await e.loader.statuses(n.service,n.opId),o=n.mockStatus??a.find(Jt)??a[0]??200;if(i?.secured&&!n.headers.authorization&&!Object.keys(n.headers).some(e=>/api[-_]?key|token/i.test(e))&&n.mockStatus===void 0&&a.includes(401))return Zt(401,await e.loader.example(n.service,n.opId,401));let s={...i?.vars??{},...i?.pathParams??{},...i?.rawQuery??{}},c=async t=>{let r=Yt(await e.loader.example(n.service,n.opId,t));return Jt(t)&&(r=qt(r,{body:n.body,path:i?.pathParams,query:i?.rawQuery})),r===void 0?void 0:S(r,s)},l={status:o,data:await c(o),headers:{},delayMs:0,respond:(e,t)=>{u={status:e,data:t}}},u;if(i?.hook&&await i.hook({vars:i.vars??{},body:n.body,query:i.rawQuery,path:i.pathParams,headers:n.headers},l),u){let e=await c(u.status);l.status=u.status,l.data=u.data===void 0?e:g(e,u.data)}return l.delayMs&&await t(l.delayMs,r),{...Zt(l.status,l.data),headers:{"content-type":`application/json`,...l.headers}}}}function Zt(e,t){return{status:e,headers:{"content-type":`application/json`},text:t===void 0?``:JSON.stringify(t),body:t}}var B=class extends Error{constructor(e){super(e),this.name=`OAuthError`}},Qt=e=>`openIdConnectUrl`in e;function $t(e){let t=e&&typeof e==`object`?e:{},n=e=>typeof e==`string`&&/^https?:\/\//i.test(e)?e:void 0,r=n(t.authorization_endpoint),i=n(t.token_endpoint);if(!r||!i)throw new B(`The provider’s discovery document has no authorization or token endpoint`);let a=[`openid`,...(Array.isArray(t.scopes_supported)?t.scopes_supported.filter(e=>typeof e==`string`):[]).filter(e=>e!==`openid`)];return{authorizationUrl:r,tokenUrl:i,scopes:Object.fromEntries(a.map(e=>[e,``]))}}var en=e=>{let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)},tn=e=>en(crypto.getRandomValues(new Uint8Array(e)));async function nn(e){if(!globalThis.crypto?.subtle)throw new B(`Sign-in needs a secure page (https, or localhost). Open the viewer over https, or paste an access token.`);let t=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(e));return en(new Uint8Array(t))}async function rn(){let e=tn(48);return{verifier:e,challenge:await nn(e)}}var an=()=>tn(24);function on(e){let t=new URL(e.authorizationUrl);return t.searchParams.set(`response_type`,`code`),t.searchParams.set(`client_id`,e.clientId),t.searchParams.set(`redirect_uri`,e.redirectUri),e.scopes?.length&&t.searchParams.set(`scope`,e.scopes.join(` `)),t.searchParams.set(`state`,e.state),t.searchParams.set(`code_challenge`,e.challenge),t.searchParams.set(`code_challenge_method`,`S256`),t.toString()}function sn(e,t){let n=t=>(e instanceof URLSearchParams?e.get(t):e[t])??void 0,r=n(`error`);if(r){let e=n(`error_description`);throw new B(`Sign-in was refused: ${e?`${r} (${e})`:r}`)}if(n(`state`)!==t)throw new B(`Sign-in was rejected: the response did not match this request (state)`);let i=n(`code`);if(!i)throw new B(`Sign-in returned no authorization code`);return{code:i}}function cn(e){return{grant_type:`authorization_code`,code:e.code,redirect_uri:e.redirectUri,client_id:e.clientId,code_verifier:e.verifier}}function ln(e){let t=e&&typeof e==`object`?e:{};if(typeof t.error==`string`){let e=typeof t.error_description==`string`?` (${t.error_description})`:``;throw new B(`The token endpoint refused the code: ${t.error}${e}`)}if(typeof t.access_token!=`string`||t.access_token===``)throw new B(`The token endpoint returned no access token`);return{accessToken:t.access_token,...typeof t.expires_in==`number`?{expiresIn:t.expires_in}:{},...typeof t.scope==`string`?{scope:t.scope}:{}}}var un=123,dn=125,fn=e=>e===32||e===9||e===10||e===13,pn=e=>e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===95||e===36||e===45,mn=[115,101,99,114,101,116,115,46];function hn(e,t){let n=t+2;for(;n<e.length&&fn(e[n]);)n++;for(let t of mn)if(e[n++]!==t)return;let r=n;for(;n<e.length&&pn(e[n]);)n++;if(n===r)return;let i=String.fromCharCode(...e.subarray(r,n));for(;n<e.length&&fn(e[n]);)n++;if(e[n]===dn&&e[n+1]===dn)return{start:t,end:n+2,name:i}}function gn(e){let t=[];for(let n=0;n<e.length-1;n++)if(e[n]===un&&e[n+1]===un){let r=hn(e,n);r&&(t.push(r),n=r.end-1)}return t}var _n=new TextEncoder;function vn(e){return[...new Set(gn(e).map(e=>e.name))]}function yn(e,t){let n=gn(e).filter(e=>t.has(e.name));if(n.length===0)return e;let r=[],i=0;for(let a of n)r.push(e.subarray(i,a.start),_n.encode(t.get(a.name))),i=a.end;r.push(e.subarray(i));let a=new Uint8Array(r.reduce((e,t)=>e+t.length,0)),o=0;for(let e of r)a.set(e,o),o+=e.length;return a}var bn=new TextDecoder;function xn(e,t){return e.includes(`{{`)?bn.decode(yn(_n.encode(e),t)):e}var Sn=new TextDecoder(`utf-8`,{fatal:!0}),Cn=new TextEncoder;function wn(e){let t=``;for(let n=0;n<e.length;n+=32768)t+=String.fromCharCode(...e.subarray(n,n+32768));return btoa(t)}function Tn(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function En(e){try{return{kind:`text`,text:Sn.decode(e)}}catch{return{kind:`b64`,b64:wn(e)}}}function Dn(e){return e.kind===`text`?Cn.encode(e.text):Tn(e.b64)}async function On(e){let t={};e.headers.forEach((e,n)=>{t[n]=e});let n=e.method!==`GET`&&e.method!==`HEAD`&&e.body!==null;return{method:e.method,url:e.url,headers:t,...n?{body:En(new Uint8Array(await e.arrayBuffer()))}:{}}}function kn(e){let t=e.status===204||e.status===205||e.status===304;return new Response(e.body&&!t?Dn(e.body):null,{status:e.status,headers:e.headers})}var An=class extends Error{names;constructor(e){super(`Missing secrets: ${e.join(`, `)}`),this.names=e,this.name=`MissingSecretsError`}},jn=3;function Mn(e){let t=new Set([e]),n=e=>{try{t.add(e())}catch{}};return n(()=>encodeURIComponent(e)),n(()=>encodeURI(e)),n(()=>JSON.stringify(e).slice(1,-1)),n(()=>btoa(String.fromCharCode(...new TextEncoder().encode(e)))),[...t]}function Nn(e,t){let n=[...new Set([...t].filter(e=>e.length>=jn).flatMap(Mn))].sort((e,t)=>t.length-e.length);if(n.length===0)return e;let r=e=>n.reduce((e,t)=>e.split(t).join(`***`),e),i=e=>typeof e==`string`?r(e):Array.isArray(e)?e.map(i):typeof e==`object`&&e?Object.fromEntries(Object.entries(e).map(([e,t])=>[r(e),i(t)])):e;return i(e)}function Pn(e,t){let n=new URLSearchParams;for(let[e,r]of Object.entries(t.query))for(let t of Array.isArray(r)?r:[r])n.append(e,t);let r=n.toString();return`${e.replace(/\/+$/,``)}${t.url}${r?`?${r}`:``}`}function Fn(e,t){try{return new URL(e,t).toString()}catch{return e}}function In(e){return async(t,n)=>{if(n?.aborted)throw Error(`Stopped before the API answered.`);let r=e.fetch??fetch,i={...t.headers},a;if(t.body!==void 0&&t.method!==`GET`&&t.method!==`HEAD`){let e=At(t.encoding,t.body,t.formArrays,t.mediaType);a=e.body,e.contentType&&(i[`content-type`]??=e.contentType)}let o=new AbortController,s=!1,c=t.timeoutMs?setTimeout(()=>{s=!0,o.abort()},t.timeoutMs):void 0;n?.addEventListener(`abort`,()=>o.abort());try{let n=await r(Pn(e.baseUrl(t.service),t),{method:t.method,headers:i,body:a,signal:o.signal}),s=await n.text(),c={};n.headers.forEach((e,t)=>{c[t.toLowerCase()]=e});let l=s;if(s.length===0)l=void 0;else try{l=JSON.parse(s)}catch{l=s}return{status:n.status,headers:c,text:s,body:l}}catch(e){throw s?Error(`Timed out after ${t.timeoutMs}ms: no answer from the API.`):n?.aborted?Error(`Stopped before the API answered.`):e}finally{c&&clearTimeout(c)}}}var V=()=>Date.now(),Ln=class extends Error{};function Rn(){return`run_${Date.now().toString(36)}${Math.random().toString(36).slice(2,8)}`}var zn=(e={})=>Object.fromEntries(Object.entries(e).map(([e,t])=>[e.toLowerCase(),t]));function Bn(e){let t={};for(let[n,r]of Object.entries(e??{}))t[n]=typeof r==`function`?r():r;return t}async function Vn(e){return typeof e==`function`?(await e()).default:e}async function Hn(e,t,n){if(t.length===0)return Array.isArray(e)?Promise.all(e.map(e=>typeof e==`string`?n(e):e)):typeof e==`string`?n(e):e;if(Array.isArray(e))return Promise.all(e.map(e=>Hn(e,t,n)));let[r,...i]=t;return _(e)&&r in e?{...e,[r]:await Hn(e[r],i,n)}:e}async function Un(e,t,n,r,i){let a=e=>r(e,i);if(n===`binary`)return typeof e==`string`?a(e):e;let o=e;for(let e of t)o=await Hn(o,e.split(`.`),a);return o}function Wn(e,t,n){let r=new Set,i=[];for(let a of e){if(D(a)||O(a))continue;let e=a.split(`.`)[0];if(!r.has(e)){r.add(e);for(let r=t.length-1;r>=0;r--){let[a,o]=t[r];if(e in o){let s=a===`capture`?{key:e,source:a,step:n[e]}:{key:e,source:a};if(a===`capture`){let n=t.slice(0,r).reverse().find(([,t])=>e in t),[i,a]=[typeof n?.[1][e],typeof o[e]];n&&i!==a&&(s.shadows={source:n[0],type:i,replacedBy:a})}i.push(s);break}}}}return i}function Gn(e,t,n){let r=e=>e.replace(/\{\{\s*((?:secrets|session)\.[\w$-]+)\s*\}\}/g,(e,r)=>{let[i,a]=r.split(`.`);if(i===`secrets`){let n=t.o.secrets?.[a];if(n===void 0&&(t.o.env===`mock`||t.o.deferSecrets))return e;if(n===void 0)throw new An([a]);return t.mask.add(n),n}let o=(n?t.sessions.get(`${t.o.env}:${n}`)?.session:void 0)?.[a];if(o===void 0)throw new Ln(`No session value "${a}" for profile "${n}"`);return t.mask.add(String(o)),String(o)}),i=e=>wt(e)?e:typeof e==`string`?r(e):Array.isArray(e)?e.map(i):typeof e==`object`&&e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,i(t)])):e;return i(e)}function H(e,t){e.o.onEvent?.(e.mask.size?Nn(t,e.mask):t)}var Kn=new Set([`GET`,`HEAD`,`OPTIONS`]);function qn(e,t){if(e.input.safe||Kn.has(t.method))return!0;if(t.encoding===`graphql`){let e=t.body;return typeof e?.query==`string`&&!/(^|[\s}])mutation\b/.test(e.query)}return!1}function Jn(e,t){if(t.op.security===!1)return;let n=t.input.auth===void 0?e.seqAuth:t.input.auth;if(n===!1)return;let r=n??e.o.serviceAuth?.[t.op.service];return r&&e.o.auth?.[r]?r:void 0}function Yn(e,t){return{status:e.status,ok:e.status>=200&&e.status<300,headers:zn(e.headers),data:e.body,text:e.text,durationMs:t}}async function Xn(e,t,n,r=!1){let i=e.o.auth?.[t];if(!i.login||!i.token)return;let a=`${e.o.env}:${t}`,o=e.sessions.get(a);if(o&&(o.expiresAt===void 0||o.expiresAt>(e.o.now?.()??V()))&&!r)return;let s=e.inflight.get(a);if(s)return s;let c=(async()=>{let r=i;H(e,{type:`auth:login`,profile:t});let{result:o,response:s}=await Qn(e,await r.login(),`Login (${t})`,Zn,`auth`,!0);if(n.push(o),!s?.ok)throw new Ln(`Login for profile "${t}" failed (${s?.status})`);let c=r.token(s),l=typeof c.expiresIn==`number`?(e.o.now?.()??V())+c.expiresIn*1e3:void 0;e.sessions.set(a,{session:c,expiresAt:l});for(let t of Object.values(c))typeof t==`string`&&e.mask.add(t)})().finally(()=>e.inflight.delete(a));return e.inflight.set(a,c),c}var Zn={inputs:{},captured:{},from:{}};async function Qn(e,t,n,r,i=`request`,a=!1){let o=e.o.now?.()??V(),s=[],c={name:n,kind:i,status:`pass`,assertions:[],captured:{},durationMs:0},l=t.input.assertMode??e.seqAssertMode??e.o.assertMode??`soft`;H(e,{type:`step:start`,name:n});let u;try{let o=[[`config`,e.o.vars??{}],[`init`,Bn(t.input.init)],[`input`,r.inputs],[`capture`,r.captured],[`override`,Bn(t.varOverrides)],[`override`,e.o.overrides??{}]],d=Object.assign({},...o.map(e=>e[1])),f;if(t.input.example&&(f=await e.o.example?.(t.op,t.input.example),!f))throw new Ln(`Example "${t.input.example}" not found for ${t.op.id}`);let p=g(f?.body,await Vn(t.input.data));for(let e of t.dataPatches)p=g(p,e);let m=g(f?.path??{},t.input.path??{}),h=g(f?.query??{},t.input.query??{}),_={...f?.headers??{},...t.input.headers??{}};c.uses=Wn(x([p,m,h,_]),o,r.from);let v=p===void 0?void 0:S(p,d),y=S(m,d)??{},b=S(h,d)??{},C=zn(S(_,d)),w=t.input.encoding??t.op.encoding??(v===void 0?`none`:`json`);v!==void 0&&e.o.readFile&&(t.op.files?.length||w===`binary`)&&(v=await Un(v,t.op.files??[],w,e.o.readFile,f?.dir));let T=a?void 0:Jn(e,t),E=T?e.o.auth?.[T]:void 0,D={};E&&T&&(C={...zn(S(E.apply.headers??{},d)),...C},Object.assign(D,S(E.apply.query??{},d)));let ee=t.op.path.replace(/\{([^}]+)\}/g,(e,t)=>{let n=y[t];if(n==null)throw new Ln(`Missing path parameter "${t}"`);return encodeURIComponent(String(n))}),te={};for(let[e,t]of Object.entries({...b,...D}))t!=null&&(te[e]=Array.isArray(t)?t.map(String):String(t));let O={service:t.op.service,opId:t.op.id,method:t.op.method,url:ee,query:te,headers:C,body:v,encoding:w,mediaType:w===`binary`?t.op.mediaType:void 0,formArrays:t.op.formArrays,timeoutMs:t.input.timeoutMs??e.o.timeoutMs??3e4,mockStatus:e.o.env===`mock`?e.o.mockStatus:void 0,mock:e.o.env===`mock`?{hook:t.mockHook,vars:d,pathParams:y,rawQuery:b,secured:t.op.security}:void 0};if(c.request={opId:t.op.id,method:O.method,service:O.service,url:O.url,query:O.query,headers:O.headers,body:jt(O.body),profile:T},H(e,{type:`request`,name:n,request:c.request}),e.o.readOnly&&i!==`auth`&&!qn(t,O))throw new Ln(`Refusing ${O.method} ${t.op.path} in "${e.o.env}": this is a --safe run, which only reads.`);let k=async()=>{T&&await Xn(e,T,s);let{mock:t,...n}=O,r={...Gn(n,e,T),mock:t},i=e.o.now?.()??V();return Yn(await e.o.transport(r,e.o.signal),(e.o.now?.()??V())-i)};u=await k(),u.status===401&&T&&E?.retryOn401!==!1&&E?.login&&(await Xn(e,T,s,!0),u=await k()),c.response={status:u.status,headers:u.headers,body:u.data,durationMs:u.durationMs},H(e,{type:`response`,name:n,status:u.status,durationMs:u.durationMs});for(let[e,n]of Object.entries(t.input.capture??{}))c.captured[e]=n(u,d);if(H(e,{type:`capture`,name:n,captured:c.captured}),t.input.assert){let r=st(l);try{await t.input.assert(u,{assert:r.assert,vars:{...d,...c.captured},req:c.request})}catch(e){e?.name!==`Assertion`&&(c.status=`error`,c.error=`assert threw: ${e?.message??e}`)}c.assertions=r.results;for(let t of r.results)H(e,{type:t.pass?`assert:pass`:`assert:fail`,name:n,assertion:t})}else if(e.o.implicitStatusCheck&&i===`request`){let t=u.status>=200&&u.status<300,r={label:`status is 2xx`,operator:`status`,pass:t,actual:u.status,expected:`2xx`};c.assertions=[r],H(e,{type:t?`assert:pass`:`assert:fail`,name:n,assertion:r})}c.status===`pass`&&c.assertions.some(e=>!e.pass)&&(c.status=`fail`)}catch(e){c.status=`error`,c.error=e instanceof Error?e.message:String(e)}return c.durationMs=(e.o.now?.()??V())-o,H(e,{type:`step:end`,name:n,status:c.status}),{result:c,response:u,authResults:s}}function $n(e){let t={steps:0,passed:0,failed:0,skipped:0,assertions:{passed:0,failed:0}},n=e=>{if(e.children?.length)e.children.forEach(n);else{t.steps++,e.status===`pass`?t.passed++:e.status===`skipped`?t.skipped++:t.failed++;for(let n of e.assertions)n.pass?t.assertions.passed++:t.assertions.failed++}};return e.forEach(n),t}function er(e){let t=[],n=e=>{t.push(e),e.children?.forEach(n)};return e.forEach(n),t.some(e=>e.status===`error`)?`error`:t.some(e=>e.status===`fail`)?`fail`:`pass`}function tr(e,t,n,r,i){let a=Nn({schemaVersion:1,runId:Rn(),kind:t,id:n.id,title:n.title,env:e.o.env,locale:e.o.locale,seed:e.o.seed,usedDrafts:e.o.usedDrafts??!1,tags:n.tags??[],status:er(r),startedAt:new Date(i).toISOString(),durationMs:(e.o.now?.()??V())-i,totals:$n(r),steps:r},e.mask);return H(e,{type:`done`,result:a}),a}function nr(e){return{o:e,sessions:new Map,inflight:new Map,mask:new Set(Object.values(e.secrets??{}))}}async function rr(e,t){let n=nr(t),r=t.now?.()??V();H(n,{type:`run:start`,id:e.op.id,title:e.input.name??e.op.id,kind:`request`,tags:e.input.tags});let i=e.input.name??e.op.id,{result:a,authResults:o}=await Qn(n,e,i,Zn);return tr(n,`request`,{id:e.op.id,title:i,tags:e.input.tags},[...o,a],r)}async function ir(e,t){let n=nr(t);n.seqAuth=e.meta.auth,n.seqAssertMode=e.meta.assertMode;let r=t.now?.()??V();H(n,{type:`run:start`,id:e.meta.id,title:e.meta.title,kind:`sequence`,tags:e.meta.tags});let i=[],a={},o={},s=(e,t)=>{Object.assign(a,e);for(let n of Object.keys(e))o[n]=t},c;try{c=mt(e.meta.inputs??{},t.inputs)}catch(t){return i.push({name:`inputs`,kind:`input`,status:`error`,assertions:[],captured:{},error:t.message,durationMs:0}),tr(n,`sequence`,e.meta,i,r)}let l=t.vars??{},u=()=>({inputs:c,captured:a,vars:{...l,...t.overrides??{}},env:t.env}),d=!1,f=(e,t)=>i.push({name:e,kind:t,status:`skipped`,assertions:[],captured:{},durationMs:0});for(let r of e.nodes)if(d&&!e.meta.continueOnFailure)f(r.name,r.kind===`step`?`request`:r.kind);else if(t.signal?.aborted)f(r.name,r.kind===`step`?`request`:r.kind),d=!0;else try{if(r.kind===`step`){let{result:e,authResults:t}=await Qn(n,typeof r.def==`function`?r.def(u()):r.def,r.name,{inputs:c,captured:a,from:o});i.push(...t,e),s(e.captured,r.name),e.status!==`pass`&&(d=!0)}else if(r.kind===`each`){let l=r.items(u()),f={name:r.name,kind:`each`,status:`pass`,assertions:[],captured:{},durationMs:0,children:[]},p=t.now?.()??V(),m={};for(let t=0;t<l.length;t++){let{result:i,authResults:s}=await Qn(n,r.def(l[t],u(),t),`${r.name} #${t+1}`,{inputs:c,captured:a,from:o});f.children?.push(...s,i);for(let[e,t]of Object.entries(i.captured))m[e]??=[],m[e]?.push(t);if(i.status!==`pass`&&(f.status=i.status,!e.meta.continueOnFailure))break}f.captured=m,f.durationMs=(t.now?.()??V())-p,s(m,r.name),i.push(f),f.status!==`pass`&&(d=!0)}else if(r.kind===`input`){let e=r.controls(u()),a=ht(e);H(n,{type:`input:required`,name:r.name,controls:a});let o=mt(e,t.onInput?await t.onInput({name:r.name,controls:a}):t.inputs??{});c={...c,...o},i.push({name:r.name,kind:`input`,status:`pass`,assertions:[],captured:o,durationMs:0})}else if(r.kind===`check`){let a=st(e.meta.assertMode??t.assertMode??`soft`),o={name:r.name,kind:`check`,status:`pass`,assertions:[],captured:{},durationMs:0};H(n,{type:`step:start`,name:r.name});try{await r.fn(u(),{assert:a.assert})}catch(e){e?.name!==`Assertion`&&(o.status=`error`,o.error=e?.message??String(e))}o.assertions=a.results,o.status===`pass`&&a.results.some(e=>!e.pass)&&(o.status=`fail`),H(n,{type:`step:end`,name:r.name,status:o.status}),i.push(o),o.status!==`pass`&&(d=!0)}}catch(e){let t=e instanceof ut;i.push({name:r.name,kind:r.kind===`step`?`request`:r.kind,status:`error`,assertions:[],captured:{},error:t?e.message:e?.message??String(e),durationMs:0}),d=!0}return tr(n,`sequence`,e.meta,i,r)}var U=d({links:[],ready:!1});function ar(e){let t=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(e.trim());if(!t)return;let n=t[1].length===3?[...t[1]].map(e=>e+e).join(``):t[1];return[0,2,4].map(e=>Number.parseInt(n.slice(e,e+2),16))}function or(e){let t=ar(e);if(!t)return;let n=t.map(e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4}),r=.2126*n[0]+.7152*n[1]+.0722*n[2],i=1.05/(r+.05);return(r+.05)/.056>i?`#0b1020`:`#ffffff`}var sr=e=>`--sb-accent:${e};--sb-accent-hover:color-mix(in srgb,${e} 82%,black);--sb-focus-ring:color-mix(in srgb,${e} 45%,white);`+(or(e)?`--sb-text-on-accent:${or(e)};`:``);function cr(e,t=`root`){if(!e.accent&&!e.accentDark)return``;let n=t===`host`?`:host`:`:root`,r=t===`host`?`:host(:not([data-theme="light"]))`:`:root:not([data-theme="light"])`,i=t===`host`?`:host([data-theme="dark"])`:`:root[data-theme="dark"]`,a=e.accent?`${n}{${sr(e.accent)}}`:``;return e.accentDark?`${a}@media (prefers-color-scheme: dark){${r}{${sr(e.accentDark)}}}${i}{${sr(e.accentDark)}}`:a}function lr(e,t,n){if(typeof document>`u`)return;let r=document.getElementById(`specbook-brand`);r||(r=document.createElement(`style`),r.id=`specbook-brand`,document.head.append(r)),r.textContent=e?cr(e):``;let i=t.name??n;if(document.title=t.title?`${i} · ${t.title}`:i,t.favicon||t.logo){let e=document.querySelector(`link[rel="icon"]`);e||(e=document.createElement(`link`),e.rel=`icon`,document.head.append(e)),e.href=t.favicon??t.logo}}var ur;function dr(e){ur=e,typeof location<`u`&&(W.value=hr(location.hash))}var fr=e=>ur&&e.startsWith(`${ur}/`)?e.slice(ur.length+1):e,pr=e=>ur&&!e.includes(`/`)?`${ur}/${e}`:e,mr=e=>encodeURIComponent(e).replace(/%2F/gi,`/`);function hr(e){let[t=``,n=``]=e.split(`?`),r=new URLSearchParams(n),i=r.get(`play`)??void 0,a=r.get(`tab`),o=a===`docs`||a===`try`?a:void 0,s=/^#\/op\/(.+)$/.exec(t);if(s)return{kind:`op`,key:pr(decodeURIComponent(s[1])),play:i,tab:o};let c=/^#\/seq\/(.+)$/.exec(t);return c?{kind:`seq`,id:decodeURIComponent(c[1]),play:i,tab:o}:t===`#/browse`?{kind:`browse`}:{kind:`home`}}function gr(e){if(e.kind===`home`)return`#/`;if(e.kind===`browse`)return`#/browse`;let t=e.kind===`op`?`#/op/${mr(fr(e.key))}`:`#/seq/${encodeURIComponent(e.id)}`,n=new URLSearchParams;e.play!==void 0&&n.set(`play`,e.play),e.tab&&n.set(`tab`,e.tab);let r=n.toString();return r?`${t}?${r}`:t}var _r=()=>typeof matchMedia==`function`&&matchMedia(`(max-width: 820px)`).matches,vr=e=>_r()?{kind:`browse`}:{kind:`home`},W=d(hr(typeof location>`u`?``:location.hash)),G=d(!1),yr=d(``),br=d(``);function K(e){location.hash=gr(e),W.value=e}function xr(e,t,n=40){let r=t.trim().toLowerCase().split(/\s+/).filter(Boolean);if(r.length===0)return e.slice(0,n);let i=[];for(let t of e){let e=t.title.toLowerCase(),n=`${e} ${t.group.toLowerCase()} ${t.hay.toLowerCase()}`;if(!r.every(e=>n.includes(e)))continue;let a=0;for(let t of r)a+=e.startsWith(t)?3:e.includes(t)?2:1;t.kind===`seq`&&(a+=.5),t.kind===`req`&&(a+=.4),i.push([a,t])}return i.sort((e,t)=>t[0]-e[0]).slice(0,n).map(([,e])=>e)}function Sr({size:t=16}){return e(`svg`,{viewBox:`0 0 24 24`,width:t,height:t,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`,children:[e(`path`,{d:`M3 3l19 9-19 9 3.5-9z`}),e(`path`,{d:`M6.5 12H14`})]})}function Cr({size:t=12}){return e(`svg`,{viewBox:`0 0 24 24`,width:t,height:t,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`,children:[e(`rect`,{x:`4`,y:`11`,width:`16`,height:`10`,rx:`2`}),e(`path`,{d:`M8 11V7a4 4 0 0 1 8 0v4`})]})}function wr({size:t=16}){return e(`svg`,{viewBox:`0 0 24 24`,width:t,height:t,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`,children:[e(`path`,{d:`M12 15V3`}),e(`path`,{d:`M7.5 7.5 12 3l4.5 4.5`}),e(`path`,{d:`M5 11H4.5A1.5 1.5 0 0 0 3 12.5v7A1.5 1.5 0 0 0 4.5 21h15a1.5 1.5 0 0 0 1.5-1.5v-7a1.5 1.5 0 0 0-1.5-1.5H19`})]})}function Tr({size:t=16}){return e(`svg`,{viewBox:`0 0 16 16`,width:t,height:t,fill:`currentColor`,"aria-hidden":`true`,children:e(`path`,{d:`M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82a7.6 7.6 0 0 1 4 0c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z`})})}function Er({size:t=16}){return e(`svg`,{viewBox:`0 0 24 24`,width:t,height:t,fill:`currentColor`,"aria-hidden":`true`,children:e(`rect`,{x:`6`,y:`6`,width:`12`,height:`12`,rx:`2`})})}function Dr(){let e=new Map;return{getItem:t=>e.get(t)??null,setItem:(t,n)=>void e.set(t,String(n)),removeItem:t=>void e.delete(t)}}function Or(e){try{let t=globalThis[e];if(t)return t}catch{}return Dr()}var kr={get local(){return Or(`localStorage`)},get session(){return Or(`sessionStorage`)}},Ar=`specbook.environments.v1`,jr={local:{},session:{}},Mr=e=>e===`local`?kr.local:kr.session;function Nr(e){try{let t=Mr(e).getItem(Ar);return t?JSON.parse(t):jr[e]}catch{return jr[e]}}function Pr(e,t){jr[e]=t;try{Mr(e).setItem(Ar,JSON.stringify(t))}catch{}}function Fr(e,t=`local`){return{all:()=>Nr(t)[e]??{},save(n,r){let i=Nr(t);Pr(t,{...i,[e]:{...i[e],[n]:r}})},remove(n){let r=Nr(t),{[n]:i,...a}=r[e]??{};Pr(t,{...r,[e]:a})}}}var Ir=`specbook`;function Lr(e){return{version:e,send(e,t){return new Promise((n,r)=>{let i=e.id,a=e=>{let t=e.data;if(e.source!==window||t?.channel!==`${Ir}:reply`||!t.reply)return;let r=t.reply;(i===void 0||r.id===i)&&(s(),n(t.reply))},o=()=>{s(),window.postMessage({channel:`${Ir}:call`,call:{v:1,type:`abort`,id:i}},`*`),r(new DOMException(`aborted`,`AbortError`))},s=()=>{window.removeEventListener(`message`,a),t?.removeEventListener(`abort`,o)};window.addEventListener(`message`,a),t?.addEventListener(`abort`,o),window.postMessage({channel:`${Ir}:call`,call:e},`*`)})}}}async function Rr(e=250){let t=globalThis.__SPECBOOK_EXTENSION__;if(t)return t;if(typeof window>`u`)return;let n=Lr(1),r=new Promise(t=>setTimeout(()=>t(void 0),e)),i=await Promise.race([n.send({v:1,type:`ping`}).catch(()=>void 0),r]);return i?.type===`pong`?{...n,version:i.version}:void 0}var zr=0;function Br(e,t){return In({baseUrl:t,fetch:async(t,n)=>{let r=new Request(t,n),i=`c${Date.now().toString(36)}${zr++}`,a=await e.send({v:1,type:`fetch`,id:i,req:await On(r)},n?.signal??void 0);if(a.type===`error`)throw Error(a.message);if(a.type!==`response`)throw Error(`unexpected reply from the extension`);return kn(a.res)}})}var Vr=`specbook.secrets.v1`,Hr={},Ur=()=>{try{let e=kr.session.getItem(Vr);return e?JSON.parse(e):Hr}catch{return Hr}},Wr=e=>{Hr=e;try{kr.session.setItem(Vr,JSON.stringify(e))}catch{}},Gr={get:(e,t)=>Ur()[e]?.[t],set(e,t,n){let r=Ur();Wr({...r,[e]:{...r[e],[t]:n}})},remove(e,t){let n=Ur(),{[t]:r,...i}=n[e]??{};Wr({...n,[e]:i})}},Kr=e=>{try{return e?new URL(e).origin:void 0}catch{return}},qr=/\{\{\s*secrets\.([\w$-]+)\s*\}\}/g;function Jr(e){return e.proxy?`proxy`:e.pageOrigin&&Kr(e.baseUrl)===e.pageOrigin?`direct`:e.extension?`extension`:`direct`}var Yr=e=>{let t=new Set,n=e=>{if(typeof e==`string`)for(let n of vn(new TextEncoder().encode(e)))t.add(n);else Array.isArray(e)?e.forEach(n):e&&typeof e==`object`&&Object.getPrototypeOf(e)===Object.prototype&&Object.values(e).forEach(n)};return n(e.headers),n(e.query),n(e.body),[...t]};function Xr(e,t){return(n,r)=>{let i=Yr(n);if(i.length===0)return e(n,r);let a=t.originFor(n.service),o=new Map,s=[];for(let e of i){let n=a?t.store.get(a,e):void 0;n===void 0?s.push(e):o.set(e,n)}if(s.length&&t.unresolved===`fail`)throw new An(s);let c=e=>typeof e==`string`?xn(e,o):Array.isArray(e)?e.map(c):e&&typeof e==`object`&&Object.getPrototypeOf(e)===Object.prototype?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,c(t)])):e;return e({...n,headers:c(n.headers),query:c(n.query),body:c(n.body)},r)}}function Zr(e){return(t,n)=>{let r=Jr({proxy:!!e.proxy,extension:!!e.extension,baseUrl:e.baseOf(t.service),pageOrigin:e.pageOrigin});return((r===`proxy`?e.proxy:r===`extension`?e.extension:e.direct)??e.direct)(t,n)}}var Qr=`auth:`,$r=e=>`${Qr}${encodeURIComponent(e)}`,ei=`discovery:`,ti=e=>`${ei}${encodeURIComponent(e)}`,ni=/^[A-Za-z0-9_-]+$/,ri=/^[A-Za-z_][\w.-]*$/,ii=e=>typeof e==`string`?/\{\{/.test(e):typeof e==`object`&&!!e&&Object.values(e).some(ii),ai=e=>typeof e==`object`&&e?JSON.stringify(e):String(e??``);function oi(e,t={}){let n={statuses:(t,n)=>e.manifests[t]?.operations.find(e=>e.id===n)?.statuses??[],async example(t,n,r){let i=async r=>(await e.examples[`${t}/${n}.${r}`]?.(0))?.default;return await i(r)??await i(`default`)}};async function r(t){return(await e.loadConfig(t)).default}let i=()=>e.mode!==`dev`,a=()=>i()?t.environmentStore?.all()??{}:{},o=new Set;async function s(e){let t=await r(e),n={};for(let[e,r]of Object.entries(t.environments??{})){let t=r?.risk;(t===`production`||t===`sandbox`)&&(n[e]=t)}for(let[e,t]of Object.entries(a()))t.from&&n[t.from]&&!n[e]&&(n[e]=n[t.from]);return n}async function c(e){let t=await r(e),n={};for(let[e,r]of Object.entries(t.environments??{})){let t=r?.description;t&&(n[e]=t)}for(let[e,t]of Object.entries(a()))t.from&&(n[e]=`copy of ${t.from}, kept in this browser`);return n}async function l(t){let n=await r(t);return xt({services:n.services??{},environments:n.environments},[...Object.keys(e.environmentVars??{}),...o],Object.keys(a()))}async function u(t){if(e.mode===`dev`)try{let e=await fetch(`/__specbook/environment?env=${encodeURIComponent(t)}`);if(e.ok)return(await e.json()).vars}catch{}return{...e.environmentVars?.[t],...a()[t]?.vars}}async function d(e,t){return _t(await r(t),e,await u(e))}async function f(e,t,n){return yt(await r(n),e,t,await d(t,n))}async function p(e,t,n){let i=(await r(n)).auth?.[e]?.oauth;return!i||!ii(i)?i:bt(i,await d(t,n),e)}async function m(e,t){let n=_t(e,t,Object.values(e.services??{}).some(e=>ii(e.baseUrl))||Object.values(e.auth??{}).some(e=>ii(e.oauth))?await u(t):{});return{baseUrl(r){try{return yt(e,r,t,n)}catch{return}},oauth(t){let r=e.auth?.[t]?.oauth;try{return r?bt(r,n,t):void 0}catch{return}}}}async function h(n,o){let s=await r(o),c=s.vars??{},l=s.environments?.[n]?.vars??{},d=a()[n],f=i()?e.environmentVars?.[n]??{}:await u(n),p=d?.vars??{},m=[...new Set([...Object.keys(c),...Object.keys(l),...Object.keys(f),...Object.keys(p)])],h=e.mode===`dev`||!!t.environmentStore,g=m.map(e=>{let t=e in l?l[e]:c[e],n=e in p?`browser`:e in f?`file`:void 0,r=e in p?p[e]:e in f?f[e]:t,i=e in p&&e in f?f[e]:t;return{name:e,value:ai(r),source:n??(e in l?`config`:`default`),fallback:n&&i!==void 0?ai(i):void 0,editable:h}}),_=_t(s,n,{...f,...p}),v=[];if(n!==`mock`)for(let e of Object.keys(s.services??{}))try{let t=yt(s,e,n,_);v.push({service:e,...t?{url:t}:{}})}catch(t){if(!(t instanceof R))throw t;v.push({service:e,error:t.message})}return{rows:g,addresses:v,uses:St(s),removable:!!d?.from}}let _=()=>e.mode===`dev`||!!t.environmentStore;async function y(n,i,a){if(!ni.test(n))throw Error(`Use letters, digits, "-" and "_" in an environment name`);if(n===`mock`||(await l(a)).includes(n))throw Error(`"${n}" already exists`);if(e.mode===`dev`){let e=await fetch(`/__specbook/environment`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({name:n,from:i})});if(!e.ok)throw Error((await e.json()).error??`could not create`);o.add(n);return}if(!t.environmentStore)throw Error(`This page has nowhere to keep a new environment`);let s={...(await r(a)).environments?.[i]?.vars??{},...await u(i)};t.environmentStore.save(n,{from:i,vars:Object.fromEntries(Object.entries(s).filter(([,e])=>e!==null&&typeof e!=`object`).map(([e,t])=>[e,String(t)]))})}async function x(n,r,i){if(!ri.test(r))throw Error(`"${r}" is not a variable name`);if(e.mode===`dev`){let e=await fetch(`/__specbook/var`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({env:n,name:r,value:i})});if(!e.ok)throw Error((await e.json()).error??`save failed`);return}let a=t.environmentStore;if(!a)throw Error(`This page has nowhere to keep a variable`);let o=a.all()[n]??{vars:{}},s={...o.vars};i===null?delete s[r]:s[r]=i,!o.from&&Object.keys(s).length===0?a.remove(n):a.save(n,{...o,vars:s})}function S(e){t.environmentStore?.remove(e)}async function C(e,t){let n=await r(t);return[...new Set([...Object.keys(n.vars??{}),...Object.keys(n.environments?.[e]?.vars??{}),...Object.keys(await u(e))])]}async function w(i,a,o,s={}){if(i===`mock`)return Xt({loader:n});let c=await r(o),l=Object.values(c.services??{}).some(e=>ii(e.baseUrl))?await d(i,o):{},u=globalThis.location?.href,f=globalThis.location?.origin,p=e=>{if(s[e])return s[e];let t;try{t=yt(c,e,i,l)}catch(e){throw e instanceof R?Error(e.message):e}if(!t)throw Error(`No base URL for ${e} in ${i}`);return Fn(t,u)},m=e.mode!==`static`,h=await t.extension?.(),g=h?Br(h,x):void 0,_=t.secrets??Gr,v=In({baseUrl:p}),y=m?In({baseUrl:e=>`${a}/${i}/${e}`}):void 0;return Zr({direct:S(Xr(v,{store:_,originFor:b,unresolved:`fail`})),proxy:y?Xr(y,{store:_,originFor:b,unresolved:`keep`}):void 0,extension:g?Xr(g,{store:_,originFor:b,unresolved:`keep`}):void 0,baseOf:x,pageOrigin:f});function b(e){return Kr(x(e))}function x(e){try{return p(e)}catch{return``}}function S(e){return async(t,n)=>{try{return await e(t,n)}catch(e){throw e instanceof TypeError&&(t.service.startsWith(Qr)||t.service.startsWith(ei))?Error(`The browser could not reach the sign-in provider (${s[t.service]??`unknown`}). It probably does not allow calls from this page (CORS). Embedding the viewer on the API's origin does not help when the sign-in server is on another host; the browser extension can make the call. You can still paste an access token.`):e instanceof TypeError?Error(`The browser could not reach ${t.service} in "${i}". The API probably does not allow calls from this page (CORS). It works when the viewer runs on the API's own origin: embed it in the API's docs route ("Embed the viewer" in the README). Mock data keeps working.`):e}}}}async function T(t){if(e.mode!==`dev`||t===`mock`)return{};try{let e=await fetch(`/__specbook/environment?env=${encodeURIComponent(t)}`);if(!e.ok)return{};let n=await e.json();return Object.fromEntries((n.secrets??[]).filter(e=>e.source).map(e=>[e.name,e.source]))}catch{return{}}}let D=new Map;async function te(e){if(e.env===`mock`)throw Error(`Sign in needs a live environment, not mock`);let t;try{t=await p(e.profile,e.env,e.version)}catch(e){throw e instanceof R?Error(e.message):e}if(!t)throw Error(`"${e.profile}" has no sign-in configured`);if(!Qt(t))return{authorizationUrl:t.authorizationUrl,tokenUrl:t.tokenUrl,scopes:t.scopes??{}};let n=new URL(t.openIdConnectUrl),r=D.get(n.href);r||(r=(async()=>{let t=ti(e.profile),r=await(await w(e.env,e.proxyBase??`/__specbook/proxy`,e.version,{[t]:n.origin}))({service:t,opId:`oidc-discovery`,method:`GET`,url:n.pathname,query:Object.fromEntries(n.searchParams),headers:{accept:`application/json`},encoding:`none`},e.signal);if(r.status>=400)throw Error(`The provider's discovery document answered ${r.status}`);return $t(r.body)})(),D.set(n.href,r),r.catch(()=>D.delete(n.href)));let i=await r;return{...i,scopes:t.scopes&&Object.keys(t.scopes).length?t.scopes:i.scopes}}async function O(e){let{tokenUrl:t}=await te(e),n=new URL(t),r=$r(e.profile),i=await(await w(e.env,e.proxyBase??`/__specbook/proxy`,e.version,{[r]:n.origin}))({service:r,opId:`oauth-token`,method:`POST`,url:n.pathname,query:Object.fromEntries(n.searchParams),headers:{accept:`application/json`},body:e.fields,encoding:`form`},e.signal),a=i.body;if(i.status>=400&&typeof a?.error!=`string`)throw Error(`The token endpoint answered ${i.status}`);return i.body}let k=e=>e.replace(/^\.\//,``),ne=t=>e.requestExamples[t]??[];async function re(e,t,n){let r=ne(e).find(e=>e.name===t);if(r)return{...(await r.load(n)).default,source:r.source,dir:r.dir}}async function ie(t,n){let r=await e.assets[`${n}/${k(t)}`]?.();if(!r)throw Error(`File "${t}" not found next to the example`);let i=await fetch(r);if(!i.ok)throw Error(`Could not read "${t}" (${i.status})`);return new File([await i.blob()],k(t).split(`/`).pop(),{type:i.headers.get(`content-type`)??void 0})}async function A(e){let t=await r(e.version),n=t.auth??{},i=Object.fromEntries(Object.entries(t.services??{}).filter(([,e])=>e.auth).map(([e,t])=>[e,t.auth]));return{env:e.env,vars:await d(e.env,e.version),overrides:e.vars,inputs:e.inputs,transport:await w(e.env,e.proxyBase??`/__specbook/proxy`,e.version),deferSecrets:!0,auth:n,serviceAuth:i,onEvent:e.onEvent,onInput:e.onInput,signal:e.signal,timeoutMs:t.timeoutMs,example:(t,n)=>re(`${t.service}/${t.id}`,n,e.version),readFile:(t,n)=>ie(t,n??e.fileDir)}}async function ae(e,t){if(e.kind===`sequence`)return!0;let{init:n,data:r,example:i,path:a,query:o,headers:s}=e.input;if(Object.values(n??{}).some(e=>typeof e==`function`)||typeof r==`function`)return!0;let c=i?await re(`${e.op.service}/${e.op.id}`,i,t.version):void 0;return v([c,r,e.dataPatches,a,o,s,t.vars])}async function oe(t,n,i){if(!e.loadFaker)return!1;let[a,o]=await Promise.all([e.loadFaker(t),r(t)]),s=await ee(a,o.faker,n);return b(s,o.faker,{locale:n,seed:i}),!0}async function se(t,n){e.loadFaker&&await ae(t,n)&&await oe(n.version,n.locale,n.seed);let r=await A(n);return t.kind===`sequence`?ir(t,r):rr(t,n.env===`mock`?{...r,mockStatus:n.mockStatus}:r)}async function ce(t,n,r,i){let a=e.operations[t];if(!a)throw Error(`Unknown operation ${t}`);let o=(await a(n))[t.split(`/`)[1]];if(!o)throw Error(`Operation module for ${t} has no export`);let s=Object.fromEntries(Object.entries(r).filter(([,e])=>e!==void 0)),c=o.request({...i?.input??{},...s});return i?.mockHook?E(c,i.mockHook):c}async function le(t,n){return(await e.operations[t]?.(n))?.[t.split(`/`)[1]]?.meta}async function j(e,t){let n=`${e.op.service}/${e.op.id}`,r=e.input.example?await re(n,e.input.example,t):void 0,i=e.input.data;typeof i==`function`&&(i=(await i()).default);let a=g(r?.body,i);for(let t of e.dataPatches)a=g(a,t);return{name:e.input.name??e.op.id,source:`project`,dir:r?.dir,path:g(r?.path??{},e.input.path??{}),query:g(r?.query??{},e.input.query??{}),headers:{...r?.headers??{},...e.input.headers??{}},body:a}}async function ue(e,t){let n={};await Promise.all(e.map(async e=>{try{let r=si(await e.load(t));if(r?.kind!==`request`)return;let i=`${r.op.service}/${r.op.id}`,a=r.input.name??e.file.replace(/^.*\//,``).replace(/\.req\.ts$/,``);n[i]??=[],n[i]?.push({file:e.file,name:a,def:r})}catch{}}));for(let e of Object.values(n))e.sort((e,t)=>e.name.localeCompare(t.name));return n}async function de(e,t){let n=[];return await Promise.all(e.map(async e=>{try{let r=si(await e.load(t));r?.kind===`sequence`&&n.push({file:e.file,seq:r})}catch{}})),n.sort((e,t)=>e.seq.meta.title.localeCompare(t.seq.meta.title))}return{config:r,environments:l,environmentRisks:s,environmentNotes:c,environmentVars:u,environmentView:h,canCreateEnvironment:_,createEnvironment:y,deleteEnvironment:S,setVariable:x,baseUrlOf:f,oauthOf:p,addressesIn:m,managedSecrets:T,oauthEndpoints:te,oauthExchange:O,run:se,fakerReady:oe,operationRequest:ce,operationMeta:le,examplesOf:ne,knownVars:C,loadExample:re,savedExample:j,loadVariants:ue,loadSequences:de}}function si(e){let t=e=>e&&(e.kind===`request`||e.kind===`sequence`);return t(e.default)?e.default:Object.values(e).find(t)}var q=d(Date.now()),J=d(`mock`),Y=d([`mock`]),ci=d({}),li=d({}),ui=d(void 0),X=d(void 0),di=d(0),fi=d(!1),pi=d(!1),mi=d({createEnvironment:!0,environmentSettings:!0}),Z=k,hi,gi=async()=>{if(hi&&Date.now()-hi.at<3e4)return hi.bridge;let e=await Rr();return hi={at:Date.now(),bridge:e},e},_i=y,vi=_i===null?void 0:Fr(_i?.scope??`${globalThis.location?.origin}${globalThis.location?.pathname}`,_i?.session?`session`:`local`),Q=oi(k,{extension:gi,environmentStore:vi}),yi=T===`static`;async function bi(e,t){let n=await fetch(`/__specbook/save`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({path:e,content:t})});if(!n.ok)throw Error((await n.json()).error??`save failed`);q.value=Date.now()}function xi(){if(!globalThis.__SPECBOOK_VIEWER__)return null;let t=Y.value.some(e=>e!==`mock`);return e(`p`,{class:`muted overview-mode`,children:t?`Requests start on mock data. Switch Environment to live to call the real API.`:`Requests run on generated mock data: this document does not say where the API lives.`})}var Si=/(^|\.)specbook\.dev$/i;function Ci(e){return e.published&&e.badge!==!1&&!Si.test(e.host)}var wi=e=>`https://ui.specbook.dev/?ref=${encodeURIComponent(e)}`;function Ti(){let t=globalThis.location?.hostname??``;return Ci({host:t,published:yi,badge:U.value.badge})?e(`p`,{class:`powered-by`,children:e(`a`,{href:wi(t),target:`_blank`,rel:`noopener`,children:`Powered by Specbook`})}):null}var Ei=60,Di=`Default`;function Oi(e){let t=W.value;if(e.route.kind===`op`&&t.kind===`op`&&e.route.key===t.key){let n=(t.play??``).startsWith(`saved:`);return e.kind===`req`?t.play===e.route.play:!n}return e.route.kind===`seq`&&t.kind===`seq`&&e.route.id===t.id}function ki({e:t}){return e(`button`,{type:`button`,class:`op-row ${Oi(t)?`active`:``}`,onClick:()=>K(t.route),title:t.path?`${t.title}\n${t.path}`:t.title,children:[e(`span`,{class:`method ${t.method}`,children:t.method}),e(`span`,{class:`op-title`,children:[t.title,t.secured&&e(`span`,{class:`op-lock`,title:`Needs credentials`,children:e(Cr,{})})]}),e(`span`,{class:`op-path`,children:t.path})]})}function Ai(e,t){let n=br.value.trim(),r=t.length<=1,i=r?t[0]?.id??``:yr.value,o=a(()=>e.filter(e=>e.kind===`op`),[e]),s=a(()=>e.filter(e=>e.kind===`seq`),[e]),c=a(()=>e.filter(e=>e.kind===`req`),[e]),l=a(()=>{let e=i?c.filter(e=>e.service===i):c;return n?xr(e,n,200):e},[c,i,n]);return{q:n,single:r,svc:i,shownOps:a(()=>{let e=i?o.filter(e=>e.service===i):o;return n?xr(e,n,500):e},[o,i,n]),shownFlows:a(()=>{let e=i&&!r?s.filter(e=>e.tags?.includes(i)):s;return n?xr(e,n,100):e},[s,i,n,r]),shownReqs:l}}function ji({entries:t,services:i}){let o=c(null),s=c(null),[l,u]=r(new Map),{q:d,single:f,svc:p,shownOps:m,shownFlows:h,shownReqs:g}=Ai(t,i),_=e=>l.get(`section:${e}`)??!0,v=e=>{let t=new Map(l);t.set(`section:${e}`,!_(e)),u(t)};n(()=>{let e=e=>{let t=e.target;e.key===`/`&&!/^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName)&&(e.preventDefault(),o.current?.focus())};return addEventListener(`keydown`,e),()=>removeEventListener(`keydown`,e)},[]),n(()=>{let e=s.current;if(!e)return;let t=t=>{if(t.key!==`ArrowDown`&&t.key!==`ArrowUp`)return;let n=[...e.querySelectorAll(`.op-row, .flow-row`)],r=n.indexOf(document.activeElement);if(r<0)return;let i=t.key===`ArrowDown`?r+1:r-1;t.preventDefault(),i>=0&&i<n.length?n[i]?.focus():i<0&&o.current?.focus()};return e.addEventListener(`keydown`,t),()=>e.removeEventListener(`keydown`,t)},[]);let y=a(()=>{let e=new Map;for(let t of m){let n=t.tag??`default`,r=p||f?n:`${t.service} · ${n}`;e.set(r,[...e.get(r)??[],t])}return[...e.entries()].sort(([e],[t])=>e.localeCompare(t))},[m,p,f]),b=a(()=>{let e=new Map;for(let t of h){let n=t.flowGroup?.trim()||Di;e.set(n,[...e.get(n)??[],t])}let t=e=>e===Di?0:1;return[...e.entries()].sort(([e],[n])=>t(e)-t(n)||e.localeCompare(n))},[h]),x=m.length>Ei&&!d,S=(e,t)=>l.get(e)??(!x||t.some(Oi)),C=(e,t)=>{let n=new Map(l);n.set(e,!S(e,t)),u(n)};return e(`div`,{class:`catalog`,ref:s,children:[e(`div`,{class:`cat-top`,children:[!f&&e(`div`,{class:`pills`,role:`tablist`,"aria-label":`APIs`,children:[e(`button`,{type:`button`,role:`tab`,"aria-selected":p===``,class:`pill ${p===``?`on`:``}`,onClick:()=>yr.value=``,children:`All`}),i.map(t=>e(`button`,{type:`button`,role:`tab`,"aria-selected":p===t.id,class:`pill ${p===t.id?`on`:``}`,onClick:()=>yr.value=t.id,children:[t.id,` `,e(`span`,{class:`count`,children:t.ops})]}))]}),e(`div`,{class:`cat-filter-wrap`,children:[e(`input`,{ref:o,type:`text`,class:`cat-filter`,placeholder:p?`Filter ${p}`:`Filter operations and flows`,"aria-label":`Filter`,value:br.value,onInput:e=>br.value=e.target.value,onKeyDown:e=>{e.key===`ArrowDown`&&(e.preventDefault(),s.current?.querySelector(`.op-row, .flow-row`)?.focus()),e.key===`Escape`&&(br.value=``)}}),e(`kbd`,{class:`cat-hint`,title:`Focus the filter`,children:`/`})]})]}),b.length>0&&e(`section`,{class:`flows`,"aria-label":`Flows`,children:[e(`button`,{type:`button`,class:`flows-title`,"aria-expanded":_(`flows`),onClick:()=>v(`flows`),children:[e(`span`,{class:`caret`,children:_(`flows`)?`▾`:`▸`}),e(`span`,{class:`method flow`,children:`FLOW`}),e(`span`,{class:`muted small`,children:`Multi-step flows you can run end to end`}),e(`span`,{class:`count`,children:h.length})]}),_(`flows`)&&b.map(([t,n])=>{let r=`flows:${t}`,i=b.length===1,a=i||(l.get(r)??!0);return e(`div`,{class:`flow-group`,children:[!i&&e(`button`,{type:`button`,class:`group-head flow-head`,"aria-expanded":a,onClick:()=>{let e=new Map(l);e.set(r,!a),u(e)},children:[e(`span`,{class:`caret`,children:a?`▾`:`▸`}),` `,t,` `,e(`span`,{class:`count`,children:n.length})]}),a&&n.map(t=>e(`button`,{type:`button`,class:`op-row flow-row ${Oi(t)?`active`:``}`,onClick:()=>K(t.route),children:[e(`span`,{class:`flow-play`,"aria-hidden":`true`,children:`▶`}),e(`span`,{class:`op-title`,children:t.title})]}))]},r)})]}),g.length>0&&e(`section`,{class:`flows requests`,"aria-label":`Requests`,children:[e(`button`,{type:`button`,class:`flows-title`,"aria-expanded":_(`requests`),onClick:()=>v(`requests`),children:[e(`span`,{class:`caret`,children:_(`requests`)?`▾`:`▸`}),e(`span`,{class:`method req`,children:`REQ`}),e(`span`,{class:`muted small`,children:`Requests you can run and check`}),e(`span`,{class:`count`,children:g.length})]}),_(`requests`)&&g.map(t=>e(`button`,{type:`button`,class:`op-row req-row ${Oi(t)?`active`:``}`,onClick:()=>K(t.route),title:`${t.method} ${t.path}`,children:[e(`span`,{class:`method ${t.method}`,children:t.method}),e(`span`,{class:`op-title`,children:[t.title,(t.tags??[]).map(t=>e(`span`,{class:`chip req-tag`,children:t}))]}),e(`span`,{class:`op-path`,children:t.path})]}))]}),y.map(([t,n])=>{let r=S(t,n);return e(`div`,{class:`op-group`,children:[e(`button`,{type:`button`,class:`group-head`,"aria-expanded":r,onClick:()=>C(t,n),children:[e(`span`,{class:`caret`,children:r?`▾`:`▸`}),` `,t,` `,e(`span`,{class:`count`,children:n.length})]}),r&&n.map(t=>e(ki,{e:t}))]},t)}),y.length===0&&b.length===0&&g.length===0&&e(`p`,{class:`muted cat-empty`,children:[d?`Nothing matches “${d}”.`:`No operations.`,` `,d&&e(`button`,{type:`button`,class:`link`,onClick:()=>br.value=``,children:`Clear the filter`})]})]})}function Mi({services:t,counts:n}){let r=U.value;if(!r.ready)return e(`div`,{class:`overview`,"aria-busy":`true`});let i=t.reduce((e,t)=>e+t.ops,0),a=t.length===1?t[0]:void 0,o=r.title??r.name??(a?a.title??a.id:`${t.length} APIs · ${i.toLocaleString()} operations`),s=a?`${a.ops} ${a.ops===1?`operation`:`operations`}${a.version?` · v${a.version}`:``}`:r.name||r.title?`${t.length} APIs · ${i.toLocaleString()} operations`:void 0;return e(`div`,{class:`overview`,children:[r.logo&&e(`img`,{class:`overview-logo`,src:r.logo,alt:``,style:r.logoBackground?{background:r.logoBackground,padding:`10px 16px`,borderRadius:`10px`}:void 0}),r.title&&r.name&&e(`p`,{class:`overview-name`,children:r.name}),e(`h1`,{children:o}),r.tagline&&e(`p`,{class:`tagline`,children:r.tagline}),s&&e(`p`,{class:`muted`,children:s}),e(`p`,{class:`overview-hint`,children:`Choose an operation or flow on the left to read it and try it.`}),e(xi,{}),e(`button`,{type:`button`,class:`btn primary overview-browse`,onClick:()=>K({kind:`browse`}),children:`Browse operations and flows`}),r.links.length>0&&e(`p`,{class:`overview-links`,children:r.links.map(t=>e(`a`,{href:t.href,target:`_blank`,rel:`noreferrer`,children:t.label}))}),e(`p`,{class:`muted overview-keys`,children:[e(`kbd`,{children:`⌘`}),` `,e(`kbd`,{children:`K`}),` jumps anywhere · `,e(`kbd`,{children:`/`}),` filters the list`]}),e(Ti,{})]})}var Ni=`\0new-environment`;function Pi(){let t=J.value,n=Y.value.includes(t)?Y.value:[t,...Y.value],r=ci.value[t],i=t===`mock`?`mock`:r===`production`||r!==`sandbox`&&/prod/i.test(t)?`prod`:`live`,a=mi.value.createEnvironment&&Q.canCreateEnvironment(),o=n.length>1||a;return e(`span`,{class:`env-badge ${i} ${o?`switch`:``}`,title:t===`mock`?`Environment: mock (no network)`:`Environment: ${t}. Requests go to the real API.`,children:[e(`span`,{class:`env-name`,children:t}),o&&e(`select`,{"aria-label":`Environment`,value:t,onChange:e=>{let t=e.target.value;t===Ni?(e.target.value=J.value,pi.value=!0):J.value=t},children:[n.map(t=>e(`option`,{value:t,title:li.value[t],children:t})),a&&e(`option`,{value:Ni,children:`New environment…`})]})]})}async function Fi(){let e=q.value,[t,n,r]=await Promise.all([Q.environments(e),Q.environmentRisks(e),Q.environmentNotes(e)]);Y.value=t,ci.value=n,li.value=r,di.value+=1}var Ii={session:`this session`,process:`environment variable`,environment:`environment file`,shared:`shared file`},Li={default:`default`,config:`config`,file:`file`,browser:`this browser`};async function Ri(e,t){let n=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error((await n.json()).error??`save failed`)}function zi(e,t){let n=t.uses[e.name];if(!n)return[];let r=[];for(let e of n.services){let n=t.addresses.find(t=>t.service===e);r.push(n?.url?`${e} calls go to ${n.url}`:`${e} calls use this address`)}for(let e of n.profiles)r.push(`${e.profile} sign-in reads this (${e.field})`);return r}function Bi(){let[t,i]=r(),[o,s]=r(),[c,l]=r({}),u=fi.value,d=e=>fi.value=e,[f,m]=r(`environment`),[h,g]=r({}),[_,v]=r({name:``,value:``}),[y,b]=r(),x=J.value,S=()=>yi?Promise.resolve():fetch(`/__specbook/environment?env=${encodeURIComponent(x)}`).then(e=>e.json()).then(i,()=>i(void 0));n(()=>{S(),m(x===`mock`?`session`:`environment`),g({})},[x]),n(()=>{let e=!0;return Q.environmentView(x,q.value).then(t=>e&&s(t)),()=>{e=!1}},[x,q.value,di.value]),n(()=>{Q.config(q.value).then(e=>{let t={};for(let[n,r]of Object.entries(e.auth??{}))for(let e of JSON.stringify(r.apply).matchAll(/secrets\.([\w$-]+)/g))t[e[1]]=r.title??n;l(t)})},[]);let C=a(()=>x===`mock`?0:t?.secrets.filter(e=>!e.source).length??0,[t,x]);if(!o||!yi&&!t)return null;let w=t?.secrets??[];if(!(w.length>0||o.rows.length>0||x!==`mock`))return null;let T=async e=>{b(void 0);try{await e(),await S()}catch(e){b(e instanceof Error?e.message:String(e))}},E=(e,t)=>T(async()=>{await Ri(`/__specbook/secret`,{name:e,value:t,scope:f,env:f===`shared`?void 0:x}),g(t=>({...t,[e]:``}))}),D=(e,t)=>T(async()=>{await Q.setVariable(x,e,t===``?null:t),di.value+=1}),ee=()=>T(async()=>{Q.deleteEnvironment(x),J.value=`mock`,await Fi()}),te=[...t?.warnings??[],...x===`mock`?[]:o.addresses.filter(e=>e.error).map(e=>e.error)],O=[...o.rows].sort((e,t)=>Number(!!o.uses[t.name])-Number(!!o.uses[e.name])||e.name.localeCompare(t.name));return e(`div`,{class:`envmenu`,children:[e(`button`,{type:`button`,class:`btn envmenu-btn`,"aria-expanded":u,title:`Variables and credentials for ${x}`,"aria-label":C>0?`Environment settings, ${C} missing`:`Environment settings`,onClick:()=>d(!u),children:[e(`span`,{"aria-hidden":`true`,children:`⚙︎`}),` `,e(`span`,{class:`envmenu-label`,children:`Environment settings`}),C>0&&e(`span`,{class:`badge-missing`,children:C})]}),u&&e(`div`,{class:`envmenu-pop`,role:`dialog`,"aria-label":`Settings for ${x}`,children:[e(`header`,{class:`envmenu-head`,children:[e(`strong`,{children:x}),e(`span`,{class:`muted small`,children:x===`mock`?`mocks need no credentials`:`values apply to this environment`}),e(`span`,{class:`spacer`}),e(`button`,{type:`button`,class:`icon`,"aria-label":`Close`,onClick:()=>d(!1),children:`×`})]}),te.map(t=>e(`p`,{class:`envmenu-warn`,children:t})),y&&e(`p`,{class:`envmenu-warn`,children:y}),e(`section`,{children:[e(`h3`,{children:`Variables`}),e(`p`,{class:`muted small`,children:yi?`Kept in this browser; the defaults come from the spec or site.`:e(p,{children:[`Shared with the team in `,e(`code`,{children:[`.specbook/environments/`,x,`.env`]}),`. Defaults come from specbook.config.ts.`]})}),O.map(t=>{let n=t.source===`file`||t.source===`browser`,r=`var:${t.name}`;return e(`div`,{children:[e(`div`,{class:`envrow`,children:[e(`code`,{children:t.name}),e(`input`,{"aria-label":`Value of ${t.name}`,value:h[r]??t.value,disabled:!t.editable,onInput:e=>g({...h,[r]:e.target.value}),onBlur:()=>{let e=h[r];e!==void 0&&e!==t.value&&D(t.name,e)},onKeyDown:e=>e.key===`Enter`&&e.target.blur()}),e(`span`,{class:`src ${n?`set`:`inherited`}`,children:Li[t.source]}),n&&t.editable&&e(`button`,{type:`button`,class:`icon`,"aria-label":t.fallback===void 0?`Remove ${t.name}`:`Reset ${t.name}`,title:t.fallback===void 0?`Remove this variable`:`Back to ${t.fallback}`,onClick:()=>D(t.name,null),children:`×`})]}),zi(t,o).map(t=>e(`p`,{class:`muted small envuse`,children:t}))]},t.name)}),x!==`mock`&&o.addresses.filter(e=>e.url&&!Object.values(o.uses).some(t=>t.services.includes(e.service))).map(t=>e(`p`,{class:`muted small envuse`,children:[t.service,` calls go to `,t.url]})),x!==`mock`&&e(`form`,{class:`envrow`,onSubmit:e=>{e.preventDefault(),_.name&&D(_.name,_.value).then(()=>v({name:``,value:``}))},children:[e(`input`,{placeholder:`name`,"aria-label":`New variable name`,value:_.name,onInput:e=>v({..._,name:e.target.value})}),e(`input`,{placeholder:`value`,"aria-label":`New variable value`,value:_.value,onInput:e=>v({..._,value:e.target.value})}),e(`button`,{type:`submit`,class:`btn`,disabled:!_.name,children:`Add`})]}),o.removable&&e(`p`,{children:e(`button`,{type:`button`,class:`link`,onClick:ee,children:`Delete environment`})})]}),!yi&&e(`section`,{children:[e(`h3`,{children:`Secrets`}),w.length===0?e(`p`,{class:`muted small`,children:[`None declared. Add `,e(`code`,{children:[`secrets: `,`{ NAME: {} }`]}),` to the config.`]}):e(p,{children:[e(`label`,{class:`envrow scope`,children:[e(`span`,{class:`muted small`,children:`Save to`}),e(`select`,{"aria-label":`Where to save secrets`,value:f,onChange:e=>m(e.target.value),children:[e(`option`,{value:`environment`,children:[x,`.secrets.env (remembered here)`]}),e(`option`,{value:`session`,children:`this session only`}),e(`option`,{value:`shared`,children:`all environments (secrets.local.env)`})]})]}),w.map(t=>e(`form`,{class:`secretrow`,onSubmit:e=>{e.preventDefault(),E(t.name,h[t.name]??``)},children:[e(`div`,{class:`secretrow-head`,children:[e(`span`,{children:c[t.name]??t.name}),e(`code`,{class:`muted small`,children:t.key}),e(`span`,{class:`src ${t.source?`set`:`missing`}`,children:t.source?Ii[t.source]:`missing`})]}),e(`div`,{class:`envrow`,children:[e(`input`,{type:`password`,autocomplete:`off`,"aria-label":`Value of ${t.name}`,placeholder:t.source?`•••••• (type to replace)`:`paste a value`,value:h[t.name]??``,onInput:e=>g({...h,[t.name]:e.target.value})}),e(`button`,{type:`submit`,class:`btn`,disabled:!h[t.name],children:`Save`}),t.source&&t.source!==`process`&&e(`button`,{type:`button`,class:`link`,onClick:()=>E(t.name,``),title:`Remove the value from the selected place`,children:`Clear`})]})]}))]})]})]})]})}var Vi=`https://github.com/specbook-dev/specbook`;function Hi(){return globalThis.__SPECBOOK_VIEWER__?.source?e(`a`,{class:`btn gh-star`,href:Vi,target:`_blank`,rel:`noopener`,title:`Specbook's source is on GitHub`,children:[e(Tr,{}),e(`span`,{class:`gh-label`,children:`GitHub`})]}):null}var Ui=`specbook:list-width`,Wi=()=>Math.round(innerWidth*.55);function Gi(){try{let e=Number(localStorage.getItem(Ui));return e>=280?e:void 0}catch{return}}var $=d(Gi());function Ki(e){$.value=e===void 0?void 0:Math.round(Math.max(280,Math.min(Wi(),e)));try{$.value===void 0?localStorage.removeItem(Ui):localStorage.setItem(Ui,String($.value))}catch{}}function qi(){let t=e=>{e.preventDefault(),document.body.classList.add(`resizing`);let t=e=>Ki(e.clientX),n=()=>{document.body.classList.remove(`resizing`),removeEventListener(`pointermove`,t),removeEventListener(`pointerup`,n)};addEventListener(`pointermove`,t),addEventListener(`pointerup`,n)},n=()=>$.value??document.querySelector(`.list-col`)?.offsetWidth??360;return e(`div`,{class:`list-resizer`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize the list`,"aria-valuenow":$.value,"aria-valuemin":280,tabIndex:0,title:`Drag to resize · double-click to reset`,onPointerDown:t,onDblClick:()=>Ki(void 0),onKeyDown:e=>{e.key===`ArrowLeft`?(e.preventDefault(),Ki(n()-24)):e.key===`ArrowRight`&&(e.preventDefault(),Ki(n()+24))}})}var Ji=/^[A-Za-z0-9_-]+$/;function Yi(){return pi.value?e(Xi,{}):null}function Xi(){let[t,i]=r(``),[a,o]=r(()=>J.value===`mock`?Y.value.find(e=>e!==`mock`)??`mock`:J.value),[s,l]=r(),[u,d]=r(!1),f=c(null);n(()=>{f.current?.focus();let e=e=>{e.key===`Escape`&&(pi.value=!1)};return addEventListener(`keydown`,e),()=>removeEventListener(`keydown`,e)},[]);let p=()=>pi.value=!1,m=Y.value.includes(t),h=t===``?void 0:Ji.test(t)?t===`mock`||m?`"${t}" already exists`:void 0:`Use letters, digits, "-" and "_"`,g=async()=>{d(!0),l(void 0);try{await Q.createEnvironment(t,a,q.value),await Fi(),J.value=t,pi.value=!1,fi.value=!0}catch(e){l(e instanceof Error?e.message:String(e))}finally{d(!1)}};return e(`div`,{class:`palette-backdrop newenv-backdrop`,children:[e(`button`,{type:`button`,class:`palette-dismiss`,"aria-label":`Close`,onClick:p}),e(`div`,{class:`palette newenv`,role:`dialog`,"aria-label":`New environment`,children:e(`form`,{onSubmit:e=>{e.preventDefault(),t&&!h&&!u&&g()},children:[e(`h2`,{children:`New environment`}),e(`label`,{children:[e(`span`,{class:`muted small`,children:`Name`}),e(`input`,{ref:f,type:`text`,"aria-label":`Environment name`,placeholder:`staging`,value:t,onInput:e=>i(e.target.value.trim())})]}),e(`label`,{children:[e(`span`,{class:`muted small`,children:`Duplicate of`}),e(`select`,{"aria-label":`Duplicate of`,value:a,onChange:e=>o(e.target.value),children:Y.value.filter(e=>e!==`mock`).map(t=>e(`option`,{value:t,children:t}))})]}),e(`p`,{class:`muted small`,children:[`It starts with `,a,`'s variables. Change its address in Variables; secrets are asked for again.`]}),(h||s)&&e(`p`,{class:`envmenu-warn`,children:h??s}),e(`div`,{class:`envrow`,children:[e(`span`,{class:`spacer`}),e(`button`,{type:`button`,class:`btn`,onClick:p,children:`Cancel`}),e(`button`,{type:`submit`,class:`btn primary`,disabled:!t||!!h||u,children:`Create`})]})]})})]})}function Zi({entries:t}){let[i,o]=r(``),[s,l]=r(0),u=c(null),d=G.value;n(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`?(e.preventDefault(),G.value=!G.value):e.key===`Escape`&&(G.value=!1)};return addEventListener(`keydown`,e),()=>removeEventListener(`keydown`,e)},[]),n(()=>{d&&(o(``),l(0),setTimeout(()=>u.current?.focus(),0))},[d]);let f=a(()=>xr(t,i,30),[t,i]);if(!d)return null;let p=e=>{e&&(G.value=!1,K(e.route))};return e(`div`,{class:`palette-backdrop`,children:[e(`button`,{type:`button`,class:`palette-dismiss`,"aria-label":`Close`,onClick:()=>G.value=!1}),e(`div`,{class:`palette`,role:`dialog`,"aria-label":`Jump to`,children:[e(`input`,{ref:u,type:`text`,placeholder:`Jump to a sequence, request or operation…`,value:i,onInput:e=>{o(e.target.value),l(0)},onKeyDown:e=>{e.key===`ArrowDown`?(e.preventDefault(),l(Math.min(f.length-1,s+1))):e.key===`ArrowUp`?(e.preventDefault(),l(Math.max(0,s-1))):e.key===`Enter`&&p(f[s])}}),e(`ul`,{children:[f.map((t,n)=>e(`li`,{children:e(`button`,{type:`button`,class:n===s?`sel`:``,onMouseEnter:()=>l(n),onClick:()=>p(t),children:[e(`span`,{class:`p-title`,children:t.title}),e(`span`,{class:`muted`,children:t.kind===`seq`?`Sequence`:t.kind===`req`?`Request`:t.group})]})})),f.length===0&&e(`li`,{class:`muted pad`,children:[`Nothing matches “`,i,`”`]})]})]})]})}function Qi(){let t=globalThis.__SPECBOOK_VIEWER__,[n,i]=r(!1),[a,s]=r(!1);if(!t?.source)return null;W.value;let c=l(t.source),u=c.ok?o({origin:location.origin,pathname:location.pathname,hash:location.hash},c.spec,t.open.title):void 0;return e(`div`,{class:`share`,children:[e(`button`,{type:`button`,class:`btn`,"aria-expanded":n,"aria-haspopup":`true`,"aria-label":`Share`,onClick:()=>i(!n),children:[e(wr,{}),e(`span`,{class:`share-label`,children:`Share`})]}),n&&e(`div`,{class:`share-pop`,role:`menu`,children:u?e(p,{children:[e(`input`,{class:`share-link`,readOnly:!0,value:u.link,"aria-label":`Link to this view`,onFocus:e=>e.target.select()}),e(`div`,{class:`share-actions`,children:[e(`button`,{type:`button`,class:`btn primary`,onClick:async()=>{if(u)try{await navigator.clipboard.writeText(u.link),s(!0),setTimeout(()=>s(!1),1500)}catch{}},children:a?`Copied`:`Copy link`}),typeof navigator.share==`function`&&e(`button`,{type:`button`,class:`btn`,onClick:()=>void navigator.share({title:u.title,url:u.link}).catch(()=>{}),children:`Share…`})]}),e(`ul`,{class:`share-targets`,children:u.targets.map(t=>e(`li`,{children:e(`a`,{href:t.href,target:`_blank`,rel:`noopener noreferrer`,children:t.label})}))})]}):e(`p`,{class:`muted`,children:c.ok?``:c.reason})})]})}var $i={auto:`Theme: follows your system. Click for light.`,light:`Theme: light. Click for dark.`,dark:`Theme: dark. Click to follow your system.`},ea=({mode:t})=>e(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`,children:[t===`light`&&e(p,{children:[e(`circle`,{cx:`12`,cy:`12`,r:`4`}),e(`path`,{d:`M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4`})]}),t===`dark`&&e(`path`,{d:`M20 14.5A8.5 8.5 0 0 1 9.5 4 8.5 8.5 0 1 0 20 14.5z`}),t===`auto`&&e(p,{children:[e(`circle`,{cx:`12`,cy:`12`,r:`8.5`}),e(`path`,{d:`M12 3.5v17a8.5 8.5 0 0 0 0-17z`,fill:`currentColor`,stroke:`none`})]})]});function ta(){let n=i.value;return e(`button`,{type:`button`,class:`icon theme-toggle`,title:$i[n],"aria-label":$i[n],"data-theme-mode":n,onClick:t,children:e(ea,{mode:n})})}var na=`\0new-environment`,ra=globalThis.__SPECBOOK_VIEWER__?.source?s:void 0;function ia(){r(()=>{let e=Object.keys(Z.manifests);dr(e.length===1?e[0]:void 0)})}var aa=d([]);function oa(){let[e,t]=r(),i=W.value.kind===`op`||W.value.kind===`seq`;return n(()=>{i&&!e&&h(()=>import(`./Host-Cq-4gDuM.js`).then(t),__vite__mapDeps([0,1,2,3,4]),import.meta.url)},[i,e]),i?e:void 0}function sa(){ia();let[t,i]=r({}),[o,s]=r(void 0),[l,u]=r(!1);n(()=>{let e=()=>{W.value=hr(location.hash)};return addEventListener(`hashchange`,e),Q.config(q.value).then(async e=>{aa.value=Object.keys(e.faker?.locales??{}),e.faker?.default&&(ui.value=e.faker.default);let t=e.branding,n=Z.brandingAssets,r=Object.values(Z.manifests),i=r.length===1?r[0]?.logo:void 0,a=t?.logo??await n.logo?.().catch(()=>void 0),o={ready:!0,name:t?.name,title:t?.title,tagline:t?.tagline,links:t?.links??[],badge:t?.badge,logo:a??i?.url,logoBackground:a?void 0:i?.backgroundColor,favicon:t?.favicon??await n.favicon?.().catch(()=>void 0)};U.value=o,lr(t,o,r.length===1?r[0]?.title??`Specbook`:`Specbook`)}).catch(()=>{U.value={...U.value,ready:!0}}).finally(()=>{Q.loadVariants(Z.requests,q.value).then(i);let e=Z.sequences.filter(e=>Z.unresolvedSequences.includes(e.file));e.length&&Q.loadSequences(e,q.value).then(s)}),Q.environments(q.value).then(e=>{Y.value=e}),Q.environmentRisks(q.value).then(e=>{ci.value=e}),Q.environmentNotes(q.value).then(e=>{li.value=e}),()=>removeEventListener(`hashchange`,e)},[]);let d=c(W.value);n(()=>{d.current!==W.value&&(d.current=W.value,u(!1))},[W.value]),n(()=>{if(!l)return;let e=e=>e.key===`Escape`&&u(!1);return addEventListener(`keydown`,e),()=>removeEventListener(`keydown`,e)},[l]);let f=Object.keys(Z.manifests).length>1,p=a(()=>{let e=[],n=[...Object.values(Z.sequenceMeta),...(o??[]).map(e=>({...e.seq.meta}))];for(let t of n)e.push({kind:`seq`,route:{kind:`seq`,id:t.id},title:t.title,group:t.tags?.[0]??`sequence`,tags:t.tags,flowGroup:t.group,description:t.description,hay:`${t.description??``} ${(t.tags??[]).join(` `)}`});for(let n of Object.values(Z.manifests))for(let r of n.operations){let i=`${n.service}/${r.id}`;for(let a of t[i]??[])e.push({kind:`req`,route:{kind:`op`,key:i,play:`saved:${a.file}`},title:a.name,group:`request`,service:n.service,tag:r.tags[0]??`default`,method:r.method,path:r.path,tags:a.def.input.tags,hay:`${r.id} ${r.method} ${r.path} ${(a.def.input.tags??[]).join(` `)} ${a.file}`});let a=(t[i]??[]).map(e=>e.name).join(` `);e.push({kind:`op`,route:{kind:`op`,key:i},title:r.summary?.replace(/\.$/,``)||r.path,group:`${f?`${n.service} · `:``}${r.tags[0]??`default`}`,service:n.service,tag:r.tags[0]??`default`,method:r.method,path:r.path,secured:r.secured,hay:`${r.id} ${r.method} ${r.path} ${r.tags.join(` `)} ${a}`})}return e},[o,t,f]),m=W.value,h=m.kind===`op`?ca(m.key):void 0,g=m.kind===`seq`?m.id:void 0,[_,v]=r();n(()=>{if(!g)return;let e=Z.sequenceMeta[g]?.file;if(e){let t=Z.sequences.filter(t=>t.file===e);Q.loadSequences(t,q.value).then(e=>v(e[0]))}else v(o?.find(e=>e.seq.meta.id===g))},[g,o,q.value]);let y=_?.seq.meta.id===g?_:void 0,b=oa(),x=()=>K(vr(W.value)),S=a(()=>Object.values(Z.manifests).map(e=>({id:e.service,title:e.title,version:e.version,ops:e.operations.length})).sort((e,t)=>e.id.localeCompare(t.id)),[]),C=a(()=>{if(m.kind!==`op`&&m.kind!==`seq`)return{};let e=p.find(e=>e.kind===`op`&&m.kind===`op`&&e.route.kind===`op`&&e.route.key===m.key||e.kind===`seq`&&m.kind===`seq`&&e.route.kind===`seq`&&e.route.id===m.id);if(!e)return{};let t=p.filter(t=>e.kind===`seq`?t.kind===`seq`:t.kind===`op`&&t.service===e.service&&t.tag===e.tag),n=t.indexOf(e),r=e=>e?()=>K({...e.route,play:``}):void 0;return{prev:r(t[n-1]),next:r(t[n+1])}},[p,m.kind===`op`?m.key:m.kind===`seq`?m.id:``]),w=e=>K(m.kind===`op`?{kind:`op`,key:m.key,play:e.example??m.play??``,tab:e.tab}:m.kind===`seq`?{kind:`seq`,id:m.id,play:``,tab:e.tab}:m);return e(`div`,{class:`app`,style:$.value?{"--sb-list-w":`${$.value}px`}:void 0,children:[e(`header`,{class:`header`,children:[e(`button`,{type:`button`,class:`brand`,onClick:()=>K({kind:`home`}),children:[(U.value.logo??ra)&&e(`img`,{class:`brand-logo`,src:U.value.logo??ra,alt:``,style:U.value.logoBackground?{background:U.value.logoBackground,padding:`3px 6px`,borderRadius:`4px`}:void 0}),e(`span`,{class:`brand-name`,children:U.value.name??`Specbook`})]}),e(`button`,{type:`button`,class:`palette-btn`,onClick:()=>G.value=!0,children:[e(`span`,{children:`Jump to an operation or flow…`}),e(`kbd`,{children:`⌘K`})]}),e(`span`,{class:`spacer`}),e(`span`,{class:`header-env`,children:e(Pi,{})}),e(`button`,{type:`button`,class:`menu-btn icon`,"aria-label":`Settings`,"aria-expanded":l,onClick:()=>u(!l),children:`⋯`}),e(`div`,{class:`header-controls ${l?`open`:``}`,children:[Z.loadFaker&&e(`span`,{class:`row muted`,title:`Generated values such as {{faker.person.fullName}}: new on every run, or fixed so the same number always gives the same data`,children:[e(`label`,{class:`row`,children:[`Synthetic data`,e(`select`,{"aria-label":`Synthetic data`,value:X.value===void 0?`random`:`fixed`,onChange:e=>{X.value=e.target.value===`fixed`?X.value??42:void 0},children:[e(`option`,{value:`random`,children:`New each run`}),e(`option`,{value:`fixed`,children:`Fixed`})]})]}),X.value!==void 0&&e(`input`,{type:`number`,class:`seed-input`,"aria-label":`Seed number`,title:`The same number gives the same data every run`,value:X.value,onInput:e=>{let t=e.target.valueAsNumber;X.value=Number.isFinite(t)?t:void 0}})]}),aa.value.length>1&&e(`label`,{class:`row muted`,children:[`locale`,e(`select`,{value:ui.value??``,onChange:e=>ui.value=e.target.value||void 0,children:aa.value.map(t=>e(`option`,{value:t,children:t}))})]}),e(Bi,{}),e(`label`,{class:`row`,children:[`Environment`,e(`select`,{value:J.value,onChange:e=>{let t=e.target.value;t===na?(e.target.value=J.value,pi.value=!0):J.value=t},children:[Y.value.map(t=>e(`option`,{value:t,title:li.value[t],children:t})),Q.canCreateEnvironment()&&e(`option`,{value:na,children:`New environment…`})]})]}),e(Hi,{}),e(Qi,{}),e(ta,{})]})]}),e(`div`,{class:`layout`,"data-view":m.kind===`home`?`splash`:`list`,children:[e(`nav`,{class:`list-col`,"aria-label":`Operations and flows`,children:e(ji,{entries:p,services:S})}),e(qi,{}),e(`main`,{class:`stage`,children:(m.kind===`home`||m.kind===`browse`)&&e(Mi,{services:S,counts:{flows:p.filter(e=>e.kind===`seq`).length,requests:p.filter(e=>e.kind===`req`).length}})})]}),e(Zi,{entries:p}),e(Yi,{}),b&&m.kind===`op`&&h&&e(b.Host,{kind:`op`,modal:!1,service:h.service,op:h.op,variants:t[m.key]??[],example:m.play??``,tab:m.tab,onNavigate:w,onPrev:C.prev,onNext:C.next,onClose:x}),b&&m.kind===`seq`&&y&&e(b.Host,{kind:`seq`,modal:!1,info:y,tab:m.tab,onNavigate:w,onPrev:C.prev,onNext:C.next,onClose:x})]})}function ca(e){let[t,n]=e.split(`/`),r=Z.manifests[t]?.operations.find(e=>e.id===n);return r?{service:t,op:r}:void 0}var la=w({});u(),(globalThis.__SPECBOOK_VIEWER__===void 0?m():Promise.resolve(!1)).then(async t=>{t||(await C(),f(e(sa,{}),document.getElementById(`app`)))});export{ln as A,Fn as C,Qt as D,rn as E,Tt as M,wt as N,an as O,K as S,on as T,Kr as _,Z as a,Sr as b,fi as c,Y as d,mi as f,qr as g,q as h,yi as i,cn as j,sn as k,di as l,X as m,Pi as n,bi as o,ui as p,Q as r,J as s,la as t,li as u,Gr as v,B as w,Er as x,kr as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.prism-code-editor{background:var(--pce-bg);--_pse:var(--padding-inline,.75em);--_ns:var(--number-spacing,.75em);--padding-left:var(--_pse);--_sp:0px;scroll-padding:var(--_sp);-webkit-user-select:none;user-select:none;isolation:isolate;white-space:pre;line-height:1.4;display:grid;overflow:auto}.show-line-numbers{--padding-left:calc(var(--_pse) + var(--number-width) + var(--_ns));scroll-padding-left:calc(var(--padding-left) + var(--_sp));counter-reset:line;grid:1fr/0 1fr}.pce-focus{--_sp:var(--pce-scroll-padding,2ch)}.pce-wrapper{pointer-events:none;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;margin:.5em 0;position:relative}.pce-textarea{all:unset;box-sizing:border-box;color:#0000;-webkit-user-select:auto;user-select:auto;pointer-events:auto;width:100%;height:100%;caret-color:var(--pce-cursor);overflow:hidden}.pce-textarea::selection{color:#0000}.pce-wrapper ::selection{background:var(--pce-selection)}.pce-no-selection textarea:focus{z-index:1}.pce-line,.pce-textarea{padding:0 var(--_pse) 0 var(--padding-left);position:relative}.show-line-numbers .pce-line:before{counter-increment:line;content:counter(line);margin:0 0 0 calc(-1 * var(--padding-left));padding:0 var(--_ns) 0 0;box-sizing:border-box;color:var(--pce-line-number);text-align:end;display:inline-block}.show-line-numbers:before{content:"";background:inherit;pointer-events:none}.show-line-numbers:before,.pce-line:before{z-index:2;height:100%;width:var(--padding-left);position:sticky;left:0}.pce-wrap .pce-line:before{margin:0;position:absolute}.pce-overlays,.pce-overlays>*,pre.pce-guides .pce-line:after,.pce-no-selection .active-line:after,.active-line.match-highlight:after{content:"";position:absolute;inset:0}.show-line-numbers .pce-line:after{left:var(--padding-left)}.active-line:after{border:var(--pce-border-highlight);background:var(--pce-bg-highlight);z-index:-2}.pce-wrap{white-space:pre-wrap;white-space:break-spaces;word-break:break-word}.selection-matches span{background:var(--pce-selection-match)}.pce-nowrap .active-bracket{display:inline-block}.pce-ac-wrapper button{all:unset;cursor:pointer}.pce-ac-top{grid:"d"minmax(3em,1fr)"t"minmax(auto,max-content)/auto}.pce-ac-bottom{grid:"t"minmax(auto,max-content)"d"minmax(3em,1fr)/auto}.pce-ac-bottom-end{grid:"t d"".d"3em/auto auto}.pce-ac-bottom-start{grid:"d t""d."3em/auto auto}.pce-ac-top-end{grid:".d"3em"t d"/auto auto}.pce-ac-top-start{grid:"d."3em"d t"/auto auto}.pce-ac-content{padding:.25em .3em}.pce-ac-docs,.pce-ac-docs pre{white-space:pre-wrap;white-space:break-spaces;word-break:break-word}.pce-ac-docs pre,.pce-ac-docs code{font:inherit;margin:0}.pce-ac-top .pce-ac-docs{margin-block:0 -1px}.pce-ac-bottom .pce-ac-docs{margin-block:-1px 0}.pce-ac-top-start .pce-ac-docs,.pce-ac-bottom-start .pce-ac-docs{inset-inline-end:-1px}.pce-ac-top-end .pce-ac-docs,.pce-ac-bottom-end .pce-ac-docs{margin-inline:-1px 0}.pce-ac-top-start .pce-ac-docs,.pce-ac-bottom-start .pce-ac-docs,.pce-ac-top-end .pce-ac-docs,.pce-ac-bottom-end .pce-ac-docs{width:20em;max-height:100%;position:absolute}.pce-ac-top-start .pce-ac-docs,.pce-ac-top-end .pce-ac-docs{bottom:0}button.pce-ac-toggle{place-items:center;width:1.26em;height:1.4em;display:grid;position:absolute;inset-inline-end:.2em}.pce-ac-toggle:after{content:"";clip-path:polygon(50% 28.96%,0% 63.96%,10.1% 71.04%,50% 43.11%,89.9% 71.04%,100% 63.96%);width:.7em;height:1em;transform:rotate(90deg)}button.pce-ac-close{float:inline-end;place-items:center;width:1.3em;height:1.3em;display:grid}.pce-ac-close:after{content:"";clip-path:polygon(50% 44.34%,0% 74.34%,9.43% 80%,9.43% 20%,0% 25.66%,50% 55.66%,100% 25.66%,90.57% 20%,50% 44.34%,9.43% 20%,9.43% 80%,50% 55.66%,90.57% 80%,100% 74.34%);background:currentColor;width:.6em;height:1em}.pce-ac-wrapper{pointer-events:auto;display:grid;position:sticky;left:.5em;right:.5em}.pce-ac-wrapper>div{border:1px solid var(--pce-widget-border);background:var(--pce-widget-bg);box-sizing:border-box;border-radius:.2em;overflow:auto}.pce-ac-docs{-webkit-user-select:text;user-select:text;outline:0;grid-area:d;max-height:min(100% + 1px,17em)}.pce-ac-tooltip{white-space:pre;grid-area:t;height:100%;max-height:17em}.pce-ac-tooltip>ul{box-sizing:border-box;padding:0;overflow:hidden}.pce-ac-row{cursor:pointer;align-items:center;gap:.5em;height:1.4em;padding:0 .2em;display:flex;position:relative}.pce-ac-label span{color:var(--pce-ac-match,#52b1ff)}.pce-ac-label{flex-grow:1}.pce-ac-label,.pce-ac-details span{text-overflow:ellipsis;overflow-x:hidden}.pce-ac-details{opacity:.75;flex-shrink:4;max-width:70%;font-size:90%;display:flex}.pce-ac-details:has(:empty){display:none}.pce-ac-row:hover:has(button) .pce-ac-details span{width:calc(100% - 1.4em)}.pce-ac-row:hover:has(button):has(.pce-ac-details :empty){padding-inline:.2em 1.46em}.pce-ac-row:hover .pce-ac-toggle:after{background:currentColor}@media (hover:hover){.pce-ac-row:hover{background:#7772}}.pce-ac-row[aria-selected]{color:var(--pce-widget-color-active);background:#1094ff36}.pce-tabstops span{background:var(--pce-tabstop,#7c7c7c4d)}.pce-tabstops :empty{margin:0 -1px;padding:0 1px}.pce-ac-icon{flex-shrink:0;align-items:center;margin-right:-.25em;display:flex}.pce-ac-icon:before{content:"";width:16px;height:16px;-webkit-mask:no-repeat var(--mask);-webkit-mask:no-repeat var(--mask);mask:no-repeat var(--mask);background:currentColor}.pce-ac-row[aria-selected] .pce-ac-icon:before{color:var(--pce-widget-color-active)}.pce-ac-icon-namespace{--mask:url("data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke=\"red\" fill=\"none\" d=\"m6 2.5a2 2 0 00-2 2V6a2 2 0 01-2 2 2 2 0 012 2v1.5a2 2 0 002 2m4-11a2 2 0 012 2V6a2 2 0 002 2 2 2 0 00-2 2v1.5a2 2 0 01-2 2\"/></svg>")}.pce-ac-icon-unit{--mask:url("data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke=\"red\" fill=\"none\" stroke-linejoin=\"bevel\" d=\"m3.5 1.5h9v13h-9zm.5 2h4m-4 3h2m-2 3h4m-4 3h2\"/></svg>")}.pce-ac-icon-parameter{--mask:url("data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\" stroke=\"red\" fill=\"none\"><path stroke-linejoin=\"bevel\" d=\"m3.3 6.2L1.5 8l1.8 1.8m9.4 0 1.8-1.8-1.8-1.8\"/><path d=\"m5.5 6V4.5h5V6M8 5v6.5h1.5-3m.5 0a1 1 0 001-1 1 1 0 001 1m1.5-6a1 1 0 00-1-1m-3 0a1 1 0 00-1 1\"/></svg>")}.pce-ac-icon-snippet{--mask:url("data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke=\"red\" fill=\"none\" stroke-linejoin=\"bevel\" d=\"m2.5 13V1.5h12V13M2 14.5h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1\"/></svg>")}.pce-ac-icon-enum{--mask:url("data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m2 7h6l1 1v5l-1 1H2l-1-1V8zv6h6V8H2zm1 2h4v1H3zm0 2h4v1H3zm4-5V3l1-1h6l1 1v5l-1 1h-4V8h4V3H8v3zm2-2h4v1H9zm0 2h4v1H9.41L9 6.59z\"/></svg>")}.pce-ac-icon-interface{--mask:url("data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke=\"red\" fill=\"none\" d=\"m4 8h4.5a3 3 0 016 0 3 3 0 01-6 0\"/><circle cx=\"3\" cy=\"8\" r=\"2\"/></svg>")}.pce-ac-icon-constant{--mask:url("data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke=\"red\" fill=\"none\" stroke-linejoin=\"bevel\" d=\"m1.5 3.5h13v9h-13zm2.5 3h8m0 3H4\"/></svg>")}.pce-ac-icon-class{--mask:url("data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke=\"red\" fill=\"none\" stroke-linejoin=\"bevel\" d=\"m5.5 1.5 2 2-4 4-2-2 4-4zm0 4v7h5.5m-.5.5 2.5-2.5 1.5 1.5-2.5 2.5zm-5-5.5h5.5m-.5.5 2.5-2.5 1.5 1.5-2.5 2.5z\"/></svg>")}.pce-ac-icon-property{--mask:url("data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke=\"red\" fill=\"none\" d=\"m7.24 6.86a3.8 3.8 0 015.02-5.02l-2.8 2.8 1.9 1.9 2.8-2.8a3.8 3.8 0 01-5.02 5.02l-5.35 5.35a.95.95 0 01-1.9-1.9z\"/></svg>")}.pce-ac-icon-variable{--mask:url("data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke=\"red\" fill=\"none\" stroke-linejoin=\"bevel\" d=\"m4 4.5H1.5v8H4m8 0h2.5v-8H12m-3 1L11.5 7v2.5l-4.5 2L4.5 10V7.5zm-4.5 2L7 9v2.5M7 9l4.5-2\"/></svg>")}.pce-ac-icon-function{--mask:url("data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke=\"red\" fill=\"none\" stroke-linejoin=\"bevel\" d=\"m8 1.25l5.5 3.3v6.6l-5.5 3.3-5.5-3.3v-6.6zM2.5 4.85l5.5 3v6.5m0-6.5l5.5-3\"/></svg>")}.pce-ac-icon-keyword{--mask:url("data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke=\"red\" fill=\"none\" d=\"m1.5 2.5h6v2h-6zm8.5 1h5m-14 4h11m-11 3h6m3 0h5m-3 3h2m-13 0h9\"/></svg>")}.pce-ac-icon-text{--mask:url("data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke=\"red\" fill=\"none\" d=\"m1.55 7a1.2 1.2 0 011.2-.8h.6a1.2 1.2 0 011.2 1.2v3.72m0-3.09-2 .3a1.2 1.2 0 000 2.39h.1a1.9 1.9 0 001.9-2m1.7-5.2v7.6m1.85-.4a1.85 2.3 0 010-4.6 1.85 2.3 0 010 4.6m6.6-.8a1.85 2.3 0 110-3\"/></svg>")}.pce-ac-icon-event{--mask:url("data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke=\"red\" fill=\"none\" stroke-linejoin=\"bevel\" d=\"m3.9 14.1 2.5-4.6H3.55l3.9-8h4.53l-3.29 5h3.97l-7.97 8.17\"/></svg>")}@layer reset{*,:before,:after{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit;color:inherit}}@layer tokens{:root,:host{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--sb-bg:#f8fafc;--sb-surface:#fff;--sb-surface-raised:#f1f5f9;--sb-border:#e2e8f0;--sb-text:#0f172a;--sb-text-muted:#64748b;--sb-accent:#2563eb;--sb-accent-hover:#1d4ed8;--sb-text-on-accent:#fff;--sb-focus-ring:#93c5fd;--sb-info:#0369a1;--sb-success:#15803d;--sb-success-subtle:#dcfce7;--sb-danger:#b91c1c;--sb-text-on-danger:#fff;--sb-danger-subtle:#fee2e2;--sb-warning:#b45309;--sb-warning-subtle:#fef3c7;--sb-method-get:#0369a1;--sb-method-post:#15803d;--sb-method-put:#b45309;--sb-method-patch:#7c3aed;--sb-method-delete:#b91c1c;--sb-code-bg:#f8fafc;--sb-code-line:#e8eefc;--sb-code-key:#0369a1;--sb-code-string:#15803d;--sb-code-number:#b45309;--sb-code-literal:#7c3aed;--sb-code-keyword:#2563eb;--sb-code-comment:#64748b;--sb-code-punct:#475569;--sb-font-sans:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--sb-font-mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;--sb-radius-control:6px;--sb-radius-card:10px;--sb-space-1:4px;--sb-space-2:8px;--sb-space-3:12px;--sb-space-4:16px;--sb-space-6:24px}@media (prefers-color-scheme:dark){:root:not([data-theme=light]),:host(:not([data-theme=light])){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--sb-bg:#0b1020;--sb-surface:#111827;--sb-surface-raised:#1e293b;--sb-border:#243049;--sb-text:#e5e7eb;--sb-text-muted:#94a3b8;--sb-accent:#3b82f6;--sb-accent-hover:#60a5fa;--sb-text-on-accent:#0b1020;--sb-focus-ring:#1d4ed8;--sb-success:#4ade80;--sb-success-subtle:#052e16;--sb-danger:#f87171;--sb-text-on-danger:#0b1020;--sb-danger-subtle:#450a0a;--sb-warning:#fbbf24;--sb-warning-subtle:#422006;--sb-method-get:#38bdf8;--sb-method-post:#4ade80;--sb-method-put:#fbbf24;--sb-method-patch:#a78bfa;--sb-method-delete:#f87171;--sb-code-bg:#0f172a;--sb-code-line:#1e2a4a;--sb-code-key:#38bdf8;--sb-code-string:#4ade80;--sb-code-number:#fbbf24;--sb-code-literal:#a78bfa;--sb-code-keyword:#60a5fa;--sb-code-comment:#94a3b8;--sb-code-punct:#94a3b8}}:root[data-theme=dark],:host([data-theme=dark]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--sb-bg:#0b1020;--sb-surface:#111827;--sb-surface-raised:#1e293b;--sb-border:#243049;--sb-text:#e5e7eb;--sb-text-muted:#94a3b8;--sb-accent:#3b82f6;--sb-accent-hover:#60a5fa;--sb-text-on-accent:#0b1020;--sb-focus-ring:#1d4ed8;--sb-success:#4ade80;--sb-success-subtle:#052e16;--sb-danger:#f87171;--sb-text-on-danger:#0b1020;--sb-danger-subtle:#450a0a;--sb-warning:#fbbf24;--sb-warning-subtle:#422006;--sb-method-get:#38bdf8;--sb-method-post:#4ade80;--sb-method-put:#fbbf24;--sb-method-patch:#a78bfa;--sb-method-delete:#f87171;--sb-code-bg:#0f172a;--sb-code-line:#1e2a4a;--sb-code-key:#38bdf8;--sb-code-string:#4ade80;--sb-code-number:#fbbf24;--sb-code-literal:#a78bfa;--sb-code-keyword:#60a5fa;--sb-code-comment:#94a3b8;--sb-code-punct:#94a3b8}}@layer base{html,body,#app{height:100%}body{background:var(--sb-bg);color:var(--sb-text);font:14px / 1.5 var(--sb-font-sans)}code,pre,kbd{font-family:var(--sb-font-mono);font-size:12.5px}kbd{border:1px solid var(--sb-border);background:var(--sb-surface-raised);color:var(--sb-text-muted);border-radius:4px;padding:1px 6px}h1,h2,h3,p{margin:0}h1{letter-spacing:-.01em;font-size:22px;font-weight:650}h2{letter-spacing:.04em;text-transform:uppercase;color:var(--sb-text-muted);font-size:13px;font-weight:600}html,body{overscroll-behavior:none}:focus-visible{outline:2px solid var(--sb-focus-ring);outline-offset:1px}}@layer components{.app{flex-direction:column;height:100%;display:flex}@supports (height:100dvh){.app{height:100dvh}}.header{align-items:center;gap:var(--sb-space-4);height:var(--sb-header-h,53px);padding:8px var(--sb-space-4);background:var(--sb-surface);border-bottom:1px solid var(--sb-border);flex-wrap:wrap;flex:none;display:flex}.brand{letter-spacing:-.01em;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;font-size:15px;font-weight:700;display:inline-flex}.spacer{flex:1}.row{gap:var(--sb-space-3);flex-wrap:wrap;align-items:center;display:flex}.muted{color:var(--sb-text-muted)}.count{opacity:.7;margin-left:4px;font-weight:400}.app{--sb-list-w:clamp(320px, 28vw, 440px)}.layout{grid-template-columns:var(--sb-list-w) minmax(0, 1fr);flex:1;min-height:0;display:grid}.list-col,.stage,.panel-body,.panel-main.scroll,.tab-pane,.seq-left{scrollbar-width:thin;scrollbar-color:var(--sb-border) transparent}.list-col{scrollbar-gutter:stable;overscroll-behavior:contain;min-height:0;padding:var(--sb-space-3);background:var(--sb-surface);border-right:1px solid var(--sb-border);overflow:auto}.stage{min-height:0;padding:var(--sb-space-6) 32px 96px;overflow:auto}@media (max-width:900px){.layout{grid-template-columns:minmax(0,1fr)}.stage,.layout[data-view=splash] .list-col{display:none}.layout[data-view=splash] .stage{padding:var(--sb-space-6) var(--sb-space-4);justify-content:center;align-items:center;display:flex}.layout[data-view=splash] .overview{min-height:0;padding-bottom:6vh}}.overview .overview-browse{display:none}@media (max-width:820px){.overview .overview-browse{min-height:48px;padding-block:0;padding-inline:var(--sb-space-6);text-align:center;justify-content:center;align-items:center;font-size:16px;line-height:1.2;display:inline-flex}.overview-hint,.overview-keys{display:none}}.header-env{display:none}.header-controls{display:contents}.header .menu-btn{width:36px;height:36px;font-size:20px;line-height:1;display:none}.theme-toggle{border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);width:32px;height:32px;color:var(--sb-text)}.brand-logo{object-fit:contain;width:auto;max-width:120px;height:24px}.seed-input{width:80px}.palette-btn{justify-content:space-between;align-items:center;gap:var(--sb-space-6);border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);background:var(--sb-bg);min-width:min(360px,40vw);color:var(--sb-text-muted);cursor:pointer;padding:6px 10px;display:flex}.palette-btn:hover{border-color:var(--sb-text-muted)}.palette-backdrop{z-index:20;background:#0f172a66;justify-content:center;padding-top:14vh;display:flex;position:fixed;inset:0}.palette-dismiss{cursor:default;background:0 0;border:0;padding:0;position:absolute;inset:0}.palette{background:var(--sb-surface);border:1px solid var(--sb-border);border-radius:var(--sb-radius-card);flex-direction:column;width:min(620px,92vw);max-height:60vh;display:flex;position:relative;overflow:hidden;box-shadow:0 20px 50px #00000040}.palette input{border:0;border-bottom:1px solid var(--sb-border);border-radius:0;outline:none;padding:14px 16px;font-size:15px}.newenv-backdrop{z-index:60}.newenv{align-self:flex-start}.newenv form{gap:var(--sb-space-2);padding:var(--sb-space-4);flex-direction:column;display:flex}.newenv h2{margin:0;font-size:15px}.newenv label{flex-direction:column;gap:4px;display:flex}.newenv input,.newenv select{border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);padding:8px 10px;font-size:16px}.palette ul{margin:0;padding:6px;list-style:none;overflow:auto}.palette li button{justify-content:space-between;gap:var(--sb-space-3);border-radius:var(--sb-radius-control);text-align:left;cursor:pointer;background:0 0;border:0;width:100%;padding:8px 10px;display:flex}.palette li button.sel{background:var(--sb-surface-raised)}.pad{padding:12px}.states{gap:var(--sb-space-2);margin-bottom:var(--sb-space-4);flex-wrap:wrap;align-items:center;display:flex}.state{border:1px solid var(--sb-border);background:var(--sb-surface);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:3px 10px;font-size:12px;display:inline-flex}.state span{color:var(--sb-text-muted)}table.headers{border-collapse:collapse;width:100%;font-size:12px}table.headers th{text-align:left;font-family:var(--sb-font-mono);color:var(--sb-text-muted);vertical-align:top;padding:3px 12px 3px 0}table.headers td{word-break:break-all}.state.s2{border-color:var(--sb-success)}.state.s4,.state.s5{border-color:var(--sb-warning)}.state.forced{background:var(--sb-accent);border-color:var(--sb-accent);color:var(--sb-text-on-accent)}.state.forced span{color:inherit}.state.last:before{content:"●";color:var(--sb-success);font-size:8px}.tabs{border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);display:inline-flex;overflow:hidden}.tabs .tab{cursor:pointer;background:0 0;border:0;padding:3px 12px}.tabs .tab.on{background:var(--sb-surface-raised);font-weight:600}.lock{margin-bottom:var(--sb-space-3)}.state-badge{border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600}.state-badge.s2{background:var(--sb-success-subtle);color:var(--sb-success)}.state-badge.s3{background:var(--sb-surface-raised)}.state-badge.s4,.state-badge.s5{background:var(--sb-warning-subtle);color:var(--sb-warning)}.conf{font-size:12px;font-weight:600}.conf.ok{color:var(--sb-success)}.conf.warn{color:var(--sb-warning)}.conf.none{color:var(--sb-text-muted);font-weight:400}.checks{margin:var(--sb-space-3) 0 0;padding:var(--sb-space-3) 0 0;border-top:1px solid var(--sb-border);list-style:none}.checks .ok{color:var(--sb-text-muted)}.checks .ok .tick{color:var(--sb-success)}.checks .bad,.error-text{color:var(--sb-danger)}.journey{margin:0;padding:0;list-style:none}.jstep{gap:var(--sb-space-3);padding-bottom:var(--sb-space-4);grid-template-columns:28px minmax(0,1fr);display:grid;position:relative}.jstep:before{content:"";background:var(--sb-border);width:2px;position:absolute;top:28px;bottom:0;left:13px}.jstep:last-child:before{display:none}.jmark{background:var(--sb-surface-raised);border:2px solid var(--sb-border);border-radius:50%;place-items:center;width:28px;height:28px;font-size:12px;font-weight:700;display:grid}.jstep.pass .jmark{background:var(--sb-success-subtle);border-color:var(--sb-success);color:var(--sb-success)}.jstep.fail .jmark,.jstep.error .jmark{background:var(--sb-danger-subtle);border-color:var(--sb-danger);color:var(--sb-danger)}.jstep.paused .jmark,.jstep.running .jmark{border-color:var(--sb-accent);color:var(--sb-accent)}.jstep.skipped{opacity:.6}.jhead{gap:var(--sb-space-3);text-align:left;cursor:pointer;background:0 0;border:0;flex-wrap:wrap;align-items:baseline;padding:2px 0;display:flex}.jhead:disabled{cursor:default}.jname{font-weight:600}.cap{background:var(--sb-surface-raised);color:var(--sb-text-muted);border-radius:999px;padding:1px 8px;font-size:12px}.cap b{color:var(--sb-text);font-weight:600}.cap em{opacity:.8;font-style:normal}.cap.use{background:var(--sb-warning-subtle);color:var(--sb-warning)}.cap.make{background:var(--sb-success-subtle);color:var(--sb-success)}.pause{margin-top:var(--sb-space-3);padding:var(--sb-space-3);border-left:3px solid var(--sb-accent);background:var(--sb-bg);border-radius:var(--sb-radius-control)}.btn{border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);background:var(--sb-surface);cursor:pointer;padding:6px 14px}.btn:hover{background:var(--sb-surface-raised)}.btn.primary{background:var(--sb-accent);border-color:var(--sb-accent);color:var(--sb-text-on-accent);font-weight:600}.btn.primary:hover{background:var(--sb-accent-hover)}.btn:disabled{opacity:.55;cursor:default}input[type=text],input[type=number],input[type=date],select,textarea.val{border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);background:var(--sb-surface);padding:5px 8px}.field{margin-bottom:var(--sb-space-3);gap:4px;display:grid}.field>.label{font-size:12px;font-weight:600}.nested{border-left:2px solid var(--sb-border);padding-left:var(--sb-space-3)}.method{font:700 11px var(--sb-font-mono);background:var(--sb-surface-raised);border-radius:4px;padding:1px 6px}.method.GET{color:var(--sb-method-get)}.method.POST{color:var(--sb-method-post)}.method.PUT{color:var(--sb-method-put)}.method.PATCH{color:var(--sb-method-patch)}.method.DELETE{color:var(--sb-method-delete)}.badge{border-radius:999px;padding:1px 8px;font-size:12px;font-weight:600}.badge.pass{background:var(--sb-success-subtle);color:var(--sb-success)}.badge.fail,.badge.error{background:var(--sb-danger-subtle);color:var(--sb-danger)}@media (max-width:900px){.header{gap:var(--sb-space-3);flex-wrap:nowrap;position:relative}.brand{flex:0 auto;min-width:0}.brand-logo{flex:none}.brand-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.palette-btn{flex:1;min-width:0}.palette-btn span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.palette-btn kbd,.header>.spacer{display:none}.header .menu-btn{flex:none;justify-content:center;align-items:center;display:inline-flex}.header-env{flex:none;display:inline-flex}.header-controls{top:100%;right:var(--sb-space-2);left:var(--sb-space-2);z-index:30;align-items:stretch;gap:var(--sb-space-3);padding:var(--sb-space-4);border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);background:var(--sb-surface);box-shadow:0 12px 32px color-mix(in srgb, var(--sb-text) 18%, transparent);flex-direction:column;display:none;position:absolute}.header-controls.open{display:flex}.header-controls .row{flex-wrap:nowrap;justify-content:space-between}.header-controls .row>select{flex:0 0 56%;width:56%;min-width:0}.header-controls .row>.row{flex:100%}.header-controls .row.muted{flex-wrap:wrap}.header-controls .seed-input{flex:0 0 56%;margin-left:auto}.header-controls .envmenu,.header-controls .envmenu-btn{width:100%}.header-controls .envmenu-btn{justify-content:center;align-items:center;gap:var(--sb-space-2);display:flex}.header-controls .gh-label,.header-controls .share-label,.header-controls .envmenu-label{display:inline}.header-controls .gh-star,.header-controls .share>.btn{justify-content:flex-start;width:100%}.list-col{padding:var(--sb-space-2)}}@media (max-width:820px){input,select,textarea{font-size:16px!important}}.share{position:relative}.share-pop{z-index:40;gap:var(--sb-space-3);width:min(360px,90vw);padding:var(--sb-space-3);background:var(--sb-surface);border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);box-shadow:0 12px 32px color-mix(in srgb, var(--sb-text) 18%, transparent);display:grid;position:absolute;top:calc(100% + 6px);right:0}.share-pop p{margin:0}.share-link{width:100%;min-width:0;font-size:12px}.share-actions{gap:var(--sb-space-2);flex-wrap:wrap;display:flex}.share-targets{gap:var(--sb-space-3);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.share-targets a{color:var(--sb-accent)}@media (max-width:820px){.share-pop{width:auto;position:static}}.powered-by{margin:var(--sb-space-6) 0 0;font-size:12px}.powered-by a{color:var(--sb-text-muted);text-decoration:none}.powered-by a:hover{color:var(--sb-accent);text-decoration:underline}.header{flex-wrap:nowrap}.palette-btn{flex:180px;min-width:120px;max-width:360px}@media (max-width:1360px){.gh-label,.share-label,.envmenu-label{display:none}}.gh-star{color:var(--sb-text)}.share>.btn,.gh-star{white-space:nowrap;align-items:center;gap:6px;text-decoration:none;display:inline-flex}.doc{max-width:900px;margin:0 auto;line-height:1.6}.doc-head{justify-content:space-between;align-items:center;gap:var(--sb-space-4);display:flex}.doc h1{letter-spacing:-.02em;margin:0;font-size:26px}.doc h2{margin:var(--sb-space-6) 0 var(--sb-space-2);text-transform:uppercase;letter-spacing:.06em;color:var(--sb-text-muted);font-size:11px}.doc .endpoint{align-items:center;gap:var(--sb-space-3);margin:var(--sb-space-3) 0 var(--sb-space-4);padding:8px var(--sb-space-3);border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);background:var(--sb-surface);display:flex}.doc .endpoint .method{font-size:12px}.doc .btn.primary{height:36px;padding:0 18px}.doc-custom blockquote{margin:var(--sb-space-3) 0;padding:var(--sb-space-1) var(--sb-space-3);border-left:3px solid var(--sb-border);color:var(--sb-text-muted)}.doc-custom :is(h1,h2,h3){margin-top:var(--sb-space-4)}.doc-custom pre,.doc code{font-family:var(--sb-font-mono);font-size:12.5px}table.fields{border-collapse:separate;border-spacing:0;border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);background:var(--sb-surface);width:100%;font-size:13px;overflow:hidden}table.fields th{text-align:left;color:var(--sb-text-muted);letter-spacing:.04em;text-transform:uppercase;background:var(--sb-surface-raised);border-bottom:1px solid var(--sb-border);padding:7px 12px;font-size:11px;font-weight:600}table.fields td{border-bottom:1px solid var(--sb-border);vertical-align:top;padding:8px 12px}table.fields tr:last-child td{border-bottom:0}.statuses,.examples,.steps{padding-left:var(--sb-space-4);margin:0}.statuses{padding:0;list-style:none}.req{color:var(--sb-danger);margin-left:2px}.chip{background:var(--sb-surface-raised);color:var(--sb-text-muted);font:11px var(--sb-font-mono);border-radius:4px;padding:0 6px;display:inline-block}.chip.req{background:var(--sb-danger-subtle);color:var(--sb-danger);margin:0}.chip.warn{background:var(--sb-warning-subtle);color:var(--sb-warning)}.icon{cursor:pointer;color:var(--sb-text-muted);background:0 0;border:0;padding:2px 6px;font-size:16px;line-height:1}.panel-backdrop{background:color-mix(in srgb, var(--sb-text) 35%, transparent);cursor:default;z-index:20;border:0;padding:0;position:fixed;inset:0}.panel{background:var(--sb-surface);border-left:1px solid var(--sb-border);width:75vw;min-width:min(560px,100vw);box-shadow:-12px 0 32px color-mix(in srgb, var(--sb-text) 18%, transparent);z-index:21;flex-direction:column;animation:.16s ease-out panel-in;display:flex;position:fixed;inset:0 0 0 auto}@keyframes panel-in{0%{opacity:0;transform:translate(24px)}}@media (prefers-reduced-motion:reduce){.panel{animation:none}}.panel-head{align-items:center;gap:var(--sb-space-3);padding:var(--sb-space-3) var(--sb-space-4);border-bottom:1px solid var(--sb-border);background:var(--sb-surface);display:flex}.panel-title{min-width:0}.panel-head h2{letter-spacing:0;text-transform:none;color:var(--sb-text);margin:0;font-size:15px;font-weight:650}.panel-head .method{padding:3px 8px;font-size:12px}.panel-body{overscroll-behavior:contain;min-height:0;padding:var(--sb-space-4);background:var(--sb-bg);flex:1;overflow:auto}.panel-body.flush{background:var(--sb-surface);padding:0;overflow:hidden}.section-head{align-items:center;gap:var(--sb-space-3);margin-bottom:var(--sb-space-2);flex-wrap:wrap;display:flex}.section-head h3,.grid h3{margin:0 0 var(--sb-space-2);text-transform:uppercase;letter-spacing:.06em;color:var(--sb-text-muted);font-size:11px}.section-head h3{margin:0}.saved-note{align-items:flex-start;gap:var(--sb-space-2);margin:0 var(--sb-space-4) var(--sb-space-3);padding:var(--sb-space-2) var(--sb-space-3);border-radius:var(--sb-radius-control);background:var(--sb-success-subtle);color:var(--sb-success);font-size:12.5px;display:flex}.saved-note span{flex:1}.saved-note code{word-break:break-all;background:0 0;font-weight:600}.naming{padding:0 var(--sb-space-4) var(--sb-space-3)}.lock{padding:0 var(--sb-space-4) var(--sb-space-3);margin:0}.panel.docked{inset:var(--sb-header-h,53px) 0 0 var(--sb-list-w);width:auto;min-width:0;box-shadow:-8px 0 24px color-mix(in srgb, var(--sb-text) 10%, transparent);animation:none}.stepper{display:inline-flex}.stepper .icon:disabled{opacity:.35;cursor:default}.panel-split{flex-direction:column;height:100%;min-height:0;display:flex}.panel-tabs{background:var(--sb-surface);flex:none}.panel-main{flex:1;min-height:0;overflow:hidden}.panel-main.scroll{overscroll-behavior:contain;padding:var(--sb-space-4) var(--sb-space-6) var(--sb-space-6);overflow:auto}.doc-intro{align-items:center;gap:var(--sb-space-3);margin-bottom:var(--sb-space-4);padding:8px var(--sb-space-3);border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);background:var(--sb-surface);display:flex}.doc-intro .method{font-size:12px}.catalog{container-type:inline-size}.cat-top{gap:var(--sb-space-3);margin-bottom:var(--sb-space-3);display:grid}.pills{gap:var(--sb-space-2);flex-wrap:wrap;display:flex}.pill{border:1px solid var(--sb-border);background:var(--sb-surface);color:var(--sb-text);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:3px 11px;font-size:13px;display:inline-flex}.pill:hover{border-color:var(--sb-text-muted)}.pill.on{background:var(--sb-accent);border-color:var(--sb-accent);color:var(--sb-text-on-accent)}.pill .count{margin:0;font-size:11px}.cat-filter-wrap{position:relative}.cat-filter{width:100%;padding-right:34px}.cat-hint{pointer-events:none;position:absolute;top:50%;right:8px;transform:translateY(-50%)}.group-head.static{cursor:default;color:var(--sb-text-muted);letter-spacing:.06em;text-transform:uppercase;padding-left:20px;font-size:11px}.method.flow{color:var(--sb-accent)}.flows{margin-bottom:var(--sb-space-4);border:1px solid color-mix(in srgb, var(--sb-accent) 28%, var(--sb-border));border-left:3px solid var(--sb-accent);border-radius:var(--sb-radius-control);background:color-mix(in srgb, var(--sb-accent) 6%, transparent);overflow:hidden}.flows-title{align-items:center;gap:var(--sb-space-2);padding:8px;display:flex}.panel-error{margin:var(--sb-space-4);padding:var(--sb-space-4);border:1px solid var(--sb-border);border-left:3px solid var(--sb-danger,#dc2626);border-radius:var(--sb-radius-card);background:var(--sb-surface)}.panel-error pre{margin:var(--sb-space-2) 0 var(--sb-space-3);white-space:pre-wrap;overflow-wrap:anywhere;font:12px var(--sb-font-mono);color:var(--sb-text-muted)}button.flows-title{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0}@media (pointer:coarse){button.flows-title{min-height:44px}}button.flows-title:hover{background:var(--sb-surface-raised)}button.flows-title:focus-visible{outline:2px solid var(--sb-focus-ring);outline-offset:-2px}.flows-title .caret{width:1em;color:var(--sb-text-muted)}.flows-title .count{color:var(--sb-text-muted);margin-left:auto;font-size:12px}.flows .flow-head{color:var(--sb-text-muted);padding-left:8px;font-size:12px}.flows .op-row:last-child{border-bottom:0}.flows.requests{border-color:var(--sb-border);border-left-color:var(--sb-text-muted);background:var(--sb-surface-raised)}.method.req{color:var(--sb-text-muted)}.req-tag{margin-left:6px;font-size:11px;font-weight:500}.flow-play{text-align:center;color:var(--sb-accent);font-size:10px}.overview{place-content:center;justify-items:center;gap:var(--sb-space-2);text-align:center;min-height:100%;color:var(--sb-text-muted);padding-bottom:8vh;display:grid}.overview .overview-name{letter-spacing:.1em;text-transform:uppercase;color:var(--sb-accent);margin:0;font-size:12px;font-weight:700}.overview h1{margin:0 0 var(--sb-space-2);letter-spacing:-.02em;color:var(--sb-text);font-size:26px}.overview p{max-width:52ch;margin:0}.overview-logo{width:auto;max-width:240px;max-height:72px;margin-bottom:var(--sb-space-3);object-fit:contain}.overview .tagline{color:var(--sb-text);font-size:16px}.overview-links{justify-content:center;gap:var(--sb-space-2) var(--sb-space-4);margin-top:var(--sb-space-2);flex-wrap:wrap;display:flex}.overview-links a{color:var(--sb-accent);font-weight:600;text-decoration:none}.overview-links a:hover{text-decoration:underline}.op-group{margin-bottom:var(--sb-space-3)}.group-head{border:0;border-bottom:1px solid var(--sb-border);text-align:left;cursor:pointer;background:0 0;align-items:center;gap:6px;width:100%;padding:6px 8px;font-weight:600;display:flex}.group-head .caret{width:12px;color:var(--sb-text-muted)}.group-head .count{font-size:12px}.op-row{align-items:center;gap:var(--sb-space-3);border:0;border-bottom:1px solid color-mix(in srgb, var(--sb-border) 60%, transparent);text-align:left;cursor:pointer;background:0 0;grid-template-columns:52px minmax(0,1fr) auto;width:100%;padding:7px 8px;display:grid}.op-row:hover,.op-row:focus-visible{background:var(--sb-surface-raised)}.op-row.active{background:color-mix(in srgb, var(--sb-accent) 10%, var(--sb-surface));box-shadow:inset 3px 0 0 var(--sb-accent)}.op-row .method{text-align:center;justify-self:start;min-width:0;padding:1px 5px;font-size:10px}.op-title{-webkit-line-clamp:2;overflow-wrap:anywhere;-webkit-box-orient:vertical;line-height:1.35;display:-webkit-box;overflow:hidden}.op-path{text-overflow:ellipsis;white-space:nowrap;max-width:46%;font:12px var(--sb-font-mono);color:var(--sb-text-muted);overflow:hidden}@container (width<=520px){.op-path{display:none}.op-row{grid-template-columns:52px minmax(0,1fr)}}.cat-empty{padding:var(--sb-space-4) 0}.request-panel{flex-direction:column;height:100%;min-height:0;display:flex}.rq{flex-direction:column;flex:1;min-height:0;display:flex}.rq-bar{align-items:center;gap:var(--sb-space-2);padding:var(--sb-space-3) var(--sb-space-4) var(--sb-space-2);display:flex}.rq-bar .method{border:1px solid var(--sb-border);padding:7px 10px;font-size:12px}.rq-url{align-items:center;gap:var(--sb-space-2);min-width:0;height:34px;padding:0 var(--sb-space-3);border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);background:var(--sb-surface-raised);flex:1;display:flex}.rq-url code{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;overflow:hidden}.rq-url mark{background:var(--sb-warning-subtle);color:var(--sb-warning);border-radius:3px;padding:0 2px}.rq-example{display:contents}.env-badge{font:600 10px var(--sb-font-sans);letter-spacing:.06em;text-transform:uppercase;color:var(--sb-text-muted);border:1px solid var(--sb-border);white-space:nowrap;border-radius:4px;flex:none;align-items:center;padding:1px 6px;display:inline-flex;position:relative}.env-badge.switch{cursor:pointer}.env-badge.switch>.env-name:after{content:" ▾";opacity:.7}.env-badge select{opacity:0;cursor:pointer;width:100%;height:100%;min-height:0;position:absolute;inset:0}.env-badge.live{color:var(--sb-warning);border-color:color-mix(in srgb, var(--sb-warning) 45%, var(--sb-border));background:var(--sb-warning-subtle)}.env-badge.prod{color:var(--sb-danger);border-color:color-mix(in srgb, var(--sb-danger) 45%, var(--sb-border));background:var(--sb-danger-subtle)}.result-chip{white-space:nowrap;cursor:pointer;border:0;border-radius:999px;flex:none;align-items:center;height:34px;padding:0 12px;font-size:12px;font-weight:600;display:inline-flex}.result-chip.s2{background:var(--sb-success-subtle);color:var(--sb-success)}.result-chip.s3{background:var(--sb-surface-raised);color:var(--sb-text)}.result-chip.s4,.result-chip.s5{background:var(--sb-warning-subtle);color:var(--sb-warning)}.rq-status{align-items:center;gap:var(--sb-space-2);white-space:nowrap;font-size:12px;display:flex}.request-panel select,.panel-head select,.header select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' fill='none' stroke='%2394a3b8' stroke-width='1.6'%3E%3Cpath d='M1 1l4 4 4-4'/%3E%3C/svg%3E");background-position:right 9px center;background-repeat:no-repeat;padding-right:26px}.rq-bar .send{place-items:center;height:34px;padding:0 18px;display:inline-grid}kbd.icon-key{vertical-align:middle;place-items:center;display:inline-grid}.needs-vars{align-items:center;gap:var(--sb-space-2) var(--sb-space-3);min-width:0;margin:0 var(--sb-space-4) var(--sb-space-2);padding:var(--sb-space-2) var(--sb-space-3);border:1px solid color-mix(in srgb, var(--sb-warning) 35%, var(--sb-border));border-radius:var(--sb-radius-control);background:var(--sb-warning-subtle);flex-wrap:wrap;font-size:12.5px;display:flex}.needs-vars.ok{border-color:var(--sb-border);background:var(--sb-surface)}.secrets-folded{margin:0 var(--sb-space-4) var(--sb-space-2)}.secrets-chip{text-overflow:ellipsis;white-space:nowrap;border:1px solid var(--sb-border);background:var(--sb-surface);max-width:100%;color:var(--sb-text-muted);cursor:pointer;border-radius:999px;padding:1px 10px;font-size:12px;line-height:1.4;overflow:hidden}.needs-var{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;max-width:100%;display:inline-flex}.needs-var input{width:130px;min-width:0}.needs-var input[type=password]{border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);background:var(--sb-surface);padding:5px 8px}.oauth-signin{flex:100%}.oauth-signin input[type=text]{flex:140px;width:auto;max-width:360px}.oauth-signin details{flex:100%;min-width:0}.oauth-signin input[type=checkbox]{flex:none;width:auto}.oauth-signin details label{overflow-wrap:anywhere;align-items:center;gap:6px;min-height:28px;display:flex}.oauth-status{overflow-wrap:anywhere;flex:100%;min-width:0}.rq-meta{align-items:center;gap:var(--sb-space-3);padding:var(--sb-space-1) var(--sb-space-4) var(--sb-space-3);font-size:12px;display:flex}.edited{color:var(--sb-warning);background:var(--sb-warning-subtle);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:600}.rq-tabs{gap:var(--sb-space-1);padding:0 var(--sb-space-4);border-bottom:1px solid var(--sb-border);display:flex}.rq-tabs[hidden]{display:none}.rq-tab{color:var(--sb-text-muted);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-1px;padding:8px 10px;font-weight:500;display:inline-flex}.rq-tab:hover{color:var(--sb-text)}.rq-tab.on{color:var(--sb-text);border-bottom-color:var(--sb-accent)}.rq-tab .count{background:var(--sb-surface-raised);opacity:1;border-radius:999px;margin:0;padding:0 6px;font-size:11px;font-weight:600}.rq-tab .count.bad{background:var(--sb-danger-subtle);color:var(--sb-danger)}.rq-pane{min-height:0;padding:var(--sb-space-3) var(--sb-space-4) var(--sb-space-4);flex-direction:column;flex:1;display:flex}.tab-pane{flex-direction:column;flex:1;min-height:0;display:flex;overflow:auto}.tab-pane[hidden]{display:none}.tab-pane>section+section{margin-top:var(--sb-space-4)}.tab-gap{flex:1}.state-dot{border-radius:999px;padding:0 6px;font-size:11px;font-weight:700}.state-dot.s2{background:var(--sb-success-subtle);color:var(--sb-success)}.state-dot.s3{background:var(--sb-surface-raised)}.state-dot.s4,.state-dot.s5{background:var(--sb-warning-subtle);color:var(--sb-warning)}.tab-pane>.body{flex-direction:column;flex:1;min-height:0;display:flex}.tab-pane .body .body-editor{flex:1;min-height:120px;max-height:none}.sent-view{gap:var(--sb-space-2);flex-direction:column;min-height:0;display:flex}.sent-view .rq-bar{padding:0}.sent-view table.headers th{width:200px;font-family:var(--sb-font-mono);font-size:12.5px}.sent-view h3{margin:var(--sb-space-2) 0 0;text-transform:uppercase;letter-spacing:.06em;color:var(--sb-text-muted);font-size:11px}.response{background:var(--sb-surface);flex-direction:column;flex:1;min-height:0;display:flex}.rs-head{align-items:center;gap:var(--sb-space-3);padding:0 0 var(--sb-space-2);display:flex}.rs-head h3{text-transform:uppercase;letter-spacing:.06em;color:var(--sb-text-muted);margin:0;font-size:11px}.rs-stat{color:var(--sb-text-muted);font-size:12px}.sent{padding:0 0 var(--sb-space-2);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:12px;overflow:hidden}.rs-pane{min-height:0;padding:var(--sb-space-3) 0 0;flex-direction:column;flex:1;display:flex}.rs-pane>div{flex-direction:column;flex:1;min-height:0;display:flex;overflow:auto}.rs-pane>div[hidden]{display:none}.rs-pane .body-editor{flex:1;min-height:120px;max-height:none}.response .rq-tabs{padding:0}.rs-empty{place-content:center;justify-items:center;gap:var(--sb-space-2);padding:var(--sb-space-6);color:var(--sb-text-muted);flex:1;display:grid}.rs-empty strong{color:var(--sb-text)}.response .checks{border:0;margin:0;padding:0}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.checks .bad{margin-top:var(--sb-space-2);color:inherit}.check-fail{gap:var(--sb-space-2);min-width:0;padding:var(--sb-space-3);border:1px solid color-mix(in srgb, var(--sb-danger) 35%, var(--sb-border));border-left:3px solid var(--sb-danger);border-radius:var(--sb-radius-control);background:color-mix(in srgb, var(--sb-danger) 5%, var(--sb-surface));margin:0;display:grid}.check-head{align-items:center;gap:var(--sb-space-2);color:var(--sb-danger);flex-wrap:wrap;display:flex}.check-head strong{overflow-wrap:anywhere;min-width:0}.diff-legend{gap:var(--sb-space-3);font-size:12px;font-weight:600;display:flex}.diff-key.diff-expected,.diff-line.diff-expected{color:var(--sb-success)}.diff-key.diff-received,.diff-line.diff-received{color:var(--sb-danger)}.diff{padding:var(--sb-space-2) 0;white-space:pre;border-radius:var(--sb-radius-control);background:var(--sb-surface);border:1px solid var(--sb-border);max-height:18em;font:12.5px / 1.5 var(--sb-font-mono);margin:0;overflow:auto}.diff-line{min-width:max-content;padding:0 var(--sb-space-3) 0 0;display:flex}.diff-line.diff-expected{background:var(--sb-success-subtle)}.diff-line.diff-received{background:var(--sb-danger-subtle)}.diff-line.diff-same{color:var(--sb-text-muted)}.diff-line.diff-skip{color:var(--sb-text-muted);font-style:italic}.diff-gutter{text-align:center;-webkit-user-select:none;user-select:none;flex:none;width:2em}.diff-text{white-space:pre}.check-where{font:12px var(--sb-font-mono);color:var(--sb-text-muted);overflow-wrap:anywhere}.link{color:var(--sb-accent);cursor:pointer;background:0 0;border:0;padding:0}.link:hover{text-decoration:underline}.icon{cursor:pointer;width:24px;height:24px;color:var(--sb-text-muted);background:0 0;border:0;border-radius:4px;place-items:center;padding:0;font-size:16px;line-height:1;display:inline-grid}.icon:hover{background:var(--sb-surface-raised);color:var(--sb-text)}.small{font-size:12px}.grid table{border-collapse:separate;border-spacing:0;table-layout:fixed;border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);width:100%;font-size:13px;overflow:hidden}.grid th{text-align:left;letter-spacing:.04em;text-transform:uppercase;color:var(--sb-text-muted);background:var(--sb-surface-raised);border-bottom:1px solid var(--sb-border);padding:6px 8px;font-size:11px;font-weight:600}.grid td{border-bottom:1px solid var(--sb-border);vertical-align:middle;background:var(--sb-surface);height:32px;padding:0}.grid tbody tr:last-child td{border-bottom:0}.grid td+td,.grid th+th{border-left:1px solid var(--sb-border)}.grid tbody tr:hover td{background:color-mix(in srgb, var(--sb-accent) 4%, var(--sb-surface))}.grid tr.bad td{background:var(--sb-danger-subtle)}.g-check{text-align:center}.grid th{position:relative}.col-resizer{z-index:2;cursor:col-resize;touch-action:none;width:8px;position:absolute;top:0;bottom:0;right:-4px}.col-resizer:after{content:"";background:0 0;border-radius:1px;position:absolute;inset:4px 3px}.col-resizer:hover:after,.col-resizer:focus-visible:after,body.resizing .col-resizer:after{background:var(--sb-accent)}.g-check input{accent-color:var(--sb-accent);vertical-align:middle;margin:0}.g-act{white-space:nowrap;text-align:right;padding-right:4px}.g-act .icon{opacity:0}.grid tr:hover .g-act .icon,.grid tr:focus-within .g-act .icon{opacity:1}.g-key .key{align-items:baseline;gap:2px;padding:0 8px;display:flex}.g-key code{font-size:12.5px}.g-doc{color:var(--sb-text-muted);white-space:nowrap;text-overflow:ellipsis;padding:0 8px;overflow:hidden}.grid tr.off td:not(.g-check):not(.g-act){color:var(--sb-text-muted)}.grid tr.off .cell,.grid tr.off code{opacity:.6}.cell{width:100%;height:31px;font:inherit;color:var(--sb-text);background:0 0;border:0;border-radius:0;outline:none;padding:0 8px;display:block}.cell::placeholder{color:color-mix(in srgb, var(--sb-text-muted) 70%, transparent)}.cell:focus,.file-cell:focus-within{background:var(--sb-surface);box-shadow:inset 0 0 0 2px var(--sb-accent)}.grid tr.ghost td{background:color-mix(in srgb, var(--sb-surface-raised) 50%, var(--sb-surface))}.file-cell{cursor:pointer;white-space:nowrap;text-overflow:ellipsis;align-items:center;height:31px;padding:0 8px;display:flex;overflow:hidden}.file-cell input{opacity:0;width:1px;height:1px;position:absolute}.combo{position:relative}.combo .cell{padding-right:26px}.combo-toggle{width:26px;color:var(--sb-text-muted);cursor:pointer;background:0 0;border:0;position:absolute;inset:0 0 0 auto}.combo-list{z-index:30;background:var(--sb-surface);border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);max-height:220px;box-shadow:0 8px 24px color-mix(in srgb, var(--sb-text) 16%, transparent);margin:0;padding:4px;position:fixed;overflow:auto}.combo-list button{text-align:left;cursor:pointer;width:100%;font-family:var(--sb-font-mono);background:0 0;border:0;border-radius:4px;padding:5px 8px;font-size:12.5px;display:block}.combo-list button:hover,.combo-list button.at{background:var(--sb-surface-raised)}.combo-list button.on{color:var(--sb-accent);font-weight:600}.doc-project{margin-top:var(--sb-space-3)}.field-note{margin-top:var(--sb-space-2);border-left:2px solid var(--sb-accent);padding-left:8px;font-size:12.5px}.field-note>:first-child{margin-top:0}.field-note>:last-child{margin-bottom:0}.step-note-row td{border-top:0;padding-top:0}.step-note{color:var(--sb-text-muted);font-size:13px}.step-note>:first-child{margin-top:0}.step-note>:last-child{margin-bottom:0}.step-about{margin:var(--sb-space-2) 0;border:1px solid var(--sb-border);border-left:3px solid var(--sb-accent);border-radius:var(--sb-radius-control);padding:6px 10px;font-size:13px}.step-about summary{cursor:pointer;font-weight:600}.step-about .doc-custom{margin-top:var(--sb-space-2)}.code-sample{gap:var(--sb-space-2);padding:var(--sb-space-3);flex-direction:column;display:flex}.code-head{align-items:center;gap:var(--sb-space-2);display:flex}.code-block{padding:var(--sb-space-3);border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);background:var(--sb-surface-raised);font:12.5px / 1.55 var(--sb-font-mono);-webkit-user-select:text;user-select:text;margin:0;overflow-x:auto}fieldset.seg{border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);min-width:0;margin:0;padding:0;display:inline-flex;overflow:hidden}.seg-btn{background:var(--sb-surface);color:var(--sb-text-muted);cursor:pointer;border:0;padding:2px 10px;font-size:12px;font-weight:600}.seg-btn+.seg-btn{border-left:1px solid var(--sb-border)}.seg-btn.on{background:var(--sb-surface-raised);color:var(--sb-text)}.body-editor{border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);background:var(--sb-code-bg);max-height:420px;display:grid;overflow:auto}.body-editor .prism-code-editor{--pce-bg:var(--sb-code-bg);--pce-cursor:var(--sb-text);--pce-selection:var(--sb-focus-ring);--pce-bg-highlight:var(--sb-code-line);--pce-line-number:var(--sb-text-muted);--pce-selection-match:transparent;--pce-widget-bg:var(--sb-surface);--pce-widget-border:var(--sb-border);--pce-widget-color-active:var(--sb-text);--pce-ac-match:var(--sb-accent);font:12.5px / 1.6 var(--sb-font-mono);min-height:3.2em}.body-editor [class*=language-],.body-editor .token.punctuation,.body-editor .token.operator{color:var(--sb-code-punct)}.body-editor .token.property,.body-editor .token.attr-name{color:var(--sb-code-key)}.body-editor .token.string{color:var(--sb-code-string)}.body-editor .token.number{color:var(--sb-code-number)}.body-editor .token.boolean,.body-editor .token.null,.body-editor .token.constant{color:var(--sb-code-literal)}.body-editor .token.keyword,.body-editor .token.class-name,.body-editor .token.function{color:var(--sb-code-keyword)}.body-editor .token.comment{color:var(--sb-code-comment)}.field-doc{min-height:4.5em;margin-top:var(--sb-space-2);padding:var(--sb-space-2) var(--sb-space-3);border-left:3px solid var(--sb-accent);background:var(--sb-surface);font-size:13px}.tab-pane>.field-doc,.tab-pane .body>.field-doc,.sent-view>.field-doc,.rs-pane>div>.field-doc{z-index:1;position:sticky;bottom:0}.field-doc.empty{border-left-color:var(--sb-border);color:var(--sb-text-muted)}.field-doc p{margin:4px 0 0}.field-doc-text{max-height:11em;margin-top:4px;overflow:auto}.field-doc-text :is(p,ul,ol,pre){margin:0 0 var(--sb-space-2)}.field-doc-text :is(ul,ol){padding-left:1.3em}.field-doc-text pre{padding:var(--sb-space-2);background:var(--sb-surface-raised);border-radius:var(--sb-radius-control);overflow:auto}.field-doc-text :is(h2,h3,h4,h5){margin:var(--sb-space-2) 0 var(--sb-space-1);text-transform:none;letter-spacing:0;color:var(--sb-text);font-size:13px}.doc-inline a,.field-doc-text a{color:var(--sb-accent)}.doc-inline code,.field-doc-text code{background:var(--sb-surface-raised);border-radius:3px;padding:0 4px}.field-doc-head{align-items:center;gap:var(--sb-space-2);flex-wrap:wrap;display:flex}.field-doc-enum code{margin-right:6px}.issues{margin-top:var(--sb-space-2);font-size:12px}.sequence-panel{grid-template-columns:minmax(300px,4fr) minmax(0,7fr);height:100%;min-height:0;display:grid}@media (max-width:900px){.sequence-panel{grid-template-columns:minmax(0,1fr);overflow:auto}}.seq-left{min-height:0;padding:var(--sb-space-4);background:var(--sb-bg);border-right:1px solid var(--sb-border);overflow:auto}.controls-grid{margin-bottom:var(--sb-space-3);container-type:inline-size}.controls-grid col.c-key{width:30%}.controls-grid col.c-val{width:40%}@container (width<=520px){.controls-grid .g-doc,.controls-grid th.g-doc{display:none}.controls-grid col.c-key{width:40%}.controls-grid col.c-val{width:60%}}.controls-head{justify-content:space-between;align-items:center;gap:var(--sb-space-2);display:flex}.controls-head .gen-all{text-transform:none;letter-spacing:0;align-items:center;gap:6px;padding:4px 10px;font-size:12px;display:inline-flex}.cell-gen{align-items:center;gap:4px;min-width:0;display:flex}.cell-gen>:first-child{flex:auto;min-width:0}.cell-gen .cell{width:100%;min-width:0}.gen{width:28px;height:28px;color:var(--sb-text-muted);border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);cursor:pointer;background:0 0;flex:none;justify-content:center;align-items:center;margin-right:4px;padding:0;display:inline-flex}.gen:hover,.gen:focus-visible{color:var(--sb-accent);border-color:var(--sb-accent)}@media (pointer:coarse){.gen{width:44px;height:44px}.controls-head .gen-all{min-height:44px}}.multi-cell{flex-wrap:wrap;gap:4px 12px;padding:6px 8px;display:flex}.multi-cell label{align-items:center;gap:4px;display:inline-flex}.cell.mono{font-family:var(--sb-font-mono);font-size:12.5px}.doc-tags{gap:var(--sb-space-1);margin:0 0 var(--sb-space-3);display:flex}.doc .link{text-align:left}.pause .controls-grid{margin:var(--sb-space-2) 0}.step-exchange{flex-direction:column;height:100%;min-height:0;display:flex}.seq-left .controls{padding:var(--sb-space-3) var(--sb-space-4);margin-bottom:var(--sb-space-3);background:var(--sb-surface);border:1px solid var(--sb-border);border-radius:var(--sb-radius-card)}.seq-left .controls h3{margin:0 0 var(--sb-space-2);text-transform:uppercase;letter-spacing:.06em;color:var(--sb-text-muted);font-size:11px}.seq-run{align-items:center;gap:var(--sb-space-3);margin-bottom:var(--sb-space-4);flex-wrap:wrap;display:flex}.seq-left .journey{padding:var(--sb-space-1) 0}.seq-left .jhead{font-size:13px}.seq-right{background:var(--sb-surface);flex-direction:column;min-height:0;display:flex;overflow:auto}.seq-right .response{padding:var(--sb-space-3) var(--sb-space-4) 0}.seq-req{border-bottom:1px solid var(--sb-border);flex:none}.seq-req .rq-bar{padding-bottom:var(--sb-space-3)}.seq-req .rq-pane{padding-top:0}.seq-req .body-editor{max-height:200px}.jstep.picked .jhead .jname{text-underline-offset:3px;text-decoration:underline}.envmenu{position:relative}.envmenu-btn{white-space:nowrap;align-items:center;gap:6px;display:inline-flex}.badge-missing{background:var(--sb-danger);min-width:18px;color:var(--sb-text-on-danger);text-align:center;border-radius:999px;padding:0 5px;font-size:11px;font-weight:700}.envmenu-pop{z-index:40;gap:var(--sb-space-3);width:min(460px,92vw);max-height:min(70vh,640px);padding:var(--sb-space-3) var(--sb-space-4);background:var(--sb-surface);border:1px solid var(--sb-border);border-radius:var(--sb-radius-card);box-shadow:0 12px 32px color-mix(in srgb, var(--sb-text) 20%, transparent);grid-template-columns:minmax(0,1fr);display:grid;position:absolute;top:calc(100% + 8px);right:0;overflow:auto}.envmenu-head{align-items:center;gap:var(--sb-space-3);display:flex}.envmenu-pop h3{margin:0 0 var(--sb-space-1);text-transform:uppercase;letter-spacing:.06em;color:var(--sb-text-muted);font-size:11px}.envmenu-pop p{margin:0}.envmenu-warn{padding:var(--sb-space-2) var(--sb-space-3);border-radius:var(--sb-radius-control);background:var(--sb-warning-subtle);color:var(--sb-warning);font-size:12.5px}.envrow{align-items:center;gap:var(--sb-space-2);margin-top:var(--sb-space-2);display:flex}.envrow input,.envrow select{border:1px solid var(--sb-border);border-radius:var(--sb-radius-control);background:var(--sb-surface);flex:1;min-width:0;padding:5px 8px}.envrow code{text-overflow:ellipsis;flex:0 0 38%;overflow:hidden}.secretrow{margin-top:var(--sb-space-3)}.secretrow-head{align-items:baseline;gap:var(--sb-space-2);font-size:13px;display:flex}.secretrow-head .src{border-radius:999px;margin-left:auto;padding:0 8px;font-size:11px;font-weight:600}.src.set{background:var(--sb-success-subtle);color:var(--sb-success)}.src.missing{background:var(--sb-danger-subtle);color:var(--sb-danger)}.envrow .src{border-radius:999px;flex:none;padding:0 8px;font-size:11px;font-weight:600}.src.inherited{background:var(--sb-surface-raised);color:var(--sb-text-muted)}.envuse{margin:-2px 0 var(--sb-space-2);overflow-wrap:anywhere;padding-left:2px}.op-lock{color:var(--sb-text-muted);vertical-align:-1px;margin-left:6px;display:inline-block}.list-resizer{z-index:25;top:var(--sb-header-h,53px);bottom:0;left:calc(var(--sb-list-w) - 4px);cursor:col-resize;touch-action:none;width:8px;position:fixed}.list-resizer:after{content:"";background:0 0;transition:background .12s;position:absolute;inset:0 3px}.list-resizer:hover:after,.list-resizer:focus-visible:after,body.resizing .list-resizer:after{background:var(--sb-accent)}body.resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}@media (max-width:900px){.list-resizer{display:none}}@media (max-width:820px){.panel,.panel.docked{width:100%;min-width:0;height:100dvh;box-shadow:none;border-left:0;inset:0}input,select,textarea,.body-editor .prism-code-editor,.body-editor .prism-code-editor textarea{font-size:16px}.body-editor .prism-code-editor{line-height:1.5}.panel-head{padding:var(--sb-space-2) var(--sb-space-3);gap:var(--sb-space-2);flex-wrap:nowrap}.panel-title{flex:1 1 0;min-width:0}.panel-head h2{-webkit-line-clamp:2;line-clamp:2;overflow-wrap:anywhere;-webkit-box-orient:vertical;line-height:1.25;display:-webkit-box;overflow:hidden}.panel-title>.muted{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.panel-head .spacer,.panel-head label.row>.muted{display:none}.panel-head select{max-width:34%}.stepper{gap:0}.panel-head .icon{min-width:36px;min-height:36px}.panel-main.scroll{padding:var(--sb-space-3)}.doc-intro{flex-wrap:wrap}.doc-intro code{overflow-wrap:anywhere;flex:1 1 0;min-width:0}.doc-intro .spacer{display:none}.doc pre,.doc-custom pre{max-width:100%;overflow-x:auto}.doc img{max-width:100%;height:auto}.doc-custom table{max-width:100%;display:block;overflow-x:auto}.panel-main.scroll{overflow-x:hidden}.envmenu{position:static}.envmenu-pop{inset:var(--sb-space-2);z-index:40;width:auto;max-height:none;position:fixed}.envrow{flex-wrap:wrap}.envrow code{flex:1 0 100%}.envrow input{flex:1 1 0}.envrow input,.envrow select{min-width:0;max-width:100%}table.fields{max-width:100%;display:block;overflow-x:auto}table.fields td:last-child{min-width:440px}table.fields td:first-child{white-space:nowrap}.rq-meta{padding-inline:var(--sb-space-3);flex-wrap:wrap}.secrets-note,.oauth-hint{display:none}.secrets-folded,.needs-vars{margin-inline:var(--sb-space-3)}.rq-example{align-items:center;gap:var(--sb-space-2);flex:100%;min-width:0;display:flex}.rq-example>label.row{flex:1 1 0;min-width:0}.rq-example>label.row select{text-overflow:ellipsis;flex:1 1 0;min-width:0}.rq-status{gap:var(--sb-space-3);flex:100%;order:1;min-width:0}.rq-status>select{text-overflow:ellipsis;flex:1 1 0;min-width:0}.rq-example>label.row>.muted,.rq-status>.muted{flex:0 0 84px}.rq-meta>.edited,.rq-meta>.spacer,.rq-meta>.link{order:2}.rq-meta select{min-width:0;max-width:100%}button,select,input:not([type=checkbox]):not([type=radio]){min-height:36px}}.sheet-close{display:none}@media (max-width:820px){.sequence-panel{padding-bottom:8px;overflow:auto}.sequence-panel.sheet-open .seq-left{padding-bottom:62vh}.seq-right{display:none}.seq-right.sheet-open{z-index:5;border-top:1px solid var(--sb-border);height:min(62%,520px);box-shadow:0 -12px 32px color-mix(in srgb, var(--sb-text) 22%, transparent);overscroll-behavior:contain;border-radius:14px 14px 0 0;display:flex;position:absolute;inset:auto 0 0;overflow:auto}.seq-right .sheet-close{align-items:center;gap:var(--sb-space-2);z-index:2;min-height:44px;padding:0 var(--sb-space-4);border:0;border-bottom:1px solid var(--sb-border);background:var(--sb-surface);text-align:left;color:var(--sb-text);flex:none;font-weight:600;display:flex;position:sticky;top:0}}}@layer brand;
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./mount-DfwluJy4.js";var t=Object.defineProperty,n=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},r=`__specbookFaker`,i=globalThis,a=new Proxy({},{get(e,t){let n=i[r];if(!n)throw Error(`faker is not initialised. Install "@faker-js/faker" in your project; specbook sets it up before each run.`);return n[t]}});function o(e){i[r]=e}function s(e={},t){let n=t??e.default??`en`;return[...new Set([...e.locales?.[n]??[n,`en`],`base`])]}async function ee(e,t={},n){let r=e.locales;if(!r)return e;let i={Faker:e.Faker};return await Promise.all(s(t,n).map(async e=>{let t=r[e];t&&(i[e]=await t())})),i}function te(e,t={},n={}){let r=n.locale??t.default??`en`,i=s(t,r).map(t=>{let n=e[t];if(!n)throw Error(`Unknown faker locale "${t}" (from "${r}")`);return n}),a=new e.Faker({locale:i});return n.seed!==void 0&&a.seed(n.seed),o(a),a}var c=/^\s*\{\{\s*([\w.$-]+)\s*\}\}\s*$/,l=/\{\{\s*([\w.$-]+)\s*\}\}/g,ne=[`secrets`,`session`],u=class extends Error{variable;constructor(e){super(`Missing variable "{{${e}}}"`),this.variable=e,this.name=`TemplateError`}};function d(e){let t=e.split(`.`)[0];return ne.includes(t)&&e.includes(`.`)}var f=e=>e.startsWith(`faker.`);function re(e){let t=a,n=a;for(let r of e.split(`.`).slice(1))if(t=n,n=n?.[r],n===void 0)return{found:!1};return{found:!0,value:typeof n==`function`?n.call(t):n}}function ie(e){return[...g(e)].some(f)}function p(e,t){if(f(t))return re(t);let n=e;for(let e of t.split(`.`))if(typeof n==`object`&&n&&e in n)n=n[e];else return{found:!1};return{found:!0,value:n}}function m(e,t){let n=c.exec(e);if(n){let r=n[1];if(d(r))return e;let i=p(t,r);if(!i.found)throw new u(r);return i.value}return e.replace(l,(e,n)=>{if(d(n))return e;let r=p(t,n);if(!r.found)throw new u(n);let i=r.value;return typeof i==`object`&&i?JSON.stringify(i):String(i)})}function h(e,t){if(typeof e==`string`)return m(e,t);if(_(e))return e;if(Array.isArray(e))return e.map(e=>h(e,t));if(typeof e==`object`&&e){let n={};for(let[r,i]of Object.entries(e))n[r]=h(i,t);return n}return e}function g(e,t=new Set){if(typeof e==`string`)for(let n of e.matchAll(l))t.add(n[1]);else if(Array.isArray(e))for(let n of e)g(n,t);else if(typeof e==`object`&&e)for(let n of Object.values(e))g(n,t);return t}var _=e=>typeof Blob<`u`&&e instanceof Blob;function v(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!_(e)}function y(e,t){if(!v(e)||!v(t))return t===void 0?e:t;let n={...e};for(let[e,r]of Object.entries(t))n[e]=y(n[e],r);return n}function b(e,t,n,r={},i){return{kind:`request`,op:e,input:t,dataPatches:n,varOverrides:r,mockHook:i,with(a){let o={...t};return a.path&&(o.path=y(t.path,a.path)),a.query&&(o.query=y(t.query,a.query)),a.headers&&(o.headers={...t.headers??{},...a.headers}),a.capture&&(o.capture={...t.capture??{},...a.capture}),a.assert&&(o.assert=a.assert),a.auth!==void 0&&(o.auth=a.auth),a.assertMode&&(o.assertMode=a.assertMode),a.tags&&(o.tags=[...new Set([...t.tags??[],...a.tags])]),b(e,o,a.data===void 0?n:[...n,a.data],a.vars?{...r,...a.vars}:r,i)}}}function ae(e,t){return b(e.op,e.input,e.dataPatches,e.varOverrides,t)}function x(e){return{meta:e,request(t={}){return b(e,t,[])}}}function S(e,t){let n={},r={};for(let i of e){let e=i.description?{description:i.description}:{};i.name===`live`?(n[t]=i.url,i.description&&(r.live=e)):r[i.name]={...e,vars:{[t]:i.url}}}return{vars:n,environments:r,baseUrl:`{{${t}}}`}}var C=n({assets:()=>fe,brandingAssets:()=>L,definitions:()=>le,docs:()=>z,environmentStore:()=>$,environmentVars:()=>R,examples:()=>ue,loadConfig:()=>he,loadFaker:()=>J,loadManifests:()=>A,manifests:()=>se,mode:()=>k,operationDocs:()=>ce,operations:()=>q,project:()=>oe,requestExamples:()=>de,requestMeta:()=>M,requests:()=>j,responseSchemas:()=>G,schemas:()=>W,sequenceMeta:()=>F,sequences:()=>P,unresolvedRequests:()=>N,unresolvedSequences:()=>I}),w=globalThis.__SPECBOOK_VIEWER__;if(!w)throw Error(`The viewer registry was imported before a spec was opened`);var{open:T}=w,E=T.service,D=e=>`${E}/${e}`,O=Object.keys(T.metas),k=`static`,oe={root:``,outDir:``,requestsDir:`requests`},se={[E]:T.manifest},A=async e=>{},j=[],M={},N=[],P=[],F={},I=[],L={},R={},z=[],B=new Map,V=e=>{let t=e.slice(E.length+1),n=B.get(e);if(n)return n;let r=w.bundle(t).catch(()=>({}));return B.set(e,r),r},H=e=>new Proxy({},{get:(t,n)=>typeof n==`string`&&n.startsWith(`${E}/`)&&O.includes(n.slice(E.length+1))?e(n):void 0,has:(e,t)=>typeof t==`string`&&t.startsWith(`${E}/`)&&O.includes(t.slice(E.length+1)),ownKeys:()=>O.map(D),getOwnPropertyDescriptor:()=>({enumerable:!0,configurable:!0})}),U=e=>H(t=>()=>V(t).then(t=>({default:e(t)}))),W=U(e=>e.schema),G=U(e=>e.responses),ce=U(e=>e.docs),le={[E]:()=>w.definitions().then(e=>({default:e}))},ue=new Proxy({},{get:(e,t)=>{if(typeof t!=`string`||!t.includes(`.`))return;let n=t.lastIndexOf(`.`),r=t.slice(0,n);if(O.includes(r.slice(E.length+1)))return()=>V(r).then(e=>({default:e.mock?.[t.slice(n+1)]}))}}),de=H(e=>(T.exampleNames[e.slice(E.length+1)]??[]).map(t=>({name:t,source:`generated`,dir:`${e}@generated`,load:()=>V(e).then(e=>({default:e.examples?.[t]}))}))),K,fe=new Proxy({},{get:(e,t)=>typeof t==`string`&&t.endsWith(`/sample.txt`)?()=>(K??=URL.createObjectURL(new Blob([`specbook sample file
|
|
2
|
-
`],{type:`text/plain`})),Promise.resolve(K)):void 0}),q=Object.fromEntries(O.map(e=>[D(e),async()=>({[e]:x(T.metas[e])})])),J=()=>e(()=>import(`./faker-B3c03STC.js`).then(e=>({Faker:e.Faker,locales:{en:()=>Promise.resolve(e.en),base:()=>Promise.resolve(e.base)}})),[],import.meta.url),Y=w.baseUrl??T.baseUrl,pe=T.servers.find(e=>e.name===`live`),X=S([...Y?[{name:`live`,url:Y,description:pe?.description}]:[],...T.servers.filter(e=>e.name!==`live`)],`baseUrl`),me=e=>{if(/^https?:\/\//i.test(e)||!w.baseUrl)return e;try{return new URL(e,`${w.baseUrl.replace(/\/+$/,``)}/`).toString()}catch{return e}},Z={...X.vars,...Object.fromEntries(Object.entries(T.authVars).map(([e,t])=>[e,me(t)]))},Q={...X.environments};for(let[e,t]of Object.entries(T.authEnvironmentVars))Q[e]={...Q[e],vars:{...Q[e]?.vars,...t}};var $=w.source?{scope:w.source.kind===`url`?w.source.url:`upload:${E}`,session:w.source.kind!==`url`}:null,he=()=>Promise.resolve({default:{project:E,secrets:T.secrets,auth:T.auth,...Object.keys(Z).length?{vars:Z}:{},...Object.keys(Q).length?{environments:Q}:{},faker:{default:`en`,locales:{en:[`en`,`base`]}},services:{[E]:{spec:``,baseUrl:Y||T.servers.length?X.baseUrl:{},...T.defaultProfile?{auth:T.defaultProfile}:{}}}}});export{y as a,v as c,ie as d,$ as environmentStore,te as f,g as i,h as l,J as loadFaker,A as loadManifests,n as m,k as mode,ae as n,d as o,ee as p,u as r,f as s,C as t,m as u};
|
package/src/viewer/faker-en.ts
DELETED
|
File without changes
|