@unotest/web 0.6.2 → 0.9.1

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.
@@ -0,0 +1 @@
1
+ var _0x170ec5=_0x19d9;(function(_0x543e12,_0xf17b46){var _0x26943e={_0x3ce190:0x2cd,_0x3b2b6f:0x2d0,_0x407ea0:0x233,_0x5df972:0x223,_0x5d25d4:0x227,_0x3f6b57:0x2b2},_0x1fdc09=_0x19d9,_0x139642=_0x543e12();while(!![]){try{var _0x4de620=parseInt(_0x1fdc09(0x2fd))/0x1*(parseInt(_0x1fdc09(_0x26943e._0x3ce190))/0x2)+-parseInt(_0x1fdc09(_0x26943e._0x3b2b6f))/0x3*(parseInt(_0x1fdc09(0x2d5))/0x4)+-parseInt(_0x1fdc09(_0x26943e._0x407ea0))/0x5+parseInt(_0x1fdc09(_0x26943e._0x5df972))/0x6+parseInt(_0x1fdc09(_0x26943e._0x5d25d4))/0x7*(-parseInt(_0x1fdc09(0x25d))/0x8)+-parseInt(_0x1fdc09(_0x26943e._0x3f6b57))/0x9*(-parseInt(_0x1fdc09(0x1e6))/0xa)+parseInt(_0x1fdc09(0x224))/0xb*(parseInt(_0x1fdc09(0x257))/0xc);if(_0x4de620===_0xf17b46)break;else _0x139642['push'](_0x139642['shift']());}catch(_0x2077d1){_0x139642['push'](_0x139642['shift']());}}}(_0x27a6,0xcb441));var __defProp=Object[_0x170ec5(0x24a)],__name=(_0x51e806,_0x1c9d2a)=>__defProp(_0x51e806,_0x170ec5(0x1d6),{'value':_0x1c9d2a,'configurable':!![]});import{Lexer,Parser,ParseError}from'@unotest/dsl';import{validateDsl}from'@unotest/dsl/validator';function locatorAction(_0x22983f){var _0x428a62={_0x17bf32:0x2ed,_0x56a711:0x2e3,_0x34bb45:0x1e3},_0x56b884=_0x170ec5;return{'name':_0x22983f,'signature':{'args':[{'kind':_0x56b884(_0x428a62._0x17bf32),'required':!![],'label':'locator'},{'kind':'any','required':![],'label':_0x56b884(0x1ce)}]},'support':_0x56b884(0x1ec),'returns':{'mode':_0x56b884(_0x428a62._0x56a711),'kind':_0x56b884(_0x428a62._0x34bb45)},'locatorCapability':'none'};}__name(locatorAction,'locatorAction');var CLICK_CONTRACT=locatorAction(_0x170ec5(0x263)),DOUBLE_CLICK_CONTRACT=locatorAction('doubleClick'),CHECK_CONTRACT=locatorAction('check'),UNCHECK_CONTRACT=locatorAction(_0x170ec5(0x2ad)),HOVER_CONTRACT=locatorAction('hover'),SCROLL_INTO_VIEW_CONTRACT=locatorAction('scrollIntoView'),FILL_CONTRACT={'name':_0x170ec5(0x25f),'signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':!![],'label':_0x170ec5(0x232)},{'kind':_0x170ec5(0x2c9),'required':!![],'label':'text'},{'kind':_0x170ec5(0x228),'required':![],'label':_0x170ec5(0x1ce)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':'fixed','kind':'void'},'locatorCapability':_0x170ec5(0x2b6)},PRESS_CONTRACT={'name':_0x170ec5(0x2b0),'signature':{'args':[{'kind':'locatorLike','required':!![],'label':_0x170ec5(0x232)},{'kind':'stringLike','required':!![],'label':_0x170ec5(0x2bc)},{'kind':'any','required':![],'label':_0x170ec5(0x1ce)}]},'support':'visual','returns':{'mode':_0x170ec5(0x2e3),'kind':'void'},'locatorCapability':'none'},SELECT_OPTION_CONTRACT={'name':_0x170ec5(0x2a5),'signature':{'args':[{'kind':'locatorLike','required':!![],'label':_0x170ec5(0x232)},{'kind':_0x170ec5(0x228),'required':!![],'label':_0x170ec5(0x200)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1e3)},'locatorCapability':'none'},DRAG_AND_DROP_CONTRACT={'name':_0x170ec5(0x1e0),'signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':!![],'label':_0x170ec5(0x1e2)},{'kind':_0x170ec5(0x2ed),'required':!![],'label':'target'}]},'support':_0x170ec5(0x1ec),'returns':{'mode':'fixed','kind':_0x170ec5(0x1e3)},'locatorCapability':_0x170ec5(0x2b6)},UPLOAD_FILE_CONTRACT={'name':_0x170ec5(0x2db),'signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':!![],'label':_0x170ec5(0x2a7)},{'kind':_0x170ec5(0x228),'required':!![],'label':_0x170ec5(0x20a)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1e3)},'locatorCapability':'none'},CLIPBOARD_PASTE_CONTRACT={'name':'clipboardPaste','signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':!![],'label':_0x170ec5(0x1d7)},{'kind':_0x170ec5(0x2c9),'required':!![],'label':'text'}]},'support':'visual','returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1e3)},'locatorCapability':_0x170ec5(0x2b6)},ACTION_CONTRACTS=[CLICK_CONTRACT,DOUBLE_CLICK_CONTRACT,CHECK_CONTRACT,UNCHECK_CONTRACT,HOVER_CONTRACT,SCROLL_INTO_VIEW_CONTRACT,FILL_CONTRACT,PRESS_CONTRACT,SELECT_OPTION_CONTRACT,DRAG_AND_DROP_CONTRACT,UPLOAD_FILE_CONTRACT,CLIPBOARD_PASTE_CONTRACT],ASSERT_TEXT_CONTRACT={'name':_0x170ec5(0x20b),'signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':!![],'label':_0x170ec5(0x232)},{'kind':'stringLike','required':!![],'label':_0x170ec5(0x23f)},{'kind':'any','required':![],'label':'options'}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':'void'},'locatorCapability':_0x170ec5(0x2b6)},ASSERT_VISIBLE_CONTRACT={'name':_0x170ec5(0x303),'signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':!![],'label':_0x170ec5(0x232)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1e3)},'locatorCapability':'none'},ASSERT_HIDDEN_CONTRACT={'name':_0x170ec5(0x305),'signature':{'args':[{'kind':'locatorLike','required':!![],'label':_0x170ec5(0x232)}]},'support':'visual','returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1e3)},'locatorCapability':_0x170ec5(0x2b6)},ASSERT_VALUE_CONTRACT={'name':_0x170ec5(0x1fb),'signature':{'args':[{'kind':'locatorLike','required':!![],'label':'locator'},{'kind':'stringLike','required':!![],'label':_0x170ec5(0x200)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1e3)},'locatorCapability':_0x170ec5(0x2b6)},ASSERT_COUNT_CONTRACT={'name':'assertCount','signature':{'args':[{'kind':'locatorLike','required':!![],'label':_0x170ec5(0x232)},{'kind':_0x170ec5(0x272),'required':!![],'label':_0x170ec5(0x20f)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':'void'},'locatorCapability':_0x170ec5(0x2b6)},ASSERT_URL_CONTRACT={'name':'assertUrl','signature':{'args':[{'kind':_0x170ec5(0x2c9),'required':!![],'label':_0x170ec5(0x27a)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1e3)},'locatorCapability':_0x170ec5(0x2b6)},ASSERT_TRUE_CONTRACT={'name':_0x170ec5(0x1eb),'signature':{'args':[{'kind':_0x170ec5(0x1da),'required':!![],'label':'condition'},{'kind':_0x170ec5(0x2c9),'required':![],'label':'message'}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1e3)},'locatorCapability':'none'},ASSERTION_CONTRACTS=[ASSERT_TEXT_CONTRACT,ASSERT_VISIBLE_CONTRACT,ASSERT_HIDDEN_CONTRACT,ASSERT_VALUE_CONTRACT,ASSERT_COUNT_CONTRACT,ASSERT_URL_CONTRACT,ASSERT_TRUE_CONTRACT],FILTER_CONTRACT={'name':_0x170ec5(0x2af),'signature':{'args':[{'kind':'locatorLike','required':![],'label':_0x170ec5(0x23a)},{'kind':_0x170ec5(0x228),'required':!![],'label':_0x170ec5(0x1ce)}]},'support':'visual','returns':{'mode':'fixed','kind':_0x170ec5(0x232)},'locatorCapability':'chainableLocator'},FIRST_CONTRACT={'name':_0x170ec5(0x2fe),'signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':![],'label':'receiver'}]},'support':_0x170ec5(0x1ec),'returns':{'mode':'fixed','kind':_0x170ec5(0x232)},'locatorCapability':_0x170ec5(0x2ea)},LAST_CONTRACT={'name':_0x170ec5(0x2f9),'signature':{'args':[{'kind':'locatorLike','required':![],'label':_0x170ec5(0x23a)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x232)},'locatorCapability':'chainableLocator'},NTH_CONTRACT={'name':_0x170ec5(0x268),'signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':![],'label':'receiver'},{'kind':_0x170ec5(0x272),'required':!![],'label':'index'}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x232)},'locatorCapability':_0x170ec5(0x2ea)},CHAIN_CONTRACTS=[FILTER_CONTRACT,FIRST_CONTRACT,LAST_CONTRACT,NTH_CONTRACT],EVALUATE_CONTRACT={'name':_0x170ec5(0x205),'signature':{'args':[{'kind':_0x170ec5(0x2c9),'required':!![],'label':_0x170ec5(0x1fa)}],'variadic':!![]},'support':'visual','returns':{'mode':'fixed','kind':_0x170ec5(0x21b)},'locatorCapability':'none','trusted':!![]},ESCAPE_HATCH_CONTRACTS=[EVALUATE_CONTRACT],SET_PAGE_CONTRACT={'name':'setPage','signature':{'args':[{'kind':_0x170ec5(0x231),'required':!![],'label':_0x170ec5(0x2ff)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':'void'},'locatorCapability':_0x170ec5(0x2b6)},ENTER_FRAME_CONTRACT={'name':_0x170ec5(0x2f2),'signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':!![],'label':_0x170ec5(0x258)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1e3)},'locatorCapability':_0x170ec5(0x2b6)},EXIT_FRAME_CONTRACT={'name':_0x170ec5(0x1cb),'signature':{'args':[]},'support':_0x170ec5(0x1ec),'returns':{'mode':'fixed','kind':_0x170ec5(0x1e3)},'locatorCapability':_0x170ec5(0x2b6)},MULTI_CONTEXT_CONTRACTS=[SET_PAGE_CONTRACT,ENTER_FRAME_CONTRACT,EXIT_FRAME_CONTRACT],GOTO_CONTRACT={'name':_0x170ec5(0x28f),'signature':{'args':[{'kind':_0x170ec5(0x2c9),'required':!![],'label':_0x170ec5(0x1fe)},{'kind':_0x170ec5(0x228),'required':![],'label':'options'}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':'void'},'locatorCapability':_0x170ec5(0x2b6)},RELOAD_CONTRACT={'name':_0x170ec5(0x29a),'signature':{'args':[{'kind':_0x170ec5(0x228),'required':![],'label':_0x170ec5(0x1ce)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':'fixed','kind':_0x170ec5(0x1e3)},'locatorCapability':_0x170ec5(0x2b6)},GO_BACK_CONTRACT={'name':_0x170ec5(0x23c),'signature':{'args':[]},'support':'visual','returns':{'mode':'fixed','kind':_0x170ec5(0x1e3)},'locatorCapability':_0x170ec5(0x2b6)},GO_FORWARD_CONTRACT={'name':_0x170ec5(0x302),'signature':{'args':[]},'support':'visual','returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1e3)},'locatorCapability':'none'},WAIT_FOR_URL_CONTRACT={'name':'waitForUrl','signature':{'args':[{'kind':_0x170ec5(0x2c9),'required':!![],'label':'pattern'}]},'support':'visual','returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1e3)},'locatorCapability':'none'},WAIT_FOR_NAVIGATION_CONTRACT={'name':_0x170ec5(0x2bb),'signature':{'args':[{'kind':_0x170ec5(0x228),'required':![],'label':_0x170ec5(0x1ce)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':'fixed','kind':'void'},'locatorCapability':_0x170ec5(0x2b6)},NAVIGATION_CONTRACTS=[GOTO_CONTRACT,RELOAD_CONTRACT,GO_BACK_CONTRACT,GO_FORWARD_CONTRACT,WAIT_FOR_URL_CONTRACT,WAIT_FOR_NAVIGATION_CONTRACT],COUNT_CONTRACT={'name':_0x170ec5(0x20f),'signature':{'args':[{'kind':'locatorLike','required':!![],'label':'locator'}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x272)},'locatorCapability':_0x170ec5(0x2b6)},TEXT_CONTENT_CONTRACT={'name':_0x170ec5(0x28b),'signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':!![],'label':'locator'}]},'support':'visual','returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1ed)},'locatorCapability':_0x170ec5(0x2b6)},INPUT_VALUE_CONTRACT={'name':_0x170ec5(0x20c),'signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':!![],'label':_0x170ec5(0x232)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1ed)},'locatorCapability':_0x170ec5(0x2b6)},IS_VISIBLE_CONTRACT={'name':_0x170ec5(0x1e4),'signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':!![],'label':'locator'}]},'support':'visual','returns':{'mode':'fixed','kind':_0x170ec5(0x256)},'locatorCapability':_0x170ec5(0x2b6)},READ_CONTRACTS=[COUNT_CONTRACT,TEXT_CONTENT_CONTRACT,INPUT_VALUE_CONTRACT,IS_VISIBLE_CONTRACT],SHELL_CONTRACT={'name':_0x170ec5(0x27c),'signature':{'args':[{'kind':_0x170ec5(0x2c9),'required':!![],'label':'cmd'}],'variadic':!![]},'support':'visual','returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x21b)},'locatorCapability':_0x170ec5(0x2b6)},DB_QUERY_CONTRACT={'name':_0x170ec5(0x2ae),'signature':{'args':[{'kind':_0x170ec5(0x2c9),'required':!![],'label':_0x170ec5(0x243)}],'variadic':!![]},'support':'visual','returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x21b)},'locatorCapability':'none'},DB_EXEC_CONTRACT={'name':_0x170ec5(0x264),'signature':{'args':[{'kind':_0x170ec5(0x2c9),'required':!![],'label':_0x170ec5(0x243)}],'variadic':!![]},'support':_0x170ec5(0x1ec),'returns':{'mode':'fixed','kind':'number'},'locatorCapability':_0x170ec5(0x2b6)},API_CALL_CONTRACT={'name':_0x170ec5(0x1f2),'signature':{'args':[{'kind':{'enum':['GET',_0x170ec5(0x1c9),_0x170ec5(0x27d),_0x170ec5(0x216),_0x170ec5(0x2a6),'HEAD',_0x170ec5(0x2bd)]},'required':!![],'label':'method'},{'kind':_0x170ec5(0x2c9),'required':!![],'label':_0x170ec5(0x1cf)},{'kind':'any','required':![],'label':_0x170ec5(0x2b1)},{'kind':_0x170ec5(0x228),'required':![],'label':_0x170ec5(0x21f)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x21b)},'locatorCapability':_0x170ec5(0x2b6)},SANDBOX_CONTRACTS=[SHELL_CONTRACT,DB_QUERY_CONTRACT,DB_EXEC_CONTRACT,API_CALL_CONTRACT],LOCATOR_CONTRACT={'name':'locator','signature':{'args':[{'kind':'stringLike','required':!![],'label':_0x170ec5(0x300)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':'fixed','kind':'locator'},'locatorCapability':_0x170ec5(0x2ea)},GET_BY_ROLE_CONTRACT={'name':_0x170ec5(0x1f3),'signature':{'args':[{'kind':'stringLike','required':!![],'label':_0x170ec5(0x1d1)},{'kind':'any','required':![],'label':_0x170ec5(0x1ce)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':'fixed','kind':_0x170ec5(0x232)},'locatorCapability':_0x170ec5(0x2ea)};function textBuilderContract(_0x5f0920){var _0x19f2f2={_0x537cbb:0x228,_0x28768d:0x1ce,_0x11472e:0x2e3,_0x49e86f:0x232},_0x5f41b1=_0x170ec5;return{'name':_0x5f0920,'signature':{'args':[{'kind':'matcher','required':!![],'label':'text'},{'kind':_0x5f41b1(_0x19f2f2._0x537cbb),'required':![],'label':_0x5f41b1(_0x19f2f2._0x28768d)}]},'support':'visual','returns':{'mode':_0x5f41b1(_0x19f2f2._0x11472e),'kind':_0x5f41b1(_0x19f2f2._0x49e86f)},'locatorCapability':_0x5f41b1(0x2ea)};}__name(textBuilderContract,'textBuilderContract');var GET_BY_TEXT_CONTRACT=textBuilderContract('getByText'),GET_BY_LABEL_CONTRACT=textBuilderContract('getByLabel'),GET_BY_PLACEHOLDER_CONTRACT=textBuilderContract(_0x170ec5(0x1dc)),GET_BY_ALT_TEXT_CONTRACT=textBuilderContract('getByAltText'),GET_BY_TITLE_CONTRACT=textBuilderContract(_0x170ec5(0x280)),GET_BY_TEST_ID_CONTRACT={'name':_0x170ec5(0x238),'signature':{'args':[{'kind':_0x170ec5(0x2c9),'required':!![],'label':'id'}]},'support':_0x170ec5(0x1ec),'returns':{'mode':'fixed','kind':_0x170ec5(0x232)},'locatorCapability':_0x170ec5(0x2ea)},CONTENT_FRAME_CONTRACT={'name':_0x170ec5(0x1d9),'signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':![],'label':_0x170ec5(0x258)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x232)},'locatorCapability':_0x170ec5(0x2ea)},SELECTOR_CONTRACTS=[LOCATOR_CONTRACT,GET_BY_ROLE_CONTRACT,GET_BY_TEXT_CONTRACT,GET_BY_LABEL_CONTRACT,GET_BY_PLACEHOLDER_CONTRACT,GET_BY_ALT_TEXT_CONTRACT,GET_BY_TITLE_CONTRACT,GET_BY_TEST_ID_CONTRACT,CONTENT_FRAME_CONTRACT],GET_ATTRIBUTE_CONTRACT={'name':_0x170ec5(0x28e),'signature':{'args':[{'kind':'locatorLike','required':!![],'label':'locator'},{'kind':_0x170ec5(0x2c9),'required':!![],'label':'attribute'}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1ed)},'locatorCapability':_0x170ec5(0x2b6)},GET_INNER_TEXT_CONTRACT={'name':_0x170ec5(0x25e),'signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':!![],'label':'locator'}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1ed)},'locatorCapability':'none'},GET_INPUT_VALUE_CONTRACT={'name':'getInputValue','signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':!![],'label':_0x170ec5(0x232)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':'string'},'locatorCapability':_0x170ec5(0x2b6)},GET_TITLE_CONTRACT={'name':_0x170ec5(0x230),'signature':{'args':[]},'support':_0x170ec5(0x1ec),'returns':{'mode':'fixed','kind':_0x170ec5(0x1ed)},'locatorCapability':'none'},GET_URL_CONTRACT={'name':_0x170ec5(0x260),'signature':{'args':[]},'support':'visual','returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1ed)},'locatorCapability':'none'},LOG_CONTRACT={'name':_0x170ec5(0x24e),'signature':{'args':[{'kind':'any','required':!![],'label':'message'}],'variadic':!![]},'support':'visual','returns':{'mode':'fixed','kind':_0x170ec5(0x1e3)},'locatorCapability':_0x170ec5(0x2b6)},STATE_CONTRACTS=[GET_ATTRIBUTE_CONTRACT,GET_INNER_TEXT_CONTRACT,GET_INPUT_VALUE_CONTRACT,GET_TITLE_CONTRACT,GET_URL_CONTRACT,LOG_CONTRACT],SET_LOCAL_STORAGE_CONTRACT={'name':_0x170ec5(0x1ef),'signature':{'args':[{'kind':_0x170ec5(0x2c9),'required':!![],'label':_0x170ec5(0x2bc)},{'kind':_0x170ec5(0x2c9),'required':!![],'label':_0x170ec5(0x200)}]},'support':'visual','returns':{'mode':'fixed','kind':_0x170ec5(0x1e3)},'locatorCapability':'none'},GET_LOCAL_STORAGE_CONTRACT={'name':_0x170ec5(0x2b4),'signature':{'args':[{'kind':_0x170ec5(0x2c9),'required':!![],'label':_0x170ec5(0x2bc)}]},'support':'visual','returns':{'mode':_0x170ec5(0x2e3),'kind':'string'},'locatorCapability':_0x170ec5(0x2b6)},SET_COOKIE_CONTRACT={'name':_0x170ec5(0x244),'signature':{'args':[{'kind':_0x170ec5(0x2c9),'required':!![],'label':_0x170ec5(0x1d6)},{'kind':_0x170ec5(0x2c9),'required':!![],'label':'value'},{'kind':'any','required':![],'label':_0x170ec5(0x1ce)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1e3)},'locatorCapability':'none'},GET_COOKIE_CONTRACT={'name':_0x170ec5(0x285),'signature':{'args':[{'kind':'stringLike','required':!![],'label':_0x170ec5(0x1d6)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':'string'},'locatorCapability':'none'},STORAGE_CONTRACTS=[SET_LOCAL_STORAGE_CONTRACT,GET_LOCAL_STORAGE_CONTRACT,SET_COOKIE_CONTRACT,GET_COOKIE_CONTRACT],WAIT_FOR_CONTRACT={'name':_0x170ec5(0x2cc),'signature':{'args':[{'kind':_0x170ec5(0x2ed),'required':!![],'label':_0x170ec5(0x232)},{'kind':'any','required':![],'label':_0x170ec5(0x1ce)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':_0x170ec5(0x1e3)},'locatorCapability':_0x170ec5(0x2b6)},WAIT_FOR_TEXT_CONTRACT={'name':'waitForText','signature':{'args':[{'kind':_0x170ec5(0x2c9),'required':!![],'label':_0x170ec5(0x23f)},{'kind':_0x170ec5(0x228),'required':![],'label':_0x170ec5(0x1ce)}]},'support':_0x170ec5(0x1ec),'returns':{'mode':'fixed','kind':_0x170ec5(0x1e3)},'locatorCapability':_0x170ec5(0x2b6)},PAUSE_CONTRACT={'name':_0x170ec5(0x2ce),'signature':{'args':[{'kind':'number','required':!![],'label':'ms'}]},'support':_0x170ec5(0x1ec),'returns':{'mode':_0x170ec5(0x2e3),'kind':'void'},'locatorCapability':_0x170ec5(0x2b6)},WAIT_CONTRACTS=[WAIT_FOR_CONTRACT,WAIT_FOR_TEXT_CONTRACT,PAUSE_CONTRACT],ALL_CONTRACTS=[...ACTION_CONTRACTS,...ASSERTION_CONTRACTS,...CHAIN_CONTRACTS,...ESCAPE_HATCH_CONTRACTS,...MULTI_CONTEXT_CONTRACTS,...NAVIGATION_CONTRACTS,...READ_CONTRACTS,...SANDBOX_CONTRACTS,...SELECTOR_CONTRACTS,...STATE_CONTRACTS,...STORAGE_CONTRACTS,...WAIT_CONTRACTS],WebDslRegistry=class{static{__name(this,'WebDslRegistry');}['byName'];constructor(_0x1ebd4a){var _0x5b3207={_0x420e03:0x2e7,_0x543ce4:0x1d6},_0x51b6bc=_0x170ec5;this['byName']=new Map();for(const _0x4a5597 of _0x1ebd4a)this[_0x51b6bc(0x254)][_0x51b6bc(_0x5b3207._0x420e03)](_0x4a5597[_0x51b6bc(_0x5b3207._0x543ce4)],_0x4a5597);}[_0x170ec5(0x1e7)](_0x159726){return this['resolveContract'](_0x159726);}[_0x170ec5(0x294)](_0x3e2d36){var _0x133376={_0x1d158d:0x29d,_0x3a6640:0x254},_0x2c02a7=_0x170ec5;const _0x1f52a5=this[_0x2c02a7(0x254)][_0x2c02a7(0x274)](_0x3e2d36);if(_0x1f52a5)return _0x1f52a5;if(_0x3e2d36['startsWith'](_0x2c02a7(0x28d)))return this['byName'][_0x2c02a7(0x274)](_0x2c02a7(0x2f4))??null;if(_0x3e2d36['startsWith'](_0x2c02a7(_0x133376._0x1d158d)))return this[_0x2c02a7(_0x133376._0x3a6640)]['get']('flow_*')??null;return null;}[_0x170ec5(0x1c7)](_0x50dc80,_0xa92fd3){var _0xc1fa7b={_0x18e7e2:0x294,_0x221fae:0x1d6,_0x170c24:0x2e3},_0x3cb03e=_0x170ec5;const _0x35640e=this[_0x3cb03e(_0xc1fa7b._0x18e7e2)](_0x50dc80[_0x3cb03e(_0xc1fa7b._0x221fae)]);if(!_0x35640e)return _0x3cb03e(0x21b);const {returns:_0x1cd5d1}=_0x35640e;if(_0x1cd5d1['mode']===_0x3cb03e(_0xc1fa7b._0x170c24)){if(_0x1cd5d1['kind']==='void')return _0x3cb03e(0x21b);return _0x1cd5d1[_0x3cb03e(0x2de)];}return _0x1cd5d1['infer'](_0x50dc80,{'session':_0xa92fd3,'resolver':this});}};function helperContract(_0x4bb055){var _0x5dca6d={_0x51a6ba:0x1ec,_0xe75dbe:0x21b},_0x10cd17=_0x170ec5;return{'name':_0x4bb055,'signature':{'args':[],'variadic':!![]},'support':_0x10cd17(_0x5dca6d._0x51a6ba),'returns':{'mode':'fixed','kind':_0x10cd17(_0x5dca6d._0xe75dbe)},'locatorCapability':'none'};}__name(helperContract,_0x170ec5(0x2c2));var baseRegistry=null;function createWebDslRegistry(_0x211f57=[]){var _0x232cf6={_0x3de03b:0x308},_0x27cf79=_0x170ec5;if(_0x211f57['length']===0x0)return baseRegistry??=new WebDslRegistry(ALL_CONTRACTS);return new WebDslRegistry([...ALL_CONTRACTS,..._0x211f57[_0x27cf79(_0x232cf6._0x3de03b)](helperContract)]);}__name(createWebDslRegistry,'createWebDslRegistry');import{MetaBlockStatement,AssignmentStatement,BinaryExpression,DoWhileStatement,ForStatement,FunctionDefineStatement,FunctionStatement,FunctionalExpression,IfStatement,MemberCallExpression,ObjectExpression,PropertyAccessExpression,RegExpExpression,ReturnStatement,StepStatement,ValueExpression,VariableExpression,WhileStatement}from'@unotest/dsl';import{StringValue}from'@unotest/dsl';function lintAst(_0x6808d4,_0x919c72={}){var _0x19a5e1=_0x170ec5;const _0x363deb=[],_0x16752c=new LintVisitor(_0x363deb,_0x919c72);return _0x16752c[_0x19a5e1(0x28c)](_0x6808d4),_0x363deb;}__name(lintAst,'lintAst');var LintVisitor=class{constructor(_0x1717fe,_0x4f733a){var _0x169190=_0x170ec5;this[_0x169190(0x245)]=_0x1717fe,this[_0x169190(0x26a)]=_0x4f733a;}['out'];[_0x170ec5(0x26a)];static{__name(this,_0x170ec5(0x1fd));}['visitBlock'](_0x185f0d){var _0x2d755b={_0x132273:0x2d9,_0xf32099:0x1f9},_0xa556c8=_0x170ec5;for(const _0x50ffa8 of _0x185f0d[_0xa556c8(_0x2d755b._0x132273)]){this[_0xa556c8(_0x2d755b._0xf32099)](_0x50ffa8);}}[_0x170ec5(0x1f9)](_0x5aeb11){var _0x32e249={_0x1d02d2:0x24b,_0x34951f:0x1f7,_0x214a52:0x1f9,_0xb488b:0x271,_0x14c3d7:0x2a1,_0x57123e:0x253,_0x531a80:0x2b1,_0x9175e:0x2d9},_0x397305=_0x170ec5;if(_0x5aeb11 instanceof FunctionDefineStatement){if(_0x5aeb11[_0x397305(0x2b1)]instanceof class{}){}const _0x39befa=_0x5aeb11[_0x397305(0x2b1)];this[_0x397305(0x1f9)](_0x39befa);return;}if(_0x5aeb11 instanceof FunctionStatement){const _0x3c79c2=_0x5aeb11['functionalExpression'];this['visitExpression'](_0x3c79c2);return;}if(_0x5aeb11 instanceof AssignmentStatement){this[_0x397305(0x24b)](_0x5aeb11[_0x397305(0x22b)]);return;}if(_0x5aeb11 instanceof IfStatement){this[_0x397305(_0x32e249._0x1d02d2)](_0x5aeb11[_0x397305(0x22b)]),this[_0x397305(0x1f9)](_0x5aeb11['ifStatement']);if(_0x5aeb11[_0x397305(0x1f7)])this['visitStatement'](_0x5aeb11[_0x397305(_0x32e249._0x34951f)]);return;}if(_0x5aeb11 instanceof ReturnStatement){const _0x2e0f43=_0x5aeb11[_0x397305(0x22b)];if(_0x2e0f43)this['visitExpression'](_0x2e0f43);return;}if(_0x5aeb11 instanceof ForStatement){this[_0x397305(_0x32e249._0x214a52)](_0x5aeb11[_0x397305(0x27f)]),this['visitExpression'](_0x5aeb11['termination']),this['visitStatement'](_0x5aeb11[_0x397305(_0x32e249._0xb488b)]),this[_0x397305(_0x32e249._0x214a52)](_0x5aeb11[_0x397305(_0x32e249._0x14c3d7)]);return;}if(_0x5aeb11 instanceof WhileStatement||_0x5aeb11 instanceof DoWhileStatement){this[_0x397305(_0x32e249._0x1d02d2)](_0x5aeb11[_0x397305(_0x32e249._0x57123e)]),this[_0x397305(_0x32e249._0x214a52)](_0x5aeb11['statement']);return;}if(_0x5aeb11 instanceof StepStatement){this[_0x397305(0x1f9)](_0x5aeb11[_0x397305(_0x32e249._0x531a80)]);return;}if(_0x5aeb11 instanceof MetaBlockStatement){this[_0x397305(0x1f9)](_0x5aeb11[_0x397305(_0x32e249._0x531a80)]);return;}if(_0x5aeb11[_0x397305(0x2d9)])for(const _0x19c02d of _0x5aeb11[_0x397305(_0x32e249._0x9175e)]){this['visitStatement'](_0x19c02d);}}['visitExpression'](_0xac9a7d){var _0x3fc907={_0x5e0814:0x306,_0xc39b52:0x24b,_0x2b084f:0x24b,_0x22d1d4:0x1d6,_0x34705a:0x24b,_0x34a9f1:0x309,_0x2ef5b7:0x301,_0x2e5605:0x24b},_0x1037d5=_0x170ec5;if(_0xac9a7d instanceof FunctionalExpression){this['checkCall'](_0xac9a7d[_0x1037d5(0x1d6)],_0xac9a7d[_0x1037d5(0x306)],_0xac9a7d);for(const _0x18fafd of _0xac9a7d[_0x1037d5(_0x3fc907._0x5e0814)])this[_0x1037d5(_0x3fc907._0xc39b52)](_0x18fafd);return;}if(_0xac9a7d instanceof MemberCallExpression){this[_0x1037d5(_0x3fc907._0x2b084f)](_0xac9a7d['receiver']),this['checkCall'](_0xac9a7d[_0x1037d5(_0x3fc907._0x22d1d4)],_0xac9a7d[_0x1037d5(_0x3fc907._0x5e0814)],_0xac9a7d);for(const _0x4ba33d of _0xac9a7d[_0x1037d5(0x306)])this[_0x1037d5(_0x3fc907._0x34705a)](_0x4ba33d);return;}if(_0xac9a7d instanceof PropertyAccessExpression){this['visitExpression'](_0xac9a7d[_0x1037d5(0x23a)]);return;}if(_0xac9a7d instanceof RegExpExpression){this[_0x1037d5(_0x3fc907._0x34a9f1)](_0xac9a7d);return;}if(_0xac9a7d instanceof ValueExpression){this[_0x1037d5(0x2d8)](_0xac9a7d);return;}if(_0xac9a7d instanceof ObjectExpression){for(const _0xf43550 of _0xac9a7d[_0x1037d5(0x293)][_0x1037d5(_0x3fc907._0x2ef5b7)]())this[_0x1037d5(_0x3fc907._0x2e5605)](_0xf43550);return;}}[_0x170ec5(0x1f4)](_0x207c8b,_0x9f8d7c,_0x5f3ee9){var _0x257da1={_0x21d3f0:0x2ce,_0x5e4853:0x268,_0x26d6a9:0x205},_0x572f95=_0x170ec5;if(_0x207c8b===_0x572f95(0x232))this['ruleSelectorQuality'](_0x9f8d7c,_0x5f3ee9);if(_0x207c8b===_0x572f95(_0x257da1._0x21d3f0))this[_0x572f95(0x1fc)](_0x5f3ee9);if(_0x207c8b==='first'||_0x207c8b===_0x572f95(0x2f9)||_0x207c8b===_0x572f95(_0x257da1._0x5e4853))this['ruleDisambigByIndex'](_0x207c8b,_0x5f3ee9);if(_0x207c8b===_0x572f95(_0x257da1._0x26d6a9)||_0x207c8b===_0x572f95(0x239))this['ruleEvaluateDiscouraged'](_0x207c8b,_0x5f3ee9);if(_0x207c8b===_0x572f95(0x28f))this['ruleGotoConcat'](_0x9f8d7c,_0x5f3ee9);}[_0x170ec5(0x262)](_0x6919a2,_0xd02d30){var _0x8f8bd3={_0x2f6f26:0x277,_0x2b09df:0x210,_0x287a70:0x2e2,_0x399bbd:0x2fb,_0x469617:0x1d6},_0x1e995b=_0x170ec5;const _0x9d2bce=_0x6919a2[0x0];if(!(_0x9d2bce instanceof BinaryExpression)||_0x9d2bce[_0x1e995b(_0x8f8bd3._0x2f6f26)]!=='+')return;const _0x2b9c29=_0x9d2bce[_0x1e995b(_0x8f8bd3._0x2b09df)];if(!(_0x2b9c29 instanceof VariableExpression)||!/URL$/['test'](_0x2b9c29[_0x1e995b(0x1d6)]))return;const {line:_0x227f3c,col:_0x4c3b2f}=locOf(_0xd02d30);this[_0x1e995b(_0x8f8bd3._0x287a70)](_0x1e995b(0x24f),'warning',_0x1e995b(_0x8f8bd3._0x399bbd)+_0x2b9c29[_0x1e995b(_0x8f8bd3._0x469617)]+_0x1e995b(0x226)+_0x2b9c29['name']+'\x20feeds\x20Playwright\x27s\x20baseURL,\x20so\x20pass\x20a\x20relative\x20path\x20instead\x20—\x20write\x20goto(\x27/path\x27).\x20Tests\x20then\x20follow\x20--env\x20without\x20edits.',_0x227f3c,_0x4c3b2f);}[_0x170ec5(0x2d8)](_0x18f357){var _0xb960cb={_0xe0f08c:0x200,_0x4ad599:0x2e2,_0x1b080f:0x255},_0xf0470e=_0x170ec5;const _0x24d3de=_0x18f357[_0xf0470e(_0xb960cb._0xe0f08c)];if(!(_0x24d3de instanceof StringValue))return;const _0x184f16=_0x24d3de[_0xf0470e(0x2e0)](),_0x3142a7=/\{\{\s*([A-Za-z_][A-Za-z0-9_]*)\s*\}\}/[_0xf0470e(0x30b)](_0x184f16);if(!_0x3142a7)return;const {line:_0x5bc87e,col:_0x40bde7}=locOf(_0x18f357);this[_0xf0470e(_0xb960cb._0x4ad599)](_0xf0470e(0x2c5),_0xf0470e(_0xb960cb._0x1b080f),'\x22'+_0x184f16+_0xf0470e(0x2ec)+_0x3142a7[0x1]+'\x20(no\x20quotes,\x20no\x20braces),\x20which\x20the\x20runtime\x20resolves\x20from\x20.env/.secrets.\x20The\x20{{NAME}}\x20form\x20is\x20only\x20for\x20explore_step\x20values.',_0x5bc87e,_0x40bde7);}[_0x170ec5(0x249)](_0xdd504a,_0x47c0f8){var _0x683059={_0x207548:0x248,_0x3a8bd2:0x27e,_0x361c11:0x2fa,_0xcd4f63:0x1c6,_0xa109c4:0x2e2,_0x2e876d:0x29b,_0x2624cb:0x281,_0x2c500b:0x2e5},_0x291603=_0x170ec5;const _0x1b028d=_0xdd504a[0x0];if(!(_0x1b028d instanceof ValueExpression))return;const _0x104a62=_0x1b028d[_0x291603(0x200)];if(!(_0x104a62 instanceof StringValue))return;const _0x7b8b24=_0x104a62[_0x291603(0x2e0)](),{line:_0x4fa5c1,col:_0x25b50a}=locOf(_0x47c0f8);if(_0x7b8b24[_0x291603(0x22c)]('//')||_0x7b8b24['startsWith'](_0x291603(_0x683059._0x207548))){this[_0x291603(0x2e2)]('lint:xpath',_0x291603(_0x683059._0x3a8bd2),_0x291603(_0x683059._0x361c11),_0x4fa5c1,_0x25b50a);return;}const _0x2740ff=(_0x7b8b24[_0x291603(0x2cb)](/[ >+~]+/g)??[])[_0x291603(_0x683059._0xcd4f63)];_0x2740ff>=0x3&&/[.#]/[_0x291603(0x207)](_0x7b8b24)&&this[_0x291603(_0x683059._0xa109c4)](_0x291603(0x2c1),'warning',_0x291603(_0x683059._0x2e876d)+_0x2740ff+'\x20combinators).\x20Prefer\x20getByRole\x20/\x20getByTestId\x20/\x20getByText.',_0x4fa5c1,_0x25b50a),hasObfuscatedClass(_0x7b8b24)&&this[_0x291603(_0x683059._0xa109c4)](_0x291603(_0x683059._0x2624cb),'warning',_0x291603(_0x683059._0x2c500b),_0x4fa5c1,_0x25b50a);}[_0x170ec5(0x1fc)](_0x5d109e){var _0x34dc0b={_0x274118:0x27e,_0x3acf6a:0x220},_0xe7dab=_0x170ec5;const {line:_0x5e5ed0,col:_0xc126b7}=locOf(_0x5d109e);this[_0xe7dab(0x2e2)]('lint:pause-explicit',_0xe7dab(_0x34dc0b._0x274118),_0xe7dab(_0x34dc0b._0x3acf6a),_0x5e5ed0,_0xc126b7);}[_0x170ec5(0x22f)](_0x3f51ac,_0x31553b){var _0x45b601={_0x405221:0x2c7,_0x11aaa8:0x2f5},_0x796f46=_0x170ec5;if(this[_0x796f46(0x26a)]['allowDisambigByIndex'])return;const {line:_0x1cdcb4,col:_0x40f2c5}=locOf(_0x31553b);this['emit']('lint:disambig-by-index',_0x796f46(_0x45b601._0x405221),_0x796f46(_0x45b601._0x11aaa8)+_0x3f51ac+'())\x20—\x20consider\x20getByRole({name})\x20/\x20getByTestId\x20for\x20stability',_0x1cdcb4,_0x40f2c5);}['ruleEvaluateDiscouraged'](_0x378e18,_0x47d762){var _0x30d496=_0x170ec5;const {line:_0x461a5b,col:_0x17b3dd}=locOf(_0x47d762);this['emit'](_0x30d496(0x2e9),'warning',_0x378e18+'()\x20is\x20a\x20last-resort\x20escape\x20hatch.\x20Consider\x20typed\x20getters:\x20getAttribute\x20/\x20getInnerText\x20/\x20getInputValue\x20/\x20getTitle\x20/\x20getUrl.',_0x461a5b,_0x17b3dd);}[_0x170ec5(0x309)](_0x2884e5){var _0x49bcce={_0x5aeb6f:0x1e8,_0x7f03c7:0x255,_0x327c4e:0x261},_0x6d72f3=_0x170ec5;const {line:_0x2b7c14,col:_0x683ba2}=locOf(_0x2884e5);try{new RegExp(_0x2884e5['source']);}catch(_0x80cc7d){this[_0x6d72f3(0x2e2)](_0x6d72f3(_0x49bcce._0x5aeb6f),_0x6d72f3(_0x49bcce._0x7f03c7),_0x6d72f3(0x283)+_0x2884e5['source']+_0x6d72f3(_0x49bcce._0x327c4e)+(_0x80cc7d instanceof Error?_0x80cc7d['message']:String(_0x80cc7d)),_0x2b7c14,_0x683ba2);}}['emit'](_0x55337d,_0x117819,_0x3fe65e,_0x111cce,_0x7aa95f){var _0x27f1b6={_0x5cc779:0x259,_0x2e3cbf:0x245},_0x931df9=_0x170ec5;const _0xaff2c4=this['opts'][_0x931df9(_0x27f1b6._0x5cc779)]?.[_0x55337d]??_0x117819;this[_0x931df9(_0x27f1b6._0x2e3cbf)][_0x931df9(0x2f8)]({'rule':_0x55337d,'severity':_0xaff2c4,'message':_0x3fe65e,'line':_0x111cce,'col':_0x7aa95f});}};function locOf(_0x451ee8){var _0x42165a={_0x442902:0x273,_0x38c008:0x29f},_0x13c154=_0x170ec5;const _0x18b419=_0x451ee8[_0x13c154(_0x42165a._0x442902)];return{'line':_0x18b419?.[_0x13c154(_0x42165a._0x38c008)]?.()??0x0,'col':_0x18b419?.[_0x13c154(0x26b)]?.()??0x0};}__name(locOf,'locOf');function hasObfuscatedClass(_0x291426){var _0x43f0cf={_0x449bf8:0x2d4,_0x5e18a1:0x1c6,_0x432c8b:0x207},_0xf8cd0e=_0x170ec5;const _0x3cf377=_0x291426['match'](/[._-][A-Za-z0-9_+/-]+/g)??[];for(const _0x3f9523 of _0x3cf377){const _0x33bf21=_0x3f9523[_0xf8cd0e(_0x43f0cf._0x449bf8)](0x1)[_0xf8cd0e(0x2aa)](/[-_]+/);for(const _0x1d5304 of _0x33bf21){if(_0x1d5304[_0xf8cd0e(_0x43f0cf._0x5e18a1)]<0x6)continue;const _0x22cc4b=/[0-9]/['test'](_0x1d5304),_0x3dd161=/[a-z]/[_0xf8cd0e(_0x43f0cf._0x432c8b)](_0x1d5304),_0x269f1f=/[A-Z]/[_0xf8cd0e(_0x43f0cf._0x432c8b)](_0x1d5304);if(_0x22cc4b&&_0x3dd161&&_0x269f1f)return!![];}}return![];}__name(hasObfuscatedClass,_0x170ec5(0x296));function validateSource(_0x4abd25,_0x4a7c67={}){var _0x4ea88b={_0x5aa8e1:0x1d4,_0x322dab:0x1d3,_0x2a563c:0x25a,_0x4d5cb1:0x2a8,_0x548ad1:0x27e,_0x24fa4d:0x255,_0x374655:0x2f8,_0x7cfd85:0x276,_0xd384c1:0x2c6},_0x106d75=_0x170ec5;const {ruleSeverity:ruleSeverity={},suppressed:_0x223da4,helperNames:_0x4e553d,isWrapped:isWrapped=![]}=_0x4a7c67;let _0x3ebe50;try{_0x3ebe50=new Parser(new Lexer(_0x4abd25)[_0x106d75(0x307)]())[_0x106d75(_0x4ea88b._0x5aa8e1)]();}catch(_0x36549a){return[{'severity':_0x106d75(0x255),'source':'parse','rule':_0x106d75(0x1d4),'line':_0x36549a instanceof ParseError?_0x36549a[_0x106d75(0x290)]:0x1,'column':_0x36549a instanceof ParseError?_0x36549a[_0x106d75(0x1f0)]:0x1,'message':_0x36549a instanceof Error?_0x36549a[_0x106d75(0x2c6)]:String(_0x36549a)}];}const _0x41dd2b=[];for(const _0x219fd0 of lintAst(_0x3ebe50,{'ruleSeverity':ruleSeverity})){if(_0x223da4?.[_0x106d75(_0x4ea88b._0x322dab)](_0x219fd0[_0x106d75(0x2a8)]))continue;_0x41dd2b[_0x106d75(0x2f8)]({'severity':_0x219fd0[_0x106d75(0x270)],'source':_0x106d75(0x29c),'rule':_0x219fd0['rule'],'line':_0x219fd0[_0x106d75(0x290)],'column':_0x219fd0[_0x106d75(0x287)],'message':_0x219fd0[_0x106d75(0x2c6)]});}const _0x49ba06=createWebDslRegistry(_0x4e553d);for(const _0x5e5c62 of validateDsl(_0x3ebe50,_0x4abd25,isWrapped,_0x49ba06)){const _0x23fd03=_0x106d75(_0x4ea88b._0x2a563c)+_0x5e5c62[_0x106d75(_0x4ea88b._0x4d5cb1)];if(_0x223da4?.['has'](_0x23fd03))continue;const _0x49b99b=ruleSeverity[_0x23fd03]??(_0x5e5c62[_0x106d75(0x270)]===_0x106d75(_0x4ea88b._0x548ad1)?_0x106d75(0x27e):_0x106d75(_0x4ea88b._0x24fa4d));_0x41dd2b[_0x106d75(_0x4ea88b._0x374655)]({'severity':_0x49b99b,'source':_0x106d75(_0x4ea88b._0x7cfd85),'rule':_0x23fd03,'line':_0x5e5c62[_0x106d75(0x290)]??0x0,'column':_0x5e5c62['column']??0x0,'message':_0x5e5c62[_0x106d75(_0x4ea88b._0xd384c1)]});}return _0x41dd2b[_0x106d75(0x278)]((_0x1ae853,_0x141945)=>_0x1ae853[_0x106d75(0x290)]-_0x141945[_0x106d75(0x290)]||_0x1ae853[_0x106d75(0x1f0)]-_0x141945[_0x106d75(0x1f0)]),_0x41dd2b;}function _0x19d9(_0xbb07aa,_0xb36fd4){_0xbb07aa=_0xbb07aa-0x1c6;var _0x27a6e3=_0x27a6();var _0x19d9b4=_0x27a6e3[_0xbb07aa];if(_0x19d9['pEsrlK']===undefined){var _0x300586=function(_0x47be41){var _0x32e5a1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x51e806='',_0x1c9d2a='';for(var _0x22983f=0x0,_0x5f0920,_0x1ebd4a,_0x4a5597=0x0;_0x1ebd4a=_0x47be41['charAt'](_0x4a5597++);~_0x1ebd4a&&(_0x5f0920=_0x22983f%0x4?_0x5f0920*0x40+_0x1ebd4a:_0x1ebd4a,_0x22983f++%0x4)?_0x51e806+=String['fromCharCode'](0xff&_0x5f0920>>(-0x2*_0x22983f&0x6)):0x0){_0x1ebd4a=_0x32e5a1['indexOf'](_0x1ebd4a);}for(var _0x159726=0x0,_0x3e2d36=_0x51e806['length'];_0x159726<_0x3e2d36;_0x159726++){_0x1c9d2a+='%'+('00'+_0x51e806['charCodeAt'](_0x159726)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1c9d2a);};_0x19d9['iDbpXU']=_0x300586,_0x19d9['JnLlQv']={},_0x19d9['pEsrlK']=!![];}var _0x36bc6d=_0x27a6e3[0x0],_0x557a62=_0xbb07aa+_0x36bc6d,_0x16d3cd=_0x19d9['JnLlQv'][_0x557a62];return!_0x16d3cd?(_0x19d9b4=_0x19d9['iDbpXU'](_0x19d9b4),_0x19d9['JnLlQv'][_0x557a62]=_0x19d9b4):_0x19d9b4=_0x16d3cd,_0x19d9b4;}__name(validateSource,_0x170ec5(0x1f5));var ENTRIES=[{'sig':_0x170ec5(0x206),'desc':_0x170ec5(0x1f1)},{'sig':_0x170ec5(0x208),'desc':_0x170ec5(0x251)},{'sig':_0x170ec5(0x2d7),'desc':_0x170ec5(0x22d)},{'sig':'goForward({\x20timeout?\x20})','desc':_0x170ec5(0x2b9)},{'sig':_0x170ec5(0x22a),'desc':'Wait\x20until\x20the\x20URL\x20contains\x20`pattern`\x20(substring\x20match).'},{'sig':_0x170ec5(0x221),'desc':'Wait\x20for\x20the\x20next\x20navigation\x20event.'},{'sig':_0x170ec5(0x2ee),'desc':_0x170ec5(0x292)},{'sig':_0x170ec5(0x1d8),'desc':'Wait\x20until\x20`text`\x20appears\x20anywhere\x20on\x20the\x20page.'},{'sig':_0x170ec5(0x20e),'desc':_0x170ec5(0x21c)},{'sig':_0x170ec5(0x235),'desc':_0x170ec5(0x1d2)},{'sig':_0x170ec5(0x2ba),'desc':'Match\x20by\x20ARIA\x20role\x20+\x20accessible\x20name.\x20`name`\x20accepts\x20a\x20string\x20or\x20`/regex/`.'},{'sig':_0x170ec5(0x203),'desc':_0x170ec5(0x2f1)},{'sig':'getByText(text,\x20{\x20exact?\x20})','desc':'Match\x20by\x20visible\x20text\x20content.'},{'sig':_0x170ec5(0x218),'desc':_0x170ec5(0x229)},{'sig':_0x170ec5(0x202),'desc':'Match\x20an\x20image\x20by\x20its\x20`alt`\x20text.'},{'sig':_0x170ec5(0x295),'desc':_0x170ec5(0x267)},{'sig':_0x170ec5(0x25c),'desc':'Match\x20by\x20raw\x20CSS\x20selector.\x20Last\x20resort\x20—\x20the\x20linter\x20warns\x20on\x20deep/brittle\x20CSS.'},{'sig':'filter(locator,\x20{\x20hasText?,\x20hasNotText?,\x20has?,\x20hasNot?\x20})','desc':'Keep\x20matches\x20by\x20contained\x20text\x20or\x20a\x20nested\x20child\x20locator.'},{'sig':_0x170ec5(0x21e),'desc':'First\x20match.'},{'sig':_0x170ec5(0x269),'desc':_0x170ec5(0x1f8)},{'sig':'nth(locator,\x20index)','desc':_0x170ec5(0x2b3)},{'sig':'contentFrame(locator)','desc':_0x170ec5(0x2ab)},{'sig':_0x170ec5(0x288),'desc':'Click\x20an\x20element.'},{'sig':_0x170ec5(0x2e8),'desc':_0x170ec5(0x2dc)},{'sig':_0x170ec5(0x237),'desc':_0x170ec5(0x289)},{'sig':_0x170ec5(0x247),'desc':_0x170ec5(0x1c8)},{'sig':_0x170ec5(0x2cf),'desc':_0x170ec5(0x1ee)},{'sig':_0x170ec5(0x2d1),'desc':_0x170ec5(0x209)},{'sig':_0x170ec5(0x241),'desc':_0x170ec5(0x1cc)},{'sig':_0x170ec5(0x1ff),'desc':_0x170ec5(0x23d)},{'sig':_0x170ec5(0x20d),'desc':'Scroll\x20an\x20element\x20into\x20the\x20viewport.'},{'sig':_0x170ec5(0x2be),'desc':_0x170ec5(0x246)},{'sig':_0x170ec5(0x21d),'desc':_0x170ec5(0x2c0)},{'sig':_0x170ec5(0x234),'desc':_0x170ec5(0x2e1)},{'sig':_0x170ec5(0x2b7),'desc':_0x170ec5(0x212)},{'sig':'assertVisible(locator,\x20{\x20timeout?\x20})','desc':_0x170ec5(0x214)},{'sig':_0x170ec5(0x236),'desc':_0x170ec5(0x26e)},{'sig':_0x170ec5(0x252),'desc':_0x170ec5(0x27b)},{'sig':_0x170ec5(0x2d3),'desc':_0x170ec5(0x250)},{'sig':_0x170ec5(0x2df),'desc':_0x170ec5(0x240)},{'sig':_0x170ec5(0x30a),'desc':_0x170ec5(0x282)},{'sig':_0x170ec5(0x266),'desc':'Number\x20of\x20matching\x20elements.'},{'sig':_0x170ec5(0x1e9),'desc':_0x170ec5(0x297)},{'sig':_0x170ec5(0x2c4),'desc':_0x170ec5(0x2f0)},{'sig':'isVisible(locator)\x20→\x20boolean','desc':_0x170ec5(0x1f6)},{'sig':_0x170ec5(0x213),'desc':'Attribute\x20value\x20(\x22\x22\x20if\x20missing).'},{'sig':_0x170ec5(0x1e1),'desc':_0x170ec5(0x1ca)},{'sig':_0x170ec5(0x24c),'desc':_0x170ec5(0x25b)},{'sig':_0x170ec5(0x299),'desc':_0x170ec5(0x2b5)},{'sig':_0x170ec5(0x1d5),'desc':_0x170ec5(0x2c8)},{'sig':_0x170ec5(0x2bf),'desc':_0x170ec5(0x2ef)},{'sig':_0x170ec5(0x28a),'desc':_0x170ec5(0x2a3)},{'sig':_0x170ec5(0x225),'desc':_0x170ec5(0x217)},{'sig':'getCookie(name)\x20→\x20string','desc':_0x170ec5(0x26f)},{'sig':_0x170ec5(0x2eb),'desc':'Switch\x20the\x20active\x20tab/page\x20by\x20index\x20(0-based).'},{'sig':'enterFrame(locator)','desc':_0x170ec5(0x279)},{'sig':_0x170ec5(0x24d),'desc':_0x170ec5(0x2b8)},{'sig':_0x170ec5(0x2f7),'desc':_0x170ec5(0x204)},{'sig':'dbExec(sql,\x20...params)\x20→\x20number','desc':_0x170ec5(0x2ac)},{'sig':'apiCall(method,\x20path,\x20body?,\x20headers?)\x20→\x20{\x20status,\x20body,\x20headers\x20}','desc':_0x170ec5(0x29e)},{'sig':_0x170ec5(0x2da),'desc':_0x170ec5(0x23e)},{'sig':_0x170ec5(0x222),'desc':_0x170ec5(0x26d)},{'sig':_0x170ec5(0x2e6),'desc':_0x170ec5(0x275)},{'sig':_0x170ec5(0x2a0),'desc':_0x170ec5(0x1d0)}];function nameOf(_0x1f4bdf){var _0x95c491={_0x2d32e5:0x30b},_0x2f5151=_0x170ec5;const _0x512392=/^([A-Za-z_][A-Za-z0-9_]*)/[_0x2f5151(_0x95c491._0x2d32e5)](_0x1f4bdf);return _0x512392?_0x512392[0x1]:_0x1f4bdf;}__name(nameOf,_0x170ec5(0x1de));var VOCAB_DOCS=new Map(ENTRIES[_0x170ec5(0x308)](_0x3855cf=>[nameOf(_0x3855cf['sig']),{'signature':_0x3855cf[_0x170ec5(0x21a)],'doc':_0x3855cf['desc']}])),GROUPS=[[_0x170ec5(0x2d2),ACTION_CONTRACTS],[_0x170ec5(0x2f6),ASSERTION_CONTRACTS],[_0x170ec5(0x1ea),CHAIN_CONTRACTS],[_0x170ec5(0x215),ESCAPE_HATCH_CONTRACTS],['multi-context',MULTI_CONTEXT_CONTRACTS],[_0x170ec5(0x219),NAVIGATION_CONTRACTS],[_0x170ec5(0x2ca),READ_CONTRACTS],['sandbox',SANDBOX_CONTRACTS],['selector',SELECTOR_CONTRACTS],['state',STATE_CONTRACTS],[_0x170ec5(0x2a4),STORAGE_CONTRACTS],[_0x170ec5(0x1dd),WAIT_CONTRACTS]],KEYWORDS=[{'name':_0x170ec5(0x242),'category':_0x170ec5(0x201),'args':[{'label':'label','kind':_0x170ec5(0x1ed),'required':!![]}],'returns':'void','insertText':_0x170ec5(0x2fc),'doc':'Group\x20steps\x20under\x20a\x20labelled\x20block\x20(required\x20for\x20direct\x20children\x20of\x20test_*).'},{'name':'if','category':_0x170ec5(0x201),'args':[{'label':_0x170ec5(0x253),'kind':_0x170ec5(0x1da),'required':!![]}],'returns':_0x170ec5(0x1e3),'insertText':_0x170ec5(0x265)},{'name':_0x170ec5(0x2e4),'category':_0x170ec5(0x201),'args':[],'returns':_0x170ec5(0x1e3),'insertText':_0x170ec5(0x286)},{'name':_0x170ec5(0x22e),'category':_0x170ec5(0x201),'args':[{'label':_0x170ec5(0x253),'kind':_0x170ec5(0x1da),'required':!![]}],'returns':_0x170ec5(0x1e3),'insertText':'while\x20(${1:condition})\x20{\x0a\x09$0\x0a}'}];function kindLabel(_0x4f514d){var _0x5a013a=_0x170ec5;return typeof _0x4f514d===_0x5a013a(0x1ed)?_0x4f514d:_0x5a013a(0x291);}__name(kindLabel,_0x170ec5(0x2d6));function toArg(_0x1c9927){var _0x44054b={_0x2fba90:0x2de},_0x56b1d9=_0x170ec5;return{'label':_0x1c9927[_0x56b1d9(0x2c3)],'kind':kindLabel(_0x1c9927[_0x56b1d9(_0x44054b._0x2fba90)]),'required':_0x1c9927[_0x56b1d9(0x1df)]};}__name(toArg,_0x170ec5(0x23b));function returnsLabel(_0x2c1557){var _0x10784f={_0x1729a6:0x2f3},_0x3681ee=_0x170ec5;return _0x2c1557[_0x3681ee(0x1db)][_0x3681ee(_0x10784f._0x1729a6)]==='fixed'?_0x2c1557[_0x3681ee(0x1db)]['kind']:'unknown';}__name(returnsLabel,'returnsLabel');function insertText(_0x2d4d9d){var _0x13b092={_0xe3bdaa:0x1c6,_0x200084:0x1e5,_0x33e419:0x308,_0x48f7a5:0x1d6},_0x149599=_0x170ec5;const _0x3493c1=_0x2d4d9d[_0x149599(0x2a2)][_0x149599(0x298)][_0x149599(0x2af)](_0x631d66=>_0x631d66[_0x149599(0x1df)]);if(_0x3493c1[_0x149599(_0x13b092._0xe3bdaa)]===0x0)return _0x2d4d9d['name']+_0x149599(_0x13b092._0x200084);const _0x5a356a=_0x3493c1[_0x149599(_0x13b092._0x33e419)]((_0x5917fb,_0x3d611b)=>'${'+(_0x3d611b+0x1)+':'+_0x5917fb[_0x149599(0x2c3)]+'}')[_0x149599(0x1cd)](',\x20');return _0x2d4d9d[_0x149599(_0x13b092._0x48f7a5)]+'('+_0x5a356a+')';}__name(insertText,_0x170ec5(0x211));function toEntry(_0x31f0eb,_0x46930d){var _0x5eb401={_0x23810f:0x274,_0x8df722:0x304},_0x2f0de2=_0x170ec5;const _0x2971b9=VOCAB_DOCS[_0x2f0de2(_0x5eb401._0x23810f)](_0x46930d['name']);return{'name':_0x46930d[_0x2f0de2(0x1d6)],'category':_0x31f0eb,'args':_0x46930d['signature']['args']['map'](toArg),'returns':returnsLabel(_0x46930d),'insertText':insertText(_0x46930d),'signature':_0x2971b9?.[_0x2f0de2(0x2a2)],'doc':_0x2971b9?.[_0x2f0de2(_0x5eb401._0x8df722)],'locatorCapability':_0x46930d['locatorCapability']};}__name(toEntry,_0x170ec5(0x2a9));function _0x27a6(){var _0x250b33=['z2v0qNLuAxrSzq','BgLUDdPVyMz1C2nHDgvKlwnSyxnZ','qxnZzxj0igeGyM9VBgvHBIbJB25KAxrPB24U','Aw52ywXPzcbYzwDLEcaV','C3vWChjLC3nLza','z2v0q29VA2LL','zM9YicGKEZe6Aw5PDh07icr7mJPJB25KAxrPB259oYaKEZm6C3rLCh0PihSkcsqWcN0','y29S','y2XPy2SOBg9JyxrVCIWGEYbMB3jJzt8SihrPBwvVDxq/lcbUB1DHAxrbzNrLCJ8GFsK','q2XLyxiGyw5Kihr5CguGysb2ywX1zsbPBNrVigfUigLUChv0lG','z2v0tg9JywXtDg9YywDLkgTLEsKG4OAsihn0CMLUzW','Dgv4DenVBNrLBNq','DMLZAxrcBg9JAW','DgvZDf8','z2v0qxr0CMLIDxrL','z290BW','BgLUzq','zw51Bq','v2fPDcbMB3iGyw4GzwXLBwvUDcbZDgf0ztOGj2f0DgfJAgvKjYb8icD2AxnPyMXLjYb8icDOAwrKzw4NlG','ChjVCgvYDgLLCW','CMvZB2X2zunVBNrYywn0','z2v0qNLuAxrSzsH0zxH0lcb7igv4ywn0pYb9kq','AgfZt2jMDxnJyxrLzenSyxnZ','vgv4DcbJB250zw50icGIiIbPzIbUB25Lks4','yxjNCW','z2v0vgL0BguOksdIHPiGC3rYAw5N','CMvSB2fK','yNjPDhrSzsbZzwXLy3rVCIdIGjqGzgvLCcbdu1mGy2HHAw4Gka','BgLUDa','zMXVD18','sfruucbJywXSlIbGCgf0AgaGAxmGCMvSyxrPDMuG4OcuigjHC2uGAxmGDgHLignVBMzPzYbGyxbPqMfZzvvYBgaU','z2v0tgLUzq','zxzHBhvHDguOANmSic4UlMfYz3mPiokgKIbHBNK','yMXVy2S','C2LNBMf0DxjL','uMvHzcbHigXVy2fSu3rVCMfNzsbPDgvTicGIiIbPzIbTAxnZAw5Nks4','C3rVCMfNzq','C2vSzwn0t3b0Aw9U','revmrvrf','Aw5WDxq','CNvSzq','Dg9fBNrYEq','C3bSAxq','uMvZB2X2zsbHBIbGpgLMCMfTzt5GigvSzw1LBNqGDg8GAxrZignVBNrLBNqGzNjHBwuU','ugfYyw1LDgvYAxPLzcbjtLnfuLqVvvbeqvrfl0rftevurs4GuMv0DxjUCYbHzMzLy3rLzcbYB3CGy291BNqU','Dw5JAgvJAW','zgjrDwvYEq','zMLSDgvY','ChjLC3m','yM9KEq','mtK0odi1n1rvtuHJqq','vgHLie4TDgGGBwf0y2GGkdaTAw5KzxHLzcKUieLUzgv4lw9UBhKGCMvMAw5LBwvUDcbPCYbMCMfNAwXLicHSAw50zxiGAw5MBYKU','z2v0tg9JywXtDg9YywDL','rg9JDw1LBNqGDgL0BguGB2yGDgHLigfJDgL2zsbWywDLlG','BM9Uzq','yxnZzxj0vgv4DcHSB2nHDg9YlcbLEhbLy3rLzcWGEYbLEgfJDd8SihrPBwvVDxq/ih0P','rxHPDcb0AguGAw5UzxjTB3n0igLMCMfTzsbZy29Wzs4','tMf2AwDHDguGzM9YD2fYzcbPBIbOAxn0B3j5lG','z2v0qNLsB2XLkhjVBguSihSGBMfTzt8Sigv4ywn0pYb9kq','D2fPDezVCK5HDMLNyxrPB24','A2v5','t1busu9ouW','zhjHz0fUzerYB3aOzNjVBsWGDg8SihSGzM9Yy2u/lcb0Aw1LB3v0pYb9kq','C2v0tg9JywXtDg9YywDLkgTLEsWGDMfSDwuP','u2v0igzPBgvZig9UigeGzMLSzsbPBNb1Dc4GygzPBgvZycbPCYbHihbHDgGGB3iGCgf0AfTDlG','BgLUDdPKzwvWlwnZCW','AgvSCgvYq29UDhjHy3q','BgfIzwW','Aw5WDxrwywX1zsHSB2nHDg9YksdIHPiGC3rYAw5N','BgLUDdPTDxn0ywnOzs1PBI1KC2W','BwvZC2fNzq','Aw5MBW','vvjmig9MihrOzsbHy3rPDMuGCgfNzs4','C3rYAw5NtgLRzq','CMvHza','Bwf0y2G','D2fPDezVCG','mJzXDKX0yxe','Cgf1C2u','y2HLy2SOBg9JyxrVCIWGEYbMB3jJzt8SihrPBwvVDxq/ih0P','mJyXtNfvzMHb','Dw5JAgvJAYHSB2nHDg9Ylcb7igzVCMnLpYWGDgLTzw91Dd8GFsK','ywn0Aw9U','yxnZzxj0q291BNqOBg9JyxrVCIWGzxHWzwn0zwqSihSGDgLTzw91Dd8GFsK','C2XPy2u','nZuWmdbOCKT0Evu','A2LUzeXHyMvS','z29cywnRkhSGDgLTzw91Dd8GFsK','CNvSzu11C3rHy2HLsw5eC2W','C3rHDgvTzw50CW','C2HLBgWOy21KlcaUlI5HCMDZksdIHPiGEYbZDgrVDxqSihn0zgvYCIWGy29Kzsb9','DxbSB2fKrMLSzq','rg91yMXLlwnSAwnRigfUigvSzw1LBNqU','yNvPBgreC2XwB2nHyG','A2LUza','yxnZzxj0vxjSkhbHDhrLCM4SihSGDgLTzw91Dd8GFsK','yxntDhjPBMC','ugfZDguGDgv4Dc4Gu3LUDgHLDgLJlcbUB3qGysbUyxrPDMuGq2XPCgjVyxjKrxzLBNqU','zw1PDa','zML4zwq','zM9Y','C2vSzwn0B3iGy29UDgfPBNmGyw4GB2jMDxnJyxrLzcbJBgfZCYbUyw1LicHdu1mTBw9KDwXLCYaVifrHAwX3Aw5KigHHC2GPiokaLcbMCMfNAwXLigfJCM9ZCYbYzwj1AwXKCY4GuhjLzMvYigDLDej5uM9SzsaVigDLDej5vgvZDeLKlG','Bg9Nkc4UlMfYz3mP','C2v0','zg91yMXLq2XPy2SOBg9JyxrVCIWGEYbMB3jJzt8SihrPBwvVDxq/ih0P','BgLUDdPLDMfSDwf0zs1KAxnJB3vYywDLza','y2HHAw5HyMXLtg9JyxrVCG','C2v0ugfNzsHPBMrLEcK','iIb1C2vZihT7lI4UFx0GDgvTCgXHDguGC3LUDgf4lIbjBIbHihnJzw5HCMLVlcbYzwzLCMvUy2uGysb2yxjPywjSzsbIEsbPDhmGyMfYzsbPzgvUDgLMAwvYiokaLcb3CML0zsa','Bg9JyxrVCKXPA2u','D2fPDezVCIHSB2nHDg9Ylcb7ihn0yxrLpYWGDgLTzw91Dd8GFsK','u2v0igeGBg9JywXtDg9YywDLigL0zw0U','q3vYCMvUDcbPBNb1Dcb2ywX1zs4','twf0y2GGysbMB3jTignVBNrYB2WGyNKGAxrZigfZC29JAwf0zwqGBgfIzwWU','zw50zxjgCMfTzq','Bw9Kzq','DgvZDf8Q','zgLZyw1IAwD1yxrPB24GyNKGAw5KzxGGka','yxnZzxj0Aw9U','zgjrDwvYEsHZCwWSic4UlNbHCMfTCYKG4OAsihjVD3nBxq','ChvZAa','BgfZDa','EhbHDgGGC2vSzwn0B3jZigfYzsbMCMfNAwXLiokaLcbWCMvMzxiGz2v0qNLsB2XLic8Gz2v0qNLuzxn0swqGlYbNzxrcEvrLEhq','z290BYG','C3rLCcGKEZe6iMXHyMvSiN0SicGPid0+ihSkcsqWcN0P','mJCZmZf5Ew9MANe','zMLYC3q','Aw5KzxHpCLrPDgXL','C2vSzwn0B3i','DMfSDwvZ','z29gB3j3yxjK','yxnZzxj0vMLZAwjSzq','zg9J','yxnZzxj0sgLKzgvU','yxjNDw1LBNrZ','Dg9Rzw5PEMu','BwfW','CNvSzvjLz2v4ugf0DgvYBG','yxnZzxj0vhj1zsHJB25KAxrPB24Sig1LC3nHz2u/kq','zxHLyW','BgvUz3rO','Aw5Mzxjszxr1CM5lAw5K','uhjLC3mGysbRzxKGkguUzY4Gj0vUDgvYjYWGj0nVBNrYB2WRqsCPlG','ue9tva','uMvUzgvYzwqGAw5UzxiGDgv4Dc4','zxHPDezYyw1L','sg92zxiGB3zLCIbHBIbLBgvTzw50lG','AM9PBG','B3b0Aw9UCW','Cgf0Aa','uNvUihjHDYbkuYbPBIb0AguGCgfNzsbJB250zxH0lIbmyxn0ihjLC29YDcdIGjqGChjLzMvYihr5CgvKigHLBhbLCNmUifjLDhvYBNmGsLnptI1ZzxjPywXPEMfIBguGDMfSDwvZig9UBhKU','CM9Szq','twf0y2GGyNKGygrHDgeTDgvZDgLKyc4Gtw9ZDcbZDgfIBguG4OcuihbYzwzLCIb0AgLZlG','AgfZ','CgfYC2u','z2v0vxjSkcKG4OAsihn0CMLUzW','BMfTzq','DgfYz2v0','D2fPDezVCLrLEhqODgv4DcWGEYb0Aw1LB3v0pYb9kq','y29UDgvUDezYyw1L','yM9VBeXPA2u','CMv0DxjUCW','z2v0qNLqBgfJzwHVBgrLCG','D2fPDa','BMfTzu9M','CMvXDwLYzwq','zhjHz0fUzerYB3a','z2v0sw5UzxjuzxH0kgXVy2f0B3iPiokgKIbZDhjPBMC','C291CMnL','DM9Pza','AxnwAxnPyMXL','kcqWkq','nJbgC2zcqwq','CMvZB2X2zq','BgLUDdPYzwDLEc1PBNzHBgLK','Dgv4DenVBNrLBNqOBg9JyxrVCIKG4OAsihn0CMLUzW','y2HHAw4','yxnZzxj0vhj1zq','DMLZDwfS','C3rYAw5N','q2HLy2SGysbJAgvJA2jVEc9YywrPBY4','C2v0tg9JywXtDg9YywDL','y29SDw1U','tMf2AwDHDguGDg8GysbvuKWUigb3ywL0vw50AwXGoIaNBg9HzcCGFcaNzg9Ty29UDgvUDgXVywrLzcCGFcaNBMv0D29YA2LKBguNlIbszwXHDgL2zsbWyxrOCYbYzxnVBhzLigfNywLUC3qGygjHC2vvCMXGlG','yxbPq2fSBa','z2v0qNLsB2XL','y2HLy2TdywXS','DMfSAwrHDgvtB3vYy2u','v2HLDgHLCIb0AguGzwXLBwvUDcbPCYb2AxnPyMXLlG','zwXZzvn0yxrLBwvUDa','tgfZDcbTyxrJAc4','DMLZAxrtDgf0zw1LBNq','ANncB2r5','yxnZzxj0vMfSDwu','CNvSzvbHDxnLrxHWBgLJAxq','tgLUDfzPC2L0B3i','DxjS','C2vSzwn0t3b0Aw9UkgXVy2f0B3iSihzHBhvLlcb7ihrPBwvVDxq/ih0P','DMfSDwu','A2v5D29Yza','z2v0qNLbBhruzxH0khrLEhqSihSGzxHHy3q/ih0P','z2v0qNLmywjLBcH0zxH0lcb7igv4ywn0pYb9kq','ugfYyw1LDgvYAxPLzcbtruXfq1qUierPywXLy3qGzNjVBsb0AguGy29UzMLNigbKyxrHyMfZzwaGvvjmicHWB3n0z3jLCY9TExnXBc9ZCwXPDguPlG','zxzHBhvHDgu','z290BYH1CMWSihSGD2fPDfvUDgLSpYWGDgLTzw91Dd8GFsK','DgvZDa','CMvSB2fKkhSGD2fPDfvUDgLSpYWGDgLTzw91Dd8GFsK','vw5JAgvJAYbHignOzwnRyM94lG','zMLSzxm','yxnZzxj0vgv4Da','Aw5WDxrwywX1zq','C2nYB2XSsw50B1zPzxCOBg9JyxrVCIK','Cgf1C2uOBxmP','y291BNq','zxHWCJe','Aw5Zzxj0vgv4Da','rwXLBwvUDcDZihrLEhqGzxf1ywXZl2nVBNrHAw5ZigbLEhbLy3rLzgaU','z2v0qxr0CMLIDxrLkgXVy2f0B3iSig5HBwuPiokgKIbZDhjPBMC','rwXLBwvUDcbPCYb2AxnPyMXLlG','zxnJyxbLlwHHDgnO','uefuq0G','u2v0igeGy29VA2LLicHVChrPB25ZoIbWyxrOlcbKB21HAw4Sigv4CgLYzxmSigH0DhbpBMX5lcbZzwn1CMuSihnHBwvtAxrLks4','z2v0qNLqBgfJzwHVBgrLCIH0zxH0lcb7igv4ywn0pYb9kq','BMf2AwDHDgLVBG','C2LN','Dw5RBM93BG','rxHWBgLJAxqGzgvSyxKUierPC2nVDxjHz2vKiokaLcb0AguGBgLUDgvYihDHBNrZigeGyc8VihjLyxnVBJPGignVBw1LBNqUifbYzwzLCIbHigb3ywL0rM9YkMaU','DxbSB2fKrMLSzsHSB2nHDg9YlcbMAwXLCYK','zMLYC3qOBg9JyxrVCIK','AgvHzgvYCW','zxHWBgLJAxqGC2XLzxaG4OcuihvZzsb3ywL0rM9Yic8GD2fPDezVCLrLEhqGlYb3ywL0rM9YvxjSigLUC3rLywq','D2fPDezVCK5HDMLNyxrPB24OEYb0Aw1LB3v0pYb9kq','C3rLCcHSywjLBcWGkcKGpt4GEYaUlI4GFsK','odG0otG2ogX5sujfDW','nJzhrMreEfC','C2v0q29VA2LLkg5HBwuSihzHBhvLlcbVChrPB25ZpYK','icSG4OcMksbJB25JyxrLBMf0zxmGDgHLigjHC2uGvvjmlIa','mJe3n2jLsNDhua','yw55','twf0y2GGyw4GAw5WDxqGyNKGAxrZihbSywnLAg9SzgvYlG','D2fPDezVCLvYBcHWyxr0zxjUlcb7ihrPBwvVDxq/ih0P','zxHWCMvZC2LVBG','C3rHCNrZv2L0Aa','tMf2AwDHDguGyMfJAYbPBIbOAxn0B3j5lG','D2HPBgu','CNvSzurPC2fTyMLNqNLjBMrLEa','z2v0vgL0Bgu','C3rYAw5Nt3joDw1IzxjmAwTL','Bg9JyxrVCG','ntGWmtC2meHzrMXJAG','y2XPCgjVyxjKugfZDguOBg9JyxrVCIWGDgv4DcK','z2v0qNLuzxn0swqOAwqP','yxnZzxj0sgLKzgvUkgXVy2f0B3iSihSGDgLTzw91Dd8GFsK','zMLSBcHSB2nHDg9Ylcb2ywX1zsWGEYb0Aw1LB3v0pYWGBM9xywL0qwz0zxi/ih0P','z2v0qNLuzxn0swq','zxzHBhvHDgvpBKXVy2f0B3i','CMvJzwL2zxi','Dg9bCMC','z29cywnR','u2vSzwn0ig9WDgLVBIHZksbPBIbHiga8C2vSzwn0pMaUigb2ywX1zwaGAxmGysbZDhjPBMCGB3iGC3rYAw5Nw10U','uNvUigeGyMLUyxj5icHLEgvJrMLSzsWGBM8GC2HLBgWGAw50zxjWCMv0yxrPB24PlIbJD2qGzNjVBsbJB25MAwCGyhnOzwXSq3DKyc4','Dgv4Da','q3vYCMvUDcbvuKWGy29UDgfPBNmGyhbHDhrLCM5GlG','Ag92zxiOBg9JyxrVCIWGEYbMB3jJzt8SihrPBwvVDxq/ih0P','C3rLCa','C3fS','C2v0q29VA2LL','B3v0','rhjHzYbVBMuGzwXLBwvUDcbVBNrVigfUB3rOzxiUifvZzxmGC3LUDgHLDgLJig1VDxnLigv2zw50CYaOBM90ig5HDgL2zsbive1mnsbeCMfNrxzLBNqPlG','ChjLC3mOBg9JyxrVCIWGA2v5lcb7igrLBgf5pYWGDgLTzw91Dd8GFsK','EhbHDgG9','CNvSzvnLBgvJDg9YuxvHBgL0Eq','zgvMAw5LuhjVCgvYDhK','DMLZAxrfEhbYzxnZAw9U','z2v0sw5WDxrwywX1zsHSB2nHDg9YksdIHPiGC3rYAw5N','zxHPDezYyw1LkcK','Bg9N','BgLUDdPNB3rVlwnVBMnHDa','tNvTyMvYig9Mig1HDgnOzxmGzxf1ywXZigbLEhbLy3rLzgaU','uMvSB2fKihrOzsbJDxjYzw50ihbHz2uU','yxnZzxj0vMfSDwuOBg9JyxrVCIWGzxHWzwn0zwqSihSGDgLTzw91Dd8GFsK','y29UzgL0Aw9U','yNLoyw1L','zxjYB3i','yM9VBa','mZK5mdy0ogvcr1nbzW','zNjHBwu','CNvSzvnLDMvYAxr5','DMfSAwrHDg9YoG','sw5WDxqGDMfSDwuGkgfSAwfZig9MigLUChv0vMfSDwuPlG','Bg9JyxrVCIHJC3mP','mZG1otjiD3zHyuy','z2v0sw5UzxjuzxH0','zMLSBa','z2v0vxjS','lZOG','CNvSzuDVDg9dB25Jyxq','y2XPy2S','zgjfEgvJ','AwyGkcr7mtPJB25KAxrPB259ksb7cGKKmaP9','y291BNqOBg9JyxrVCIKG4OAsig51BwjLCG','twf0y2GGyNKGyhrPDgXLycbHDhrYAwj1DguU','BNrO','BgfZDcHSB2nHDg9Ykq','B3b0CW','z2v0q29SDw1U','y3jLyxrLv2vIrhnStgfUz3vHz2vtzxj2AwnL','uMvXDwLYzwqGyxjVDw5Kigv2zxj5igv4zwn1DgfIBguGC3rLCcbPBIbHigb0zxn0xYPGigz1BMn0Aw9UlIbGBgfIzwXGigLZihrOzsbODw1HBI1YzwfKywjSzsbPBNrLBNqGDgHLigfNzw50ihjLywrZihrVihjLCgfPCIb0AguGC3rLCc4','rwXLBwvUDcbPCYbOAwrKzw4GB3iGzgv0ywnOzwqU','uMvHzcbHignVB2TPzsb2ywX1zsaOiIiGAwyGBwLZC2LUzYKU','C2v2zxjPDhK','Aw5JCMvTzw50','BNvTyMvY','Dg9Rzw4','z2v0','v3jPDguGDg8GDgHLihj1BIb0CMfJzs4','DMfSAwrHDgu','B3bLCMf0Aw9U','C29YDa','u2nVCguGC3vIC2vXDwvUDcbJywXSCYb0BYbHBIbPzNjHBwuGkhbLCNnPC3rZihvUDgLSigv4AxrgCMfTzsKU','Cgf0DgvYBG','sw5WDxqNCYb2ywX1zsbLCxvHBhmGygv4CgvJDgvKyc4','C2HLBgW','ufvu','D2fYBMLUzW','Aw5PDgLHBgL6yxrPB24'];_0x27a6=function(){return _0x250b33;};return _0x27a6();}function buildDslVocab(){var _0x76a318={_0x2c7bce:0x2f8},_0x4bdcef=_0x170ec5;const _0x1d1f26=[];for(const [_0x3e1a6a,_0x5c641d]of GROUPS){for(const _0x23bf6e of _0x5c641d)_0x1d1f26[_0x4bdcef(0x2f8)](toEntry(_0x3e1a6a,_0x23bf6e));}for(const _0x4e1ff2 of KEYWORDS){const _0xb8efe2=VOCAB_DOCS[_0x4bdcef(0x274)](_0x4e1ff2[_0x4bdcef(0x1d6)]);_0x1d1f26[_0x4bdcef(_0x76a318._0x2c7bce)](_0xb8efe2?{..._0x4e1ff2,'signature':_0xb8efe2['signature'],'doc':_0xb8efe2[_0x4bdcef(0x304)]}:_0x4e1ff2);}return _0x1d1f26;}__name(buildDslVocab,_0x170ec5(0x2dd));function createWebDslLanguageService(_0x1e6ee4){var _0x275bd7={_0x556d45:0x284};let _0x36534e=null;return{'getVocab'(){return _0x36534e??=buildDslVocab();},'validate'(_0x55c3df,_0xe50550){var _0x4fdbf4=_0x19d9;return validateSource(_0x55c3df,{'helperNames':_0xe50550?.['helperNames'],'ruleSeverity':_0x1e6ee4?.[_0x4fdbf4(0x259)],'suppressed':_0x1e6ee4?.[_0x4fdbf4(_0x275bd7._0x556d45)]});}};}__name(createWebDslLanguageService,_0x170ec5(0x26c));var webDslLanguageService=createWebDslLanguageService(),web_dsl_language_service_default=webDslLanguageService;export{createWebDslLanguageService,web_dsl_language_service_default as default,webDslLanguageService};
@@ -1,3 +1,5 @@
1
+ import { PickerMode } from '@unotest/protocol';
2
+
1
3
  /**
2
4
  * Discriminator for SemanticRegion. Fixed set of bucket kinds that downstream
3
5
  * consumers (projection, assertion-suggester, etc.) can filter by.
@@ -303,6 +305,48 @@ interface AriaTree {
303
305
 
304
306
  declare function ariaSnapshotAlgorithm(): AriaTree;
305
307
 
308
+ /** What the picked gesture maps to. In capture-only the mode dictates it
309
+ * (`locator`/`assertText`/`assertVisible`); in execute the gesture does
310
+ * (`click`/`fill`/`press`/`selectOption`/`check`/`uncheck`). The node side
311
+ * renders each to a DSL line via `buildActionSnippet`. */
312
+ type RecordedAction = "locator" | "assertText" | "assertVisible" | "click" | "fill" | "press" | "selectOption" | "check" | "uncheck";
313
+ /** One captured pick. `text` is normalized textContent (for `assertText`);
314
+ * `value` is the typed/selected value (`fill`/`selectOption`); `key` is the
315
+ * pressed key (`press`). `placement` tells the viewer where to drop it. */
316
+ interface PickedRef {
317
+ ref: string;
318
+ mode: PickerMode;
319
+ action: RecordedAction;
320
+ text: string;
321
+ value?: string;
322
+ key?: string;
323
+ placement: "cursor" | "append";
324
+ }
325
+ /** Result of a drain. `alive` is false once the overlay's in-page state is
326
+ * gone (the document was replaced by a reload / SPA route change) — the
327
+ * signal the node side uses to re-stamp refs and re-inject (self-heal). */
328
+ interface DrainResult {
329
+ alive: boolean;
330
+ picks: PickedRef[];
331
+ }
332
+ /** Operations the injected overlay understands. Carried into the page as
333
+ * JSON; the algorithm dispatches on `kind`. `execute` toggles capture-only
334
+ * vs. the Playwright-style action recorder. */
335
+ type PickerOp = {
336
+ kind: "install";
337
+ mode: PickerMode;
338
+ execute: boolean;
339
+ } | {
340
+ kind: "setMode";
341
+ mode: PickerMode;
342
+ execute: boolean;
343
+ } | {
344
+ kind: "drain";
345
+ } | {
346
+ kind: "uninstall";
347
+ };
348
+ declare function pickerOverlayAlgorithm(op: PickerOp): DrainResult | void;
349
+
306
350
  declare function serializeRuntimeDom(): string;
307
351
 
308
352
  interface FindElementMatch {
@@ -392,4 +436,4 @@ declare function readOuterHtml(el: Element): string;
392
436
  * tag + ARIA, accname approximated). Returns a structured raw hint. */
393
437
  declare function inspectElementRaw(el: Element): ElementHintRaw;
394
438
 
395
- export { type ElementHintRaw, ariaSnapshotAlgorithm, findElementAlgorithm, inspectElementRaw, outlineAlgorithm, pasteValue, readOuterHtml, semanticDomAlgorithm, serializeRuntimeDom };
439
+ export { type ElementHintRaw, ariaSnapshotAlgorithm, findElementAlgorithm, inspectElementRaw, outlineAlgorithm, pasteValue, pickerOverlayAlgorithm, readOuterHtml, semanticDomAlgorithm, serializeRuntimeDom };
@@ -2208,6 +2208,8 @@ function outlineAlgorithm(assignRefs) {
2208
2208
  if (el.getAttribute("data-unotest-ref-kind") !== "i") continue;
2209
2209
  el.removeAttribute("data-unotest-ref");
2210
2210
  el.removeAttribute("data-unotest-ref-kind");
2211
+ el.removeAttribute("data-unotest-ref-role");
2212
+ el.removeAttribute("data-unotest-ref-name");
2211
2213
  }
2212
2214
  html.setAttribute("data-unotest-ref-counter", String(refCounter));
2213
2215
  }
@@ -2227,9 +2229,14 @@ function outlineAlgorithm(assignRefs) {
2227
2229
  const h = shortenedHref(el.getAttribute("href"));
2228
2230
  if (h) href = h;
2229
2231
  }
2232
+ const role = computeRole(el) ?? (tag === "tr" ? "row" : tag === "li" ? "listitem" : null);
2233
+ if (assignRefs && refByElement.has(el)) {
2234
+ el.setAttribute("data-unotest-ref-role", role ?? tag);
2235
+ el.setAttribute("data-unotest-ref-name", name);
2236
+ }
2230
2237
  entries.push({
2231
2238
  el,
2232
- role: computeRole(el) ?? (tag === "tr" ? "row" : tag === "li" ? "listitem" : null),
2239
+ role,
2233
2240
  name,
2234
2241
  testId: testIdOf(el),
2235
2242
  dataId: stableDataAttr(el),
@@ -2825,8 +2832,10 @@ function ariaSnapshotAlgorithm() {
2825
2832
  return false;
2826
2833
  }
2827
2834
  __name(shouldInclude, "shouldInclude");
2828
- function makeRef(el, role, refPrefix) {
2835
+ function makeRef(el, role, name, refPrefix) {
2829
2836
  const localRef = ensureRef(el, role);
2837
+ el.setAttribute("data-unotest-ref-role", role);
2838
+ el.setAttribute("data-unotest-ref-name", name);
2830
2839
  totalRefs += 1;
2831
2840
  return refPrefix ? `${refPrefix}${localRef}` : localRef;
2832
2841
  }
@@ -2889,7 +2898,7 @@ function ariaSnapshotAlgorithm() {
2889
2898
  const tag = el.tagName.toLowerCase();
2890
2899
  if (tag === "iframe") {
2891
2900
  const name2 = accname(el);
2892
- const ref = makeRef(el, "iframe", refPrefix);
2901
+ const ref = makeRef(el, "iframe", name2, refPrefix);
2893
2902
  const node2 = { role: "iframe", name: name2, ref, children: [] };
2894
2903
  let inner = null;
2895
2904
  try {
@@ -2909,7 +2918,7 @@ function ariaSnapshotAlgorithm() {
2909
2918
  const role = computeRole(el);
2910
2919
  const name = accname(el);
2911
2920
  const node = { role, name, children: [] };
2912
- node.ref = makeRef(el, role, refPrefix);
2921
+ node.ref = makeRef(el, role, name, refPrefix);
2913
2922
  if (role === "link") {
2914
2923
  const url = normaliseHref(
2915
2924
  el.getAttribute("href")
@@ -3013,6 +3022,245 @@ function ariaSnapshotAlgorithm() {
3013
3022
  }
3014
3023
  __name(ariaSnapshotAlgorithm, "ariaSnapshotAlgorithm");
3015
3024
 
3025
+ // src/inspection/picker-overlay.ts
3026
+ import { pickerOverlayAlgorithm as pickerOverlayInjectable } from "@unotest/web/internal/page-inject";
3027
+ function pickerOverlayAlgorithm(op) {
3028
+ const REF_ATTR = "data-unotest-ref";
3029
+ const KIND_ATTR = "data-unotest-ref-kind";
3030
+ const w = window;
3031
+ if (op.kind === "drain") {
3032
+ const s = w.__unotestPicker;
3033
+ if (!s) return { alive: false, picks: [] };
3034
+ const out = s.picks;
3035
+ s.picks = [];
3036
+ return { alive: true, picks: out };
3037
+ }
3038
+ if (op.kind === "setMode") {
3039
+ if (w.__unotestPicker) {
3040
+ w.__unotestPicker.mode = op.mode;
3041
+ w.__unotestPicker.execute = op.execute;
3042
+ }
3043
+ return;
3044
+ }
3045
+ if (op.kind === "uninstall") {
3046
+ const s = w.__unotestPicker;
3047
+ if (!s) return;
3048
+ document.removeEventListener("pointermove", s.onMove, true);
3049
+ document.removeEventListener("mousedown", s.onDown, true);
3050
+ document.removeEventListener("mouseup", s.onUp, true);
3051
+ document.removeEventListener("click", s.onClick, true);
3052
+ document.removeEventListener("input", s.onInput, true);
3053
+ document.removeEventListener("change", s.onChange, true);
3054
+ document.removeEventListener("keydown", s.onKeydown, true);
3055
+ document.removeEventListener("scroll", s.onScroll, true);
3056
+ s.box.remove();
3057
+ s.label.remove();
3058
+ delete w.__unotestPicker;
3059
+ return;
3060
+ }
3061
+ if (w.__unotestPicker) {
3062
+ w.__unotestPicker.mode = op.mode;
3063
+ w.__unotestPicker.execute = op.execute;
3064
+ return;
3065
+ }
3066
+ const box = document.createElement("div");
3067
+ box.style.cssText = "position:fixed;z-index:2147483646;pointer-events:none;border:2px solid #6366f1;background:rgba(99,102,241,0.15);border-radius:3px;display:none;box-sizing:border-box;";
3068
+ const label = document.createElement("div");
3069
+ label.style.cssText = "position:fixed;z-index:2147483647;pointer-events:none;background:#6366f1;color:#fff;font:12px ui-monospace,SFMono-Regular,Menlo,monospace;padding:2px 6px;border-radius:3px;display:none;white-space:nowrap;max-width:90vw;overflow:hidden;text-overflow:ellipsis;";
3070
+ document.documentElement.appendChild(box);
3071
+ document.documentElement.appendChild(label);
3072
+ const state = {
3073
+ mode: op.mode,
3074
+ execute: op.execute,
3075
+ picks: [],
3076
+ box,
3077
+ label,
3078
+ current: null,
3079
+ pendingFill: null,
3080
+ onMove: /* @__PURE__ */ __name(() => {
3081
+ }, "onMove"),
3082
+ onDown: /* @__PURE__ */ __name(() => {
3083
+ }, "onDown"),
3084
+ onUp: /* @__PURE__ */ __name(() => {
3085
+ }, "onUp"),
3086
+ onClick: /* @__PURE__ */ __name(() => {
3087
+ }, "onClick"),
3088
+ onInput: /* @__PURE__ */ __name(() => {
3089
+ }, "onInput"),
3090
+ onChange: /* @__PURE__ */ __name(() => {
3091
+ }, "onChange"),
3092
+ onKeydown: /* @__PURE__ */ __name(() => {
3093
+ }, "onKeydown"),
3094
+ onScroll: /* @__PURE__ */ __name(() => {
3095
+ }, "onScroll")
3096
+ };
3097
+ const norm = /* @__PURE__ */ __name((s) => (s ?? "").replace(/\s+/g, " ").trim(), "norm");
3098
+ const targetFrom = /* @__PURE__ */ __name((el) => {
3099
+ if (!el) return null;
3100
+ const sel = state.mode === "locator" ? `[${KIND_ATTR}="i"]` : `[${REF_ATTR}]`;
3101
+ return el.closest(sel);
3102
+ }, "targetFrom");
3103
+ const refOf = /* @__PURE__ */ __name((el) => el instanceof Element ? el.closest(`[${REF_ATTR}]`) : null, "refOf");
3104
+ const push = /* @__PURE__ */ __name((node, action, extra) => {
3105
+ const ref = node.getAttribute(REF_ATTR);
3106
+ if (!ref) return;
3107
+ state.picks.push({
3108
+ ref,
3109
+ mode: state.mode,
3110
+ action,
3111
+ text: norm(node.textContent).slice(0, 200),
3112
+ placement: extra.placement,
3113
+ ...extra.value !== void 0 ? { value: extra.value } : {},
3114
+ ...extra.key !== void 0 ? { key: extra.key } : {}
3115
+ });
3116
+ }, "push");
3117
+ const commitFill = /* @__PURE__ */ __name(() => {
3118
+ const node = state.pendingFill;
3119
+ state.pendingFill = null;
3120
+ if (!node) return;
3121
+ const value = node.value ?? "";
3122
+ push(node, "fill", { placement: "append", value });
3123
+ }, "commitFill");
3124
+ const describe = /* @__PURE__ */ __name((node) => {
3125
+ const role = node.getAttribute(`${REF_ATTR}-role`) ?? node.tagName.toLowerCase();
3126
+ const name = node.getAttribute(`${REF_ATTR}-name`) ?? "";
3127
+ return name ? `${role} "${name}"` : role;
3128
+ }, "describe");
3129
+ const showHighlight = /* @__PURE__ */ __name((node) => {
3130
+ const r = node.getBoundingClientRect();
3131
+ box.style.left = `${r.left}px`;
3132
+ box.style.top = `${r.top}px`;
3133
+ box.style.width = `${r.width}px`;
3134
+ box.style.height = `${r.height}px`;
3135
+ box.style.display = "block";
3136
+ label.textContent = describe(node);
3137
+ label.style.left = `${r.left}px`;
3138
+ label.style.top = `${r.top - 22 < 0 ? r.bottom + 2 : r.top - 22}px`;
3139
+ label.style.display = "block";
3140
+ }, "showHighlight");
3141
+ const clearHighlight = /* @__PURE__ */ __name(() => {
3142
+ box.style.display = "none";
3143
+ label.style.display = "none";
3144
+ state.current = null;
3145
+ }, "clearHighlight");
3146
+ state.onMove = (e) => {
3147
+ if (!e.isTrusted) return;
3148
+ const node = targetFrom(document.elementFromPoint(e.clientX, e.clientY));
3149
+ if (!node) {
3150
+ clearHighlight();
3151
+ return;
3152
+ }
3153
+ state.current = node;
3154
+ showHighlight(node);
3155
+ };
3156
+ const overTarget = /* @__PURE__ */ __name((e) => targetFrom(document.elementFromPoint(e.clientX, e.clientY)), "overTarget");
3157
+ const swallow = /* @__PURE__ */ __name((e) => {
3158
+ e.preventDefault();
3159
+ e.stopPropagation();
3160
+ e.stopImmediatePropagation();
3161
+ }, "swallow");
3162
+ const captureClick = /* @__PURE__ */ __name(() => state.mode !== "locator" || !state.execute, "captureClick");
3163
+ state.onDown = (e) => {
3164
+ if (e.isTrusted && captureClick() && overTarget(e)) swallow(e);
3165
+ };
3166
+ state.onUp = (e) => {
3167
+ if (e.isTrusted && captureClick() && overTarget(e)) swallow(e);
3168
+ };
3169
+ state.onClick = (e) => {
3170
+ if (!e.isTrusted) return;
3171
+ const node = overTarget(e);
3172
+ if (!node) return;
3173
+ if (captureClick()) swallow(e);
3174
+ if (state.mode === "text") {
3175
+ push(node, "assertText", { placement: "cursor" });
3176
+ return;
3177
+ }
3178
+ if (state.mode === "visibility") {
3179
+ push(node, "assertVisible", { placement: "cursor" });
3180
+ return;
3181
+ }
3182
+ if (!state.execute) {
3183
+ push(node, "locator", { placement: "cursor" });
3184
+ return;
3185
+ }
3186
+ const tag = node.tagName.toLowerCase();
3187
+ const type = (node.getAttribute("type") ?? "").toLowerCase();
3188
+ if (tag === "input" && (type === "checkbox" || type === "radio")) {
3189
+ push(node, node.checked ? "check" : "uncheck", {
3190
+ placement: "append"
3191
+ });
3192
+ } else {
3193
+ push(node, "click", { placement: "append" });
3194
+ }
3195
+ };
3196
+ const NON_TEXT = [
3197
+ "checkbox",
3198
+ "radio",
3199
+ "button",
3200
+ "submit",
3201
+ "reset",
3202
+ "file",
3203
+ "range",
3204
+ "color",
3205
+ "image",
3206
+ "hidden"
3207
+ ];
3208
+ const isTextEntry = /* @__PURE__ */ __name((el) => {
3209
+ if (!(el instanceof HTMLElement)) return false;
3210
+ if (el.isContentEditable) return true;
3211
+ const tag = el.tagName.toLowerCase();
3212
+ if (tag === "textarea") return true;
3213
+ if (tag !== "input") return false;
3214
+ return NON_TEXT.indexOf((el.getAttribute("type") ?? "text").toLowerCase()) < 0;
3215
+ }, "isTextEntry");
3216
+ state.onInput = (e) => {
3217
+ if (!e.isTrusted || !state.execute) return;
3218
+ if (!isTextEntry(e.target)) return;
3219
+ const node = refOf(e.target);
3220
+ if (node) state.pendingFill = node;
3221
+ };
3222
+ state.onChange = (e) => {
3223
+ if (!e.isTrusted || !state.execute) return;
3224
+ const node = refOf(e.target);
3225
+ if (!node) return;
3226
+ if (node.tagName.toLowerCase() === "select") {
3227
+ state.pendingFill = null;
3228
+ push(node, "selectOption", {
3229
+ placement: "append",
3230
+ value: node.value
3231
+ });
3232
+ return;
3233
+ }
3234
+ if (state.pendingFill === node) commitFill();
3235
+ };
3236
+ state.onKeydown = (e) => {
3237
+ if (!e.isTrusted || !state.execute) return;
3238
+ const key = e.key;
3239
+ if (key === "Enter" && state.pendingFill) commitFill();
3240
+ const special = key === "Enter" || key === "Escape" || key === "Tab" || key === "Backspace" || key === "Delete" || key === "Home" || key === "End" || key === "PageUp" || key === "PageDown" || key.indexOf("Arrow") === 0;
3241
+ const hasMod = e.ctrlKey || e.metaKey || e.altKey;
3242
+ if (!special && !hasMod) return;
3243
+ const mods = (e.ctrlKey ? "Control+" : "") + (e.metaKey ? "Meta+" : "") + (e.altKey ? "Alt+" : "") + (e.shiftKey && key.length > 1 ? "Shift+" : "");
3244
+ const node = refOf(document.activeElement);
3245
+ if (node) push(node, "press", { placement: "append", key: mods + key });
3246
+ };
3247
+ state.onScroll = (e) => {
3248
+ if (!e.isTrusted) return;
3249
+ if (state.current && state.current.isConnected) showHighlight(state.current);
3250
+ else clearHighlight();
3251
+ };
3252
+ document.addEventListener("pointermove", state.onMove, true);
3253
+ document.addEventListener("mousedown", state.onDown, true);
3254
+ document.addEventListener("mouseup", state.onUp, true);
3255
+ document.addEventListener("click", state.onClick, true);
3256
+ document.addEventListener("input", state.onInput, true);
3257
+ document.addEventListener("change", state.onChange, true);
3258
+ document.addEventListener("keydown", state.onKeydown, true);
3259
+ document.addEventListener("scroll", state.onScroll, true);
3260
+ w.__unotestPicker = state;
3261
+ }
3262
+ __name(pickerOverlayAlgorithm, "pickerOverlayAlgorithm");
3263
+
3016
3264
  // src/inspection/full-html-capture.ts
3017
3265
  import { serializeRuntimeDom as serializeRuntimeDomInjectable } from "@unotest/web/internal/page-inject";
3018
3266
  function serializeRuntimeDom() {
@@ -3526,6 +3774,7 @@ export {
3526
3774
  inspectElementRaw,
3527
3775
  outlineAlgorithm,
3528
3776
  pasteValue,
3777
+ pickerOverlayAlgorithm,
3529
3778
  readOuterHtml,
3530
3779
  semanticDomAlgorithm,
3531
3780
  serializeRuntimeDom
@@ -73,6 +73,11 @@ interface LaunchOptions {
73
73
  headless?: boolean;
74
74
  /** Slow each operation by N ms — for dev debugging. Default: 0. */
75
75
  slowMo?: number;
76
+ /** Launch as a Playwright server (`launchServer`) so a second process can
77
+ * `connect()` to the SAME browser — collaborative debug sessions (human +
78
+ * agent share one browser). Exposes `wsEndpoint()` after launch. Default:
79
+ * false (normal in-process launch). */
80
+ share?: boolean;
76
81
  }
77
82
  interface Viewport {
78
83
  width: number;
@@ -211,6 +216,33 @@ interface WebDriver {
211
216
  * `finally` blocks).
212
217
  */
213
218
  close(): Promise<void>;
219
+ /**
220
+ * Collaborative debug (Slice 1). `wsEndpoint()` returns the Playwright
221
+ * `connect()` endpoint when launched in share mode (else undefined);
222
+ * `connectShared()` attaches to a browser another process owns; after it,
223
+ * `attachExisting()` wraps that browser's live context as a DriverContext.
224
+ * Drivers that don't support sharing throw from connect/attach.
225
+ */
226
+ wsEndpoint(): string | undefined;
227
+ connectShared(wsEndpoint: string, browser: LaunchOptions["browser"]): Promise<void>;
228
+ attachExisting(): DriverContext;
229
+ }
230
+ /** One captured network request/response, recorded only under
231
+ * `UNOTEST_NETWORK`. `status`/`ok` come from the response; `failureText`
232
+ * is set instead when the request failed (DNS, refused, aborted). */
233
+ interface NetworkEntry {
234
+ method: string;
235
+ url: string;
236
+ resourceType: string;
237
+ status?: number;
238
+ ok?: boolean;
239
+ failureText?: string;
240
+ /** Response body size from `content-length` (bytes); absent for cached /
241
+ * chunked responses. */
242
+ sizeBytes?: number;
243
+ /** Total request→response-end time (ms), from Playwright request timing. */
244
+ durationMs?: number;
245
+ timestamp: string;
214
246
  }
215
247
  interface DriverContext {
216
248
  /** Currently-open tabs/windows in this context. Index 0 = first opened. */
@@ -270,6 +302,13 @@ interface DriverContext {
270
302
  text: string;
271
303
  timestamp: string;
272
304
  }>;
305
+ /**
306
+ * Snapshot of network request/response entries captured since context
307
+ * creation, oldest first. Populated only when `UNOTEST_NETWORK` is on (else
308
+ * empty — zero overhead). Used by failure-bundle capture to write
309
+ * `network.json` for the viewer's Network tab.
310
+ */
311
+ networkEntries(): ReadonlyArray<NetworkEntry>;
273
312
  /** Close all pages in this context. Idempotent. */
274
313
  close(): Promise<void>;
275
314
  }
@@ -404,4 +443,4 @@ interface AncestorHint {
404
443
  className?: string;
405
444
  }
406
445
 
407
- export { type ActionTimeout as A, type ContextOptions as C, type DriverContext as D, type ElementHint as E, type FillOptions as F, type GotoOptions as G, type HoverOptions as H, type LaunchOptions as L, type NavigationOptions as N, type PressOptions as P, type ReloadOptions as R, type ScreenshotOptions as S, type Viewport as V, type WebDriver as W, type CheckOptions as a, type ClickOptions as b, type CookieOptions as c, type DriverPage as d, type SelectOptions as e, type WaitOptions as f, type WaitState as g, type LocatorValue as h, type LocatorStep as i, appendStep as j, describeLocator as k, isLocatorValue as l, rootedAt as r };
446
+ export { type ActionTimeout as A, type ContextOptions as C, type DriverContext as D, type ElementHint as E, type FillOptions as F, type GotoOptions as G, type HoverOptions as H, type LaunchOptions as L, type NetworkEntry as N, type PressOptions as P, type ReloadOptions as R, type ScreenshotOptions as S, type Viewport as V, type WebDriver as W, type CheckOptions as a, type ClickOptions as b, type CookieOptions as c, type DriverPage as d, type NavigationOptions as e, type SelectOptions as f, type WaitOptions as g, type WaitState as h, type LocatorValue as i, type LocatorStep as j, appendStep as k, describeLocator as l, isLocatorValue as m, rootedAt as r };
@@ -18,4 +18,4 @@ interface LintOptions {
18
18
  }
19
19
  declare function lintAst(ast: BlockStatement, opts?: LintOptions): LintDiagnostic[];
20
20
 
21
- export { type LintDiagnostic as L, type LintOptions as a, type LintSeverity as b, lintAst as l };
21
+ export { type LintDiagnostic as L, type LintSeverity as a, type LintOptions as b, lintAst as l };