appium-session-recorder 0.0.2 → 0.0.4

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.
Files changed (73) hide show
  1. package/dist/index.js +33319 -0
  2. package/dist/ui/assets/index-CnJwu_Mc.js +8 -0
  3. package/dist/ui/assets/index-VIFL67d5.css +1 -0
  4. package/{src → dist}/ui/index.html +2 -1
  5. package/package.json +20 -13
  6. package/bun.lock +0 -731
  7. package/src/cli/arg-parser.ts +0 -311
  8. package/src/cli/commands/drive.ts +0 -147
  9. package/src/cli/commands/index.ts +0 -54
  10. package/src/cli/commands/proxy.ts +0 -41
  11. package/src/cli/commands/screen.ts +0 -73
  12. package/src/cli/commands/selectors.ts +0 -42
  13. package/src/cli/commands/session.ts +0 -64
  14. package/src/cli/commands/types.ts +0 -11
  15. package/src/cli/index.ts +0 -158
  16. package/src/cli/prompts.ts +0 -64
  17. package/src/cli/response.ts +0 -44
  18. package/src/core/appium/client.ts +0 -248
  19. package/src/core/index.ts +0 -5
  20. package/src/core/selectors/generate-candidates.ts +0 -155
  21. package/src/core/selectors/score-candidates.ts +0 -184
  22. package/src/core/types.ts +0 -79
  23. package/src/core/xml/parse-source.ts +0 -197
  24. package/src/index.ts +0 -7
  25. package/src/server/appium-client.ts +0 -24
  26. package/src/server/index.ts +0 -6
  27. package/src/server/interaction-recorder.ts +0 -74
  28. package/src/server/proxy-middleware.ts +0 -68
  29. package/src/server/routes.ts +0 -64
  30. package/src/server/server.ts +0 -43
  31. package/src/server/types.ts +0 -34
  32. package/src/ui/bun.lock +0 -311
  33. package/src/ui/package.json +0 -20
  34. package/src/ui/src/App.css +0 -12
  35. package/src/ui/src/App.tsx +0 -41
  36. package/src/ui/src/components/ActionCarousel.css +0 -128
  37. package/src/ui/src/components/ActionCarousel.tsx +0 -92
  38. package/src/ui/src/components/Inspector.css +0 -314
  39. package/src/ui/src/components/Inspector.tsx +0 -265
  40. package/src/ui/src/components/InteractionCard.css +0 -159
  41. package/src/ui/src/components/InteractionCard.tsx +0 -60
  42. package/src/ui/src/components/MainInspector.css +0 -304
  43. package/src/ui/src/components/MainInspector.tsx +0 -304
  44. package/src/ui/src/components/Stats.css +0 -27
  45. package/src/ui/src/components/Timeline.css +0 -31
  46. package/src/ui/src/components/Timeline.tsx +0 -37
  47. package/src/ui/src/hooks/useInteractions.ts +0 -73
  48. package/src/ui/src/index.tsx +0 -11
  49. package/src/ui/src/services/api.ts +0 -41
  50. package/src/ui/src/styles/tokens.css +0 -126
  51. package/src/ui/src/types.ts +0 -34
  52. package/src/ui/src/utils/__tests__/locators.test.ts +0 -304
  53. package/src/ui/src/utils/__tests__/xml-parser.test.ts +0 -326
  54. package/src/ui/src/utils/locators.ts +0 -14
  55. package/src/ui/src/utils/xml-parser.ts +0 -45
  56. package/src/ui/tsconfig.json +0 -34
  57. package/src/ui/tsconfig.node.json +0 -11
  58. package/src/ui/vite.config.ts +0 -22
  59. package/tests/cli/arg-parser.test.ts +0 -397
  60. package/tests/cli/drive-commands.test.ts +0 -151
  61. package/tests/cli/selectors-best.test.ts +0 -42
  62. package/tests/cli/session-commands.test.ts +0 -53
  63. package/tests/core/selector-candidates.test.ts +0 -83
  64. package/tests/core/selector-scoring.test.ts +0 -75
  65. package/tests/core/xml-parser.test.ts +0 -56
  66. package/tests/server/appium-client.test.ts +0 -229
  67. package/tests/server/interaction-recorder.test.ts +0 -377
  68. package/tests/server/proxy-middleware.test.ts +0 -343
  69. package/tests/server/routes.test.ts +0 -305
  70. package/tsconfig.json +0 -26
  71. package/vitest.config.ts +0 -16
  72. package/vitest.ui.config.ts +0 -15
  73. package/workflow.gif +0 -0
