@testspectra/react 1.2.5 → 1.2.7

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/index.js CHANGED
@@ -740,7 +740,7 @@ var DomDriverBridge = class {
740
740
  async getText(selector, index = null) {
741
741
  const el = resolveScopedEl(selector, index);
742
742
  if (!el) return "";
743
- return el.innerText !== void 0 ? el.innerText : el.textContent || "";
743
+ return el.textContent ?? "";
744
744
  }
745
745
  async getValue(selector, index = null) {
746
746
  const el = resolveScopedEl(selector, index);
@@ -1249,34 +1249,53 @@ import * as esbuild from "esbuild";
1249
1249
  import { createRequire as createRequire2 } from "node:module";
1250
1250
  var bundleCache = /* @__PURE__ */ new Map();
1251
1251
  var inFlightBuilds = /* @__PURE__ */ new Map();
1252
- var cssInjectorPlugin = {
1253
- name: "spectra-css-injector",
1254
- setup(build2) {
1255
- build2.onLoad({ filter: /\.(css|scss|sass|less)$/ }, async (args) => {
1256
- try {
1257
- const raw = await fs.promises.readFile(args.path, "utf8");
1258
- const escaped = JSON.stringify(raw);
1259
- const sourcePath = JSON.stringify(args.path);
1260
- return {
1261
- contents: `
1262
- if (typeof document !== 'undefined') {
1263
- const style = document.createElement('style');
1264
- style.setAttribute('data-spectra-css', ${sourcePath});
1265
- style.textContent = ${escaped};
1266
- document.head.appendChild(style);
1267
- }
1268
- `,
1269
- loader: "js"
1270
- };
1271
- } catch (e) {
1272
- return {
1273
- contents: `/* failed to load css: ${String(e)} */`,
1274
- loader: "js"
1275
- };
1276
- }
1277
- });
1252
+ var consumerRootForCss;
1253
+ var TAILWIND_CSS_HINT = /@import\s+['"]tailwindcss['"]|@tailwind\b|@source\b|@theme\b/;
1254
+ async function compileCss(raw, filePath) {
1255
+ const consumerRoot = consumerRootForCss;
1256
+ if (!consumerRoot || !TAILWIND_CSS_HINT.test(raw)) return raw;
1257
+ try {
1258
+ const req = createRequire2(path3.join(consumerRoot, "package.json"));
1259
+ const postcss = req("postcss");
1260
+ const tailwind = req("@tailwindcss/postcss");
1261
+ const result = await postcss([tailwind()]).process(raw, { from: filePath });
1262
+ return result.css;
1263
+ } catch {
1264
+ return raw;
1278
1265
  }
1279
- };
1266
+ }
1267
+ function createCssInjectorPlugin() {
1268
+ return {
1269
+ name: "spectra-css-injector",
1270
+ setup(build2) {
1271
+ build2.onLoad({ filter: /\.(css|scss|sass|less)$/ }, async (args) => {
1272
+ try {
1273
+ const raw = await fs.promises.readFile(args.path, "utf8");
1274
+ const css = await compileCss(raw, args.path);
1275
+ const escaped = JSON.stringify(css);
1276
+ const sourcePath = JSON.stringify(args.path);
1277
+ return {
1278
+ contents: `
1279
+ if (typeof document !== 'undefined') {
1280
+ const style = document.createElement('style');
1281
+ style.setAttribute('data-spectra-css', ${sourcePath});
1282
+ style.textContent = ${escaped};
1283
+ document.head.appendChild(style);
1284
+ }
1285
+ `,
1286
+ loader: "js"
1287
+ };
1288
+ } catch (e) {
1289
+ return {
1290
+ contents: `/* failed to load css: ${String(e)} */`,
1291
+ loader: "js"
1292
+ };
1293
+ }
1294
+ });
1295
+ }
1296
+ };
1297
+ }
1298
+ var cssInjectorPlugin = createCssInjectorPlugin();
1280
1299
  var SHARED_REACT_EXTERNALS = [
1281
1300
  "react",
1282
1301
  "react/jsx-runtime",
@@ -1618,6 +1637,7 @@ function makeHandler(testRoot, packageDir, harnessHtml, setupEntrypoint, runnerE
1618
1637
  }
1619
1638
  async function startBundleServer(opts = {}) {
1620
1639
  const testRoot = path3.resolve(opts.testRoot ?? process.cwd());
1640
+ consumerRootForCss = testRoot;
1621
1641
  const packageDir = opts.packageDir ?? resolveReactPackageDir();
1622
1642
  const manifest = opts.manifest ?? { pageObjects: [], steps: [], fixtures: [] };
1623
1643
  const stepDelayMs = opts.stepDelayMs ?? 0;
package/dist/setup.js CHANGED
@@ -60,7 +60,7 @@ Unable to find an `+(i===!1?"accessible ":"")+'element with the role "'+t+'"'+c+
60
60
  `))}function Mx(e){return e.reverse().map((t,r)=>["".padEnd(r),t.tagName,t.id&&`#${t.id}`,t.hasAttribute("data-testid")&&`(testId=${t.getAttribute("data-testid")})`,kx(t),e.length>1&&r===0&&" <-- This element declared `pointer-events: none`",e.length>1&&r===e.length-1&&" <-- Asserted pointer events here"].filter(Boolean).join("")).join(`
61
61
  `)}function kx(e){var t;let r;if(e.hasAttribute("aria-label"))r=e.getAttribute("aria-label");else if(e.hasAttribute("aria-labelledby")){var n,o;r=(o=e.ownerDocument.getElementById(e.getAttribute("aria-labelledby")))===null||o===void 0||(n=o.textContent)===null||n===void 0?void 0:n.trim()}else if(S(e,["button","input","meter","output","progress","select","textarea"])&&(!((t=e.labels)===null||t===void 0)&&t.length))r=Array.from(e.labels).map(a=>{var s;return(s=a.textContent)===null||s===void 0?void 0:s.trim()}).join("|");else if(S(e,"button")){var i;r=(i=e.textContent)===null||i===void 0?void 0:i.trim()}return r=r?.replace(/\n/g," "),Number(r?.length)>30&&(r=`${r?.substring(0,29)}\u2026`),r?`(label=${r})`:""}function Fm(e,t){return(e&t)>0}function Oe(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var ya=class{init(t){let r=this.getTarget(t),[,n]=ut(null,r),o=this.getEventInit();return dt(t,r),t.dispatchUIEvent(r,"pointerover",o),n.forEach(i=>t.dispatchUIEvent(i,"pointerenter",o)),this}move(t,r){let n=this.position,o=this.getTarget(t);if(this.position=r,!ba(n,r))return;let i=this.getTarget(t),a=this.getEventInit(-1),[s,l]=ut(o,i);return{leave:()=>{Mt(t,o)&&o!==i&&(t.dispatchUIEvent(o,"pointerout",a),s.forEach(u=>t.dispatchUIEvent(u,"pointerleave",a)))},enter:()=>{dt(t,i),o!==i&&(t.dispatchUIEvent(i,"pointerover",a),l.forEach(u=>t.dispatchUIEvent(u,"pointerenter",a)))},move:()=>{t.dispatchUIEvent(i,"pointermove",a)}}}down(t,r=0){if(this.isDown)return;let n=this.getTarget(t);dt(t,n),this.isDown=!0,this.isPrevented=!t.dispatchUIEvent(n,"pointerdown",this.getEventInit(r))}up(t,r=0){if(!this.isDown)return;let n=this.getTarget(t);dt(t,n),this.isPrevented=!1,this.isDown=!1,t.dispatchUIEvent(n,"pointerup",this.getEventInit(r))}release(t){let r=this.getTarget(t),[n]=ut(r,null),o=this.getEventInit();Mt(t,r)&&(t.dispatchUIEvent(r,"pointerout",o),n.forEach(i=>t.dispatchUIEvent(i,"pointerleave",o))),this.isCancelled=!0}getTarget(t){var r;return(r=this.position.target)!==null&&r!==void 0?r:t.config.document.body}getEventInit(t){return{...this.position.coords,pointerId:this.pointerId,pointerType:this.pointerType,isPrimary:this.isPrimary,button:Cr(t),buttons:this.buttons.getButtons()}}constructor({pointerId:t,pointerType:r,isPrimary:n},o){Oe(this,"pointerId",void 0),Oe(this,"pointerType",void 0),Oe(this,"isPrimary",void 0),Oe(this,"buttons",void 0),Oe(this,"isMultitouch",!1),Oe(this,"isCancelled",!1),Oe(this,"isDown",!1),Oe(this,"isPrevented",!1),Oe(this,"position",{}),this.pointerId=t,this.pointerType=r,this.isPrimary=n,this.isMultitouch=!n,this.buttons=o}};function Ze(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var ha=class{isKeyPressed(t){return this.devices.get(t.pointerType).isPressed(t)}async press(t,r,n){this.devices.get(r.pointerType).addPressed(r),this.buttons.down(r);let o=this.getPointerName(r),i=r.pointerType==="touch"?this.pointers.new(o,r.pointerType,this.buttons):this.pointers.get(o);i.position=n,i.pointerType!=="touch"&&(this.mouse.position=n),i.pointerType==="touch"&&i.init(t),i.down(t,r.button),i.pointerType!=="touch"&&this.mouse.down(t,r,i.isPrevented)}async move(t,r,n){let o=this.pointers.get(r),i=o.move(t,n),a=o.pointerType==="touch"?void 0:this.mouse.move(t,n,o.isPrevented);i?.leave(),a?.leave(),i?.enter(),a?.enter(),i?.move(),a?.move()}async release(t,r,n){let o=this.devices.get(r.pointerType);o.removePressed(r),this.buttons.up(r);let i=this.pointers.get(this.getPointerName(r)),a=i.isPrevented;if(i.position=n,i.pointerType!=="touch"&&(this.mouse.position=n),o.countPressed===0&&i.up(t,r.button),i.pointerType==="touch"&&i.release(t),i.pointerType==="touch"&&!i.isMultitouch){let s=this.mouse.move(t,n,a);s?.leave(),s?.enter(),s?.move(),this.mouse.down(t,r,a)}if(!i.isMultitouch){let s=this.mouse.move(t,n,a);s?.leave(),s?.enter(),s?.move(),this.mouse.up(t,r,a)}}getPointerName(t){return t.pointerType==="touch"?t.name:t.pointerType}getPreviousPosition(t){return this.pointers.has(t)?this.pointers.get(t).position:void 0}resetClickCount(){this.mouse.resetClickCount()}getMouseTarget(t){var r;return(r=this.mouse.position.target)!==null&&r!==void 0?r:t.config.document.body}setMousePosition(t){this.mouse.position=t,this.pointers.get("mouse").position=t}constructor(t){Ze(this,"system",void 0),Ze(this,"mouse",void 0),Ze(this,"buttons",void 0),Ze(this,"devices",new class{get(r){var n,o,i;return(i=(n=this.registry)[o=r])!==null&&i!==void 0?i:n[o]=new ma}constructor(){Ze(this,"registry",{})}}),Ze(this,"pointers",new class{new(r,n,o){let i=n!=="touch"||!Object.values(this.registry).some(a=>a.pointerType==="touch"&&!a.isCancelled);return i||Object.values(this.registry).forEach(a=>{a.pointerType===n&&!a.isCancelled&&(a.isMultitouch=!0)}),this.registry[r]=new ya({pointerId:this.nextId++,pointerType:n,isPrimary:i},o),this.registry[r]}get(r){if(!this.has(r))throw new Error(`Trying to access pointer "${r}" which does not exist.`);return this.registry[r]}has(r){return r in this.registry}constructor(){Ze(this,"registry",{}),Ze(this,"nextId",1)}}),this.system=t,this.buttons=new At,this.mouse=new va,this.pointers.new("mouse","mouse",this.buttons)}};function jm(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Tr=class{getUIEventModifiers(){return{altKey:this.keyboard.modifiers.Alt,ctrlKey:this.keyboard.modifiers.Control,metaKey:this.keyboard.modifiers.Meta,shiftKey:this.keyboard.modifiers.Shift,modifierAltGraph:this.keyboard.modifiers.AltGraph,modifierCapsLock:this.keyboard.modifiers.CapsLock,modifierFn:this.keyboard.modifiers.Fn,modifierFnLock:this.keyboard.modifiers.FnLock,modifierNumLock:this.keyboard.modifiers.NumLock,modifierScrollLock:this.keyboard.modifiers.ScrollLock,modifierSymbol:this.keyboard.modifiers.Symbol,modifierSymbolLock:this.keyboard.modifiers.SymbolLock}}constructor(){jm(this,"keyboard",new fa(this)),jm(this,"pointer",new ha(this))}};async function $m(e){let t=[];return this.config.skipHover||t.push({target:e}),t.push({keys:"[MouseLeft]",target:e}),this.pointer(t)}async function Hm(e){return this.pointer([{target:e},"[MouseLeft][MouseLeft]"])}async function Vm(e){return this.pointer([{target:e},"[MouseLeft][MouseLeft][MouseLeft]"])}async function Wm(e){return this.pointer({target:e})}async function zm(e){return dt(this,this.system.pointer.getMouseTarget(this)),this.pointer({target:e.ownerDocument.body})}async function Gm({shift:e}={}){return this.keyboard(e===!0?"{Shift>}{Tab}{/Shift}":e===!1?"[/ShiftLeft][/ShiftRight]{Tab}":"{Tab}")}var Km={"{":"}","[":"]"};function ga(e,t){let r=0,n=e[r]in Km?e[r]:"";r+=n.length;let i=new RegExp(`^\\${n}{2}`).test(e)?"":n;return{type:i,...i===""?Ox(e,r,t):Ix(e,r,i,t)}}function Ox(e,t,r){let n=e[t];return Xm(n,e,t,r),t+=n.length,{consumedLength:t,descriptor:n,releasePrevious:!1,releaseSelf:!0,repeat:1}}function Ix(e,t,r,n){var o,i,a;let s=e[t]==="/"?"/":"";t+=s.length;let l=r==="{"&&e[t]==="\\";t+=Number(l);let u=l?e[t]:(i=e.slice(t).match(r==="{"?/^\w+|^[^}>/]/:/^\w+/))===null||i===void 0?void 0:i[0];Xm(u,e,t,n),t+=u.length;let c=(o=(a=e.slice(t).match(/^>\d+/))===null||a===void 0?void 0:a[0])!==null&&o!==void 0?o:"";t+=c.length;let d=e[t]==="/"||!c&&e[t]===">"?e[t]:"";t+=d.length;let b=Km[r],v=e[t]===b?b:"";if(!v)throw new Error(Qm([!c&&"repeat modifier",!d&&"release modifier",`"${b}"`].filter(Boolean).join(" or "),e[t],e,n));return t+=v.length,{consumedLength:t,descriptor:u,releasePrevious:!!s,repeat:c?Math.max(Number(c.substr(1)),1):1,releaseSelf:Nx(d,c)}}function Xm(e,t,r,n){if(!e)throw new Error(Qm("key descriptor",t[r],t,n))}function Nx(e,t){if(e)return e==="/";if(t)return!1}function Qm(e,t,r,n){return`Expected ${e} but found "${t??""}" in "${r}"
62
62
  See ${n==="pointer"?"https://testing-library.com/docs/user-event/pointer#pressing-a-button-or-touching-the-screen":"https://testing-library.com/docs/user-event/keyboard"}
63
- for more information about how userEvent parses your input.`}function Jm(e,t){let r=[];do{var n;let{type:o,descriptor:i,consumedLength:a,releasePrevious:s,releaseSelf:l=!0,repeat:u}=ga(t,"keyboard"),c=(n=e.find(d=>{if(o==="["){var b;return((b=d.code)===null||b===void 0?void 0:b.toLowerCase())===i.toLowerCase()}else if(o==="{"){var v;return((v=d.key)===null||v===void 0?void 0:v.toLowerCase())===i.toLowerCase()}return d.key===i}))!==null&&n!==void 0?n:{key:"Unknown",code:"Unknown",[o==="["?"code":"key"]:i};r.push({keyDef:c,releasePrevious:s,releaseSelf:l,repeat:u}),t=t.slice(a)}while(t);return r}async function Ym(e){let t=Jm(this.config.keyboardMap,e);for(let r=0;r<t.length;r++)await Re(this.config),await Lx(this,t[r])}async function Lx(e,{keyDef:t,releasePrevious:r,releaseSelf:n,repeat:o}){let{system:i}=e;if(i.keyboard.isKeyPressed(t)&&await i.keyboard.keyup(e,t),!r){for(let a=1;a<=o;a++)await i.keyboard.keydown(e,t,a>1),a<o&&await Re(e.config);n&&await i.keyboard.keyup(e,t)}}async function Zm(e){for(let t of e.system.keyboard.getPressedKeys())await e.system.keyboard.keyup(e,t)}function Ea(e){let t=X(e)?{"text/plain":Bx(e)}:{"text/plain":String(e.ownerDocument.getSelection())},r=bt(V(e));for(let n in t)t[n]&&r.setData(n,t[n]);return r}function Bx(e){let t=Me(e);return Y(e).substring(t.startOffset,t.endOffset)}async function eb(){var e;let t=this.config.document,r=(e=t.activeElement)!==null&&e!==void 0?e:t.body,n=Ea(r);if(n.items.length!==0)return this.dispatchUIEvent(r,"copy",{clipboardData:n})&&this.config.writeToClipboard&&await Lr(t,n),n}async function tb(){var e;let t=this.config.document,r=(e=t.activeElement)!==null&&e!==void 0?e:t.body,n=Ea(r);if(n.items.length!==0)return this.dispatchUIEvent(r,"cut",{clipboardData:n})&&this.config.writeToClipboard&&await Lr(r.ownerDocument,n),n}async function rb(e){var t,r;let n=this.config.document,o=(t=n.activeElement)!==null&&t!==void 0?t:n.body,i=(r=typeof e=="string"?Dx(n,e):e)!==null&&r!==void 0?r:await Cl(n).catch(()=>{throw new Error("`userEvent.paste()` without `clipboardData` requires the `ClipboardAPI` to be available.")});this.dispatchUIEvent(o,"paste",{clipboardData:i})}function Dx(e,t){let r=bt(V(e));return r.setData("text",t),r}function zs(e,t){let r=[];do{let{descriptor:n,consumedLength:o,releasePrevious:i,releaseSelf:a=!0}=ga(t,"pointer"),s=e.find(l=>l.name===n);s&&r.push({keyDef:s,releasePrevious:i,releaseSelf:a}),t=t.slice(o)}while(t);return r}async function ob(e){let{pointerMap:t}=this.config,r=[];(Array.isArray(e)?e:[e]).forEach(n=>{typeof n=="string"?r.push(...zs(t,n)):"keys"in n?r.push(...zs(t,n.keys).map(o=>({...n,...o}))):r.push(n)});for(let n=0;n<r.length;n++)await Re(this.config),await Fx(this,r[n]);this.system.pointer.resetClickCount()}async function Fx(e,t){var r,n,o,i,a,s;let l="pointerName"in t&&t.pointerName?t.pointerName:"keyDef"in t?e.system.pointer.getPointerName(t.keyDef):"mouse",u=e.system.pointer.getPreviousPosition(l),c={target:(r=t.target)!==null&&r!==void 0?r:Ux(e,u),coords:(n=t.coords)!==null&&n!==void 0?n:u?.coords,caret:{node:(o=t.node)!==null&&o!==void 0?o:nb(t)||u==null||(a=u.caret)===null||a===void 0?void 0:a.node,offset:(i=t.offset)!==null&&i!==void 0?i:nb(t)||u==null||(s=u.caret)===null||s===void 0?void 0:s.offset}};"keyDef"in t?(e.system.pointer.isKeyPressed(t.keyDef)&&(at(e,re.Trigger),await e.system.pointer.release(e,t.keyDef,c)),t.releasePrevious||(at(e,re.Trigger),await e.system.pointer.press(e,t.keyDef,c),t.releaseSelf&&(at(e,re.Trigger),await e.system.pointer.release(e,t.keyDef,c)))):(at(e,re.Trigger),await e.system.pointer.move(e,l,c))}function nb(e){var t,r;return!!((t=(r=e.target)!==null&&r!==void 0?r:e.node)!==null&&t!==void 0?t:e.offset!==void 0)}function Ux(e,t){var r;if(!t)throw new Error("This pointer has no previous position. Provide a target property!");return(r=t.target)!==null&&r!==void 0?r:e.config.document.body}async function ib(e){if(!ve(e)||te(e))throw new Error("clear()` is only supported on editable elements.");if(se(e),e.ownerDocument.activeElement!==e)throw new Error("The element to be cleared could not be focused.");if(pa(e),!mm(e))throw new Error("The element content to be cleared could not be selected.");_e(this,e,"","deleteContentBackward")}async function ab(e,t){return lb.call(this,!0,e,t)}async function sb(e,t){return lb.call(this,!1,e,t)}async function lb(e,t,r){if(!e&&!t.multiple)throw I().getElementError("Unable to deselect an option in a non-multiple select. Use selectOptions to change the selection instead.",t);let n=Array.isArray(r)?r:[r],o=Array.from(t.querySelectorAll('option, [role="option"]')),i=n.map(s=>{if(typeof s!="string"&&o.includes(s))return s;{let l=o.find(u=>u.value===s||u.innerHTML===s);if(l)return l;throw I().getElementError(`Value "${String(s)}" not found in options`,t)}}).filter(s=>!te(s));if(te(t)||!i.length)return;let a=s=>{s.selected=e,this.dispatchUIEvent(t,"input",{bubbles:!0,cancelable:!1,composed:!0}),this.dispatchUIEvent(t,"change")};if(S(t,"select"))if(t.multiple)for(let s of i){let l=this.config.pointerEventsCheck===0?!0:Mt(this,s);l&&(this.dispatchUIEvent(s,"pointerover"),this.dispatchUIEvent(t,"pointerenter"),this.dispatchUIEvent(s,"mouseover"),this.dispatchUIEvent(t,"mouseenter"),this.dispatchUIEvent(s,"pointermove"),this.dispatchUIEvent(s,"mousemove"),this.dispatchUIEvent(s,"pointerdown"),this.dispatchUIEvent(s,"mousedown")),se(t),l&&(this.dispatchUIEvent(s,"pointerup"),this.dispatchUIEvent(s,"mouseup")),a(s),l&&this.dispatchUIEvent(s,"click"),await Re(this.config)}else if(i.length===1){let s=this.config.pointerEventsCheck===0?!0:Mt(this,t);s?await this.click(t):se(t),a(i[0]),s&&(this.dispatchUIEvent(t,"pointerover"),this.dispatchUIEvent(t,"pointerenter"),this.dispatchUIEvent(t,"mouseover"),this.dispatchUIEvent(t,"mouseenter"),this.dispatchUIEvent(t,"pointerup"),this.dispatchUIEvent(t,"mouseup"),this.dispatchUIEvent(t,"click")),await Re(this.config)}else throw I().getElementError("Cannot select multiple options on a non-multiple select",t);else if(t.getAttribute("role")==="listbox")for(let s of i)await this.click(s),await this.unhover(s);else throw I().getElementError("Cannot select options on elements that are neither select nor listbox elements",t)}async function ub(e,t,{skipClick:r=this.config.skipClick,skipAutoClose:n=this.config.skipAutoClose,initialSelectionStart:o,initialSelectionEnd:i}={}){e.disabled||(r||await this.click(e),o!==void 0&&it(e,o,i??o),await this.keyboard(t),n||await Zm(this))}var cb=Symbol("files and value properties are mocked");function Gs(e,t,r){r?Object.defineProperty(e,t,r):delete e[t]}function db(e,t){var r;(r=e[cb])===null||r===void 0||r.restore();let n=Object.getOwnPropertyDescriptor(e,"type"),o=Object.getOwnPropertyDescriptor(e,"value"),i=Object.getOwnPropertyDescriptor(e,"files");function a(){Gs(e,"type",n),Gs(e,"value",o),Gs(e,"files",i)}e[cb]={restore:a},Object.defineProperties(e,{files:{configurable:!0,get:()=>t},value:{configurable:!0,get:()=>t.length?`C:\\fakepath\\${t[0].name}`:"",set(s){if(s==="")a();else{var l;o==null||(l=o.set)===null||l===void 0||l.call(e,s)}}},type:{configurable:!0,get:()=>"file",set(s){s!=="file"&&(a(),e.type=s)}}})}async function pb(e,t){let r=S(e,"label")?e.control:e;if(!r||!S(r,"input",{type:"file"}))throw new TypeError(`The ${r===e?"given":"associated"} ${r?.tagName} element does not accept file uploads`);if(te(e))return;let n=(Array.isArray(t)?t:[t]).filter(i=>!this.config.applyAccept||jx(i,r.accept)).slice(0,r.multiple?void 0:1),o=()=>{var i;n.length===((i=r.files)===null||i===void 0?void 0:i.length)&&n.every((a,s)=>{var l;return a===((l=r.files)===null||l===void 0?void 0:l.item(s))})||(db(r,Ft(V(e),n)),this.dispatchUIEvent(r,"input"),this.dispatchUIEvent(r,"change"))};r.addEventListener("fileDialog",o),await this.click(e),r.removeEventListener("fileDialog",o)}function wa(e){return e.toLowerCase().replace(/(\.|\/)jpg\b/g,"$1jpeg")}function jx(e,t){if(!t)return!0;let r=["audio/*","image/*","video/*"];return wa(t).trim().split(/\s*,\s*/).some(n=>n.startsWith(".")?wa(e.name).endsWith(n):r.includes(n)?wa(e.type).startsWith(n.replace("*","")):wa(e.type)===n)}var Ks={click:$m,dblClick:Hm,tripleClick:Vm,hover:Wm,unhover:zm,tab:Gm,keyboard:Ym,copy:eb,cut:tb,paste:rb,pointer:ob,clear:ib,deselectOptions:sb,selectOptions:ab,type:ub,upload:pb};function fb(e){return I().asyncWrapper(e)}var mb={applyAccept:!0,autoModify:!0,delay:0,document:globalThis.document,keyboardMap:Mm,pointerMap:km,pointerEventsCheck:st.EachApiCall,skipAutoClose:!1,skipClick:!1,skipHover:!1,writeToClipboard:!1,advanceTimers:()=>Promise.resolve()},$x={...mb,writeToClipboard:!0};function bb(e={},t=$x,r){let n=Wx(e,r,t);return{...t,...e,document:n}}function vb(e={}){var t;let r=bb(e);Vs(r.document),$s(V(r.document).HTMLElement);let n=(t=r.document.defaultView)!==null&&t!==void 0?t:globalThis.window;return _l(n),Xs(r).api}function ee({keyboardState:e,pointerState:t,...r}={},n){var o;let i=bb(r,mb,n);Vs(i.document),$s(V(i.document).HTMLElement);let a=(o=t??e)!==null&&o!==void 0?o:new Tr;return{api:Xs(i,a).api,system:a}}function Hx(e){return Xs({...this.config,...e},this.system).api}function Vx(e,t){function r(...n){return at(e,re.Call),fb(()=>t.apply(e,n).then(async o=>(await Re(e.config),o)))}return Object.defineProperty(r,"name",{get:()=>t.name}),r}function Xs(e,t=new Tr){let r={};return Object.assign(r,{config:e,dispatchEvent:js.bind(r),dispatchUIEvent:wm.bind(r),system:t,levelRefs:{},...Ks}),{instance:r,api:{...Object.fromEntries(Object.entries(Ks).map(([n,o])=>[n,Vx(r,o)])),setup:Hx.bind(r)}}}function Wx(e,t,r){var n,o;return(n=(o=e.document)!==null&&o!==void 0?o:t&&xm(t))!==null&&n!==void 0?n:r.document}var Qs={};Ob(Qs,{clear:()=>zx,click:()=>Gx,copy:()=>Kx,cut:()=>Xx,dblClick:()=>Qx,deselectOptions:()=>Jx,hover:()=>Yx,keyboard:()=>Zx,paste:()=>tq,pointer:()=>eq,selectOptions:()=>rq,tab:()=>sq,tripleClick:()=>nq,type:()=>oq,unhover:()=>iq,upload:()=>aq});function zx(e){return ee().api.clear(e)}function Gx(e,t={}){return ee(t,e).api.click(e)}function Kx(e={}){return ee(e).api.copy()}function Xx(e={}){return ee(e).api.cut()}function Qx(e,t={}){return ee(t).api.dblClick(e)}function Jx(e,t,r={}){return ee(r).api.deselectOptions(e,t)}function Yx(e,t={}){return ee(t).api.hover(e)}async function Zx(e,t={}){let{api:r,system:n}=ee(t);return r.keyboard(e).then(()=>n)}async function eq(e,t={}){let{api:r,system:n}=ee(t);return r.pointer(e).then(()=>n)}function tq(e,t){return ee(t).api.paste(e)}function rq(e,t,r={}){return ee(r).api.selectOptions(e,t)}function nq(e,t={}){return ee(t).api.tripleClick(e)}function oq(e,t,r={}){return ee(r,e).api.type(e,t,r)}function iq(e,t={}){let{api:r,system:n}=ee(t);return n.pointer.setMousePosition({target:e}),r.unhover(e)}function aq(e,t,r={}){return ee(r).api.upload(e,t)}function sq(e={}){return ee().api.tab(e)}var _a={...Qs,setup:vb};var yb=!1,hb=!1,Js=null;function lq(e){return new Promise(t=>setTimeout(t,e))}function gb(e){try{if(typeof e=="string")return new URL(e,uq()).href;if(e instanceof URL)return e.href;if(typeof Request<"u"&&e instanceof Request)return e.url}catch{}return String(e)}function uq(){try{if(typeof location<"u"&&location.href)return location.href}catch{}return"http://localhost/"}function cq(e,t){if(t?.method)return String(t.method).toUpperCase();try{if(typeof Request<"u"&&e instanceof Request&&e.method)return String(e.method).toUpperCase()}catch{}return"GET"}function dq(e,t){let r=t?.body;if(typeof r=="string")return r;try{if(typeof Request<"u"&&e instanceof Request)return}catch{}}function pq(e){let t=Mr(e.headers),r={};for(let n of t)r[n.name]=n.value;return new Response(Dt(e.body),{status:e.statusCode,headers:r})}async function fq(e,t,r){let n=gb(t),o=cq(t,r),i=Nt(Js?.()??[],n,o);if(!i)return e(t,r);let a={url:n,method:o,headers:void 0,postData:dq(t,r),timestamp:Date.now()};if(Lt(i,a),i.aborted)throw new TypeError(`Spectra.intercept() aborted ${o} ${n} (${i.abortReason||"Failed"})`);let s=Bt(i);return s.delayMs&&s.delayMs>0&&await lq(s.delayMs),pq(s)}function mq(){let e=globalThis.XMLHttpRequest;function t(){let r=new e,n="GET",o="",i=e.prototype.open.bind(r),a=e.prototype.send.bind(r);return r.open=(s,l,...u)=>{n=String(s).toUpperCase(),o=gb(l);let[c=!0,d,b]=u;return i(s,l,c,d,b)},r.send=s=>{let l=Nt(Js?.()??[],o,n);if(!l)return a(s);let u={url:o,method:n,headers:void 0,postData:typeof s=="string"?s:void 0,timestamp:Date.now()};Lt(l,u);let c=()=>{r.dispatchEvent(new Event("error"))};if(l.aborted){setTimeout(c,0);return}let d=Bt(l),b=()=>{let v=Dt(d.body);Object.defineProperties(r,{status:{value:d.statusCode,configurable:!0},statusText:{value:d.statusCode===200?"OK":`${d.statusCode} Mocked`,configurable:!0},responseText:{value:v,configurable:!0},response:{value:v,configurable:!0},readyState:{value:4,configurable:!0}}),r.dispatchEvent(new Event("readystatechange")),r.dispatchEvent(new Event("load")),r.dispatchEvent(new Event("loadend"))};d.delayMs&&d.delayMs>0?setTimeout(b,d.delayMs):setTimeout(b,0)},r}t.prototype=e.prototype,globalThis.XMLHttpRequest=t}function Eb(e){if(Js=e,!yb&&typeof globalThis.fetch=="function"){let t=globalThis.fetch.bind(globalThis);globalThis.fetch=(r,n)=>fq(t,r,n),yb=!0}!hb&&typeof globalThis.XMLHttpRequest=="function"&&(mq(),hb=!0)}function kt(){return _a.setup({delay:null})}function Ca(e){return cl(e.trim())??e.trim()}function Cb(e,t){let r=Ca(e),o=(()=>{if(t===null)return document.querySelector(r);let a=Array.from(document.querySelectorAll(r));return t>=0?a[t]??null:a[a.length+t]??null})();if(o!==null)return o;let i=Ma(e.trim());return i?dl(i.name,document,t):null}function pt(e){return typeof e=="string"?e:e.selector}function wb(e,t){return t==null?e[0]??null:t>=0?e[t]??null:e[e.length+t]??null}function Ys(e,t){if(!t)return!0;try{return e.matches(t)}catch{return!1}}function Pa(e,t){let r=ul(e);if(!r)return;let n=t?{selector:r.base,index:null,parent:t}:r.base,o=H(n,null);if(r.kind==="parent")return o?.parentElement?[o.parentElement]:[];if(r.kind==="closest"){let a=o?.closest(r.arg)??null;return a?[a]:[]}if(!o)return[];if(r.kind==="children")return Array.from(o.children).filter(a=>Ys(a,r.arg));if(r.kind==="siblings"){let a=o.parentElement;return a?Array.from(a.children).filter(s=>s!==o&&Ys(s,r.arg)):[]}let i=o.nextElementSibling;for(;i&&!Ys(i,r.arg);)i=i.nextElementSibling;return i?[i]:[]}function H(e,t){if(typeof e=="string"){let s=Pa(e,void 0);return s!==void 0?wb(s,t):Cb(e,t)}let r=Pa(e.selector,e.parent);if(r!==void 0)return wb(r,e.index??t);let n=e.parent?H(e.parent,e.parent.index):document.documentElement;if(!n)return null;let o=Ca(e.selector),i=Array.from(n.querySelectorAll(o)),a=e.index??t;return a==null?i[0]??null:a>=0?i[a]??null:i[i.length+a]??null}function _b(e){let t=e.tagName;return t==="INPUT"||t==="TEXTAREA"||t==="SELECT"}var Ta=class{mockRules=[];consoleErrors=[];recordedNetwork=[];async waitForScopedEl(t,r){let n=H(t,r);if(n)return n;let o=null;if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>(o=H(t,r),o!==null),globalThis.__TS_RUNTIME__.getImplicitWaitMs())||!o)throw new Error("Element not found: "+pt(t));return o}async connect(){}async close(){}async navigate(t){throw new Error("Spectra.navigate() is not supported in component testing mode. Use Spectra.mount(<Component />) to render a component tree instead of navigating a URL.")}async setCookies(t,r){let n=Array.isArray(t)?t:[t];for(let o of n)typeof document<"u"&&(document.cookie=o)}async back(){throw new Error("Spectra.back() is not supported in component testing mode.")}async forward(){throw new Error("Spectra.forward() is not supported in component testing mode.")}async refresh(){throw new Error("Spectra.refresh() is not supported in component testing mode.")}async setViewport(t,r){try{window.resizeTo(t,r)}catch{}}async pause(t){await new Promise(r=>setTimeout(r,t))}async click(t,r=null){let n=await this.waitForScopedEl(t,r);await kt().click(n)}async doubleClick(t,r=null){let n=await this.waitForScopedEl(t,r);await kt().dblClick(n)}async rightClick(t,r=null){let n=await this.waitForScopedEl(t,r);await kt().pointer({keys:"[MouseRight]",target:n})}async setValue(t,r,n=null){let o=await this.waitForScopedEl(t,n);if(!_b(o))throw new Error("Element is not a form field: "+pt(t));if(o.tagName==="INPUT"&&o.type==="file")return this.upload(t,r,n);let i=kt();await i.clear(o),String(r).length>0&&await i.type(o,String(r))}async upload(t,r,n=null){let o=await this.waitForScopedEl(t,n),i=Array.isArray(r)?r:[r],a=[],s={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",svg:"image/svg+xml",webp:"image/webp",pdf:"application/pdf",json:"application/json",txt:"text/plain",csv:"text/csv"};for(let l of i)if(typeof l=="string"){let u="file.bin",c="application/octet-stream",d;if(l.startsWith("data:")){let b=l.indexOf(","),v=l.slice(0,b),C=l.slice(b+1),_=v.match(/data:([^;]+)/);_&&(c=_[1]);let T=v.match(/(?:name|filename)=([^;]+)/i);T?u=decodeURIComponent(T[1]):u=`fixture.${c.split("/")[1]||"bin"}`;try{let m=atob(C),h=new Uint8Array(m.length);for(let E=0;E<m.length;E++)h[E]=m.charCodeAt(E);d=new Blob([h],{type:c})}catch{d=new Blob([C],{type:c})}}else{u=l.split("?")[0].split("#")[0].split("/").pop()?.split("\\").pop()||"fixture.bin";let v=u.split(".").pop()?.toLowerCase()||"";c=s[v]||"application/octet-stream",d=new Blob(["Mock file content for "+u],{type:c})}a.push(new File([d],u,{type:c}))}else if(l instanceof File)a.push(l);else if(l&&typeof l=="object"&&"name"in l){let u=l,c=u.type||"application/octet-stream",d;if(u.base64)try{let b=atob(u.base64),v=new Uint8Array(b.length);for(let C=0;C<b.length;C++)v[C]=b.charCodeAt(C);d=new Blob([v],{type:c})}catch{d=new Blob([u.base64],{type:c})}else d=new Blob([u.content||"Mock content"],{type:c});a.push(new File([d],u.name,{type:c}))}if(a.length>0){let l=new DataTransfer;for(let u of a)l.items.add(u);o.files=l.files,o.dispatchEvent(new Event("input",{bubbles:!0})),o.dispatchEvent(new Event("change",{bubbles:!0}))}}async clearValue(t,r=null){let n=await this.waitForScopedEl(t,r);await kt().clear(n)}async select(t,r,n=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>{let i=H(t,n);if(!i||i.tagName!=="SELECT")return!1;for(let a=0;a<i.options.length;a++){let s=i.options[a];if(s.text===r||s.value===r)return i.selectedIndex=a,i.dispatchEvent(new Event("change",{bubbles:!0})),!0}return!1}))throw new Error("Select option not found: "+JSON.stringify(r))}async hover(t,r=null){let n=await this.waitForScopedEl(t,r);await kt().hover(n)}async focus(t,r=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>{let o=H(t,r);return o?(o.focus?.(),!0):!1}))throw new Error("Element not found: "+pt(t))}async blur(t,r=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>{let o=H(t,r);return o?(o.blur?.(),!0):!1}))throw new Error("Element not found: "+pt(t))}async waitForElementRemoved(t,r=5e3,n=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>!await this.isExisting(t,n),r))throw new Error("Element still exists after timeout: "+pt(t))}async waitForUndisplayed(t,r,n=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>!await this.isDisplayed(t,n),r?.timeout??5e3))throw new Error("Element still displayed after timeout: "+pt(t))}async waitForClickable(t,r,n=null){return await globalThis.__TS_RUNTIME__.pollCondition(async()=>this.isClickable(t,n),r?.timeout??5e3)}async getBounds(t,r=null){let n=H(t,r);if(!n)return{x:0,y:0,top:0,right:0,bottom:0,left:0,width:0,height:0};let o=n.getBoundingClientRect();return{x:o.x,y:o.y,top:o.top,right:o.right,bottom:o.bottom,left:o.left,width:o.width,height:o.height}}async closest(t,r,n=null){let o=H(t,n);if(!o)return null;let i=o.closest(r);return i?i.tagName.toLowerCase():null}async clickAt(t,r){document.elementFromPoint(t,r)?.click()}async dragDrop(t,r,n=null){let o=H(t,n),i=Cb(r,null);if(!o||!i)throw new Error("Drag source or destination not found");let a=new DataTransfer;o.dispatchEvent(new DragEvent("dragstart",{bubbles:!0,dataTransfer:a})),i.dispatchEvent(new DragEvent("dragover",{bubbles:!0,dataTransfer:a})),i.dispatchEvent(new DragEvent("drop",{bubbles:!0,dataTransfer:a})),o.dispatchEvent(new DragEvent("dragend",{bubbles:!0,dataTransfer:a}))}async longPress(t,r,n=null){let o=H(t,n);if(!o)throw new Error("Element not found: "+pt(t));o.dispatchEvent(new TouchEvent("touchstart",{bubbles:!0})),await this.pause(r),o.dispatchEvent(new TouchEvent("touchend",{bubbles:!0}))}async scrollIntoView(t,r=null){H(t,r)?.scrollIntoView({block:"center",inline:"center"})}async getText(t,r=null){let n=H(t,r);return n?n.innerText!==void 0?n.innerText:n.textContent||"":""}async getValue(t,r=null){let n=H(t,r);return n?_b(n)?n.value??"":n.getAttribute("value")||"":""}async isDisplayed(t,r=null){let n=H(t,r);if(!n)return!1;let o=window.getComputedStyle(n);if(o.visibility==="hidden"||o.display==="none"||o.opacity==="0")return!1;let i=n.getBoundingClientRect();return i.width>0&&i.height>0||n.getClientRects().length>0||n.offsetWidth>0&&n.offsetHeight>0}async isExisting(t,r=null){return H(t,r)!==null}async isEnabled(t,r=null){let n=H(t,r);return n?!n.disabled&&!n.hasAttribute("disabled")&&!n.classList.contains("disabled")&&n.getAttribute("aria-disabled")!=="true":!1}async isSelected(t,r=null){let n=H(t,r);return n?!!n.checked||n.getAttribute("aria-checked")==="true"||n.getAttribute("data-state")==="checked":!1}async isFocused(t,r=null){let n=H(t,r);return n?document.activeElement===n||n.matches(":focus"):!1}async isClickable(t,r=null){let n=H(t,r);if(!n)return!1;let o=window.getComputedStyle(n);if(o.visibility==="hidden"||o.display==="none"||o.opacity==="0")return!1;let i=n.getBoundingClientRect();return i.width===0&&i.height===0?!1:!n.disabled&&!n.hasAttribute("disabled")&&!n.classList.contains("disabled")&&n.getAttribute("aria-disabled")!=="true"}async hasClass(t,r,n=null){let o=H(t,n);return o?o.classList.contains(r):!1}async getAttribute(t,r,n=null){let o=H(t,n);return o?o.getAttribute(r):null}async getCSSProperty(t,r,n=null){let o=H(t,n);return{value:o?window.getComputedStyle(o).getPropertyValue(r):""}}async count(t){if(typeof t=="string"){let o=Pa(t,void 0);return o!==void 0?o.length:document.querySelectorAll(Ca(t)).length}let r=Pa(t.selector,t.parent);if(r!==void 0)return r.length;let n=t.parent?H(t.parent,t.parent.index):document.documentElement;return n?n.querySelectorAll(Ca(t.selector)).length:0}async pressKey(t){let r=document.activeElement||document.body,n=String(t);r.dispatchEvent(new KeyboardEvent("keydown",{key:n,bubbles:!0})),r.dispatchEvent(new KeyboardEvent("keyup",{key:n,bubbles:!0}))}async scroll(t={}){if(t.selector){await this.scrollIntoView(String(t.selector),null);return}let r=t.direction||"down",n=t.pixels||500,o=r==="up"?-n:r==="down"?n:0,i=r==="left"?-n:r==="right"?n:0;window.scrollBy(i,o)}async swipe(t){let r=t.distance||300,n=t.direction==="up"?r:t.direction==="down"?-r:0,o=t.direction==="left"?r:t.direction==="right"?-r:0;window.scrollBy(o,n)}async grantPermission(t){}async getUrl(){return window.location.href}async getTitle(){return document.title}async execute(t,...r){return typeof t=="function"?t(...r):new Function(`return (${t});`)()}async evaluate(t){return new Function(`return (${t});`)()}async waitUntil(t,r){let n=await globalThis.__TS_RUNTIME__.pollCondition(t,r?.timeout);if(!n)throw new Error(r?.timeoutMsg||"waitUntil() condition was not met in time");return n}async getLogs(t){return[]}async shouldHaveUrl(t){let r=await this.getUrl();if(r!==t)throw new Error(`Expected browser URL to be "${t}", but got "${r}"`)}async shouldContainUrl(t){let r=await this.getUrl();if(!r.includes(t))throw new Error(`Expected browser URL to contain "${t}", but got "${r}"`)}async shouldHaveTitle(t){let r=await this.getTitle();if(r!==t)throw new Error(`Expected page title to be "${t}", but got "${r}"`)}async shouldContainTitle(t){let r=await this.getTitle();if(!r.includes(t))throw new Error(`Expected page title to contain "${t}", but got "${r}"`)}async shouldBeLoaded(){if(document.readyState!=="complete"&&document.readyState!=="interactive")throw new Error(`Expected document to be loaded, but readyState is "${document.readyState}"`)}async shouldHaveNoConsoleErrors(){if(this.consoleErrors.length>0)throw new Error(`Expected no console errors, but found ${this.consoleErrors.length}: ${this.consoleErrors.join("; ")}`)}async clearCookies(){document.cookie.split(";").forEach(t=>{let r=t.split("=")[0]?.trim();r&&(document.cookie=`${r}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/`)})}async clearLocalStorage(){window.localStorage.clear()}async intercept(t,r,n,o){let i=Ar(t,r,n,o);return Eb(()=>this.mockRules),this.mockRules.push(i),qr(i)}clearMocks(){this.mockRules=[]}};var Ra="spectra-root",ft=null,Rr=null;async function bq(){if(typeof window<"u"&&window.__TESTSPECTRA_CREATE_ROOT__)return window.__TESTSPECTRA_CREATE_ROOT__;if(Rr)return Rr;try{let e=await import("react-dom/client");if(Rr=e.createRoot||e.default?.createRoot||e.default,Rr)return Rr}catch{}throw new Error("Could not find react-dom/client createRoot. Ensure react-dom is installed in your project.")}function vq(){let e=document.getElementById(Ra);return e||(e=document.createElement("div"),e.id=Ra,document.body.appendChild(e)),e}function Pb(){if(ft){try{ft.unmount()}catch{try{ft.render(null)}catch{}}ft=null}let e=document.getElementById(Ra);e&&(e.innerHTML="")}async function Tb(e){let t=vq();ft||(ft=(await bq())(t));let r=(typeof e.type=="string"?e.type:e.type?.displayName||e.type?.name)||"component";return globalThis.__TS_RUNTIME__.trackStep("action",{type:"action",key:"mount",target:r,args:[]},async()=>(ft.render(e),await new Promise(n=>setTimeout(n,20)),globalThis.__TS_RUNTIME__.createElementProxy(`#${Ra}`)))}var Rb=new Ta;el(Rb);globalThis.browser=Rb;globalThis.$=function(e){return ue(e)};globalThis.$$=function(e){return Te(e)};var Zs=pl();Zs.mount=Tb;Zs.unmount=Pb;globalThis.Spectra=Zs;(typeof globalThis.__vitest_browser_runner__<"u"||typeof globalThis.__vitest_worker__<"u")&&await Oa();typeof beforeEach=="function"&&beforeEach(e=>{let t=e?.task?.name||globalThis.__CURRENT_TEST_TITLE__;t&&(globalThis.__CURRENT_TEST_TITLE__=t,globalThis.__TS_RUNTIME__.emitEvent("TESTSPECTRA_TEST_START",JSON.stringify({title:t})))});typeof document<"u"&&document.addEventListener("click",e=>{e.target?.closest?.("a[href]")&&e.preventDefault()},!0);globalThis.__SPECTRA_READY__=!0;
63
+ for more information about how userEvent parses your input.`}function Jm(e,t){let r=[];do{var n;let{type:o,descriptor:i,consumedLength:a,releasePrevious:s,releaseSelf:l=!0,repeat:u}=ga(t,"keyboard"),c=(n=e.find(d=>{if(o==="["){var b;return((b=d.code)===null||b===void 0?void 0:b.toLowerCase())===i.toLowerCase()}else if(o==="{"){var v;return((v=d.key)===null||v===void 0?void 0:v.toLowerCase())===i.toLowerCase()}return d.key===i}))!==null&&n!==void 0?n:{key:"Unknown",code:"Unknown",[o==="["?"code":"key"]:i};r.push({keyDef:c,releasePrevious:s,releaseSelf:l,repeat:u}),t=t.slice(a)}while(t);return r}async function Ym(e){let t=Jm(this.config.keyboardMap,e);for(let r=0;r<t.length;r++)await Re(this.config),await Lx(this,t[r])}async function Lx(e,{keyDef:t,releasePrevious:r,releaseSelf:n,repeat:o}){let{system:i}=e;if(i.keyboard.isKeyPressed(t)&&await i.keyboard.keyup(e,t),!r){for(let a=1;a<=o;a++)await i.keyboard.keydown(e,t,a>1),a<o&&await Re(e.config);n&&await i.keyboard.keyup(e,t)}}async function Zm(e){for(let t of e.system.keyboard.getPressedKeys())await e.system.keyboard.keyup(e,t)}function Ea(e){let t=X(e)?{"text/plain":Bx(e)}:{"text/plain":String(e.ownerDocument.getSelection())},r=bt(V(e));for(let n in t)t[n]&&r.setData(n,t[n]);return r}function Bx(e){let t=Me(e);return Y(e).substring(t.startOffset,t.endOffset)}async function eb(){var e;let t=this.config.document,r=(e=t.activeElement)!==null&&e!==void 0?e:t.body,n=Ea(r);if(n.items.length!==0)return this.dispatchUIEvent(r,"copy",{clipboardData:n})&&this.config.writeToClipboard&&await Lr(t,n),n}async function tb(){var e;let t=this.config.document,r=(e=t.activeElement)!==null&&e!==void 0?e:t.body,n=Ea(r);if(n.items.length!==0)return this.dispatchUIEvent(r,"cut",{clipboardData:n})&&this.config.writeToClipboard&&await Lr(r.ownerDocument,n),n}async function rb(e){var t,r;let n=this.config.document,o=(t=n.activeElement)!==null&&t!==void 0?t:n.body,i=(r=typeof e=="string"?Dx(n,e):e)!==null&&r!==void 0?r:await Cl(n).catch(()=>{throw new Error("`userEvent.paste()` without `clipboardData` requires the `ClipboardAPI` to be available.")});this.dispatchUIEvent(o,"paste",{clipboardData:i})}function Dx(e,t){let r=bt(V(e));return r.setData("text",t),r}function zs(e,t){let r=[];do{let{descriptor:n,consumedLength:o,releasePrevious:i,releaseSelf:a=!0}=ga(t,"pointer"),s=e.find(l=>l.name===n);s&&r.push({keyDef:s,releasePrevious:i,releaseSelf:a}),t=t.slice(o)}while(t);return r}async function ob(e){let{pointerMap:t}=this.config,r=[];(Array.isArray(e)?e:[e]).forEach(n=>{typeof n=="string"?r.push(...zs(t,n)):"keys"in n?r.push(...zs(t,n.keys).map(o=>({...n,...o}))):r.push(n)});for(let n=0;n<r.length;n++)await Re(this.config),await Fx(this,r[n]);this.system.pointer.resetClickCount()}async function Fx(e,t){var r,n,o,i,a,s;let l="pointerName"in t&&t.pointerName?t.pointerName:"keyDef"in t?e.system.pointer.getPointerName(t.keyDef):"mouse",u=e.system.pointer.getPreviousPosition(l),c={target:(r=t.target)!==null&&r!==void 0?r:Ux(e,u),coords:(n=t.coords)!==null&&n!==void 0?n:u?.coords,caret:{node:(o=t.node)!==null&&o!==void 0?o:nb(t)||u==null||(a=u.caret)===null||a===void 0?void 0:a.node,offset:(i=t.offset)!==null&&i!==void 0?i:nb(t)||u==null||(s=u.caret)===null||s===void 0?void 0:s.offset}};"keyDef"in t?(e.system.pointer.isKeyPressed(t.keyDef)&&(at(e,re.Trigger),await e.system.pointer.release(e,t.keyDef,c)),t.releasePrevious||(at(e,re.Trigger),await e.system.pointer.press(e,t.keyDef,c),t.releaseSelf&&(at(e,re.Trigger),await e.system.pointer.release(e,t.keyDef,c)))):(at(e,re.Trigger),await e.system.pointer.move(e,l,c))}function nb(e){var t,r;return!!((t=(r=e.target)!==null&&r!==void 0?r:e.node)!==null&&t!==void 0?t:e.offset!==void 0)}function Ux(e,t){var r;if(!t)throw new Error("This pointer has no previous position. Provide a target property!");return(r=t.target)!==null&&r!==void 0?r:e.config.document.body}async function ib(e){if(!ve(e)||te(e))throw new Error("clear()` is only supported on editable elements.");if(se(e),e.ownerDocument.activeElement!==e)throw new Error("The element to be cleared could not be focused.");if(pa(e),!mm(e))throw new Error("The element content to be cleared could not be selected.");_e(this,e,"","deleteContentBackward")}async function ab(e,t){return lb.call(this,!0,e,t)}async function sb(e,t){return lb.call(this,!1,e,t)}async function lb(e,t,r){if(!e&&!t.multiple)throw I().getElementError("Unable to deselect an option in a non-multiple select. Use selectOptions to change the selection instead.",t);let n=Array.isArray(r)?r:[r],o=Array.from(t.querySelectorAll('option, [role="option"]')),i=n.map(s=>{if(typeof s!="string"&&o.includes(s))return s;{let l=o.find(u=>u.value===s||u.innerHTML===s);if(l)return l;throw I().getElementError(`Value "${String(s)}" not found in options`,t)}}).filter(s=>!te(s));if(te(t)||!i.length)return;let a=s=>{s.selected=e,this.dispatchUIEvent(t,"input",{bubbles:!0,cancelable:!1,composed:!0}),this.dispatchUIEvent(t,"change")};if(S(t,"select"))if(t.multiple)for(let s of i){let l=this.config.pointerEventsCheck===0?!0:Mt(this,s);l&&(this.dispatchUIEvent(s,"pointerover"),this.dispatchUIEvent(t,"pointerenter"),this.dispatchUIEvent(s,"mouseover"),this.dispatchUIEvent(t,"mouseenter"),this.dispatchUIEvent(s,"pointermove"),this.dispatchUIEvent(s,"mousemove"),this.dispatchUIEvent(s,"pointerdown"),this.dispatchUIEvent(s,"mousedown")),se(t),l&&(this.dispatchUIEvent(s,"pointerup"),this.dispatchUIEvent(s,"mouseup")),a(s),l&&this.dispatchUIEvent(s,"click"),await Re(this.config)}else if(i.length===1){let s=this.config.pointerEventsCheck===0?!0:Mt(this,t);s?await this.click(t):se(t),a(i[0]),s&&(this.dispatchUIEvent(t,"pointerover"),this.dispatchUIEvent(t,"pointerenter"),this.dispatchUIEvent(t,"mouseover"),this.dispatchUIEvent(t,"mouseenter"),this.dispatchUIEvent(t,"pointerup"),this.dispatchUIEvent(t,"mouseup"),this.dispatchUIEvent(t,"click")),await Re(this.config)}else throw I().getElementError("Cannot select multiple options on a non-multiple select",t);else if(t.getAttribute("role")==="listbox")for(let s of i)await this.click(s),await this.unhover(s);else throw I().getElementError("Cannot select options on elements that are neither select nor listbox elements",t)}async function ub(e,t,{skipClick:r=this.config.skipClick,skipAutoClose:n=this.config.skipAutoClose,initialSelectionStart:o,initialSelectionEnd:i}={}){e.disabled||(r||await this.click(e),o!==void 0&&it(e,o,i??o),await this.keyboard(t),n||await Zm(this))}var cb=Symbol("files and value properties are mocked");function Gs(e,t,r){r?Object.defineProperty(e,t,r):delete e[t]}function db(e,t){var r;(r=e[cb])===null||r===void 0||r.restore();let n=Object.getOwnPropertyDescriptor(e,"type"),o=Object.getOwnPropertyDescriptor(e,"value"),i=Object.getOwnPropertyDescriptor(e,"files");function a(){Gs(e,"type",n),Gs(e,"value",o),Gs(e,"files",i)}e[cb]={restore:a},Object.defineProperties(e,{files:{configurable:!0,get:()=>t},value:{configurable:!0,get:()=>t.length?`C:\\fakepath\\${t[0].name}`:"",set(s){if(s==="")a();else{var l;o==null||(l=o.set)===null||l===void 0||l.call(e,s)}}},type:{configurable:!0,get:()=>"file",set(s){s!=="file"&&(a(),e.type=s)}}})}async function pb(e,t){let r=S(e,"label")?e.control:e;if(!r||!S(r,"input",{type:"file"}))throw new TypeError(`The ${r===e?"given":"associated"} ${r?.tagName} element does not accept file uploads`);if(te(e))return;let n=(Array.isArray(t)?t:[t]).filter(i=>!this.config.applyAccept||jx(i,r.accept)).slice(0,r.multiple?void 0:1),o=()=>{var i;n.length===((i=r.files)===null||i===void 0?void 0:i.length)&&n.every((a,s)=>{var l;return a===((l=r.files)===null||l===void 0?void 0:l.item(s))})||(db(r,Ft(V(e),n)),this.dispatchUIEvent(r,"input"),this.dispatchUIEvent(r,"change"))};r.addEventListener("fileDialog",o),await this.click(e),r.removeEventListener("fileDialog",o)}function wa(e){return e.toLowerCase().replace(/(\.|\/)jpg\b/g,"$1jpeg")}function jx(e,t){if(!t)return!0;let r=["audio/*","image/*","video/*"];return wa(t).trim().split(/\s*,\s*/).some(n=>n.startsWith(".")?wa(e.name).endsWith(n):r.includes(n)?wa(e.type).startsWith(n.replace("*","")):wa(e.type)===n)}var Ks={click:$m,dblClick:Hm,tripleClick:Vm,hover:Wm,unhover:zm,tab:Gm,keyboard:Ym,copy:eb,cut:tb,paste:rb,pointer:ob,clear:ib,deselectOptions:sb,selectOptions:ab,type:ub,upload:pb};function fb(e){return I().asyncWrapper(e)}var mb={applyAccept:!0,autoModify:!0,delay:0,document:globalThis.document,keyboardMap:Mm,pointerMap:km,pointerEventsCheck:st.EachApiCall,skipAutoClose:!1,skipClick:!1,skipHover:!1,writeToClipboard:!1,advanceTimers:()=>Promise.resolve()},$x={...mb,writeToClipboard:!0};function bb(e={},t=$x,r){let n=Wx(e,r,t);return{...t,...e,document:n}}function vb(e={}){var t;let r=bb(e);Vs(r.document),$s(V(r.document).HTMLElement);let n=(t=r.document.defaultView)!==null&&t!==void 0?t:globalThis.window;return _l(n),Xs(r).api}function ee({keyboardState:e,pointerState:t,...r}={},n){var o;let i=bb(r,mb,n);Vs(i.document),$s(V(i.document).HTMLElement);let a=(o=t??e)!==null&&o!==void 0?o:new Tr;return{api:Xs(i,a).api,system:a}}function Hx(e){return Xs({...this.config,...e},this.system).api}function Vx(e,t){function r(...n){return at(e,re.Call),fb(()=>t.apply(e,n).then(async o=>(await Re(e.config),o)))}return Object.defineProperty(r,"name",{get:()=>t.name}),r}function Xs(e,t=new Tr){let r={};return Object.assign(r,{config:e,dispatchEvent:js.bind(r),dispatchUIEvent:wm.bind(r),system:t,levelRefs:{},...Ks}),{instance:r,api:{...Object.fromEntries(Object.entries(Ks).map(([n,o])=>[n,Vx(r,o)])),setup:Hx.bind(r)}}}function Wx(e,t,r){var n,o;return(n=(o=e.document)!==null&&o!==void 0?o:t&&xm(t))!==null&&n!==void 0?n:r.document}var Qs={};Ob(Qs,{clear:()=>zx,click:()=>Gx,copy:()=>Kx,cut:()=>Xx,dblClick:()=>Qx,deselectOptions:()=>Jx,hover:()=>Yx,keyboard:()=>Zx,paste:()=>tq,pointer:()=>eq,selectOptions:()=>rq,tab:()=>sq,tripleClick:()=>nq,type:()=>oq,unhover:()=>iq,upload:()=>aq});function zx(e){return ee().api.clear(e)}function Gx(e,t={}){return ee(t,e).api.click(e)}function Kx(e={}){return ee(e).api.copy()}function Xx(e={}){return ee(e).api.cut()}function Qx(e,t={}){return ee(t).api.dblClick(e)}function Jx(e,t,r={}){return ee(r).api.deselectOptions(e,t)}function Yx(e,t={}){return ee(t).api.hover(e)}async function Zx(e,t={}){let{api:r,system:n}=ee(t);return r.keyboard(e).then(()=>n)}async function eq(e,t={}){let{api:r,system:n}=ee(t);return r.pointer(e).then(()=>n)}function tq(e,t){return ee(t).api.paste(e)}function rq(e,t,r={}){return ee(r).api.selectOptions(e,t)}function nq(e,t={}){return ee(t).api.tripleClick(e)}function oq(e,t,r={}){return ee(r,e).api.type(e,t,r)}function iq(e,t={}){let{api:r,system:n}=ee(t);return n.pointer.setMousePosition({target:e}),r.unhover(e)}function aq(e,t,r={}){return ee(r).api.upload(e,t)}function sq(e={}){return ee().api.tab(e)}var _a={...Qs,setup:vb};var yb=!1,hb=!1,Js=null;function lq(e){return new Promise(t=>setTimeout(t,e))}function gb(e){try{if(typeof e=="string")return new URL(e,uq()).href;if(e instanceof URL)return e.href;if(typeof Request<"u"&&e instanceof Request)return e.url}catch{}return String(e)}function uq(){try{if(typeof location<"u"&&location.href)return location.href}catch{}return"http://localhost/"}function cq(e,t){if(t?.method)return String(t.method).toUpperCase();try{if(typeof Request<"u"&&e instanceof Request&&e.method)return String(e.method).toUpperCase()}catch{}return"GET"}function dq(e,t){let r=t?.body;if(typeof r=="string")return r;try{if(typeof Request<"u"&&e instanceof Request)return}catch{}}function pq(e){let t=Mr(e.headers),r={};for(let n of t)r[n.name]=n.value;return new Response(Dt(e.body),{status:e.statusCode,headers:r})}async function fq(e,t,r){let n=gb(t),o=cq(t,r),i=Nt(Js?.()??[],n,o);if(!i)return e(t,r);let a={url:n,method:o,headers:void 0,postData:dq(t,r),timestamp:Date.now()};if(Lt(i,a),i.aborted)throw new TypeError(`Spectra.intercept() aborted ${o} ${n} (${i.abortReason||"Failed"})`);let s=Bt(i);return s.delayMs&&s.delayMs>0&&await lq(s.delayMs),pq(s)}function mq(){let e=globalThis.XMLHttpRequest;function t(){let r=new e,n="GET",o="",i=e.prototype.open.bind(r),a=e.prototype.send.bind(r);return r.open=(s,l,...u)=>{n=String(s).toUpperCase(),o=gb(l);let[c=!0,d,b]=u;return i(s,l,c,d,b)},r.send=s=>{let l=Nt(Js?.()??[],o,n);if(!l)return a(s);let u={url:o,method:n,headers:void 0,postData:typeof s=="string"?s:void 0,timestamp:Date.now()};Lt(l,u);let c=()=>{r.dispatchEvent(new Event("error"))};if(l.aborted){setTimeout(c,0);return}let d=Bt(l),b=()=>{let v=Dt(d.body);Object.defineProperties(r,{status:{value:d.statusCode,configurable:!0},statusText:{value:d.statusCode===200?"OK":`${d.statusCode} Mocked`,configurable:!0},responseText:{value:v,configurable:!0},response:{value:v,configurable:!0},readyState:{value:4,configurable:!0}}),r.dispatchEvent(new Event("readystatechange")),r.dispatchEvent(new Event("load")),r.dispatchEvent(new Event("loadend"))};d.delayMs&&d.delayMs>0?setTimeout(b,d.delayMs):setTimeout(b,0)},r}t.prototype=e.prototype,globalThis.XMLHttpRequest=t}function Eb(e){if(Js=e,!yb&&typeof globalThis.fetch=="function"){let t=globalThis.fetch.bind(globalThis);globalThis.fetch=(r,n)=>fq(t,r,n),yb=!0}!hb&&typeof globalThis.XMLHttpRequest=="function"&&(mq(),hb=!0)}function kt(){return _a.setup({delay:null})}function Ca(e){return cl(e.trim())??e.trim()}function Cb(e,t){let r=Ca(e),o=(()=>{if(t===null)return document.querySelector(r);let a=Array.from(document.querySelectorAll(r));return t>=0?a[t]??null:a[a.length+t]??null})();if(o!==null)return o;let i=Ma(e.trim());return i?dl(i.name,document,t):null}function pt(e){return typeof e=="string"?e:e.selector}function wb(e,t){return t==null?e[0]??null:t>=0?e[t]??null:e[e.length+t]??null}function Ys(e,t){if(!t)return!0;try{return e.matches(t)}catch{return!1}}function Pa(e,t){let r=ul(e);if(!r)return;let n=t?{selector:r.base,index:null,parent:t}:r.base,o=H(n,null);if(r.kind==="parent")return o?.parentElement?[o.parentElement]:[];if(r.kind==="closest"){let a=o?.closest(r.arg)??null;return a?[a]:[]}if(!o)return[];if(r.kind==="children")return Array.from(o.children).filter(a=>Ys(a,r.arg));if(r.kind==="siblings"){let a=o.parentElement;return a?Array.from(a.children).filter(s=>s!==o&&Ys(s,r.arg)):[]}let i=o.nextElementSibling;for(;i&&!Ys(i,r.arg);)i=i.nextElementSibling;return i?[i]:[]}function H(e,t){if(typeof e=="string"){let s=Pa(e,void 0);return s!==void 0?wb(s,t):Cb(e,t)}let r=Pa(e.selector,e.parent);if(r!==void 0)return wb(r,e.index??t);let n=e.parent?H(e.parent,e.parent.index):document.documentElement;if(!n)return null;let o=Ca(e.selector),i=Array.from(n.querySelectorAll(o)),a=e.index??t;return a==null?i[0]??null:a>=0?i[a]??null:i[i.length+a]??null}function _b(e){let t=e.tagName;return t==="INPUT"||t==="TEXTAREA"||t==="SELECT"}var Ta=class{mockRules=[];consoleErrors=[];recordedNetwork=[];async waitForScopedEl(t,r){let n=H(t,r);if(n)return n;let o=null;if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>(o=H(t,r),o!==null),globalThis.__TS_RUNTIME__.getImplicitWaitMs())||!o)throw new Error("Element not found: "+pt(t));return o}async connect(){}async close(){}async navigate(t){throw new Error("Spectra.navigate() is not supported in component testing mode. Use Spectra.mount(<Component />) to render a component tree instead of navigating a URL.")}async setCookies(t,r){let n=Array.isArray(t)?t:[t];for(let o of n)typeof document<"u"&&(document.cookie=o)}async back(){throw new Error("Spectra.back() is not supported in component testing mode.")}async forward(){throw new Error("Spectra.forward() is not supported in component testing mode.")}async refresh(){throw new Error("Spectra.refresh() is not supported in component testing mode.")}async setViewport(t,r){try{window.resizeTo(t,r)}catch{}}async pause(t){await new Promise(r=>setTimeout(r,t))}async click(t,r=null){let n=await this.waitForScopedEl(t,r);await kt().click(n)}async doubleClick(t,r=null){let n=await this.waitForScopedEl(t,r);await kt().dblClick(n)}async rightClick(t,r=null){let n=await this.waitForScopedEl(t,r);await kt().pointer({keys:"[MouseRight]",target:n})}async setValue(t,r,n=null){let o=await this.waitForScopedEl(t,n);if(!_b(o))throw new Error("Element is not a form field: "+pt(t));if(o.tagName==="INPUT"&&o.type==="file")return this.upload(t,r,n);let i=kt();await i.clear(o),String(r).length>0&&await i.type(o,String(r))}async upload(t,r,n=null){let o=await this.waitForScopedEl(t,n),i=Array.isArray(r)?r:[r],a=[],s={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",svg:"image/svg+xml",webp:"image/webp",pdf:"application/pdf",json:"application/json",txt:"text/plain",csv:"text/csv"};for(let l of i)if(typeof l=="string"){let u="file.bin",c="application/octet-stream",d;if(l.startsWith("data:")){let b=l.indexOf(","),v=l.slice(0,b),C=l.slice(b+1),_=v.match(/data:([^;]+)/);_&&(c=_[1]);let T=v.match(/(?:name|filename)=([^;]+)/i);T?u=decodeURIComponent(T[1]):u=`fixture.${c.split("/")[1]||"bin"}`;try{let m=atob(C),h=new Uint8Array(m.length);for(let E=0;E<m.length;E++)h[E]=m.charCodeAt(E);d=new Blob([h],{type:c})}catch{d=new Blob([C],{type:c})}}else{u=l.split("?")[0].split("#")[0].split("/").pop()?.split("\\").pop()||"fixture.bin";let v=u.split(".").pop()?.toLowerCase()||"";c=s[v]||"application/octet-stream",d=new Blob(["Mock file content for "+u],{type:c})}a.push(new File([d],u,{type:c}))}else if(l instanceof File)a.push(l);else if(l&&typeof l=="object"&&"name"in l){let u=l,c=u.type||"application/octet-stream",d;if(u.base64)try{let b=atob(u.base64),v=new Uint8Array(b.length);for(let C=0;C<b.length;C++)v[C]=b.charCodeAt(C);d=new Blob([v],{type:c})}catch{d=new Blob([u.base64],{type:c})}else d=new Blob([u.content||"Mock content"],{type:c});a.push(new File([d],u.name,{type:c}))}if(a.length>0){let l=new DataTransfer;for(let u of a)l.items.add(u);o.files=l.files,o.dispatchEvent(new Event("input",{bubbles:!0})),o.dispatchEvent(new Event("change",{bubbles:!0}))}}async clearValue(t,r=null){let n=await this.waitForScopedEl(t,r);await kt().clear(n)}async select(t,r,n=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>{let i=H(t,n);if(!i||i.tagName!=="SELECT")return!1;for(let a=0;a<i.options.length;a++){let s=i.options[a];if(s.text===r||s.value===r)return i.selectedIndex=a,i.dispatchEvent(new Event("change",{bubbles:!0})),!0}return!1}))throw new Error("Select option not found: "+JSON.stringify(r))}async hover(t,r=null){let n=await this.waitForScopedEl(t,r);await kt().hover(n)}async focus(t,r=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>{let o=H(t,r);return o?(o.focus?.(),!0):!1}))throw new Error("Element not found: "+pt(t))}async blur(t,r=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>{let o=H(t,r);return o?(o.blur?.(),!0):!1}))throw new Error("Element not found: "+pt(t))}async waitForElementRemoved(t,r=5e3,n=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>!await this.isExisting(t,n),r))throw new Error("Element still exists after timeout: "+pt(t))}async waitForUndisplayed(t,r,n=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>!await this.isDisplayed(t,n),r?.timeout??5e3))throw new Error("Element still displayed after timeout: "+pt(t))}async waitForClickable(t,r,n=null){return await globalThis.__TS_RUNTIME__.pollCondition(async()=>this.isClickable(t,n),r?.timeout??5e3)}async getBounds(t,r=null){let n=H(t,r);if(!n)return{x:0,y:0,top:0,right:0,bottom:0,left:0,width:0,height:0};let o=n.getBoundingClientRect();return{x:o.x,y:o.y,top:o.top,right:o.right,bottom:o.bottom,left:o.left,width:o.width,height:o.height}}async closest(t,r,n=null){let o=H(t,n);if(!o)return null;let i=o.closest(r);return i?i.tagName.toLowerCase():null}async clickAt(t,r){document.elementFromPoint(t,r)?.click()}async dragDrop(t,r,n=null){let o=H(t,n),i=Cb(r,null);if(!o||!i)throw new Error("Drag source or destination not found");let a=new DataTransfer;o.dispatchEvent(new DragEvent("dragstart",{bubbles:!0,dataTransfer:a})),i.dispatchEvent(new DragEvent("dragover",{bubbles:!0,dataTransfer:a})),i.dispatchEvent(new DragEvent("drop",{bubbles:!0,dataTransfer:a})),o.dispatchEvent(new DragEvent("dragend",{bubbles:!0,dataTransfer:a}))}async longPress(t,r,n=null){let o=H(t,n);if(!o)throw new Error("Element not found: "+pt(t));o.dispatchEvent(new TouchEvent("touchstart",{bubbles:!0})),await this.pause(r),o.dispatchEvent(new TouchEvent("touchend",{bubbles:!0}))}async scrollIntoView(t,r=null){H(t,r)?.scrollIntoView({block:"center",inline:"center"})}async getText(t,r=null){let n=H(t,r);return n?n.textContent??"":""}async getValue(t,r=null){let n=H(t,r);return n?_b(n)?n.value??"":n.getAttribute("value")||"":""}async isDisplayed(t,r=null){let n=H(t,r);if(!n)return!1;let o=window.getComputedStyle(n);if(o.visibility==="hidden"||o.display==="none"||o.opacity==="0")return!1;let i=n.getBoundingClientRect();return i.width>0&&i.height>0||n.getClientRects().length>0||n.offsetWidth>0&&n.offsetHeight>0}async isExisting(t,r=null){return H(t,r)!==null}async isEnabled(t,r=null){let n=H(t,r);return n?!n.disabled&&!n.hasAttribute("disabled")&&!n.classList.contains("disabled")&&n.getAttribute("aria-disabled")!=="true":!1}async isSelected(t,r=null){let n=H(t,r);return n?!!n.checked||n.getAttribute("aria-checked")==="true"||n.getAttribute("data-state")==="checked":!1}async isFocused(t,r=null){let n=H(t,r);return n?document.activeElement===n||n.matches(":focus"):!1}async isClickable(t,r=null){let n=H(t,r);if(!n)return!1;let o=window.getComputedStyle(n);if(o.visibility==="hidden"||o.display==="none"||o.opacity==="0")return!1;let i=n.getBoundingClientRect();return i.width===0&&i.height===0?!1:!n.disabled&&!n.hasAttribute("disabled")&&!n.classList.contains("disabled")&&n.getAttribute("aria-disabled")!=="true"}async hasClass(t,r,n=null){let o=H(t,n);return o?o.classList.contains(r):!1}async getAttribute(t,r,n=null){let o=H(t,n);return o?o.getAttribute(r):null}async getCSSProperty(t,r,n=null){let o=H(t,n);return{value:o?window.getComputedStyle(o).getPropertyValue(r):""}}async count(t){if(typeof t=="string"){let o=Pa(t,void 0);return o!==void 0?o.length:document.querySelectorAll(Ca(t)).length}let r=Pa(t.selector,t.parent);if(r!==void 0)return r.length;let n=t.parent?H(t.parent,t.parent.index):document.documentElement;return n?n.querySelectorAll(Ca(t.selector)).length:0}async pressKey(t){let r=document.activeElement||document.body,n=String(t);r.dispatchEvent(new KeyboardEvent("keydown",{key:n,bubbles:!0})),r.dispatchEvent(new KeyboardEvent("keyup",{key:n,bubbles:!0}))}async scroll(t={}){if(t.selector){await this.scrollIntoView(String(t.selector),null);return}let r=t.direction||"down",n=t.pixels||500,o=r==="up"?-n:r==="down"?n:0,i=r==="left"?-n:r==="right"?n:0;window.scrollBy(i,o)}async swipe(t){let r=t.distance||300,n=t.direction==="up"?r:t.direction==="down"?-r:0,o=t.direction==="left"?r:t.direction==="right"?-r:0;window.scrollBy(o,n)}async grantPermission(t){}async getUrl(){return window.location.href}async getTitle(){return document.title}async execute(t,...r){return typeof t=="function"?t(...r):new Function(`return (${t});`)()}async evaluate(t){return new Function(`return (${t});`)()}async waitUntil(t,r){let n=await globalThis.__TS_RUNTIME__.pollCondition(t,r?.timeout);if(!n)throw new Error(r?.timeoutMsg||"waitUntil() condition was not met in time");return n}async getLogs(t){return[]}async shouldHaveUrl(t){let r=await this.getUrl();if(r!==t)throw new Error(`Expected browser URL to be "${t}", but got "${r}"`)}async shouldContainUrl(t){let r=await this.getUrl();if(!r.includes(t))throw new Error(`Expected browser URL to contain "${t}", but got "${r}"`)}async shouldHaveTitle(t){let r=await this.getTitle();if(r!==t)throw new Error(`Expected page title to be "${t}", but got "${r}"`)}async shouldContainTitle(t){let r=await this.getTitle();if(!r.includes(t))throw new Error(`Expected page title to contain "${t}", but got "${r}"`)}async shouldBeLoaded(){if(document.readyState!=="complete"&&document.readyState!=="interactive")throw new Error(`Expected document to be loaded, but readyState is "${document.readyState}"`)}async shouldHaveNoConsoleErrors(){if(this.consoleErrors.length>0)throw new Error(`Expected no console errors, but found ${this.consoleErrors.length}: ${this.consoleErrors.join("; ")}`)}async clearCookies(){document.cookie.split(";").forEach(t=>{let r=t.split("=")[0]?.trim();r&&(document.cookie=`${r}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/`)})}async clearLocalStorage(){window.localStorage.clear()}async intercept(t,r,n,o){let i=Ar(t,r,n,o);return Eb(()=>this.mockRules),this.mockRules.push(i),qr(i)}clearMocks(){this.mockRules=[]}};var Ra="spectra-root",ft=null,Rr=null;async function bq(){if(typeof window<"u"&&window.__TESTSPECTRA_CREATE_ROOT__)return window.__TESTSPECTRA_CREATE_ROOT__;if(Rr)return Rr;try{let e=await import("react-dom/client");if(Rr=e.createRoot||e.default?.createRoot||e.default,Rr)return Rr}catch{}throw new Error("Could not find react-dom/client createRoot. Ensure react-dom is installed in your project.")}function vq(){let e=document.getElementById(Ra);return e||(e=document.createElement("div"),e.id=Ra,document.body.appendChild(e)),e}function Pb(){if(ft){try{ft.unmount()}catch{try{ft.render(null)}catch{}}ft=null}let e=document.getElementById(Ra);e&&(e.innerHTML="")}async function Tb(e){let t=vq();ft||(ft=(await bq())(t));let r=(typeof e.type=="string"?e.type:e.type?.displayName||e.type?.name)||"component";return globalThis.__TS_RUNTIME__.trackStep("action",{type:"action",key:"mount",target:r,args:[]},async()=>(ft.render(e),await new Promise(n=>setTimeout(n,20)),globalThis.__TS_RUNTIME__.createElementProxy(`#${Ra}`)))}var Rb=new Ta;el(Rb);globalThis.browser=Rb;globalThis.$=function(e){return ue(e)};globalThis.$$=function(e){return Te(e)};var Zs=pl();Zs.mount=Tb;Zs.unmount=Pb;globalThis.Spectra=Zs;(typeof globalThis.__vitest_browser_runner__<"u"||typeof globalThis.__vitest_worker__<"u")&&await Oa();typeof beforeEach=="function"&&beforeEach(e=>{let t=e?.task?.name||globalThis.__CURRENT_TEST_TITLE__;t&&(globalThis.__CURRENT_TEST_TITLE__=t,globalThis.__TS_RUNTIME__.emitEvent("TESTSPECTRA_TEST_START",JSON.stringify({title:t})))});typeof document<"u"&&document.addEventListener("click",e=>{e.target?.closest?.("a[href]")&&e.preventDefault()},!0);globalThis.__SPECTRA_READY__=!0;
64
64
  /*! Bundled license information:
65
65
 
66
66
  react-is/cjs/react-is.production.min.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testspectra/react",
3
- "version": "1.2.5",
3
+ "version": "1.2.7",
4
4
  "description": "Bundled Vitest browser-mode runner for React component testing with the TestSpectra Spectra.* DSL",
5
5
  "keywords": [
6
6
  "testspectra",
@@ -42,7 +42,7 @@
42
42
  "esbuild": "^0.28.2",
43
43
  "playwright": "^1.48.0",
44
44
  "vitest": "^2.1.8",
45
- "@testspectra/matchers": "1.2.5"
45
+ "@testspectra/matchers": "1.2.7"
46
46
  },
47
47
  "peerDependencies": {
48
48
  "react": ">=18.0.0",