@testspectra/react 1.3.4 → 1.3.5
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 +1 -1
- package/dist/setup.js +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -795,7 +795,7 @@ var DomDriverBridge = class {
|
|
|
795
795
|
const before = readTypedValue(el);
|
|
796
796
|
await getUser().type(el, text);
|
|
797
797
|
const landed = readTypedValue(el);
|
|
798
|
-
if (!typedTextLanded(text, landed, before)) {
|
|
798
|
+
if (!typedTextLanded((before ?? "") + text, landed, before)) {
|
|
799
799
|
throw typedTextError(selectorText(selector), text, landed ?? "");
|
|
800
800
|
}
|
|
801
801
|
}
|
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 Qx(e){return e.reverse().map((t,r)=>["".padEnd(r),t.tagName,t.id&&`#${t.id}`,t.hasAttribute("data-testid")&&`(testId=${t.getAttribute("data-testid")})`,Jx(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 Jx(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(q(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(q(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 nb(e,t){return(e&t)>0}function Ie(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var ga=class{init(t){let r=this.getTarget(t),[,n]=dt(null,r),o=this.getEventInit();return ft(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,!ya(n,r))return;let i=this.getTarget(t),a=this.getEventInit(-1),[s,l]=dt(o,i);return{leave:()=>{kt(t,o)&&o!==i&&(t.dispatchUIEvent(o,"pointerout",a),s.forEach(u=>t.dispatchUIEvent(u,"pointerleave",a)))},enter:()=>{ft(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);ft(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);ft(t,n),this.isPrevented=!1,this.isDown=!1,t.dispatchUIEvent(n,"pointerup",this.getEventInit(r))}release(t){let r=this.getTarget(t),[n]=dt(r,null),o=this.getEventInit();kt(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:_r(t),buttons:this.buttons.getButtons()}}constructor({pointerId:t,pointerType:r,isPrimary:n},o){Ie(this,"pointerId",void 0),Ie(this,"pointerType",void 0),Ie(this,"isPrimary",void 0),Ie(this,"buttons",void 0),Ie(this,"isMultitouch",!1),Ie(this,"isCancelled",!1),Ie(this,"isDown",!1),Ie(this,"isPrevented",!1),Ie(this,"position",{}),this.pointerId=t,this.pointerType=r,this.isPrimary=n,this.isMultitouch=!n,this.buttons=o}};function et(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Ea=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){et(this,"system",void 0),et(this,"mouse",void 0),et(this,"buttons",void 0),et(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 va}constructor(){et(this,"registry",{})}}),et(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 ga({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(){et(this,"registry",{}),et(this,"nextId",1)}}),this.system=t,this.buttons=new Mt,this.mouse=new ha,this.pointers.new("mouse","mouse",this.buttons)}};function ib(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Pr=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(){ib(this,"keyboard",new ba(this)),ib(this,"pointer",new Ea(this))}};async function ab(e){let t=[];return this.config.skipHover||t.push({target:e}),t.push({keys:"[MouseLeft]",target:e}),this.pointer(t)}async function sb(e){return this.pointer([{target:e},"[MouseLeft][MouseLeft]"])}async function lb(e){return this.pointer([{target:e},"[MouseLeft][MouseLeft][MouseLeft]"])}async function ub(e){return this.pointer({target:e})}async function cb(e){return ft(this,this.system.pointer.getMouseTarget(this)),this.pointer({target:e.ownerDocument.body})}async function db({shift:e}={}){return this.keyboard(e===!0?"{Shift>}{Tab}{/Shift}":e===!1?"[/ShiftLeft][/ShiftRight]{Tab}":"{Tab}")}var pb={"{":"}","[":"]"};function wa(e,t){let r=0,n=e[r]in pb?e[r]:"";r+=n.length;let i=new RegExp(`^\\${n}{2}`).test(e)?"":n;return{type:i,...i===""?Zx(e,r,t):eq(e,r,i,t)}}function Zx(e,t,r){let n=e[t];return fb(n,e,t,r),t+=n.length,{consumedLength:t,descriptor:n,releasePrevious:!1,releaseSelf:!0,repeat:1}}function eq(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];fb(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 m=pb[r],y=e[t]===m?m:"";if(!y)throw new Error(mb([!c&&"repeat modifier",!d&&"release modifier",`"${m}"`].filter(Boolean).join(" or "),e[t],e,n));return t+=y.length,{consumedLength:t,descriptor:u,releasePrevious:!!s,repeat:c?Math.max(Number(c.substr(1)),1):1,releaseSelf:tq(d,c)}}function fb(e,t,r,n){if(!e)throw new Error(mb("key descriptor",t[r],t,n))}function tq(e,t){if(e)return e==="/";if(t)return!1}function mb(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 bb(e,t){let r=[];do{var n;let{type:o,descriptor:i,consumedLength:a,releasePrevious:s,releaseSelf:l=!0,repeat:u}=wa(t,"keyboard"),c=(n=e.find(d=>{if(o==="["){var m;return((m=d.code)===null||m===void 0?void 0:m.toLowerCase())===i.toLowerCase()}else if(o==="{"){var y;return((y=d.key)===null||y===void 0?void 0:y.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 vb(e){let t=bb(this.config.keyboardMap,e);for(let r=0;r<t.length;r++)await Re(this.config),await rq(this,t[r])}async function rq(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 yb(e){for(let t of e.system.keyboard.getPressedKeys())await e.system.keyboard.keyup(e,t)}function _a(e){let t=X(e)?{"text/plain":nq(e)}:{"text/plain":String(e.ownerDocument.getSelection())},r=vt(V(e));for(let n in t)t[n]&&r.setData(n,t[n]);return r}function nq(e){let t=ke(e);return Z(e).substring(t.startOffset,t.endOffset)}async function hb(){var e;let t=this.config.document,r=(e=t.activeElement)!==null&&e!==void 0?e:t.body,n=_a(r);if(n.items.length!==0)return this.dispatchUIEvent(r,"copy",{clipboardData:n})&&this.config.writeToClipboard&&await Br(t,n),n}async function gb(){var e;let t=this.config.document,r=(e=t.activeElement)!==null&&e!==void 0?e:t.body,n=_a(r);if(n.items.length!==0)return this.dispatchUIEvent(r,"cut",{clipboardData:n})&&this.config.writeToClipboard&&await Br(r.ownerDocument,n),n}async function Eb(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"?oq(n,e):e)!==null&&r!==void 0?r:await $l(n).catch(()=>{throw new Error("`userEvent.paste()` without `clipboardData` requires the `ClipboardAPI` to be available.")});this.dispatchUIEvent(o,"paste",{clipboardData:i})}function oq(e,t){let r=vt(V(e));return r.setData("text",t),r}function tl(e,t){let r=[];do{let{descriptor:n,consumedLength:o,releasePrevious:i,releaseSelf:a=!0}=wa(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 _b(e){let{pointerMap:t}=this.config,r=[];(Array.isArray(e)?e:[e]).forEach(n=>{typeof n=="string"?r.push(...tl(t,n)):"keys"in n?r.push(...tl(t,n.keys).map(o=>({...n,...o}))):r.push(n)});for(let n=0;n<r.length;n++)await Re(this.config),await iq(this,r[n]);this.system.pointer.resetClickCount()}async function iq(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:aq(e,u),coords:(n=t.coords)!==null&&n!==void 0?n:u?.coords,caret:{node:(o=t.node)!==null&&o!==void 0?o:wb(t)||u==null||(a=u.caret)===null||a===void 0?void 0:a.node,offset:(i=t.offset)!==null&&i!==void 0?i:wb(t)||u==null||(s=u.caret)===null||s===void 0?void 0:s.offset}};"keyDef"in t?(e.system.pointer.isKeyPressed(t.keyDef)&&(lt(e,re.Trigger),await e.system.pointer.release(e,t.keyDef,c)),t.releasePrevious||(lt(e,re.Trigger),await e.system.pointer.press(e,t.keyDef,c),t.releaseSelf&&(lt(e,re.Trigger),await e.system.pointer.release(e,t.keyDef,c)))):(lt(e,re.Trigger),await e.system.pointer.move(e,l,c))}function wb(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 aq(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 Cb(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(ma(e),!km(e))throw new Error("The element content to be cleared could not be selected.");_e(this,e,"","deleteContentBackward")}async function Pb(e,t){return Rb.call(this,!0,e,t)}async function Tb(e,t){return Rb.call(this,!1,e,t)}async function Rb(e,t,r){if(!e&&!t.multiple)throw N().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 N().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(q(t,"select"))if(t.multiple)for(let s of i){let l=this.config.pointerEventsCheck===0?!0:kt(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:kt(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 N().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 N().getElementError("Cannot select options on elements that are neither select nor listbox elements",t)}async function Sb(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&&st(e,o,i??o),await this.keyboard(t),n||await yb(this))}var xb=Symbol("files and value properties are mocked");function rl(e,t,r){r?Object.defineProperty(e,t,r):delete e[t]}function qb(e,t){var r;(r=e[xb])===null||r===void 0||r.restore();let n=Object.getOwnPropertyDescriptor(e,"type"),o=Object.getOwnPropertyDescriptor(e,"value"),i=Object.getOwnPropertyDescriptor(e,"files");function a(){rl(e,"type",n),rl(e,"value",o),rl(e,"files",i)}e[xb]={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 Ab(e,t){let r=q(e,"label")?e.control:e;if(!r||!q(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||sq(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))})||(qb(r,Bt(V(e),n)),this.dispatchUIEvent(r,"input"),this.dispatchUIEvent(r,"change"))};r.addEventListener("fileDialog",o),await this.click(e),r.removeEventListener("fileDialog",o)}function Ca(e){return e.toLowerCase().replace(/(\.|\/)jpg\b/g,"$1jpeg")}function sq(e,t){if(!t)return!0;let r=["audio/*","image/*","video/*"];return Ca(t).trim().split(/\s*,\s*/).some(n=>n.startsWith(".")?Ca(e.name).endsWith(n):r.includes(n)?Ca(e.type).startsWith(n.replace("*","")):Ca(e.type)===n)}var nl={click:ab,dblClick:sb,tripleClick:lb,hover:ub,unhover:cb,tab:db,keyboard:vb,copy:hb,cut:gb,paste:Eb,pointer:_b,clear:Cb,deselectOptions:Tb,selectOptions:Pb,type:Sb,upload:Ab};function Mb(e){return N().asyncWrapper(e)}var kb={applyAccept:!0,autoModify:!0,delay:0,document:globalThis.document,keyboardMap:Xm,pointerMap:Ym,pointerEventsCheck:ut.EachApiCall,skipAutoClose:!1,skipClick:!1,skipHover:!1,writeToClipboard:!1,advanceTimers:()=>Promise.resolve()},lq={...kb,writeToClipboard:!0};function Ob(e={},t=lq,r){let n=dq(e,r,t);return{...t,...e,document:n}}function Ib(e={}){var t;let r=Ob(e);Zs(r.document),Qs(V(r.document).HTMLElement);let n=(t=r.document.defaultView)!==null&&t!==void 0?t:globalThis.window;return Ul(n),ol(r).api}function ee({keyboardState:e,pointerState:t,...r}={},n){var o;let i=Ob(r,kb,n);Zs(i.document),Qs(V(i.document).HTMLElement);let a=(o=t??e)!==null&&o!==void 0?o:new Pr;return{api:ol(i,a).api,system:a}}function uq(e){return ol({...this.config,...e},this.system).api}function cq(e,t){function r(...n){return lt(e,re.Call),Mb(()=>t.apply(e,n).then(async o=>(await Re(e.config),o)))}return Object.defineProperty(r,"name",{get:()=>t.name}),r}function ol(e,t=new Pr){let r={};return Object.assign(r,{config:e,dispatchEvent:Ys.bind(r),dispatchUIEvent:Fm.bind(r),system:t,levelRefs:{},...nl}),{instance:r,api:{...Object.fromEntries(Object.entries(nl).map(([n,o])=>[n,cq(r,o)])),setup:uq.bind(r)}}}function dq(e,t,r){var n,o;return(n=(o=e.document)!==null&&o!==void 0?o:t&&zm(t))!==null&&n!==void 0?n:r.document}var il={};Yb(il,{clear:()=>pq,click:()=>fq,copy:()=>mq,cut:()=>bq,dblClick:()=>vq,deselectOptions:()=>yq,hover:()=>hq,keyboard:()=>gq,paste:()=>wq,pointer:()=>Eq,selectOptions:()=>_q,tab:()=>Sq,tripleClick:()=>Cq,type:()=>Pq,unhover:()=>Tq,upload:()=>Rq});function pq(e){return ee().api.clear(e)}function fq(e,t={}){return ee(t,e).api.click(e)}function mq(e={}){return ee(e).api.copy()}function bq(e={}){return ee(e).api.cut()}function vq(e,t={}){return ee(t).api.dblClick(e)}function yq(e,t,r={}){return ee(r).api.deselectOptions(e,t)}function hq(e,t={}){return ee(t).api.hover(e)}async function gq(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 wq(e,t){return ee(t).api.paste(e)}function _q(e,t,r={}){return ee(r).api.selectOptions(e,t)}function Cq(e,t={}){return ee(t).api.tripleClick(e)}function Pq(e,t,r={}){return ee(r,e).api.type(e,t,r)}function Tq(e,t={}){let{api:r,system:n}=ee(t);return n.pointer.setMousePosition({target:e}),r.unhover(e)}function Rq(e,t,r={}){return ee(r).api.upload(e,t)}function Sq(e={}){return ee().api.tab(e)}var Pa={...il,setup:Ib};var Nb=!1,Lb=!1,al=null;function xq(e){return new Promise(t=>setTimeout(t,e))}function Db(e){try{if(typeof e=="string")return new URL(e,qq()).href;if(e instanceof URL)return e.href;if(typeof Request<"u"&&e instanceof Request)return e.url}catch{}return String(e)}function qq(){try{if(typeof location<"u"&&location.href)return location.href}catch{}return"http://localhost/"}function Aq(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 Mq(e,t){let r=t?.body;if(typeof r=="string")return r;try{if(typeof Request<"u"&&e instanceof Request)return}catch{}}function kq(e){let t=Or(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 Oq(e,t,r){let n=Db(t),o=Aq(t,r),i=Nt(al?.()??[],n,o);if(!i)return e(t,r);let a={url:n,method:o,headers:void 0,postData:Mq(t,r),timestamp:Date.now()};if(Lt(i,a),i.aborted)throw new TypeError(`Spectra.intercept() aborted ${o} ${n} (${i.abortReason||"Failed"})`);let s=await Ba(i,a);return s.delayMs&&s.delayMs>0&&await xq(s.delayMs),kq(s)}function Iq(){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=Db(l);let[c=!0,d,m]=u;return i(s,l,c,d,m)},r.send=s=>{let l=Nt(al?.()??[],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=m=>{let y=Dt(m.body);Object.defineProperties(r,{status:{value:m.statusCode,configurable:!0},statusText:{value:m.statusCode===200?"OK":`${m.statusCode} Mocked`,configurable:!0},responseText:{value:y,configurable:!0},response:{value:y,configurable:!0},readyState:{value:4,configurable:!0}}),r.dispatchEvent(new Event("readystatechange")),r.dispatchEvent(new Event("load")),r.dispatchEvent(new Event("loadend"))};Ba(l,u).then(m=>{setTimeout(()=>d(m),m.delayMs&&m.delayMs>0?m.delayMs:0)})},r}t.prototype=e.prototype,globalThis.XMLHttpRequest=t}function Bb(e){if(al=e,!Nb&&typeof globalThis.fetch=="function"){let t=globalThis.fetch.bind(globalThis);globalThis.fetch=(r,n)=>Oq(t,r,n),Nb=!0}!Lb&&typeof globalThis.XMLHttpRequest=="function"&&(Iq(),Lb=!0)}function tt(){return Pa.setup({delay:null})}function Ta(e){return xl(e.trim())??e.trim()}function Ub(e,t){let r=Ta(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=Ua(e.trim());return i?ql(i.name,document,t):null}function Se(e){return typeof e=="string"?e:e.selector}function Fb(e,t){return t==null?e[0]??null:t>=0?e[t]??null:e[e.length+t]??null}function sl(e,t){if(!t)return!0;try{return e.matches(t)}catch{return!1}}function Ra(e,t){let r=Sl(e);if(!r)return;if(r.kind==="nth"){let a=$(r.base,Number.parseInt(r.arg,10));return a?[a]:[]}let n=t?{selector:r.base,index:null,parent:t}:r.base,o=$(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=>sl(a,r.arg));if(r.kind==="siblings"){let a=o.parentElement;return a?Array.from(a.children).filter(s=>s!==o&&sl(s,r.arg)):[]}let i=o.nextElementSibling;for(;i&&!sl(i,r.arg);)i=i.nextElementSibling;return i?[i]:[]}function $(e,t){if(typeof e=="string"){let s=Ra(e,void 0);return s!==void 0?Fb(s,t):Ub(e,t)}let r=Ra(e.selector,e.parent);if(r!==void 0)return Fb(r,e.index??t);let n=e.parent?$(e.parent,e.parent.index):document.documentElement;if(!n)return null;let o=Ta(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 ll(e){let t=e.tagName;return t==="INPUT"||t==="TEXTAREA"||t==="SELECT"}function Tr(e){if(e.tagName!=="INPUT"&&e.tagName!=="TEXTAREA")return null;let t=e;return t.tagName==="INPUT"&&Tl.includes(t.type)?null:typeof t.value=="string"?t.value:null}var Sa=class{mockRules=[];consoleErrors=[];recordedNetwork=[];async waitForScopedEl(t,r){let n=$(t,r);if(n)return n;let o=null;if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>(o=$(t,r),o!==null),globalThis.__TS_RUNTIME__.getImplicitWaitMs())||!o)throw new Error("Element not found: "+Se(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 tt().click(n)}async doubleClick(t,r=null){let n=await this.waitForScopedEl(t,r);await tt().dblClick(n)}async rightClick(t,r=null){let n=await this.waitForScopedEl(t,r);await tt().pointer({keys:"[MouseRight]",target:n})}async setValue(t,r,n=null){let o=await this.waitForScopedEl(t,n);if(!ll(o))throw new Error("Element is not a form field: "+Se(t));if(o.tagName==="INPUT"&&o.type==="file")return this.upload(t,r,n);let i=String(r),a=tt();await a.clear(o);let s=Tr(o);if(i.length>0){if(await a.type(o,i),Ar(i,Tr(o),s))return;o.focus(),await a.clear(o),await a.type(o,i);let l=Tr(o);if(!Ar(i,l,s))throw Na(Se(t),i,l??"")}}async typeText(t,r,n=null){let o=await this.waitForScopedEl(t,n);if(!ll(o))throw new Error("Element is not a form field: "+Se(t));let i=String(r??"");if(i.length===0)return;let a=Tr(o);await tt().type(o,i);let s=Tr(o);if(!Ar(i,s,a))throw Na(Se(t),i,s??"")}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 m=l.indexOf(","),y=l.slice(0,m),P=l.slice(m+1),C=y.match(/data:([^;]+)/);C&&(c=C[1]);let T=y.match(/(?:name|filename)=([^;]+)/i);T?u=decodeURIComponent(T[1]):u=`fixture.${c.split("/")[1]||"bin"}`;try{let f=atob(P),g=new Uint8Array(f.length);for(let w=0;w<f.length;w++)g[w]=f.charCodeAt(w);d=new Blob([g],{type:c})}catch{d=new Blob([P],{type:c})}}else{u=l.split("?")[0].split("#")[0].split("/").pop()?.split("\\").pop()||"fixture.bin";let y=u.split(".").pop()?.toLowerCase()||"";c=s[y]||"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 m=atob(u.base64),y=new Uint8Array(m.length);for(let P=0;P<m.length;P++)y[P]=m.charCodeAt(P);d=new Blob([y],{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 tt().clear(n)}async select(t,r,n=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>{let i=$(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 tt().hover(n)}async focus(t,r=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>{let o=$(t,r);return o?(o.focus?.(),!0):!1}))throw new Error("Element not found: "+Se(t))}async blur(t,r=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>{let o=$(t,r);return o?(o.blur?.(),!0):!1}))throw new Error("Element not found: "+Se(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: "+Se(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: "+Se(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=$(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=$(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=$(t,n),i=Ub(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=$(t,n);if(!o)throw new Error("Element not found: "+Se(t));o.dispatchEvent(new TouchEvent("touchstart",{bubbles:!0})),await this.pause(r),o.dispatchEvent(new TouchEvent("touchend",{bubbles:!0}))}async scrollIntoView(t,r=null){$(t,r)?.scrollIntoView({block:"center",inline:"center"})}async getText(t,r=null){let n=$(t,r);return n?n.textContent??"":""}async getValue(t,r=null){let n=$(t,r);return n?ll(n)?n.value??"":n.getAttribute("value")||"":""}async isDisplayed(t,r=null){let n=$(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 $(t,r)!==null}async isEnabled(t,r=null){let n=$(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=$(t,r);return n?!!n.checked||n.getAttribute("aria-checked")==="true"||n.getAttribute("data-state")==="checked":!1}async isFocused(t,r=null){let n=$(t,r);return n?document.activeElement===n||n.matches(":focus"):!1}async isClickable(t,r=null){let n=$(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=$(t,n);return o?o.classList.contains(r):!1}async getAttribute(t,r,n=null){let o=$(t,n);return o?o.getAttribute(r):null}async getCSSProperty(t,r,n=null){let o=$(t,n);return{value:o?window.getComputedStyle(o).getPropertyValue(r):""}}async count(t){if(typeof t=="string"){let o=Ra(t,void 0);return o!==void 0?o.length:document.querySelectorAll(Ta(t)).length}let r=Ra(t.selector,t.parent);if(r!==void 0)return r.length;let n=t.parent?$(t.parent,t.parent.index):document.documentElement;return n?n.querySelectorAll(Ta(t.selector)).length:0}async pressKey(t){let r=Rl(t);if(r?.code){await tt().keyboard(`{${r.code}}`);return}let n=document.activeElement||document.body,o=String(t);n.dispatchEvent(new KeyboardEvent("keydown",{key:o,bubbles:!0})),n.dispatchEvent(new KeyboardEvent("keyup",{key:o,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){if(typeof t=="function"){let n=r.map(o=>{let i=Oa(o);return i?$(i,null):o});return t(...n)}return 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=kr(t,r,n,o);return Bb(()=>this.mockRules),this.mockRules.push(i),Mr(i,()=>{let a=this.mockRules.indexOf(i);a!==-1&&this.mockRules.splice(a,1)})}clearMocks(){this.mockRules=[]}};var xa="spectra-root",mt=null,Rr=null;async function Nq(){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 Lq(){let e=document.getElementById(xa);return e||(e=document.createElement("div"),e.id=xa,document.body.appendChild(e)),e}function $b(){if(mt){try{mt.unmount()}catch{try{mt.render(null)}catch{}}mt=null}let e=document.getElementById(xa);e&&(e.innerHTML="")}async function jb(e){let t=Lq();mt||(mt=(await Nq())(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()=>(mt.render(e),await new Promise(n=>setTimeout(n,20)),globalThis.__TS_RUNTIME__.createElementProxy(`#${xa}`)))}var Hb=new Sa;cl(Hb);globalThis.browser=Hb;globalThis.$=function(e){return ue(e)};globalThis.$$=function(e){return Te(e)};var ul=Al();ul.mount=jb;ul.unmount=$b;globalThis.Spectra=ul;(typeof globalThis.__vitest_browser_runner__<"u"||typeof globalThis.__vitest_worker__<"u")&&await ja();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 bb(e,t){let r=[];do{var n;let{type:o,descriptor:i,consumedLength:a,releasePrevious:s,releaseSelf:l=!0,repeat:u}=wa(t,"keyboard"),c=(n=e.find(d=>{if(o==="["){var m;return((m=d.code)===null||m===void 0?void 0:m.toLowerCase())===i.toLowerCase()}else if(o==="{"){var y;return((y=d.key)===null||y===void 0?void 0:y.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 vb(e){let t=bb(this.config.keyboardMap,e);for(let r=0;r<t.length;r++)await Re(this.config),await rq(this,t[r])}async function rq(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 yb(e){for(let t of e.system.keyboard.getPressedKeys())await e.system.keyboard.keyup(e,t)}function _a(e){let t=X(e)?{"text/plain":nq(e)}:{"text/plain":String(e.ownerDocument.getSelection())},r=vt(V(e));for(let n in t)t[n]&&r.setData(n,t[n]);return r}function nq(e){let t=ke(e);return Z(e).substring(t.startOffset,t.endOffset)}async function hb(){var e;let t=this.config.document,r=(e=t.activeElement)!==null&&e!==void 0?e:t.body,n=_a(r);if(n.items.length!==0)return this.dispatchUIEvent(r,"copy",{clipboardData:n})&&this.config.writeToClipboard&&await Br(t,n),n}async function gb(){var e;let t=this.config.document,r=(e=t.activeElement)!==null&&e!==void 0?e:t.body,n=_a(r);if(n.items.length!==0)return this.dispatchUIEvent(r,"cut",{clipboardData:n})&&this.config.writeToClipboard&&await Br(r.ownerDocument,n),n}async function Eb(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"?oq(n,e):e)!==null&&r!==void 0?r:await $l(n).catch(()=>{throw new Error("`userEvent.paste()` without `clipboardData` requires the `ClipboardAPI` to be available.")});this.dispatchUIEvent(o,"paste",{clipboardData:i})}function oq(e,t){let r=vt(V(e));return r.setData("text",t),r}function tl(e,t){let r=[];do{let{descriptor:n,consumedLength:o,releasePrevious:i,releaseSelf:a=!0}=wa(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 _b(e){let{pointerMap:t}=this.config,r=[];(Array.isArray(e)?e:[e]).forEach(n=>{typeof n=="string"?r.push(...tl(t,n)):"keys"in n?r.push(...tl(t,n.keys).map(o=>({...n,...o}))):r.push(n)});for(let n=0;n<r.length;n++)await Re(this.config),await iq(this,r[n]);this.system.pointer.resetClickCount()}async function iq(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:aq(e,u),coords:(n=t.coords)!==null&&n!==void 0?n:u?.coords,caret:{node:(o=t.node)!==null&&o!==void 0?o:wb(t)||u==null||(a=u.caret)===null||a===void 0?void 0:a.node,offset:(i=t.offset)!==null&&i!==void 0?i:wb(t)||u==null||(s=u.caret)===null||s===void 0?void 0:s.offset}};"keyDef"in t?(e.system.pointer.isKeyPressed(t.keyDef)&&(lt(e,re.Trigger),await e.system.pointer.release(e,t.keyDef,c)),t.releasePrevious||(lt(e,re.Trigger),await e.system.pointer.press(e,t.keyDef,c),t.releaseSelf&&(lt(e,re.Trigger),await e.system.pointer.release(e,t.keyDef,c)))):(lt(e,re.Trigger),await e.system.pointer.move(e,l,c))}function wb(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 aq(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 Cb(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(ma(e),!km(e))throw new Error("The element content to be cleared could not be selected.");_e(this,e,"","deleteContentBackward")}async function Pb(e,t){return Rb.call(this,!0,e,t)}async function Tb(e,t){return Rb.call(this,!1,e,t)}async function Rb(e,t,r){if(!e&&!t.multiple)throw N().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 N().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(q(t,"select"))if(t.multiple)for(let s of i){let l=this.config.pointerEventsCheck===0?!0:kt(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:kt(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 N().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 N().getElementError("Cannot select options on elements that are neither select nor listbox elements",t)}async function Sb(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&&st(e,o,i??o),await this.keyboard(t),n||await yb(this))}var xb=Symbol("files and value properties are mocked");function rl(e,t,r){r?Object.defineProperty(e,t,r):delete e[t]}function qb(e,t){var r;(r=e[xb])===null||r===void 0||r.restore();let n=Object.getOwnPropertyDescriptor(e,"type"),o=Object.getOwnPropertyDescriptor(e,"value"),i=Object.getOwnPropertyDescriptor(e,"files");function a(){rl(e,"type",n),rl(e,"value",o),rl(e,"files",i)}e[xb]={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 Ab(e,t){let r=q(e,"label")?e.control:e;if(!r||!q(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||sq(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))})||(qb(r,Bt(V(e),n)),this.dispatchUIEvent(r,"input"),this.dispatchUIEvent(r,"change"))};r.addEventListener("fileDialog",o),await this.click(e),r.removeEventListener("fileDialog",o)}function Ca(e){return e.toLowerCase().replace(/(\.|\/)jpg\b/g,"$1jpeg")}function sq(e,t){if(!t)return!0;let r=["audio/*","image/*","video/*"];return Ca(t).trim().split(/\s*,\s*/).some(n=>n.startsWith(".")?Ca(e.name).endsWith(n):r.includes(n)?Ca(e.type).startsWith(n.replace("*","")):Ca(e.type)===n)}var nl={click:ab,dblClick:sb,tripleClick:lb,hover:ub,unhover:cb,tab:db,keyboard:vb,copy:hb,cut:gb,paste:Eb,pointer:_b,clear:Cb,deselectOptions:Tb,selectOptions:Pb,type:Sb,upload:Ab};function Mb(e){return N().asyncWrapper(e)}var kb={applyAccept:!0,autoModify:!0,delay:0,document:globalThis.document,keyboardMap:Xm,pointerMap:Ym,pointerEventsCheck:ut.EachApiCall,skipAutoClose:!1,skipClick:!1,skipHover:!1,writeToClipboard:!1,advanceTimers:()=>Promise.resolve()},lq={...kb,writeToClipboard:!0};function Ob(e={},t=lq,r){let n=dq(e,r,t);return{...t,...e,document:n}}function Ib(e={}){var t;let r=Ob(e);Zs(r.document),Qs(V(r.document).HTMLElement);let n=(t=r.document.defaultView)!==null&&t!==void 0?t:globalThis.window;return Ul(n),ol(r).api}function ee({keyboardState:e,pointerState:t,...r}={},n){var o;let i=Ob(r,kb,n);Zs(i.document),Qs(V(i.document).HTMLElement);let a=(o=t??e)!==null&&o!==void 0?o:new Pr;return{api:ol(i,a).api,system:a}}function uq(e){return ol({...this.config,...e},this.system).api}function cq(e,t){function r(...n){return lt(e,re.Call),Mb(()=>t.apply(e,n).then(async o=>(await Re(e.config),o)))}return Object.defineProperty(r,"name",{get:()=>t.name}),r}function ol(e,t=new Pr){let r={};return Object.assign(r,{config:e,dispatchEvent:Ys.bind(r),dispatchUIEvent:Fm.bind(r),system:t,levelRefs:{},...nl}),{instance:r,api:{...Object.fromEntries(Object.entries(nl).map(([n,o])=>[n,cq(r,o)])),setup:uq.bind(r)}}}function dq(e,t,r){var n,o;return(n=(o=e.document)!==null&&o!==void 0?o:t&&zm(t))!==null&&n!==void 0?n:r.document}var il={};Yb(il,{clear:()=>pq,click:()=>fq,copy:()=>mq,cut:()=>bq,dblClick:()=>vq,deselectOptions:()=>yq,hover:()=>hq,keyboard:()=>gq,paste:()=>wq,pointer:()=>Eq,selectOptions:()=>_q,tab:()=>Sq,tripleClick:()=>Cq,type:()=>Pq,unhover:()=>Tq,upload:()=>Rq});function pq(e){return ee().api.clear(e)}function fq(e,t={}){return ee(t,e).api.click(e)}function mq(e={}){return ee(e).api.copy()}function bq(e={}){return ee(e).api.cut()}function vq(e,t={}){return ee(t).api.dblClick(e)}function yq(e,t,r={}){return ee(r).api.deselectOptions(e,t)}function hq(e,t={}){return ee(t).api.hover(e)}async function gq(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 wq(e,t){return ee(t).api.paste(e)}function _q(e,t,r={}){return ee(r).api.selectOptions(e,t)}function Cq(e,t={}){return ee(t).api.tripleClick(e)}function Pq(e,t,r={}){return ee(r,e).api.type(e,t,r)}function Tq(e,t={}){let{api:r,system:n}=ee(t);return n.pointer.setMousePosition({target:e}),r.unhover(e)}function Rq(e,t,r={}){return ee(r).api.upload(e,t)}function Sq(e={}){return ee().api.tab(e)}var Pa={...il,setup:Ib};var Nb=!1,Lb=!1,al=null;function xq(e){return new Promise(t=>setTimeout(t,e))}function Db(e){try{if(typeof e=="string")return new URL(e,qq()).href;if(e instanceof URL)return e.href;if(typeof Request<"u"&&e instanceof Request)return e.url}catch{}return String(e)}function qq(){try{if(typeof location<"u"&&location.href)return location.href}catch{}return"http://localhost/"}function Aq(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 Mq(e,t){let r=t?.body;if(typeof r=="string")return r;try{if(typeof Request<"u"&&e instanceof Request)return}catch{}}function kq(e){let t=Or(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 Oq(e,t,r){let n=Db(t),o=Aq(t,r),i=Nt(al?.()??[],n,o);if(!i)return e(t,r);let a={url:n,method:o,headers:void 0,postData:Mq(t,r),timestamp:Date.now()};if(Lt(i,a),i.aborted)throw new TypeError(`Spectra.intercept() aborted ${o} ${n} (${i.abortReason||"Failed"})`);let s=await Ba(i,a);return s.delayMs&&s.delayMs>0&&await xq(s.delayMs),kq(s)}function Iq(){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=Db(l);let[c=!0,d,m]=u;return i(s,l,c,d,m)},r.send=s=>{let l=Nt(al?.()??[],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=m=>{let y=Dt(m.body);Object.defineProperties(r,{status:{value:m.statusCode,configurable:!0},statusText:{value:m.statusCode===200?"OK":`${m.statusCode} Mocked`,configurable:!0},responseText:{value:y,configurable:!0},response:{value:y,configurable:!0},readyState:{value:4,configurable:!0}}),r.dispatchEvent(new Event("readystatechange")),r.dispatchEvent(new Event("load")),r.dispatchEvent(new Event("loadend"))};Ba(l,u).then(m=>{setTimeout(()=>d(m),m.delayMs&&m.delayMs>0?m.delayMs:0)})},r}t.prototype=e.prototype,globalThis.XMLHttpRequest=t}function Bb(e){if(al=e,!Nb&&typeof globalThis.fetch=="function"){let t=globalThis.fetch.bind(globalThis);globalThis.fetch=(r,n)=>Oq(t,r,n),Nb=!0}!Lb&&typeof globalThis.XMLHttpRequest=="function"&&(Iq(),Lb=!0)}function tt(){return Pa.setup({delay:null})}function Ta(e){return xl(e.trim())??e.trim()}function Ub(e,t){let r=Ta(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=Ua(e.trim());return i?ql(i.name,document,t):null}function Se(e){return typeof e=="string"?e:e.selector}function Fb(e,t){return t==null?e[0]??null:t>=0?e[t]??null:e[e.length+t]??null}function sl(e,t){if(!t)return!0;try{return e.matches(t)}catch{return!1}}function Ra(e,t){let r=Sl(e);if(!r)return;if(r.kind==="nth"){let a=$(r.base,Number.parseInt(r.arg,10));return a?[a]:[]}let n=t?{selector:r.base,index:null,parent:t}:r.base,o=$(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=>sl(a,r.arg));if(r.kind==="siblings"){let a=o.parentElement;return a?Array.from(a.children).filter(s=>s!==o&&sl(s,r.arg)):[]}let i=o.nextElementSibling;for(;i&&!sl(i,r.arg);)i=i.nextElementSibling;return i?[i]:[]}function $(e,t){if(typeof e=="string"){let s=Ra(e,void 0);return s!==void 0?Fb(s,t):Ub(e,t)}let r=Ra(e.selector,e.parent);if(r!==void 0)return Fb(r,e.index??t);let n=e.parent?$(e.parent,e.parent.index):document.documentElement;if(!n)return null;let o=Ta(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 ll(e){let t=e.tagName;return t==="INPUT"||t==="TEXTAREA"||t==="SELECT"}function Tr(e){if(e.tagName!=="INPUT"&&e.tagName!=="TEXTAREA")return null;let t=e;return t.tagName==="INPUT"&&Tl.includes(t.type)?null:typeof t.value=="string"?t.value:null}var Sa=class{mockRules=[];consoleErrors=[];recordedNetwork=[];async waitForScopedEl(t,r){let n=$(t,r);if(n)return n;let o=null;if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>(o=$(t,r),o!==null),globalThis.__TS_RUNTIME__.getImplicitWaitMs())||!o)throw new Error("Element not found: "+Se(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 tt().click(n)}async doubleClick(t,r=null){let n=await this.waitForScopedEl(t,r);await tt().dblClick(n)}async rightClick(t,r=null){let n=await this.waitForScopedEl(t,r);await tt().pointer({keys:"[MouseRight]",target:n})}async setValue(t,r,n=null){let o=await this.waitForScopedEl(t,n);if(!ll(o))throw new Error("Element is not a form field: "+Se(t));if(o.tagName==="INPUT"&&o.type==="file")return this.upload(t,r,n);let i=String(r),a=tt();await a.clear(o);let s=Tr(o);if(i.length>0){if(await a.type(o,i),Ar(i,Tr(o),s))return;o.focus(),await a.clear(o),await a.type(o,i);let l=Tr(o);if(!Ar(i,l,s))throw Na(Se(t),i,l??"")}}async typeText(t,r,n=null){let o=await this.waitForScopedEl(t,n);if(!ll(o))throw new Error("Element is not a form field: "+Se(t));let i=String(r??"");if(i.length===0)return;let a=Tr(o);await tt().type(o,i);let s=Tr(o);if(!Ar((a??"")+i,s,a))throw Na(Se(t),i,s??"")}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 m=l.indexOf(","),y=l.slice(0,m),P=l.slice(m+1),C=y.match(/data:([^;]+)/);C&&(c=C[1]);let T=y.match(/(?:name|filename)=([^;]+)/i);T?u=decodeURIComponent(T[1]):u=`fixture.${c.split("/")[1]||"bin"}`;try{let f=atob(P),g=new Uint8Array(f.length);for(let w=0;w<f.length;w++)g[w]=f.charCodeAt(w);d=new Blob([g],{type:c})}catch{d=new Blob([P],{type:c})}}else{u=l.split("?")[0].split("#")[0].split("/").pop()?.split("\\").pop()||"fixture.bin";let y=u.split(".").pop()?.toLowerCase()||"";c=s[y]||"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 m=atob(u.base64),y=new Uint8Array(m.length);for(let P=0;P<m.length;P++)y[P]=m.charCodeAt(P);d=new Blob([y],{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 tt().clear(n)}async select(t,r,n=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>{let i=$(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 tt().hover(n)}async focus(t,r=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>{let o=$(t,r);return o?(o.focus?.(),!0):!1}))throw new Error("Element not found: "+Se(t))}async blur(t,r=null){if(!await globalThis.__TS_RUNTIME__.pollCondition(async()=>{let o=$(t,r);return o?(o.blur?.(),!0):!1}))throw new Error("Element not found: "+Se(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: "+Se(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: "+Se(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=$(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=$(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=$(t,n),i=Ub(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=$(t,n);if(!o)throw new Error("Element not found: "+Se(t));o.dispatchEvent(new TouchEvent("touchstart",{bubbles:!0})),await this.pause(r),o.dispatchEvent(new TouchEvent("touchend",{bubbles:!0}))}async scrollIntoView(t,r=null){$(t,r)?.scrollIntoView({block:"center",inline:"center"})}async getText(t,r=null){let n=$(t,r);return n?n.textContent??"":""}async getValue(t,r=null){let n=$(t,r);return n?ll(n)?n.value??"":n.getAttribute("value")||"":""}async isDisplayed(t,r=null){let n=$(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 $(t,r)!==null}async isEnabled(t,r=null){let n=$(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=$(t,r);return n?!!n.checked||n.getAttribute("aria-checked")==="true"||n.getAttribute("data-state")==="checked":!1}async isFocused(t,r=null){let n=$(t,r);return n?document.activeElement===n||n.matches(":focus"):!1}async isClickable(t,r=null){let n=$(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=$(t,n);return o?o.classList.contains(r):!1}async getAttribute(t,r,n=null){let o=$(t,n);return o?o.getAttribute(r):null}async getCSSProperty(t,r,n=null){let o=$(t,n);return{value:o?window.getComputedStyle(o).getPropertyValue(r):""}}async count(t){if(typeof t=="string"){let o=Ra(t,void 0);return o!==void 0?o.length:document.querySelectorAll(Ta(t)).length}let r=Ra(t.selector,t.parent);if(r!==void 0)return r.length;let n=t.parent?$(t.parent,t.parent.index):document.documentElement;return n?n.querySelectorAll(Ta(t.selector)).length:0}async pressKey(t){let r=Rl(t);if(r?.code){await tt().keyboard(`{${r.code}}`);return}let n=document.activeElement||document.body,o=String(t);n.dispatchEvent(new KeyboardEvent("keydown",{key:o,bubbles:!0})),n.dispatchEvent(new KeyboardEvent("keyup",{key:o,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){if(typeof t=="function"){let n=r.map(o=>{let i=Oa(o);return i?$(i,null):o});return t(...n)}return 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=kr(t,r,n,o);return Bb(()=>this.mockRules),this.mockRules.push(i),Mr(i,()=>{let a=this.mockRules.indexOf(i);a!==-1&&this.mockRules.splice(a,1)})}clearMocks(){this.mockRules=[]}};var xa="spectra-root",mt=null,Rr=null;async function Nq(){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 Lq(){let e=document.getElementById(xa);return e||(e=document.createElement("div"),e.id=xa,document.body.appendChild(e)),e}function $b(){if(mt){try{mt.unmount()}catch{try{mt.render(null)}catch{}}mt=null}let e=document.getElementById(xa);e&&(e.innerHTML="")}async function jb(e){let t=Lq();mt||(mt=(await Nq())(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()=>(mt.render(e),await new Promise(n=>setTimeout(n,20)),globalThis.__TS_RUNTIME__.createElementProxy(`#${xa}`)))}var Hb=new Sa;cl(Hb);globalThis.browser=Hb;globalThis.$=function(e){return ue(e)};globalThis.$$=function(e){return Te(e)};var ul=Al();ul.mount=jb;ul.unmount=$b;globalThis.Spectra=ul;(typeof globalThis.__vitest_browser_runner__<"u"||typeof globalThis.__vitest_worker__<"u")&&await ja();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.3.
|
|
3
|
+
"version": "1.3.5",
|
|
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.3.
|
|
45
|
+
"@testspectra/matchers": "1.3.5"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
48
|
"react": ">=18.0.0",
|