@@ -0,0 +1,8 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var l={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return u(this.context.count)},getNextContextId(){return u(this.context.count++)}};function u(e){let t=String(e),n=t.length-1;return l.context.id+(n?String.fromCharCode(96+n):``)+t}function d(e){l.context=e}function f(){return{...l.context,id:l.getNextContextId(),count:0}}var p=(e,t)=>e===t,m=Symbol(`solid-track`),h={equals:p},g=null,_=ue,v=1,y=2,b={owned:null,cleanups:null,context:null,owner:null},x=null,S=null,C=null,w=null,T=null,E=null,D=null,O=0;function k(e,t){let n=T,r=x,i=e.length===0,a=t===void 0?r:t,o=i?b:{owned:null,cleanups:null,context:a?a.context:null,owner:a},s=i?e:()=>e(()=>N(()=>B(o)));x=o,T=null;try{return R(s,!0)}finally{T=n,x=r}}function A(e,t){t=t?Object.assign({},h,t):h;let n={value:e,observers:null,observerSlots:null,comparator:t.equals||void 0};return[ae.bind(n),e=>(typeof e==`function`&&(e=S&&S.running&&S.sources.has(n)?e(n.tValue):e(n.value)),oe(n,e))]}function j(e,t,n){let r=ce(e,t,!1,v);C&&S&&S.running?E.push(r):I(r)}function ee(e,t,n){_=fe;let r=ce(e,t,!1,v),i=F&&ie(F);i&&(r.suspense=i),(!n||!n.render)&&(r.user=!0),D?D.push(r):I(r)}function M(e,t,n){n=n?Object.assign({},h,n):h;let r=ce(e,t,!0,0);return r.observers=null,r.observerSlots=null,r.comparator=n.equals||void 0,C&&S&&S.running?(r.tState=v,E.push(r)):I(r),ae.bind(r)}function N(e){if(!w&&T===null)return e();let t=T;T=null;try{return w?w.untrack(e):e()}finally{T=t}}function P(e){return x===null||(x.cleanups===null?x.cleanups=[e]:x.cleanups.push(e)),e}function te(e){if(S&&S.running)return e(),S.done;let t=T,n=x;return Promise.resolve().then(()=>{T=t,x=n;let r;return(C||F)&&(r=S||={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0},r.done||=new Promise(e=>r.resolve=e),r.running=!0),R(e,!1),T=x=null,r?r.done:void 0})}var[ne,re]=A(!1);function ie(e){let t;return x&&x.context&&(t=x.context[e.id])!==void 0?t:e.defaultValue}var F;function ae(){let e=S&&S.running;if(this.sources&&(e?this.tState:this.state))if((e?this.tState:this.state)===v)I(this);else{let e=E;E=null,R(()=>z(this),!1),E=e}if(T){let e=this.observers?this.observers.length:0;T.sources?(T.sources.push(this),T.sourceSlots.push(e)):(T.sources=[this],T.sourceSlots=[e]),this.observers?(this.observers.push(T),this.observerSlots.push(T.sources.length-1)):(this.observers=[T],this.observerSlots=[T.sources.length-1])}return e&&S.sources.has(this)?this.tValue:this.value}function oe(e,t,n){let r=S&&S.running&&S.sources.has(e)?e.tValue:e.value;if(!e.comparator||!e.comparator(r,t)){if(S){let r=S.running;(r||!n&&S.sources.has(e))&&(S.sources.add(e),e.tValue=t),r||(e.value=t)}else e.value=t;e.observers&&e.observers.length&&R(()=>{for(let t=0;t<e.observers.length;t+=1){let n=e.observers[t],r=S&&S.running;r&&S.disposed.has(n)||((r?!n.tState:!n.state)&&(n.pure?E.push(n):D.push(n),n.observers&&pe(n)),r?n.tState=v:n.state=v)}if(E.length>1e6)throw E=[],Error()},!1)}return t}function I(e){if(!e.fn)return;B(e);let t=O;se(e,S&&S.running&&S.sources.has(e)?e.tValue:e.value,t),S&&!S.running&&S.sources.has(e)&&queueMicrotask(()=>{R(()=>{S&&(S.running=!0),T=x=e,se(e,e.tValue,t),T=x=null},!1)})}function se(e,t,n){let r,i=x,a=T;T=x=e;try{r=e.fn(t)}catch(t){return e.pure&&(S&&S.running?(e.tState=v,e.tOwned&&e.tOwned.forEach(B),e.tOwned=void 0):(e.state=v,e.owned&&e.owned.forEach(B),e.owned=null)),e.updatedAt=n+1,V(t)}finally{T=a,x=i}(!e.updatedAt||e.updatedAt<=n)&&(e.updatedAt!=null&&`observers`in e?oe(e,r,!0):S&&S.running&&e.pure?(S.sources.has(e)||(e.value=r),S.sources.add(e),e.tValue=r):e.value=r,e.updatedAt=n)}function ce(e,t,n,r=v,i){let a={fn:e,state:r,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:t,owner:x,context:x?x.context:null,pure:n};if(S&&S.running&&(a.state=0,a.tState=r),x===null||x!==b&&(S&&S.running&&x.pure?x.tOwned?x.tOwned.push(a):x.tOwned=[a]:x.owned?x.owned.push(a):x.owned=[a]),w&&a.fn){let e=a.fn,[t,n]=A(void 0,{equals:!1}),r=w.factory(e,n);P(()=>r.dispose());let i,o=()=>te(n).then(()=>{i&&=(i.dispose(),void 0)});a.fn=n=>(t(),S&&S.running?(i||=w.factory(e,o),i.track(n)):r.track(n))}return a}function L(e){let t=S&&S.running;if((t?e.tState:e.state)===0)return;if((t?e.tState:e.state)===y)return z(e);if(e.suspense&&N(e.suspense.inFallback))return e.suspense.effects.push(e);let n=[e];for(;(e=e.owner)&&(!e.updatedAt||e.updatedAt<O);){if(t&&S.disposed.has(e))return;(t?e.tState:e.state)&&n.push(e)}for(let r=n.length-1;r>=0;r--){if(e=n[r],t){let t=e,i=n[r+1];for(;(t=t.owner)&&t!==i;)if(S.disposed.has(t))return}if((t?e.tState:e.state)===v)I(e);else if((t?e.tState:e.state)===y){let t=E;E=null,R(()=>z(e,n[0]),!1),E=t}}}function R(e,t){if(E)return e();let n=!1;t||(E=[]),D?n=!0:D=[],O++;try{let t=e();return le(n),t}catch(e){n||(D=null),E=null,V(e)}}function le(e){if(E&&=(C&&S&&S.running?de(E):ue(E),null),e)return;let t;if(S){if(!S.promises.size&&!S.queue.size){let e=S.sources,n=S.disposed;D.push.apply(D,S.effects),t=S.resolve;for(let e of D)`tState`in e&&(e.state=e.tState),delete e.tState;S=null,R(()=>{for(let e of n)B(e);for(let t of e){if(t.value=t.tValue,t.owned)for(let e=0,n=t.owned.length;e<n;e++)B(t.owned[e]);t.tOwned&&(t.owned=t.tOwned),delete t.tValue,delete t.tOwned,t.tState=0}re(!1)},!1)}else if(S.running){S.running=!1,S.effects.push.apply(S.effects,D),D=null,re(!0);return}}let n=D;D=null,n.length&&R(()=>_(n),!1),t&&t()}function ue(e){for(let t=0;t<e.length;t++)L(e[t])}function de(e){for(let t=0;t<e.length;t++){let n=e[t],r=S.queue;r.has(n)||(r.add(n),C(()=>{r.delete(n),R(()=>{S.running=!0,L(n)},!1),S&&(S.running=!1)}))}}function fe(e){let t,n=0;for(t=0;t<e.length;t++){let r=e[t];r.user?e[n++]=r:L(r)}if(l.context){if(l.count){l.effects||=[],l.effects.push(...e.slice(0,n));return}d()}for(l.effects&&(l.done||!l.count)&&(e=[...l.effects,...e],n+=l.effects.length,delete l.effects),t=0;t<n;t++)L(e[t])}function z(e,t){let n=S&&S.running;n?e.tState=0:e.state=0;for(let r=0;r<e.sources.length;r+=1){let i=e.sources[r];if(i.sources){let e=n?i.tState:i.state;e===v?i!==t&&(!i.updatedAt||i.updatedAt<O)&&L(i):e===y&&z(i,t)}}}function pe(e){let t=S&&S.running;for(let n=0;n<e.observers.length;n+=1){let r=e.observers[n];(t?!r.tState:!r.state)&&(t?r.tState=y:r.state=y,r.pure?E.push(r):D.push(r),r.observers&&pe(r))}}function B(e){let t;if(e.sources)for(;e.sources.length;){let t=e.sources.pop(),n=e.sourceSlots.pop(),r=t.observers;if(r&&r.length){let e=r.pop(),i=t.observerSlots.pop();n<r.length&&(e.sourceSlots[i]=n,r[n]=e,t.observerSlots[n]=i)}}if(e.tOwned){for(t=e.tOwned.length-1;t>=0;t--)B(e.tOwned[t]);delete e.tOwned}if(S&&S.running&&e.pure)me(e,!0);else if(e.owned){for(t=e.owned.length-1;t>=0;t--)B(e.owned[t]);e.owned=null}if(e.cleanups){for(t=e.cleanups.length-1;t>=0;t--)e.cleanups[t]();e.cleanups=null}S&&S.running?e.tState=0:e.state=0}function me(e,t){if(t||(e.tState=0,S.disposed.add(e)),e.owned)for(let t=0;t<e.owned.length;t++)me(e.owned[t])}function he(e){return e instanceof Error?e:Error(typeof e==`string`?e:`Unknown error`,{cause:e})}function ge(e,t,n){try{for(let n of t)n(e)}catch(e){V(e,n&&n.owner||null)}}function V(e,t=x){let n=g&&t&&t.context&&t.context[g],r=he(e);if(!n)throw r;D?D.push({fn(){ge(r,n,t)},state:v}):ge(r,n,t)}var _e=Symbol(`fallback`);function ve(e){for(let t=0;t<e.length;t++)e[t]()}function ye(e,t,n={}){let r=[],i=[],a=[],o=0,s=t.length>1?[]:null;return P(()=>ve(a)),()=>{let c=e()||[],l=c.length,u,d;return c[m],N(()=>{let e,t,p,m,h,g,_,v,y;if(l===0)o!==0&&(ve(a),a=[],r=[],i=[],o=0,s&&=[]),n.fallback&&(r=[_e],i[0]=k(e=>(a[0]=e,n.fallback())),o=1);else if(o===0){for(i=Array(l),d=0;d<l;d++)r[d]=c[d],i[d]=k(f);o=l}else{for(p=Array(l),m=Array(l),s&&(h=Array(l)),g=0,_=Math.min(o,l);g<_&&r[g]===c[g];g++);for(_=o-1,v=l-1;_>=g&&v>=g&&r[_]===c[v];_--,v--)p[v]=i[_],m[v]=a[_],s&&(h[v]=s[_]);for(e=new Map,t=Array(v+1),d=v;d>=g;d--)y=c[d],u=e.get(y),t[d]=u===void 0?-1:u,e.set(y,d);for(u=g;u<=_;u++)y=r[u],d=e.get(y),d!==void 0&&d!==-1?(p[d]=i[u],m[d]=a[u],s&&(h[d]=s[u]),d=t[d],e.set(y,d)):a[u]();for(d=g;d<l;d++)d in p?(i[d]=p[d],a[d]=m[d],s&&(s[d]=h[d],s[d](d))):i[d]=k(f);i=i.slice(0,o=l),r=c.slice(0)}return i});function f(e){if(a[d]=e,s){let[e,n]=A(d);return s[d]=n,t(c[d],e)}return t(c[d])}}}var be=!1;function H(e,t){if(be&&l.context){let n=l.context;d(f());let r=N(()=>e(t||{}));return d(n),r}return N(()=>e(t||{}))}var xe=e=>`Stale read from <${e}>.`;function U(e){let t=`fallback`in e&&{fallback:()=>e.fallback};return M(ye(()=>e.each,e.children,t||void 0))}function W(e){let t=e.keyed,n=M(()=>e.when,void 0,void 0),r=t?n:M(n,void 0,{equals:(e,t)=>!e==!t});return M(()=>{let i=r();if(i){let a=e.children;return typeof a==`function`&&a.length>0?N(()=>a(t?i:()=>{if(!N(r))throw xe(`Show`);return n()})):a}return e.fallback},void 0,void 0)}var G=e=>M(()=>e());function Se(e,t,n){let r=n.length,i=t.length,a=r,o=0,s=0,c=t[i-1].nextSibling,l=null;for(;o<i||s<a;){if(t[o]===n[s]){o++,s++;continue}for(;t[i-1]===n[a-1];)i--,a--;if(i===o){let t=a<r?s?n[s-1].nextSibling:n[a-s]:c;for(;s<a;)e.insertBefore(n[s++],t)}else if(a===s)for(;o<i;)(!l||!l.has(t[o]))&&t[o].remove(),o++;else if(t[o]===n[a-1]&&n[s]===t[i-1]){let r=t[--i].nextSibling;e.insertBefore(n[s++],t[o++].nextSibling),e.insertBefore(n[--a],r),t[i]=n[a]}else{if(!l){l=new Map;let e=s;for(;e<a;)l.set(n[e],e++)}let r=l.get(t[o]);if(r!=null)if(s<r&&r<a){let c=o,u=1,d;for(;++c<i&&c<a&&!((d=l.get(t[c]))==null||d!==r+u);)u++;if(u>r-s){let i=t[o];for(;s<r;)e.insertBefore(n[s++],i)}else e.replaceChild(n[s++],t[o++])}else o++;else t[o++].remove()}}}var Ce=`_$DX_DELEGATE`;function we(e,t,n,r={}){let i;return k(r=>{i=r,t===document?e():Y(t,e(),t.firstChild?null:void 0,n)},r.owner),()=>{i(),t.textContent=``}}function K(e,t,n,r){let i,a=()=>{let t=r?document.createElementNS(`http://www.w3.org/1998/Math/MathML`,`template`):document.createElement(`template`);return t.innerHTML=e,n?t.content.firstChild.firstChild:r?t.firstChild:t.content.firstChild},o=t?()=>N(()=>document.importNode(i||=a(),!0)):()=>(i||=a()).cloneNode(!0);return o.cloneNode=o,o}function q(e,t=window.document){let n=t[Ce]||(t[Ce]=new Set);for(let r=0,i=e.length;r<i;r++){let i=e[r];n.has(i)||(n.add(i),t.addEventListener(i,ke))}}function J(e,t,n){X(e)||(n==null?e.removeAttribute(t):e.setAttribute(t,n))}function Te(e,t){X(e)||(t==null?e.removeAttribute(`class`):e.className=t)}function Ee(e,t,n={}){let r=Object.keys(t||{}),i=Object.keys(n),a,o;for(a=0,o=i.length;a<o;a++){let r=i[a];!r||r===`undefined`||t[r]||(Oe(e,r,!1),delete n[r])}for(a=0,o=r.length;a<o;a++){let i=r[a],o=!!t[i];!i||i===`undefined`||n[i]===o||!o||(Oe(e,i,!0),n[i]=o)}return n}function De(e,t,n){return N(()=>e(t,n))}function Y(e,t,n,r){if(n!==void 0&&!r&&(r=[]),typeof t!=`function`)return Z(e,t,r,n);j(r=>Z(e,t(),r,n),r)}function X(e){return!!l.context&&!l.done&&(!e||e.isConnected)}function Oe(e,t,n){let r=t.trim().split(/\s+/);for(let t=0,i=r.length;t<i;t++)e.classList.toggle(r[t],n)}function ke(e){if(l.registry&&l.events&&l.events.find(([t,n])=>n===e))return;let t=e.target,n=`$$${e.type}`,r=e.target,i=e.currentTarget,a=t=>Object.defineProperty(e,`target`,{configurable:!0,value:t}),o=()=>{let r=t[n];if(r&&!t.disabled){let i=t[`${n}Data`];if(i===void 0?r.call(t,e):r.call(t,i,e),e.cancelBubble)return}return t.host&&typeof t.host!=`string`&&!t.host._$host&&t.contains(e.target)&&a(t.host),!0},s=()=>{for(;o()&&(t=t._$host||t.parentNode||t.host););};if(Object.defineProperty(e,`currentTarget`,{configurable:!0,get(){return t||document}}),l.registry&&!l.done&&(l.done=_$HY.done=!0),e.composedPath){let n=e.composedPath();a(n[0]);for(let e=0;e<n.length-2&&(t=n[e],o());e++){if(t._$host){t=t._$host,s();break}if(t.parentNode===i)break}}else s();a(r)}function Z(e,t,n,r,i){let a=X(e);if(a){!n&&(n=[...e.childNodes]);let t=[];for(let e=0;e<n.length;e++){let r=n[e];r.nodeType===8&&r.data.slice(0,2)===`!$`?r.remove():t.push(r)}n=t}for(;typeof n==`function`;)n=n();if(t===n)return n;let o=typeof t,s=r!==void 0;if(e=s&&n[0]&&n[0].parentNode||e,o===`string`||o===`number`){if(a||o===`number`&&(t=t.toString(),t===n))return n;if(s){let i=n[0];i&&i.nodeType===3?i.data!==t&&(i.data=t):i=document.createTextNode(t),n=Q(e,n,r,i)}else n=n!==``&&typeof n==`string`?e.firstChild.data=t:e.textContent=t}else if(t==null||o===`boolean`){if(a)return n;n=Q(e,n,r)}else if(o===`function`)return j(()=>{let i=t();for(;typeof i==`function`;)i=i();n=Z(e,i,n,r)}),()=>n;else if(Array.isArray(t)){let o=[],c=n&&Array.isArray(n);if(Ae(o,t,n,i))return j(()=>n=Z(e,o,n,r,!0)),()=>n;if(a){if(!o.length)return n;if(r===void 0)return n=[...e.childNodes];let t=o[0];if(t.parentNode!==e)return n;let i=[t];for(;(t=t.nextSibling)!==r;)i.push(t);return n=i}if(o.length===0){if(n=Q(e,n,r),s)return n}else c?n.length===0?je(e,o,r):Se(e,n,o):(n&&Q(e),je(e,o));n=o}else if(t.nodeType){if(a&&t.parentNode)return n=s?[t]:t;if(Array.isArray(n)){if(s)return n=Q(e,n,r,t);Q(e,n,null,t)}else n==null||n===``||!e.firstChild?e.appendChild(t):e.replaceChild(t,e.firstChild);n=t}return n}function Ae(e,t,n,r){let i=!1;for(let a=0,o=t.length;a<o;a++){let o=t[a],s=n&&n[e.length],c;if(!(o==null||o===!0||o===!1))if((c=typeof o)==`object`&&o.nodeType)e.push(o);else if(Array.isArray(o))i=Ae(e,o,s)||i;else if(c===`function`)if(r){for(;typeof o==`function`;)o=o();i=Ae(e,Array.isArray(o)?o:[o],Array.isArray(s)?s:[s])||i}else e.push(o),i=!0;else{let t=String(o);s&&s.nodeType===3&&s.data===t?e.push(s):e.push(document.createTextNode(t))}}return i}function je(e,t,n=null){for(let r=0,i=t.length;r<i;r++)e.insertBefore(t[r],n)}function Q(e,t,n,r){if(n===void 0)return e.textContent=``;let i=r||document.createTextNode(``);if(t.length){let r=!1;for(let a=t.length-1;a>=0;a--){let o=t[a];if(i!==o){let t=o.parentNode===e;!r&&!a?t?e.replaceChild(i,o):e.insertBefore(i,n):t&&o.remove()}else r=!0}}else e.insertBefore(i,n);return[i]}var Me=new class{async getHistory(){let e=await fetch(`/_recorder/api/history`);if(!e.ok)throw Error(`Failed to fetch history: ${e.statusText}`);return e.json()}async clearHistory(){let e=await fetch(`/_recorder/api/clear`,{method:`POST`});if(!e.ok)throw Error(`Failed to clear history: ${e.statusText}`)}connectToStream(e){let t=new EventSource(`/_recorder/api/stream`);return t.onmessage=t=>{try{e(JSON.parse(t.data))}catch(e){console.error(`Failed to parse SSE event:`,e)}},t.onerror=e=>{console.error(`SSE connection error:`,e)},()=>t.close()}};function Ne(){let[e,t]=A([]),[n,r]=A(!0);async function i(){r(!0);try{t(await Me.getHistory())}catch(e){console.error(`Failed to load history:`,e)}finally{r(!1)}}ee(()=>{P(Me.connectToStream(e=>{e.type===`init`?(t(e.data),r(!1)):e.type===`interaction`?t(t=>{let n=t.findIndex(t=>t.id===e.data.id);if(n>=0){let r=[...t];return r[n]=e.data,r}else return[...t,e.data]}):e.type===`clear`&&t([])}))});async function a(){await Me.clearHistory()}async function o(){await i()}let s=e().filter(e=>e.screenshot);return{interactions:e,loading:n,stats:()=>({total:e().length,actions:s.length}),clearHistory:a,refresh:o}}var Pe=K(`<button class=carousel-btn>← Previous`),Fe=K(`<div class=carousel-details><span class=carousel-id>#</span><span></span><span class=carousel-path></span><span class=carousel-time>`),Ie=K(`<div class=carousel-element><span class=carousel-element-using>:</span> "<span class=carousel-element-value></span>"`),Le=K(`<div class=carousel-info><div class=carousel-counter>Action <!> of `),Re=K(`<button class=carousel-btn>Next →`),ze=K(`<div class=carousel>`),Be=K(`<div class=carousel-empty><span class=carousel-empty-icon>📱</span><span>No actions recorded yet. Connect Appium Inspector to port 4724 and start interacting.`),Ve=e=>{let t=M(()=>e.interactions.filter(e=>e.screenshot)),n=M(()=>t()[e.currentIndex]),r=M(()=>t().length),i=()=>{e.currentIndex>0&&e.onNavigate(e.currentIndex-1)},a=()=>{e.currentIndex<r()-1&&e.onNavigate(e.currentIndex+1)},o=()=>{let e=n();return e?new Date(e.timestamp).toLocaleTimeString():``};return(()=>{var t=ze();return Y(t,H(W,{get when(){return r()>0},get fallback(){return Be()},get children(){return[(()=>{var t=Pe();return t.$$click=i,j(()=>t.disabled=e.currentIndex===0),t})(),(()=>{var t=Le(),i=t.firstChild,a=i.firstChild.nextSibling;return a.nextSibling,Y(i,()=>e.currentIndex+1,a),Y(i,r,null),Y(t,H(W,{get when(){return n()},get children(){return[(()=>{var e=Fe(),t=e.firstChild;t.firstChild;var r=t.nextSibling,i=r.nextSibling,a=i.nextSibling;return Y(t,()=>n().id,null),Y(r,()=>n().method),Y(i,()=>n().path),Y(a,o),j(e=>Ee(r,{"carousel-method":!0,[n().method]:!0},e)),e})(),H(W,{get when(){return n().elementInfo},get children(){var e=Ie(),t=e.firstChild,r=t.firstChild,i=t.nextSibling.nextSibling;return Y(t,()=>n().elementInfo.using,r),Y(i,()=>n().elementInfo.value),e}})]}}),null),t})(),(()=>{var t=Re();return t.$$click=a,j(()=>t.disabled=e.currentIndex===r()-1),t})()]}})),t})()};q([`click`]);function He(e){let t=new DOMParser().parseFromString(e,`text/xml`),n=[];function r(e,t=``,i=0){if(e.nodeType!==1)return;let a=e.getAttribute(`type`)||e.tagName,o=parseInt(e.getAttribute(`x`)||`0`),s=parseInt(e.getAttribute(`y`)||`0`),c=parseInt(e.getAttribute(`width`)||`0`),l=parseInt(e.getAttribute(`height`)||`0`),u=t+`/`+a+`[`+(i+1)+`]`;n.push({type:a,name:e.getAttribute(`name`)||``,label:e.getAttribute(`label`)||``,value:e.getAttribute(`value`)||``,enabled:e.getAttribute(`enabled`)===`true`,visible:e.getAttribute(`visible`)!==`false`&&e.getAttribute(`displayed`)!==`false`,accessible:e.getAttribute(`accessible`)===`true`,x:o,y:s,width:c,height:l,xpath:u,node:e});let d={};for(let t of Array.from(e.children)){let e=t.getAttribute(`type`)||t.tagName;d[e]=d[e]||0,r(t,u,d[e]),d[e]++}}return t.documentElement&&r(t.documentElement),n}function Ue(e){return e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}function We(e){let t=[];return e.name&&t.push({strategy:`accessibility id`,value:e.name,platform:`ios`}),e.label&&e.label!==e.name&&t.push({strategy:`accessibility id`,value:e.label,platform:`ios`}),t.push({strategy:`xpath`,value:e.xpath,platform:`generic`}),t.push({strategy:`class name`,value:e.type,platform:`generic`}),e.name&&t.push({strategy:`-ios predicate string`,value:`name == "${Ue(e.name)}"`,platform:`ios`}),e.label&&t.push({strategy:`-ios predicate string`,value:`label == "${Ue(e.label)}"`,platform:`ios`}),e.name&&t.push({strategy:`-ios class chain`,value:`**/${e.type}[\`name == "${Ue(e.name)}"\`]`,platform:`ios`}),t}function Ge(e){return We({type:e.type,name:e.name,label:e.label,xpath:e.xpath}).map(e=>({strategy:e.strategy,value:e.value}))}var $=c(o(((e,t)=>{var n=-1,r=1,i=0;function a(e,t,n,r,a){if(e===t)return e?[[i,e]]:[];if(n!=null){var s=D(e,t,n);if(s)return s}var c=l(e,t),u=e.substring(0,c);e=e.substring(c),t=t.substring(c),c=d(e,t);var f=e.substring(e.length-c);e=e.substring(0,e.length-c),t=t.substring(0,t.length-c);var m=o(e,t);return u&&m.unshift([i,u]),f&&m.push([i,f]),b(m,a),r&&p(m),m}function o(e,t){var o;if(!e)return[[r,t]];if(!t)return[[n,e]];var c=e.length>t.length?e:t,l=e.length>t.length?t:e,u=c.indexOf(l);if(u!==-1)return o=[[r,c.substring(0,u)],[i,l],[r,c.substring(u+l.length)]],e.length>t.length&&(o[0][0]=o[2][0]=n),o;if(l.length===1)return[[n,e],[r,t]];var d=f(e,t);if(d){var p=d[0],m=d[1],h=d[2],g=d[3],_=d[4],v=a(p,h),y=a(m,g);return v.concat([[i,_]],y)}return s(e,t)}function s(e,t){for(var i=e.length,a=t.length,o=Math.ceil((i+a)/2),s=o,l=2*o,u=Array(l),d=Array(l),f=0;f<l;f++)u[f]=-1,d[f]=-1;u[s+1]=0,d[s+1]=0;for(var p=i-a,m=p%2!=0,h=0,g=0,_=0,v=0,y=0;y<o;y++){for(var b=-y+h;b<=y-g;b+=2){for(var x=s+b,S=b===-y||b!==y&&u[x-1]<u[x+1]?u[x+1]:u[x-1]+1,C=S-b;S<i&&C<a&&e.charAt(S)===t.charAt(C);)S++,C++;if(u[x]=S,S>i)g+=2;else if(C>a)h+=2;else if(m){var w=s+p-b;if(w>=0&&w<l&&d[w]!==-1){var T=i-d[w];if(S>=T)return c(e,t,S,C)}}}for(var E=-y+_;E<=y-v;E+=2){for(var w=s+E,T=E===-y||E!==y&&d[w-1]<d[w+1]?d[w+1]:d[w-1]+1,D=T-E;T<i&&D<a&&e.charAt(i-T-1)===t.charAt(a-D-1);)T++,D++;if(d[w]=T,T>i)v+=2;else if(D>a)_+=2;else if(!m){var x=s+p-E;if(x>=0&&x<l&&u[x]!==-1){var S=u[x],C=s+S-x;if(T=i-T,S>=T)return c(e,t,S,C)}}}}return[[n,e],[r,t]]}function c(e,t,n,r){var i=e.substring(0,n),o=t.substring(0,r),s=e.substring(n),c=t.substring(r),l=a(i,o),u=a(s,c);return l.concat(u)}function l(e,t){if(!e||!t||e.charAt(0)!==t.charAt(0))return 0;for(var n=0,r=Math.min(e.length,t.length),i=r,a=0;n<i;)e.substring(a,i)==t.substring(a,i)?(n=i,a=n):r=i,i=Math.floor((r-n)/2+n);return x(e.charCodeAt(i-1))&&i--,i}function u(e,t){var n=e.length,r=t.length;if(n==0||r==0)return 0;n>r?e=e.substring(n-r):n<r&&(t=t.substring(0,n));var i=Math.min(n,r);if(e==t)return i;for(var a=0,o=1;;){var s=e.substring(i-o),c=t.indexOf(s);if(c==-1)return a;o+=c,(c==0||e.substring(i-o)==t.substring(0,o))&&(a=o,o++)}}function d(e,t){if(!e||!t||e.slice(-1)!==t.slice(-1))return 0;for(var n=0,r=Math.min(e.length,t.length),i=r,a=0;n<i;)e.substring(e.length-i,e.length-a)==t.substring(t.length-i,t.length-a)?(n=i,a=n):r=i,i=Math.floor((r-n)/2+n);return S(e.charCodeAt(e.length-i))&&i--,i}function f(e,t){var n=e.length>t.length?e:t,r=e.length>t.length?t:e;if(n.length<4||r.length*2<n.length)return null;function i(e,t,n){for(var r=e.substring(n,n+Math.floor(e.length/4)),i=-1,a=``,o,s,c,u;(i=t.indexOf(r,i+1))!==-1;){var f=l(e.substring(n),t.substring(i)),p=d(e.substring(0,n),t.substring(0,i));a.length<p+f&&(a=t.substring(i-p,i)+t.substring(i,i+f),o=e.substring(0,n-p),s=e.substring(n+f),c=t.substring(0,i-p),u=t.substring(i+f))}return a.length*2>=e.length?[o,s,c,u,a]:null}var a=i(n,r,Math.ceil(n.length/4)),o=i(n,r,Math.ceil(n.length/2)),s;if(!a&&!o)return null;s=o?a&&a[4].length>o[4].length?a:o:a;var c,u,f,p;e.length>t.length?(c=s[0],u=s[1],f=s[2],p=s[3]):(f=s[0],p=s[1],c=s[2],u=s[3]);var m=s[4];return[c,u,f,p,m]}function p(e){for(var t=!1,a=[],o=0,s=null,c=0,l=0,d=0,f=0,p=0;c<e.length;)e[c][0]==i?(a[o++]=c,l=f,d=p,f=0,p=0,s=e[c][1]):(e[c][0]==r?f+=e[c][1].length:p+=e[c][1].length,s&&s.length<=Math.max(l,d)&&s.length<=Math.max(f,p)&&(e.splice(a[o-1],0,[n,s]),e[a[o-1]+1][0]=r,o--,o--,c=o>0?a[o-1]:-1,l=0,d=0,f=0,p=0,s=null,t=!0)),c++;for(t&&b(e),y(e),c=1;c<e.length;){if(e[c-1][0]==n&&e[c][0]==r){var m=e[c-1][1],h=e[c][1],g=u(m,h),_=u(h,m);g>=_?(g>=m.length/2||g>=h.length/2)&&(e.splice(c,0,[i,h.substring(0,g)]),e[c-1][1]=m.substring(0,m.length-g),e[c+1][1]=h.substring(g),c++):(_>=m.length/2||_>=h.length/2)&&(e.splice(c,0,[i,m.substring(0,_)]),e[c-1][0]=r,e[c-1][1]=h.substring(0,h.length-_),e[c+1][0]=n,e[c+1][1]=m.substring(_),c++),c++}c++}}var m=/[^a-zA-Z0-9]/,h=/\s/,g=/[\r\n]/,_=/\n\r?\n$/,v=/^\r?\n\r?\n/;function y(e){function t(e,t){if(!e||!t)return 6;var n=e.charAt(e.length-1),r=t.charAt(0),i=n.match(m),a=r.match(m),o=i&&n.match(h),s=a&&r.match(h),c=o&&n.match(g),l=s&&r.match(g),u=c&&e.match(_),d=l&&t.match(v);return u||d?5:c||l?4:i&&!o&&s?3:o||s?2:i||a?1:0}for(var n=1;n<e.length-1;){if(e[n-1][0]==i&&e[n+1][0]==i){var r=e[n-1][1],a=e[n][1],o=e[n+1][1],s=d(r,a);if(s){var c=a.substring(a.length-s);r=r.substring(0,r.length-s),a=c+a.substring(0,a.length-s),o=c+o}for(var l=r,u=a,f=o,p=t(r,a)+t(a,o);a.charAt(0)===o.charAt(0);){r+=a.charAt(0),a=a.substring(1)+o.charAt(0),o=o.substring(1);var y=t(r,a)+t(a,o);y>=p&&(p=y,l=r,u=a,f=o)}e[n-1][1]!=l&&(l?e[n-1][1]=l:(e.splice(n-1,1),n--),e[n][1]=u,f?e[n+1][1]=f:(e.splice(n+1,1),n--))}n++}}function b(e,t){e.push([i,``]);for(var a=0,o=0,s=0,c=``,u=``,f;a<e.length;){if(a<e.length-1&&!e[a][1]){e.splice(a,1);continue}switch(e[a][0]){case r:s++,u+=e[a][1],a++;break;case n:o++,c+=e[a][1],a++;break;case i:var p=a-s-o-1;if(t){if(p>=0&&w(e[p][1])){var m=e[p][1].slice(-1);if(e[p][1]=e[p][1].slice(0,-1),c=m+c,u=m+u,!e[p][1]){e.splice(p,1),a--;var h=p-1;e[h]&&e[h][0]===r&&(s++,u=e[h][1]+u,h--),e[h]&&e[h][0]===n&&(o++,c=e[h][1]+c,h--),p=h}}if(C(e[a][1])){var m=e[a][1].charAt(0);e[a][1]=e[a][1].slice(1),c+=m,u+=m}}if(a<e.length-1&&!e[a][1]){e.splice(a,1);break}if(c.length>0||u.length>0){c.length>0&&u.length>0&&(f=l(u,c),f!==0&&(p>=0?e[p][1]+=u.substring(0,f):(e.splice(0,0,[i,u.substring(0,f)]),a++),u=u.substring(f),c=c.substring(f)),f=d(u,c),f!==0&&(e[a][1]=u.substring(u.length-f)+e[a][1],u=u.substring(0,u.length-f),c=c.substring(0,c.length-f)));var g=s+o;c.length===0&&u.length===0?(e.splice(a-g,g),a-=g):c.length===0?(e.splice(a-g,g,[r,u]),a=a-g+1):u.length===0?(e.splice(a-g,g,[n,c]),a=a-g+1):(e.splice(a-g,g,[n,c],[r,u]),a=a-g+2)}a!==0&&e[a-1][0]===i?(e[a-1][1]+=e[a][1],e.splice(a,1)):a++,s=0,o=0,c=``,u=``;break}}e[e.length-1][1]===``&&e.pop();var _=!1;for(a=1;a<e.length-1;)e[a-1][0]===i&&e[a+1][0]===i&&(e[a][1].substring(e[a][1].length-e[a-1][1].length)===e[a-1][1]?(e[a][1]=e[a-1][1]+e[a][1].substring(0,e[a][1].length-e[a-1][1].length),e[a+1][1]=e[a-1][1]+e[a+1][1],e.splice(a-1,1),_=!0):e[a][1].substring(0,e[a+1][1].length)==e[a+1][1]&&(e[a-1][1]+=e[a+1][1],e[a][1]=e[a][1].substring(e[a+1][1].length)+e[a+1][1],e.splice(a+1,1),_=!0)),a++;_&&b(e,t)}function x(e){return e>=55296&&e<=56319}function S(e){return e>=56320&&e<=57343}function C(e){return S(e.charCodeAt(0))}function w(e){return x(e.charCodeAt(e.length-1))}function T(e){for(var t=[],n=0;n<e.length;n++)e[n][1].length>0&&t.push(e[n]);return t}function E(e,t,a,o){return w(e)||C(o)?null:T([[i,e],[n,t],[r,a],[i,o]])}function D(e,t,n){var r=typeof n==`number`?{index:n,length:0}:n.oldRange,i=typeof n==`number`?null:n.newRange,a=e.length,o=t.length;if(r.length===0&&(i===null||i.length===0)){var s=r.index,c=e.slice(0,s),l=e.slice(s),u=i?i.index:null;editBefore:{var d=s+o-a;if(u!==null&&u!==d||d<0||d>o)break editBefore;var f=t.slice(0,d),p=t.slice(d);if(p!==l)break editBefore;var m=Math.min(s,d),h=c.slice(0,m),g=f.slice(0,m);if(h!==g)break editBefore;var _=c.slice(m),v=f.slice(m);return E(h,_,v,l)}editAfter:{if(u!==null&&u!==s)break editAfter;var y=s,f=t.slice(0,y),p=t.slice(y);if(f!==c)break editAfter;var b=Math.min(a-y,o-y),x=l.slice(l.length-b),S=p.slice(p.length-b);if(x!==S)break editAfter;var _=l.slice(0,l.length-b),v=p.slice(0,p.length-b);return E(c,_,v,x)}}if(r.length>0&&i&&i.length===0)replaceRange:{var h=e.slice(0,r.index),x=e.slice(r.index+r.length),m=h.length,b=x.length;if(o<m+b)break replaceRange;var g=t.slice(0,m),S=t.slice(o-b);if(h!==g||x!==S)break replaceRange;var _=e.slice(m,a-b),v=t.slice(m,o-b);return E(h,_,v,x)}return null}function O(e,t,n,r){return a(e,t,n,r,!0)}O.INSERT=r,O.DELETE=n,O.EQUAL=i,t.exports=O}))(),1),Ke={[$.default.EQUAL]:`equal`,[$.default.INSERT]:`insert`,[$.default.DELETE]:`delete`};function qe(e){let t=[],n=0,r=e.replace(/></g,`>
2
+ <`).split(`
3
+ `);for(let e of r){let r=e.trim();if(!r)continue;if(r.startsWith(`</`)){n=Math.max(0,n-1),t.push(`${` `.repeat(n)}${r}`);continue}if(r.startsWith(`<?`)||r.startsWith(`<!--`)){t.push(`${` `.repeat(n)}${r}`);continue}let i=r.endsWith(`/>`),a=r.match(/^<([^\s/>]+)(.*?)(\/?)>$/);if(!a||r.includes(`</`)){t.push(`${` `.repeat(n)}${r}`);continue}let[,o,s,c]=a,l=Array.from(s.matchAll(/([^\s=]+="[^"]*")/g)).map(e=>e[1]);!(l.length>2||r.length>120)||l.length===0?t.push(`${` `.repeat(n)}${r}`):(t.push(`${` `.repeat(n)}<${o}`),l.forEach(e=>{t.push(`${` `.repeat(n+1)}${e}`)}),t.push(`${` `.repeat(n)}${i||c===`/`?`/>`:`>`}`)),!i&&c!==`/`&&n++}return t}function Je(e,t){let n=new Map,r=new Map,i=65536,a=e=>e.map(e=>{let t=n.get(e);return t||(t=String.fromCodePoint(i++),n.set(e,t),r.set(t,e)),t}).join(``);return{diff:(0,$.default)(a(e),a(t)),tokenToLine:r}}function Ye(e,t){let{diff:n,tokenToLine:r}=Je(qe(e),qe(t)),i=[],a=1,o=1;for(let[e,t]of n){let n=Ke[e]??`equal`;for(let e of Array.from(t)){let t=r.get(e)??``;if(n===`equal`){i.push({type:n,previousLineNumber:a,currentLineNumber:o,text:t}),a++,o++;continue}if(n===`delete`){i.push({type:n,previousLineNumber:a,currentLineNumber:null,text:t}),a++;continue}i.push({type:n,previousLineNumber:null,currentLineNumber:o,text:t}),o++}}return i}function Xe(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r.type===`equal`){t.push({previousLineNumber:r.previousLineNumber,previousText:r.text,currentLineNumber:r.currentLineNumber,currentText:r.text});continue}let i=[r];for(;n+1<e.length&&e[n+1].type!==`equal`;)i.push(e[++n]);let a=i.filter(e=>e.type===`delete`),o=i.filter(e=>e.type===`insert`),s=Math.max(a.length,o.length);for(let e=0;e<s;e++)t.push({previousLineNumber:a[e]?.previousLineNumber??null,previousText:a[e]?.text??null,currentLineNumber:o[e]?.currentLineNumber??null,currentText:o[e]?.text??null})}return t}function Ze(e){let t=[];for(let n of e){let e=`${n.text}\n`,r=t[t.length-1];if(r&&r.type===n.type){r.text+=e;continue}t.push({type:n.type,text:e})}return t}function Qe(e){let t=e.match(/<[a-zA-Z][^>]*>/g);return t?t.length:0}function $e(e,t){if(!e||!t)return null;let n=Ye(e,t),r=Xe(n),i=Ze(n),a=Qe(e),o=Qe(t),s=n.filter(e=>e.type===`insert`).length,c=n.filter(e=>e.type===`delete`).length;return{segments:i,lines:n,rows:r,prevElementCount:a,currElementCount:o,elementCountDelta:o-a,insertedLineCount:s,deletedLineCount:c,changedLineCount:s+c}}var et=K(`<div class=diff-subtitle> changed line`),tt=K(`<div class=diff-controls><button type=button class=diff-toggle>Changes Only</button><button type=button class=diff-toggle>Full Context`),nt=K(`<img alt="Previous screenshot"class=diff-screenshot-img>`),rt=K(`<img alt="Current screenshot"class=diff-screenshot-img>`),it=K(`<div class=diff-preview-grid><div class=diff-preview-card><div class=diff-label>Previous</div></div><div class=diff-preview-card><div class=diff-label>Current`),at=K(`<div class=diff-stats><span class=diff-stat>Elements: <!> → </span><span class=diff-stat>(<!>)</span><span class="diff-stat diff-stat-insert">+<!> added</span><span class="diff-stat diff-stat-delete">-<!> removed`),ot=K(`<div class=diff-empty>No previous action to compare with.`),st=K(`<div class=diff-empty>No XML changes between steps.`),ct=K(`<div class=diff-source><div class=diff-source-toolbar><div class=diff-copy-group><button type=button class=diff-copy-btn></button><button type=button class=diff-copy-btn></button></div></div><div class=diff-source-head><span>Prev</span><span>Previous XML</span><span>Curr</span><span>Current XML</span></div><div class=diff-source-body>`),lt=K(`<div class=diff-panel><div class=diff-header><div><h3 class=section-title>Diff (Previous → Current)`),ut=K(`<div><span class=diff-line-number></span><code class="diff-line-text diff-line-text-prev"></code><span class=diff-line-number></span><code class="diff-line-text diff-line-text-curr">`),dt=e=>{let[t,n]=A(!0),[r,i]=A(null),a=M(()=>e.previous?$e(e.previous.source,e.current.source):null),o=M(()=>{let e=a();return e?e.changedLineCount>0:!1}),s=M(()=>{let e=a();return e?t()?e.rows.filter(e=>e.previousText!==e.currentText):e.rows:[]}),c=e=>e==null?``:String(e),l=e=>e.previousText&&e.currentText&&e.previousText!==e.currentText?`diff-row diff-row-modified`:e.previousText&&!e.currentText?`diff-row diff-row-deleted`:!e.previousText&&e.currentText?`diff-row diff-row-inserted`:`diff-row diff-row-equal`,u=e=>{if(!e)return``;let t=``,n=0,r=e.replace(/></g,`>
4
+ <`).split(`
5
+ `);for(let e of r){let r=e.trim();r&&(r.startsWith(`</`)&&(n=Math.max(0,n-1)),t+=`${` `.repeat(n)}${r}\n`,r.startsWith(`<`)&&!r.startsWith(`</`)&&!r.endsWith(`/>`)&&!r.includes(`</`)&&n++)}return t},d=async t=>{let n=t===`previous`?e.previous?.source:e.current.source;n&&(await navigator.clipboard.writeText(u(n)),i(t),setTimeout(()=>i(e=>e===t?null:e),2e3))};return(()=>{var i=lt(),u=i.firstChild,f=u.firstChild;return f.firstChild,Y(f,H(W,{get when(){return a()},get children(){var e=et(),t=e.firstChild;return Y(e,()=>a().changedLineCount,t),Y(e,()=>a().changedLineCount===1?``:`s`,null),e}}),null),Y(u,H(W,{get when(){return o()},get children(){var e=tt(),r=e.firstChild,i=r.nextSibling;return r.$$click=()=>n(!0),i.$$click=()=>n(!1),j(e=>{var n=!!t(),a=!t();return n!==e.e&&r.classList.toggle(`active`,e.e=n),a!==e.t&&i.classList.toggle(`active`,e.t=a),e},{e:void 0,t:void 0}),e}}),null),Y(i,H(W,{get when(){return e.previous},get children(){var t=it(),n=t.firstChild;n.firstChild;var r=n.nextSibling;return r.firstChild,Y(n,H(W,{get when(){return e.previous.screenshot},get children(){var t=nt();return j(()=>J(t,`src`,`data:image/png;base64,${e.previous.screenshot}`)),t}}),null),Y(r,H(W,{get when(){return e.current.screenshot},get children(){var t=rt();return j(()=>J(t,`src`,`data:image/png;base64,${e.current.screenshot}`)),t}}),null),t}}),null),Y(i,H(W,{get when(){return a()},get children(){var e=at(),t=e.firstChild,n=t.firstChild.nextSibling;n.nextSibling;var r=t.nextSibling,i=r.firstChild.nextSibling;i.nextSibling;var o=r.nextSibling,s=o.firstChild.nextSibling;s.nextSibling;var c=o.nextSibling,l=c.firstChild.nextSibling;return l.nextSibling,Y(t,()=>a().prevElementCount,n),Y(t,()=>a().currElementCount,null),Y(r,()=>a().elementCountDelta>=0?`+`:``,i),Y(r,()=>a().elementCountDelta,i),Y(o,()=>a().insertedLineCount,s),Y(c,()=>a().deletedLineCount,l),j(e=>{var t=a().elementCountDelta>0,n=a().elementCountDelta<0;return t!==e.e&&r.classList.toggle(`diff-stat-positive`,e.e=t),n!==e.t&&r.classList.toggle(`diff-stat-negative`,e.t=n),e},{e:void 0,t:void 0}),e}}),null),Y(i,H(W,{get when(){return!e.previous},get children(){return ot()}}),null),Y(i,H(W,{get when(){return G(()=>!!e.previous)()&&!o()},get children(){return st()}}),null),Y(i,H(W,{get when(){return G(()=>!!e.previous)()&&o()},get children(){var e=ct(),t=e.firstChild,n=t.firstChild.firstChild,i=n.nextSibling,a=t.nextSibling.nextSibling;return n.$$click=()=>void d(`previous`),Y(n,()=>r()===`previous`?`Copied Previous XML`:`Copy Previous XML`),i.$$click=()=>void d(`current`),Y(i,()=>r()===`current`?`Copied Current XML`:`Copy Current XML`),Y(a,H(U,{get each(){return s()},children:e=>(()=>{var t=ut(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling,a=i.nextSibling;return Y(n,()=>c(e.previousLineNumber)),Y(r,()=>e.previousText??``),Y(i,()=>c(e.currentLineNumber)),Y(a,()=>e.currentText??``),j(()=>Te(t,l(e))),t})()})),e}}),null),i})()};q([`click`]);var ft=K(`<span class=journey-chip>`),pt=K(`<div class=journey-selector>: "<!>"`),mt=K(`<div class=journey-hero-screen><img class=journey-hero-image>`),ht=K(`<div class=journey-hero><div class=journey-hero-copy><div class=journey-kicker>Journey</div><h3 class=journey-title>Action <!> of </h3><div class=journey-meta><span class=journey-chip>#</span><span class=journey-chip></span></div><div class=journey-path>`),gt=K(`<div class=journey-strip-header><div><h4 class=journey-strip-title>All Screens</h4><div class=journey-strip-subtitle>Select any step to make it the active screen.`),_t=K(`<div class=journey-strip>`),vt=K(`<div class=journey-panel>`),yt=K(`<div class=journey-empty>No journey screenshots available yet.`),bt=K(`<img class=journey-thumb-image>`),xt=K(`<button type=button class=journey-thumb><div class=journey-thumb-frame></div><div class=journey-thumb-meta><span class=journey-thumb-index>#</span><span class=journey-thumb-kind>`),St=e=>{let t=M(()=>e.actions.map((e,t)=>({action:e,originalIndex:t})).filter(({action:e})=>e.actionKind!==`find`)),n=M(()=>{let n=t(),r=n.findIndex(t=>t.originalIndex===e.currentIndex);if(r>=0)return r;for(let t=n.length-1;t>=0;t--)if(n[t].originalIndex<e.currentIndex)return t;return n.length>0?0:-1}),r=M(()=>{let e=n();return e>=0?t()[e]:void 0}),i=M(()=>r()?.action);return(()=>{var r=vt();return Y(r,H(W,{get when(){return i()},get fallback(){return yt()},get children(){return[(()=>{var e=ht(),r=e.firstChild,a=r.firstChild.nextSibling,o=a.firstChild.nextSibling;o.nextSibling;var s=a.nextSibling,c=s.firstChild;c.firstChild;var l=c.nextSibling,u=s.nextSibling;return Y(a,()=>n()+1,o),Y(a,()=>t().length,null),Y(c,()=>i().id,null),Y(l,()=>i().method),Y(s,H(W,{get when(){return i().actionKind},get children(){var e=ft();return Y(e,()=>i().actionKind),e}}),null),Y(u,()=>i().path),Y(r,H(W,{get when(){return i().elementInfo},get children(){var e=pt(),t=e.firstChild,n=t.nextSibling;return n.nextSibling,Y(e,()=>i().elementInfo.using,t),Y(e,()=>i().elementInfo.value,n),e}}),null),Y(e,H(W,{get when(){return i().screenshot},get children(){var e=mt(),t=e.firstChild;return j(e=>{var r=`data:image/png;base64,${i().screenshot}`,a=`Action ${n()+1} screenshot`;return r!==e.e&&J(t,`src`,e.e=r),a!==e.t&&J(t,`alt`,e.t=a),e},{e:void 0,t:void 0}),e}}),null),e})(),gt(),(()=>{var r=_t();return Y(r,H(U,{get each(){return t()},children:(t,r)=>(()=>{var i=xt(),a=i.firstChild,o=a.nextSibling.firstChild;o.firstChild;var s=o.nextSibling;return i.$$click=()=>e.onSelectAction?.(t.originalIndex),Y(a,H(W,{get when(){return t.action.screenshot},get children(){var e=bt();return j(n=>{var i=`data:image/png;base64,${t.action.screenshot}`,a=`Action ${r()+1}`;return i!==n.e&&J(e,`src`,n.e=i),a!==n.t&&J(e,`alt`,n.t=a),n},{e:void 0,t:void 0}),e}})),Y(o,()=>r()+1,null),Y(s,()=>t.action.actionKind||t.action.method),j(()=>i.classList.toggle(`active`,r()===n())),i})()})),r})()]}})),r})()};q([`click`]);var Ct=K(`<div class=stability-best>Best: <code></code> — stable for <!>/<!> steps`),wt=K(`<div class=selector-stability><h4 class=stability-title>Selector Stability</h4><div class=stability-table><div class=stability-header><span class=stability-col-strategy>Strategy</span><span class=stability-col-value>Value</span><span class=stability-col-stable>Stable</span><span class=stability-col-fail>First Fail`),Tt=K(`<div class=stability-row><span class=stability-col-strategy></span><span class=stability-col-value></span><span class=stability-col-stable>/</span><span class=stability-col-fail>`);function Et(e,t,n){switch(e){case`accessibility id`:return n.filter(e=>e.name===t||e.label===t).length;case`class name`:return n.filter(e=>e.type===t).length;case`xpath`:return n.filter(e=>e.xpath===t).length;case`-ios predicate string`:{let e=t.match(/(name|label|type)\s*==\s*['"](.+?)['"]/i);if(e){let[,t,r]=e;return n.filter(e=>t===`name`?e.name===r:t===`label`?e.label===r:e.type===r).length}return 0}case`-ios class chain`:{let e=t.match(/\*\*\/(\w+)(?:\[`(.+?)`\])?/);if(!e)return 0;let r=e[1],i=e[2];return n.filter(e=>{if(e.type!==r)return!1;if(!i)return!0;let t=i.match(/name\s*==\s*['"](.*)['"]/i);if(t)return e.name===t[1];let n=i.match(/label\s*==\s*['"](.*)['"]/i);return n?e.label===n[1]:!0}).length}default:return 0}}var Dt=e=>{let t=M(()=>{if(!e.selectedElement||e.locators.length===0||e.futureActions.length===0)return[];let t=e.futureActions.filter(e=>e.source).map(e=>He(e.source));return t.length===0?[]:e.locators.map(e=>{let n=0,r=0;for(let i=0;i<t.length;i++)Et(e.strategy,e.value,t[i])===1?n++:r===0&&(r=i+1);return{strategy:e.strategy,value:e.value,stableSteps:n,firstFailureStep:r,totalSteps:t.length}}).sort((e,t)=>t.stableSteps-e.stableSteps)}),n=M(()=>{let e=t();return e.length>0&&e[0].stableSteps>0?e[0]:null});return H(W,{get when(){return t().length>0},get children(){var e=wt(),r=e.firstChild.nextSibling;return r.firstChild,Y(e,H(W,{get when(){return n()},get children(){var e=Ct(),t=e.firstChild.nextSibling,r=t.nextSibling.nextSibling,i=r.nextSibling.nextSibling;return i.nextSibling,Y(t,()=>n().strategy),Y(e,()=>n().stableSteps,r),Y(e,()=>n().totalSteps,i),e}}),r),Y(r,H(U,{get each(){return t()},children:e=>(()=>{var t=Tt(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling,a=i.firstChild,o=i.nextSibling;return Y(n,()=>e.strategy),Y(r,()=>e.value),Y(i,()=>e.stableSteps,a),Y(i,()=>e.totalSteps,null),Y(o,(()=>{var t=G(()=>e.firstFailureStep===0);return()=>t()?`—`:`Step ${e.firstFailureStep}`})()),j(n=>{var i=e.firstFailureStep===0,a=e.firstFailureStep>0&&e.stableSteps>0,o=e.stableSteps===0,s=e.value;return i!==n.e&&t.classList.toggle(`stability-row-good`,n.e=i),a!==n.t&&t.classList.toggle(`stability-row-warn`,n.t=a),o!==n.a&&t.classList.toggle(`stability-row-bad`,n.a=o),s!==n.o&&J(r,`title`,n.o=s),n},{e:void 0,t:void 0,a:void 0,o:void 0}),t})()}),null),e}})},Ot=K(`<div class=inspector-tabs><button class=inspector-tab>Inspect</button><button class=inspector-tab>Diff</button><button class=inspector-tab>Journey`),kt=K(`<div class="query-result success">Found <!> element(s)`),At=K(`<div class="query-result error"><span class=error-icon>⚠️</span><span></span><button class=error-dismiss>✕`),jt=K(`<div class=element-attr><span class=attr-name>Name:</span><span class=attr-value>`),Mt=K(`<div class=element-attr><span class=attr-name>Label:</span><span class=attr-value>`),Nt=K(`<div class=element-panel><div class=element-details><div class=element-attr><span class=attr-name>Type:</span><span class=attr-value></span></div><div class=element-attr><span class=attr-name>Bounds:</span><span class=attr-value>x=<!>, y=<!>, w=<!>, h=</span></div></div><div class=locators-section><h4>Locators (click to copy)</h4><div class=locators-list>`),Pt=K(`<div class=query-section><h3 class=section-title>Query Tester</h3><div class=query-row><select class=query-select><option value="accessibility id">accessibility id</option><option value=xpath>xpath</option><option value="class name">class name</option><option value="-ios predicate string">-ios predicate string</option><option value="-ios class chain">-ios class chain</option></select><input type=text placeholder="Enter locator value..."class=query-input><button class=query-btn>Find`),Ft=K(`<img alt=Screenshot class=screenshot-image>`),It=K(`<div class=content-area><div class=screenshot-section></div><div class=xml-section><h3 class=section-title>XML Source</h3><pre class=xml-source>`),Lt=K(`<div class=main-inspector>`),Rt=K(`<div class=inspector-empty><div class=inspector-empty-content><span class=inspector-empty-icon>🔍</span><span class=inspector-empty-text>Select an action to inspect`),zt=K(`<span class=copied-badge>Copied!`),Bt=K(`<div class=locator-row><span class=locator-strategy></span><span class=locator-value>`),Vt=e=>{let[t,n]=A(null),[r,i]=A(`accessibility id`),[a,o]=A(``),[s,c]=A([]),[l,u]=A(null),[d,f]=A(null),[p,m]=A(void 0),[h,g]=A(`inspect`);ee(()=>{e.interaction&&(n(null),o(``),c([]))});let _=()=>e.interaction?.source?He(e.interaction.source):[],v=M(()=>{let t=e.allActions||[],n=e.currentIndex??-1;return n<0||n>=t.length?[]:t.slice(n+1)}),y=()=>{let t=r(),i=a().trim();if(f(null),!i)return;let o=_(),s=[];switch(t){case`accessibility id`:s=o.filter(e=>e.name===i||e.label===i);break;case`class name`:s=o.filter(e=>e.type===i);break;case`xpath`:if(e.interaction?.source)try{let t=new DOMParser().parseFromString(e.interaction.source,`text/xml`),n=t.evaluate(i,t,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null),r=[];for(let e=0;e<n.snapshotLength;e++){let t=n.snapshotItem(e);t&&t.nodeType===1&&r.push(t)}s=o.filter(e=>r.some(t=>e.node.isEqualNode(t)))}catch(e){console.error(`Invalid XPath expression:`,e)}break;case`-ios predicate string`:s=o.filter(e=>{let t=i.toLowerCase();if(t.includes(`name`)){let t=i.match(/name\s*(==|CONTAINS)\s*['"](.*)['"]/i);if(t)return t[1]===`==`?e.name===t[2]:e.name.includes(t[2])}if(t.includes(`label`)){let t=i.match(/label\s*(==|CONTAINS)\s*['"](.*)['"]/i);if(t)return t[1]===`==`?e.label===t[2]:e.label.includes(t[2])}if(t.includes(`type`)){let t=i.match(/type\s*(==|CONTAINS)\s*['"](.*)['"]/i);if(t)return t[1]===`==`?e.type===t[2]:e.type.includes(t[2])}return!1});break;case`-ios class chain`:{let e=i.match(/\*\*\/(\w+)(?:\[`(.+?)`\])?/);if(e){let t=e[1],n=e[2];s=o.filter(e=>{if(e.type!==t)return!1;if(!n)return!0;let r=n.match(/name\s*==\s*['"](.*)['"]/i);if(r)return e.name===r[1];let i=n.match(/label\s*==\s*['"](.*)['"]/i);return i?e.label===i[1]:!0})}break}}c(s),s.length>0?(n(s[0]),f(null)):(n(null),f(`No elements found for ${t}: "${i}"`))},b=e=>{navigator.clipboard.writeText(e),u(e),setTimeout(()=>u(null),2e3)},x=()=>{let e=t();return e?Ge(e):[]},S=e=>{let t=``,n=0,r=e.replace(/></g,`>
6
+ <`).split(`
7
+ `);for(let e of r){let r=e.trim();r&&(r.startsWith(`</`)&&(n=Math.max(0,n-1)),t+=` `.repeat(n)+r+`
8
+ `,r.startsWith(`<`)&&!r.startsWith(`</`)&&!r.endsWith(`/>`)&&!r.includes(`</`)&&n++)}return t};return j(()=>{let t=p();t&&(t.textContent=S(e.interaction?.source||``))}),(()=>{var n=Lt();return Y(n,H(W,{get when(){return e.interaction},get fallback(){return Rt()},get children(){return[(()=>{var e=Ot(),t=e.firstChild,n=t.nextSibling,r=n.nextSibling;return t.$$click=()=>g(`inspect`),n.$$click=()=>g(`diff`),r.$$click=()=>g(`journey`),j(e=>{var i=h()===`inspect`,a=h()===`diff`,o=h()===`journey`;return i!==e.e&&t.classList.toggle(`active`,e.e=i),a!==e.t&&n.classList.toggle(`active`,e.t=a),o!==e.a&&r.classList.toggle(`active`,e.a=o),e},{e:void 0,t:void 0,a:void 0}),e})(),H(W,{get when(){return h()===`inspect`},get children(){return[(()=>{var e=Pt(),n=e.firstChild.nextSibling.firstChild,c=n.nextSibling,u=c.nextSibling;return n.addEventListener(`change`,e=>i(e.currentTarget.value)),c.addEventListener(`keypress`,e=>e.key===`Enter`&&y()),c.$$input=e=>o(e.currentTarget.value),u.$$click=y,Y(e,H(W,{get when(){return s().length>0},get children(){var e=kt(),t=e.firstChild.nextSibling;return t.nextSibling,Y(e,()=>s().length,t),e}}),null),Y(e,H(W,{get when(){return d()},get children(){var e=At(),t=e.firstChild.nextSibling,n=t.nextSibling;return Y(t,d),n.$$click=()=>f(null),e}}),null),Y(e,H(W,{get when(){return t()},get children(){var e=Nt(),n=e.firstChild,r=n.firstChild,i=r.firstChild.nextSibling,a=r.nextSibling,o=a.firstChild.nextSibling,s=o.firstChild.nextSibling,c=s.nextSibling.nextSibling,u=c.nextSibling.nextSibling;u.nextSibling;var d=n.nextSibling,f=d.firstChild.nextSibling;return Y(i,()=>t().type),Y(n,H(W,{get when(){return t().name},get children(){var e=jt(),n=e.firstChild.nextSibling;return Y(n,()=>t().name),e}}),a),Y(n,H(W,{get when(){return t().label},get children(){var e=Mt(),n=e.firstChild.nextSibling;return Y(n,()=>t().label),e}}),a),Y(o,()=>t().x,s),Y(o,()=>t().y,c),Y(o,()=>t().width,u),Y(o,()=>t().height,null),Y(f,H(U,{get each(){return x()},children:e=>(()=>{var t=Bt(),n=t.firstChild,r=n.nextSibling;return t.$$click=()=>b(e.value),Y(n,()=>e.strategy),Y(r,()=>e.value),Y(t,H(W,{get when(){return l()===e.value},get children(){return zt()}}),null),j(()=>t.classList.toggle(`copied`,l()===e.value)),t})()})),Y(d,H(Dt,{get selectedElement(){return t()},get locators(){return x()},get futureActions(){return v()}}),null),e}}),null),j(()=>n.value=r()),j(()=>c.value=a()),e})(),(()=>{var t=It(),n=t.firstChild,r=n.nextSibling.firstChild.nextSibling;return Y(n,H(W,{get when(){return e.interaction.screenshot},get children(){var t=Ft();return j(()=>J(t,`src`,`data:image/png;base64,${e.interaction.screenshot}`)),t}})),De(e=>{m(e),P(()=>{m(void 0)})},r),t})()]}}),H(W,{get when(){return h()===`diff`},get children(){return H(dt,{get current(){return e.interaction},get previous(){return e.previousInteraction}})}}),H(W,{get when(){return h()===`journey`},get children(){return H(St,{get actions(){return e.allActions||[]},get currentIndex(){return e.currentIndex??0},get onSelectAction(){return e.onSelectAction}})}})]}})),n})()};q([`click`,`input`]);var Ht=K(`<div class=app><main class=app-main>`),Ut=()=>{let{interactions:e}=Ne(),[t,n]=A(0),r=M(()=>e().filter(e=>e.screenshot)),i=M(()=>r()[t()]),a=M(()=>{let e=t();return e>0?r()[e-1]:void 0});return ee(()=>{let e=r().length;e>0&&n(e-1)}),(()=>{var o=Ht(),s=o.firstChild;return Y(o,H(Ve,{get interactions(){return e()},get currentIndex(){return t()},onNavigate:n}),s),Y(s,H(Vt,{get interaction(){return i()},get previousInteraction(){return a()},get allActions(){return r()},get currentIndex(){return t()},onSelectAction:n})),o})()},Wt=document.getElementById(`root`);if(!Wt)throw Error(`Root element not found`);we(()=>H(Ut,{}),Wt);
@@ -0,0 +1 @@
1
+ .carousel{align-items:center;gap:var(--spacing-4);padding:var(--spacing-3) var(--spacing-6);background:var(--color-bg-secondary);border-bottom:1px solid var(--color-border);display:flex}.carousel-empty{justify-content:center;align-items:center;gap:var(--spacing-3);color:var(--color-text-tertiary);font-size:var(--font-size-sm);padding:var(--spacing-2) 0;flex:1;display:flex}.carousel-empty-icon{font-size:var(--font-size-lg)}.carousel-btn{background:var(--color-bg-secondary);color:var(--color-text-secondary);border:1px solid var(--color-border);padding:var(--spacing-2) var(--spacing-4);border-radius:var(--radius-lg);cursor:pointer;font-weight:var(--font-weight-medium);font-size:var(--font-size-sm);transition:all var(--transition-fast);white-space:nowrap}.carousel-btn:hover:not(:disabled){background:var(--color-accent-primary);color:#fff;border-color:var(--color-accent-primary)}.carousel-btn:disabled{opacity:.35;cursor:not-allowed}.carousel-info{align-items:center;gap:var(--spacing-1);flex-direction:column;flex:1;display:flex}.carousel-counter{font-size:var(--font-size-xs);color:var(--color-text-tertiary);font-weight:var(--font-weight-medium);letter-spacing:.02em}.carousel-details{align-items:center;gap:var(--spacing-3);flex-wrap:wrap;justify-content:center;display:flex}.carousel-id{font-size:var(--font-size-xs);color:var(--color-text-tertiary);font-weight:var(--font-weight-medium)}.carousel-method{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);padding:2px var(--spacing-2);border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.03em}.carousel-method.POST{color:var(--color-accent-success);background:#e8f5ee}.carousel-method.GET{color:var(--color-accent-warning);background:#fff3e0}.carousel-method.DELETE{color:var(--color-accent-error);background:#fdeceb}.carousel-path{font-size:var(--font-size-sm);color:var(--color-text-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:400px;overflow:hidden}.carousel-time{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.carousel-element{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.carousel-element-using{color:var(--color-accent-secondary);font-weight:var(--font-weight-medium)}.carousel-element-value{color:var(--color-accent-primary)}.diff-panel{gap:var(--spacing-4);padding:var(--spacing-4);background:var(--color-bg-primary);flex-direction:column;flex:1;min-height:0;display:flex;overflow:auto}.diff-header{justify-content:space-between;align-items:flex-start;gap:var(--spacing-3);flex-wrap:wrap;display:flex}.diff-subtitle{color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.diff-controls{gap:var(--spacing-2);display:flex}.diff-toggle{border:1px solid var(--color-border);background:var(--color-bg-secondary);color:var(--color-text-secondary);border-radius:var(--radius-md);padding:var(--spacing-2) var(--spacing-3);font-size:var(--font-size-xs);cursor:pointer;transition:all var(--transition-fast)}.diff-toggle.active{background:var(--color-accent-primary);border-color:var(--color-accent-primary);color:#fff}.diff-preview-grid{gap:var(--spacing-4);grid-template-columns:repeat(auto-fit,minmax(260px,1fr));display:grid}.diff-preview-card{gap:var(--spacing-2);padding:var(--spacing-3);border:1px solid var(--color-border);border-radius:var(--radius-xl);background:var(--color-bg-secondary);flex-direction:column;align-items:center;display:flex}.diff-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em}.diff-screenshot-img{border-radius:var(--radius-lg);width:100%;max-width:280px;max-height:420px;box-shadow:var(--shadow-sm);object-fit:contain;border:1px solid var(--color-border)}.diff-stats{gap:var(--spacing-3);padding:var(--spacing-2) var(--spacing-3);background:var(--color-bg-secondary);border-radius:var(--radius-md);font-size:var(--font-size-sm);font-family:var(--font-mono);display:flex}.diff-stat{color:var(--color-text-secondary)}.diff-stat-positive{color:var(--color-accent-success)}.diff-stat-negative{color:var(--color-accent-error)}.diff-stat-insert{color:var(--color-accent-success)}.diff-stat-delete{color:var(--color-accent-error)}.diff-empty{padding:var(--spacing-5);border:1px dashed var(--color-border);border-radius:var(--radius-lg);background:var(--color-bg-secondary);color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.diff-source{background:var(--color-bg-secondary);border-radius:var(--radius-lg);border:1px solid var(--color-border);flex-direction:column;flex:1;min-height:420px;display:flex;overflow:hidden}.diff-source-toolbar{padding:var(--spacing-3) var(--spacing-4);border-bottom:1px solid var(--color-border);background:#ffffffa6;justify-content:flex-end;align-items:center;display:flex}.diff-copy-group{gap:var(--spacing-2);flex-wrap:wrap;display:flex}.diff-copy-btn{border:1px solid var(--color-border);color:var(--color-text-secondary);border-radius:var(--radius-md);padding:var(--spacing-2) var(--spacing-3);font-size:var(--font-size-xs);cursor:pointer;transition:all var(--transition-fast);background:#fff}.diff-copy-btn:hover{border-color:var(--color-accent-primary);color:var(--color-accent-primary)}.diff-source-head,.diff-row{gap:var(--spacing-2);grid-template-columns:72px minmax(0,1fr) 72px minmax(0,1fr);align-items:start;display:grid}.diff-source-head{padding:var(--spacing-3) var(--spacing-4);border-bottom:1px solid var(--color-border);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.04em}.diff-source-body{font-family:var(--font-mono);background:#fff;flex:1;font-size:13px;line-height:1.7;overflow:auto}.diff-row{padding:0 var(--spacing-4);border-bottom:1px solid #0f172a0d}.diff-line-number{min-height:100%;color:var(--color-text-tertiary);-webkit-user-select:none;user-select:none;padding:var(--spacing-1) 0;justify-content:flex-end;align-items:center;display:inline-flex}.diff-line-text{white-space:pre-wrap;word-break:break-word;color:var(--color-text-secondary);padding:var(--spacing-1) 0;min-height:100%;display:block}.diff-line-text-prev,.diff-line-text-curr{padding-left:var(--spacing-3);padding-right:var(--spacing-3);border-left:1px solid #0f172a0f}.diff-row-equal{background:#fff}.diff-row-deleted .diff-line-text-prev{color:#991b1b;background:#fdeceb}.diff-row-inserted .diff-line-text-curr{color:#166534;background:#e8f5ee}.diff-row-modified .diff-line-text-prev{color:#991b1b;background:#fdeceb}.diff-row-modified .diff-line-text-curr{color:#166534;background:#e8f5ee}@media (width<=900px){.diff-row,.diff-source-head{grid-template-columns:56px minmax(0,1fr) 56px minmax(0,1fr)}.diff-source{min-height:320px}}.journey-panel{gap:var(--spacing-4);padding:var(--spacing-4);background:var(--color-bg-primary);flex-direction:column;flex:1;min-height:0;display:flex;overflow:auto}.journey-empty{padding:var(--spacing-5);border:1px dashed var(--color-border);border-radius:var(--radius-xl);background:var(--color-bg-secondary);color:var(--color-text-tertiary)}.journey-hero{gap:var(--spacing-5);padding:var(--spacing-5);border:1px solid var(--color-border);border-radius:var(--radius-xl);background:radial-gradient(circle at 0 0,#d8782714,#0000 38%),linear-gradient(#fffffff2,#f8f5efeb);grid-template-columns:minmax(280px,360px) minmax(0,1fr);display:grid}.journey-hero-copy{gap:var(--spacing-3);flex-direction:column;display:flex}.journey-kicker{font-size:var(--font-size-xs);text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-tertiary);font-weight:var(--font-weight-semibold)}.journey-title{color:var(--color-text-primary);margin:0;font-size:1.5rem;line-height:1.1}.journey-meta{gap:var(--spacing-2);flex-wrap:wrap;display:flex}.journey-chip{color:var(--color-text-secondary);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);background:#ffffffd9;border:1px solid #0f172a14;border-radius:999px;align-items:center;padding:6px 10px;display:inline-flex}.journey-path,.journey-selector{color:var(--color-text-secondary);font-size:var(--font-size-sm);word-break:break-word}.journey-selector{font-family:var(--font-mono);padding:var(--spacing-3);border-radius:var(--radius-lg);background:#ffffffb8;border:1px solid #0f172a0f}.journey-hero-screen{border-radius:var(--radius-xl);background:#ffffffad;border:1px solid #0f172a14;justify-content:center;align-items:center;min-height:420px;display:flex;overflow:hidden}.journey-hero-image{object-fit:contain;border-radius:var(--radius-lg);max-width:100%;max-height:72vh;box-shadow:var(--shadow-md)}.journey-strip-header{justify-content:space-between;align-items:end;display:flex}.journey-strip-title{color:var(--color-text-primary);font-size:var(--font-size-base);margin:0}.journey-strip-subtitle{color:var(--color-text-tertiary);font-size:var(--font-size-sm);margin-top:4px}.journey-strip{gap:var(--spacing-3);grid-template-columns:repeat(auto-fill,minmax(150px,1fr));display:grid}.journey-thumb{gap:var(--spacing-2);border:1px solid var(--color-border);background:var(--color-bg-secondary);border-radius:var(--radius-xl);padding:var(--spacing-2);cursor:pointer;transition:transform var(--transition-fast), border-color var(--transition-fast), box-shadow var(--transition-fast);text-align:left;flex-direction:column;display:flex}.journey-thumb:hover{box-shadow:var(--shadow-sm);border-color:#d8782759;transform:translateY(-2px)}.journey-thumb.active{border-color:var(--color-accent-primary);background:#fffaf4;box-shadow:0 0 0 2px #d878271f}.journey-thumb-frame{aspect-ratio:9/19;border-radius:calc(var(--radius-xl) - 6px);background:#fff;justify-content:center;align-items:center;display:flex;overflow:hidden}.journey-thumb-image{object-fit:contain;width:100%;height:100%}.journey-thumb-meta{justify-content:space-between;gap:var(--spacing-2);font-size:var(--font-size-xs);color:var(--color-text-secondary);display:flex}.journey-thumb-index{font-weight:var(--font-weight-semibold)}.journey-thumb-kind{color:var(--color-text-tertiary);text-transform:capitalize}@media (width<=960px){.journey-hero{grid-template-columns:1fr}.journey-hero-screen{min-height:280px}}.selector-stability{margin-top:var(--spacing-3);padding-top:var(--spacing-3);border-top:1px solid var(--color-border)}.stability-title{color:var(--color-text-secondary);font-size:var(--font-size-sm);margin:0 0 var(--spacing-2) 0;font-weight:var(--font-weight-medium)}.stability-best{font-size:var(--font-size-sm);color:var(--color-accent-success);margin-bottom:var(--spacing-2);padding:var(--spacing-2) var(--spacing-3);border-radius:var(--radius-md);background:#e8f5ee}.stability-best code{font-family:var(--font-mono);font-weight:var(--font-weight-semibold)}.stability-table{font-size:var(--font-size-xs);font-family:var(--font-mono);flex-direction:column;gap:1px;display:flex}.stability-header{gap:var(--spacing-2);padding:var(--spacing-2) var(--spacing-3);font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);border-bottom:1px solid var(--color-border);display:flex}.stability-row{gap:var(--spacing-2);padding:var(--spacing-2) var(--spacing-3);border-radius:var(--radius-sm);display:flex}.stability-row-good{background:#f0faf4}.stability-row-warn{background:#fefce8}.stability-row-bad{opacity:.7;background:#fef2f2}.stability-col-strategy{min-width:130px;color:var(--color-accent-primary)}.stability-col-value{text-overflow:ellipsis;white-space:nowrap;color:var(--color-text-secondary);flex:1;overflow:hidden}.stability-col-stable{text-align:right;min-width:60px;color:var(--color-text-primary)}.stability-col-fail{text-align:right;min-width:80px;color:var(--color-text-tertiary)}.main-inspector{flex-direction:column;height:100%;display:flex;position:relative;overflow:hidden}.inspector-empty{background:var(--color-bg-primary);justify-content:center;align-items:center;height:100%;display:flex}.inspector-empty-content{align-items:center;gap:var(--spacing-4);color:var(--color-text-tertiary);flex-direction:column;display:flex}.inspector-empty-icon{opacity:.4;font-size:3rem}.inspector-empty-text{font-size:var(--font-size-base)}.inspector-tabs{align-items:center;gap:var(--spacing-1);padding:var(--spacing-2) var(--spacing-4);background:var(--color-bg-secondary);border-bottom:1px solid var(--color-border);z-index:2;flex-shrink:0;display:flex;position:relative}.inspector-tab{padding:var(--spacing-2) var(--spacing-4);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-tertiary);cursor:pointer;border-radius:var(--radius-md);transition:all var(--transition-fast);background:0 0;border:none}.inspector-tab:hover{color:var(--color-text-primary);background:var(--color-bg-tertiary)}.inspector-tab.active{color:var(--color-accent-primary);background:var(--color-bg-primary)}.query-section{background:var(--color-bg-secondary);padding:var(--spacing-4) var(--spacing-5);border-bottom:1px solid var(--color-border);flex-shrink:0}.section-title{color:var(--color-text-primary);font-size:var(--font-size-sm);margin:0 0 var(--spacing-3) 0;font-weight:var(--font-weight-semibold);letter-spacing:.01em}.query-row{gap:var(--spacing-2);margin-bottom:var(--spacing-3);display:flex}.query-select,.query-input{background:var(--color-bg-primary);color:var(--color-text-primary);border:1px solid var(--color-border);padding:var(--spacing-2) var(--spacing-3);border-radius:var(--radius-lg);font-size:var(--font-size-sm);font-family:var(--font-family);transition:border-color var(--transition-fast)}.query-select:focus,.query-input:focus{border-color:var(--color-accent-primary);outline:none}.query-select{min-width:170px}.query-input{flex:1}.query-btn{background:var(--color-accent-primary);color:#fff;padding:var(--spacing-2) var(--spacing-5);border-radius:var(--radius-lg);cursor:pointer;font-weight:var(--font-weight-medium);font-size:var(--font-size-sm);transition:all var(--transition-fast);border:none}.query-btn:hover{background:var(--color-accent-secondary)}.query-result{padding:var(--spacing-2) var(--spacing-3);border-radius:var(--radius-md);font-size:var(--font-size-sm);margin-bottom:var(--spacing-3)}.query-result.success{color:var(--color-accent-success);background:#e8f5ee}.query-result.error{color:var(--color-accent-error);align-items:center;gap:var(--spacing-3);background:#fdeceb;display:flex}.error-icon{font-size:var(--font-size-sm)}.error-dismiss{color:var(--color-accent-error);cursor:pointer;font-size:var(--font-size-sm);opacity:.6;transition:opacity var(--transition-fast);background:0 0;border:none;margin-left:auto;padding:0}.error-dismiss:hover{opacity:1}.element-panel{gap:var(--spacing-6);padding-top:var(--spacing-3);border-top:1px solid var(--color-border);margin-top:var(--spacing-3);display:flex}.element-details{gap:var(--spacing-2);flex-direction:column;min-width:240px;display:flex}.element-attr{gap:var(--spacing-3);font-size:var(--font-size-sm);display:flex}.attr-name{color:var(--color-text-tertiary);min-width:55px;font-weight:var(--font-weight-medium)}.attr-value{color:var(--color-text-primary)}.locators-section{flex:1}.locators-section h4{color:var(--color-text-secondary);font-size:var(--font-size-sm);margin:0 0 var(--spacing-2) 0;font-weight:var(--font-weight-medium)}.locators-list{gap:var(--spacing-1);flex-direction:column;display:flex}.locator-row{align-items:center;gap:var(--spacing-3);padding:var(--spacing-2) var(--spacing-3);background:var(--color-bg-primary);border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-fast);border:1px solid #0000;display:flex;position:relative}.locator-row:hover{background:var(--color-bg-tertiary);border-color:var(--color-border)}.locator-row.copied{background:#e8f5ee;border-color:#c6e7d4}.locator-strategy{color:var(--color-accent-primary);font-size:var(--font-size-xs);min-width:130px;font-weight:var(--font-weight-medium);font-family:var(--font-mono)}.locator-value{font-size:var(--font-size-xs);color:var(--color-text-secondary);word-break:break-all;font-family:var(--font-mono);flex:1}.copied-badge{font-size:var(--font-size-xs);color:var(--color-accent-success);font-weight:var(--font-weight-medium)}.content-area{gap:var(--spacing-4);padding:var(--spacing-4);background:var(--color-bg-primary);flex:1;min-height:0;display:flex;overflow:hidden}.screenshot-section{flex-shrink:0;justify-content:center;align-items:flex-start;display:flex;overflow:auto}.screenshot-overlay-container{cursor:crosshair;display:inline-block;position:relative}.screenshot-overlay-container .screenshot-image{display:block}.screenshot-overlay-rects{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}.screenshot-image{border-radius:var(--radius-xl);max-width:350px;max-height:100%;box-shadow:var(--shadow-md);object-fit:contain;border:1px solid var(--color-border)}.element-tree-section{flex-direction:column;flex:420px;width:min(420px,40vw);min-width:280px;min-height:0;display:flex;overflow:hidden}.element-tree{flex-direction:column;min-width:0;height:100%;display:flex;overflow:hidden}.element-tree .section-title{margin-bottom:var(--spacing-3);flex-shrink:0}.element-tree-list{background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--spacing-2) 0;flex:1;min-width:0;overflow:auto}.element-tree-row{align-items:center;gap:var(--spacing-1);padding:var(--spacing-1) var(--spacing-2);cursor:pointer;font-size:var(--font-size-xs);font-family:var(--font-mono);color:var(--color-text-secondary);white-space:nowrap;transition:background var(--transition-fast);display:flex}.element-tree-row:hover{background:var(--color-bg-tertiary)}.element-tree-row--selected{color:var(--color-accent-primary);background:#c4682a1a}.element-tree-row--selected:hover{background:#c4682a26}.element-tree-row--no-children{padding-left:calc(var(--spacing-2) + 18px)}.element-tree-toggle{cursor:pointer;width:14px;height:14px;color:var(--color-text-tertiary);transition:transform var(--transition-fast);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:8px;display:inline-flex;transform:rotate(90deg)}.element-tree-toggle--collapsed{transform:rotate(0)}.element-tree-label{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.element-tree-list::-webkit-scrollbar{width:6px;height:6px}.element-tree-list::-webkit-scrollbar-track{border-radius:var(--radius-sm);background:0 0}.element-tree-list::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-sm)}.element-tree-list::-webkit-scrollbar-thumb:hover{background:var(--color-text-tertiary)}.app{background:var(--color-bg-primary);flex-direction:column;height:100vh;display:flex;overflow:hidden}.app-main{flex:1;overflow:hidden}:root{--color-bg-primary:#f9f7f3;--color-bg-secondary:#fff;--color-bg-tertiary:#f0ede6;--color-bg-elevated:#fff;--color-accent-primary:#c4682a;--color-accent-secondary:#b05c26;--color-accent-success:#2d7d4f;--color-accent-warning:#b8862e;--color-accent-error:#c4453a;--color-text-primary:#1b1b18;--color-text-secondary:#6b6b64;--color-text-tertiary:#9b9b94;--color-border:#e3dfd7;--color-border-hover:#c4682a;--font-family:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:"SF Mono", "Menlo", "Monaco", "Consolas", monospace;--font-size-xs:.75rem;--font-size-sm:.8125rem;--font-size-base:.9375rem;--font-size-lg:1.0625rem;--font-size-xl:1.25rem;--font-size-2xl:1.5rem;--font-size-3xl:2rem;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--spacing-1:.25rem;--spacing-2:.5rem;--spacing-3:.75rem;--spacing-4:1rem;--spacing-5:1.25rem;--spacing-6:1.5rem;--spacing-8:2rem;--spacing-10:2.5rem;--spacing-12:3rem;--radius-sm:.375rem;--radius-md:.5rem;--radius-lg:.75rem;--radius-xl:1rem;--radius-2xl:1.25rem;--radius-full:9999px;--shadow-xs:0 1px 2px #00000008;--shadow-sm:0 1px 3px #0000000d, 0 1px 2px #00000008;--shadow-md:0 4px 8px -2px #0000000f, 0 2px 4px -2px #0000000a;--shadow-lg:0 12px 28px -6px #00000014, 0 4px 12px -4px #0000000a;--transition-fast:.15s ease;--transition-base:.2s ease;--transition-slow:.3s ease;--z-dropdown:1000;--z-sticky:1020;--z-modal:1050;--z-tooltip:1080}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-family);background:var(--color-bg-primary);color:var(--color-text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.6}#root{min-height:100vh}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-text-tertiary)}.text-xs{font-size:var(--font-size-xs)}.text-sm{font-size:var(--font-size-sm)}.text-base{font-size:var(--font-size-base)}.text-lg{font-size:var(--font-size-lg)}.text-xl{font-size:var(--font-size-xl)}.text-2xl{font-size:var(--font-size-2xl)}.text-3xl{font-size:var(--font-size-3xl)}.font-normal{font-weight:var(--font-weight-normal)}.font-medium{font-weight:var(--font-weight-medium)}.font-semibold{font-weight:var(--font-weight-semibold)}.font-bold{font-weight:var(--font-weight-bold)}.transition{transition:all var(--transition-base)}
@@ -8,9 +8,10 @@
8
8
  <link rel="preconnect" href="https://fonts.googleapis.com">
9
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
10
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
11
+ <script type="module" crossorigin src="/_recorder/assets/index-CnJwu_Mc.js"></script>
12
+ <link rel="stylesheet" crossorigin href="/_recorder/assets/index-VIFL67d5.css">
11
13
  </head>
12
14
  <body>
13
15
  <div id="root"></div>
14
- <script type="module" src="/src/index.tsx"></script>
15
16
  </body>
16
17
  </html>
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "appium-session-recorder",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "Interactive Appium session recorder with modern UI",
5
5
  "type": "module",
6
6
  "bin": {
7
- "appium-recorder": "./src/index.ts"
7
+ "appium-recorder": "./dist/index.js"
8
8
  },
9
9
  "engines": {
10
10
  "node": ">=18.0.0",
@@ -25,6 +25,7 @@
25
25
  "dev": "bun run src/index.ts",
26
26
  "build": "bun run build:ui && bun build src/index.ts --outdir dist --target bun",
27
27
  "build:ui": "cd src/ui && bun run build",
28
+ "prepack": "bun run build",
28
29
  "test": "vitest run",
29
30
  "test:watch": "vitest",
30
31
  "test:ui": "vitest run --config vitest.ui.config.ts",
@@ -32,23 +33,23 @@
32
33
  "test:coverage": "vitest run --coverage"
33
34
  },
34
35
  "dependencies": {
35
- "@clack/prompts": "^1.0.0",
36
+ "@clack/prompts": "^1.2.0",
36
37
  "@kobalte/core": "^0.13.11",
37
38
  "express": "^5.2.1",
38
39
  "fast-diff": "^1.3.0",
39
- "fast-xml-parser": "^5.3.4",
40
+ "fast-xml-parser": "^5.5.9",
40
41
  "http-proxy-middleware": "^3.0.5",
41
- "solid-js": "^1.9.11"
42
+ "solid-js": "^1.9.12"
42
43
  },
43
44
  "devDependencies": {
44
- "@types/bun": "^1.3.8",
45
+ "@types/bun": "^1.3.11",
45
46
  "@types/express": "^5.0.6",
46
- "@vitest/coverage-v8": "^4.0.18",
47
- "jsdom": "^28.0.0",
48
- "typescript": "^5.9.3",
49
- "vite": "^6.3.5",
50
- "vite-plugin-solid": "^2.11.10",
51
- "vitest": "^4.0.18"
47
+ "@vitest/coverage-v8": "^4.1.2",
48
+ "jsdom": "^29.0.1",
49
+ "typescript": "^6.0.2",
50
+ "vite": "^8.0.3",
51
+ "vite-plugin-solid": "^2.11.11",
52
+ "vitest": "^4.1.2"
52
53
  },
53
54
  "publishConfig": {
54
55
  "access": "public"
@@ -58,5 +59,11 @@
58
59
  "repository": {
59
60
  "type": "git",
60
61
  "url": "git+https://github.com/JustasMonkev/appium-session-recorder"
61
- }
62
+ },
63
+ "files": [
64
+ "dist/",
65
+ "skills/",
66
+ "README.md",
67
+ "LICENSE"
68
+ ]
62
69
  }