@signalsupport/sdk 0.0.0-stage → 0.7.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.
Files changed (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +373 -2
  3. package/dist/chunks/app-7692BILt.js +2 -0
  4. package/dist/chunks/app-7692BILt.js.map +1 -0
  5. package/dist/chunks/constants-ClGbEpjT.js +2 -0
  6. package/dist/chunks/constants-ClGbEpjT.js.map +1 -0
  7. package/dist/chunks/support-x7N-k02b.js +4 -0
  8. package/dist/chunks/support-x7N-k02b.js.map +1 -0
  9. package/dist/chunks/widget-Bxsz5StK.js +2 -0
  10. package/dist/chunks/widget-Bxsz5StK.js.map +1 -0
  11. package/dist/client.d.ts +99 -0
  12. package/dist/constants.d.ts +2 -0
  13. package/dist/errors.d.ts +25 -0
  14. package/dist/evidence.d.ts +87 -0
  15. package/dist/iife.d.ts +12 -0
  16. package/dist/index.d.ts +21 -0
  17. package/dist/index.js +1 -0
  18. package/dist/model.d.ts +201 -0
  19. package/dist/react.d.ts +26 -0
  20. package/dist/react.js +2 -0
  21. package/dist/react.js.map +1 -0
  22. package/dist/reporter.d.ts +14 -0
  23. package/dist/server.d.ts +54 -0
  24. package/dist/server.js +2 -0
  25. package/dist/server.js.map +1 -0
  26. package/dist/session.d.ts +29 -0
  27. package/dist/signal.iife.js +4 -0
  28. package/dist/signal.iife.js.map +1 -0
  29. package/dist/support.d.ts +108 -0
  30. package/dist/trail.d.ts +27 -0
  31. package/dist/widget/app.d.ts +31 -0
  32. package/dist/widget/copy.d.ts +104 -0
  33. package/dist/widget/ctx.d.ts +75 -0
  34. package/dist/widget/icons.d.ts +38 -0
  35. package/dist/widget/index.d.ts +111 -0
  36. package/dist/widget/index.js +1 -0
  37. package/dist/widget/parts.d.ts +28 -0
  38. package/dist/widget/pick.d.ts +30 -0
  39. package/dist/widget/screens/faq.d.ts +8 -0
  40. package/dist/widget/screens/feedback.d.ts +11 -0
  41. package/dist/widget/screens/home.d.ts +12 -0
  42. package/dist/widget/screens/report.d.ts +9 -0
  43. package/dist/widget/screens/reports.d.ts +26 -0
  44. package/dist/widget/store.d.ts +31 -0
  45. package/dist/widget/styles.d.ts +10 -0
  46. package/dist/widget/theme.d.ts +57 -0
  47. package/dist/widget/ui.d.ts +58 -0
  48. package/package.json +73 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-7692BILt.js","names":["l","u","t","i","r","o","e","f","c","a","s","h","p","v","y","d","w","m","k","C","D","A","T","j","z","B","u","i","f","n","r"],"sources":["../../../../node_modules/preact/dist/preact.module.js","../../../../node_modules/preact/hooks/dist/hooks.module.js","../../../../node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js","../../src/widget/icons.tsx","../../src/widget/ui.tsx","../../src/widget/screens/faq.tsx","../../src/widget/screens/feedback.tsx","../../src/widget/screens/reports.tsx","../../src/widget/screens/home.tsx","../../src/widget/screens/report.tsx","../../src/widget/pick.ts","../../src/widget/styles.ts","../../src/widget/app.tsx"],"sourcesContent":["var n,l,u,t,i,r,o,e,f,c,a,s,h,p,v,y,d={},w=[],_=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,g=Array.isArray;function m(n,l){for(var u in l)n[u]=l[u];return n}function b(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function k(l,u,t){var i,r,o,e={};for(o in u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:e[o]=u[o];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===e[o]&&(e[o]=l.defaultProps[o]);return x(l,e,i,r,null)}function x(n,t,i,r,o){var e={type:n,props:t,key:i,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==o?++u:o,__i:-1,__u:0};return null==o&&null!=l.vnode&&l.vnode(e),e}function M(){return{current:null}}function S(n){return n.children}function C(n,l){this.props=n,this.context=l}function $(n,l){if(null==l)return n.__?$(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?$(n):null}function I(n){if(n.__P&&n.__d){var u=n.__v,t=u.__e,i=[],r=[],o=m({},u);o.__v=u.__v+1,l.vnode&&l.vnode(o),q(n.__P,o,u,n.__n,n.__P.namespaceURI,32&u.__u?[t]:null,i,null==t?$(u):t,!!(32&u.__u),r),o.__v=u.__v,o.__.__k[o.__i]=o,D(i,o,r),u.__e=u.__=null,o.__e!=t&&P(o)}}function P(n){if(null!=(n=n.__)&&null!=n.__c)return n.__e=n.__c.base=null,n.__k.some(function(l){if(null!=l&&null!=l.__e)return n.__e=n.__c.base=l.__e}),P(n)}function A(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!H.__r++||r!=l.debounceRendering)&&((r=l.debounceRendering)||o)(H)}function H(){try{for(var n,l=1;i.length;)i.length>l&&i.sort(e),n=i.shift(),l=i.length,I(n)}finally{i.length=H.__r=0}}function L(n,l,u,t,i,r,o,e,f,c,a){var s,h,p,v,y,_,g=t&&t.__k||w,m=l.length;for(f=T(u,l,g,f,m),s=0;s<m;s++)null!=(p=u.__k[s])&&(h=-1!=p.__i&&g[p.__i]||d,p.__i=s,_=q(n,p,h,i,r,o,e,f,c,a),v=p.__e,p.ref&&h.ref!=p.ref&&(h.ref&&J(h.ref,null,p),a.push(p.ref,p.__c||v,p)),null==y&&null!=v&&(y=v),4&p.__u?(f=j(p,f,n),h.__e&&(h.__e=null)):\"function\"==typeof p.type&&void 0!==_?f=_:v&&(f=v.nextSibling),p.__u&=-7);return u.__e=y,f}function T(n,l,u,t,i){var r,o,e,f,c,a=u.length,s=a,h=0;for(n.__k=new Array(i),r=0;r<i;r++)null!=(o=l[r])&&\"boolean\"!=typeof o&&\"function\"!=typeof o?(\"string\"==typeof o||\"number\"==typeof o||\"bigint\"==typeof o||o.constructor==String?o=n.__k[r]=x(null,o,null,null,null):g(o)?o=n.__k[r]=x(S,{children:o},null,null,null):void 0===o.constructor&&o.__b>0?o=n.__k[r]=x(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):n.__k[r]=o,f=r+h,o.__=n,o.__b=n.__b+1,e=null,-1!=(c=o.__i=O(o,u,f,s))&&(s--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>a?h--:i<a&&h++),\"function\"!=typeof o.type&&(o.__u|=4)):c!=f&&(c==f-1?h--:c==f+1?h++:(c>f?h--:h++,o.__u|=4))):n.__k[r]=null;if(s)for(r=0;r<a;r++)null!=(e=u[r])&&0==(2&e.__u)&&(e.__e==t&&(t=$(e)),K(e,e));return t}function j(n,l,u){var t,i;if(\"function\"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=j(t[i],l,u));return l}n.__e!=l&&(l&&n.type&&!l.parentNode&&(l=$(n)),l=u.insertBefore(n.__e,l||null));do{l=l&&l.nextSibling}while(null!=l&&8==l.nodeType);return l}function F(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(g(n)?n.some(function(n){F(n,l)}):l.push(n)),l}function O(n,l,u,t){var i,r,o,e=n.key,f=n.type,c=l[u],a=null!=c&&0==(2&c.__u);if(null===c&&null==e||a&&e==c.key&&f==c.type)return u;if(t>(a?1:0))for(i=u-1,r=u+1;i>=0||r<l.length;)if(null!=(c=l[o=i>=0?i--:r++])&&0==(2&c.__u)&&e==c.key&&f==c.type)return o;return-1}function z(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||_.test(l)?u:u+\"px\"}function N(n,l,u,t,i){var r,o;n:if(\"style\"==l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||z(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||z(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])r=l!=(l=l.replace(s,\"$1\")),o=l.toLowerCase(),l=o in n||\"onFocusOut\"==l||\"onFocusIn\"==l?o.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?t?u[a]=t[a]:(u[a]=h,n.addEventListener(l,r?v:p,r)):n.removeEventListener(l,r?v:p,r);else{if(\"http://www.w3.org/2000/svg\"==i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&\"popover\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!=l[4]?n.removeAttribute(l):n.setAttribute(l,\"popover\"==l&&1==u?\"\":u))}}function V(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u[c])u[c]=h++;else if(u[c]<t[a])return;return t(l.event?l.event(u):u)}}}function q(n,u,t,i,r,o,e,f,c,a){var s,h,p,v,y,d,_,k,x,M,I,P,A,H,T,j,F=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),o=[f=u.__e=t.__e]),(s=l.__b)&&s(u);n:if(\"function\"==typeof F){h=e.length;try{if(x=u.props,M=F.prototype&&F.prototype.render,I=(s=F.contextType)&&i[s.__c],P=s?I?I.props.value:s.__:i,t.__c?k=(p=u.__c=t.__c).__=p.__E:(M?u.__c=p=new F(x,P):(u.__c=p=new C(x,P),p.constructor=F,p.render=Q),I&&I.sub(p),p.state||(p.state={}),p.__n=i,v=p.__d=!0,p.__h=[],p._sb=[]),M&&null==p.__s&&(p.__s=p.state),M&&null!=F.getDerivedStateFromProps&&(p.__s==p.state&&(p.__s=m({},p.__s)),m(p.__s,F.getDerivedStateFromProps(x,p.__s))),y=p.props,d=p.state,p.__v=u,v)M&&null==F.getDerivedStateFromProps&&null!=p.componentWillMount&&p.componentWillMount(),M&&null!=p.componentDidMount&&p.__h.push(p.componentDidMount);else{if(M&&null==F.getDerivedStateFromProps&&x!==y&&null!=p.componentWillReceiveProps&&p.componentWillReceiveProps(x,P),u.__v==t.__v||!p.__e&&null!=p.shouldComponentUpdate&&!1===p.shouldComponentUpdate(x,p.__s,P)){u.__v!=t.__v&&(p.props=x,p.state=p.__s,p.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),w.push.apply(p.__h,p._sb),p._sb=[],p.__h.length&&e.push(p),f=$(t);break n}null!=p.componentWillUpdate&&p.componentWillUpdate(x,p.__s,P),M&&null!=p.componentDidUpdate&&p.__h.push(function(){p.componentDidUpdate(y,d,_)})}if(p.context=P,p.props=x,p.__P=n,p.__e=!1,A=l.__r,H=0,M)p.state=p.__s,p.__d=!1,A&&A(u),s=p.render(p.props,p.state,p.context),w.push.apply(p.__h,p._sb),p._sb=[];else do{p.__d=!1,A&&A(u),s=p.render(p.props,p.state,p.context),p.state=p.__s}while(p.__d&&++H<25);p.state=p.__s,null!=p.getChildContext&&(i=m(m({},i),p.getChildContext())),M&&!v&&null!=p.getSnapshotBeforeUpdate&&(_=p.getSnapshotBeforeUpdate(y,d)),T=null!=s&&s.type===S&&null==s.key?E(s.props.children):s,f=L(n,g(T)?T:[T],u,t,i,r,o,e,f,c,a),p.base=u.__e,u.__u&=-161,p.__h.length&&e.push(p),k&&(p.__E=p.__=null)}catch(n){if(e.length=h,u.__v=null,c||null!=o){if(n.then){for(u.__u|=c?160:128;f&&8==f.nodeType&&f.nextSibling;)f=f.nextSibling;null!=o&&(o[o.indexOf(f)]=null),u.__e=f}else if(null!=o)for(j=o.length;j--;)b(o[j])}else u.__e=t.__e;null==u.__k&&(u.__k=t.__k||[]),n.then||B(u),l.__e(n,u,t)}}else null==o&&u.__v==t.__v?(u.__k=t.__k,u.__e=t.__e):f=u.__e=G(t.__e,u,t,i,r,o,e,c,a);return(s=l.diffed)&&s(u),128&u.__u?void 0:f}function B(n){n&&(n.__c&&(n.__c.__e=!0),n.__k&&n.__k.some(B))}function D(n,u,t){for(var i=0;i<t.length;i++)J(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function E(n){return\"object\"!=typeof n||null==n||n.__b>0?n:g(n)?n.map(E):void 0!==n.constructor?null:m({},n)}function G(u,t,i,r,o,e,f,c,a){var s,h,p,v,y,w,_,m=i.props||d,k=t.props,x=t.type;if(\"svg\"==x?o=\"http://www.w3.org/2000/svg\":\"math\"==x?o=\"http://www.w3.org/1998/Math/MathML\":o||(o=\"http://www.w3.org/1999/xhtml\"),null!=e)for(s=0;s<e.length;s++)if((y=e[s])&&\"setAttribute\"in y==!!x&&(x?y.localName==x:3==y.nodeType)){u=y,e[s]=null;break}if(null==u){if(null==x)return document.createTextNode(k);u=document.createElementNS(o,x,k.is&&k),c&&(l.__m&&l.__m(t,e),c=!1),e=null}if(null==x)m===k||c&&u.data==k||(u.data=k);else{if(e=\"textarea\"==x&&null!=k.defaultValue?null:e&&n.call(u.childNodes),!c&&null!=e)for(m={},s=0;s<u.attributes.length;s++)m[(y=u.attributes[s]).name]=y.value;for(s in m)y=m[s],\"dangerouslySetInnerHTML\"==s?p=y:\"children\"==s||s in k||\"value\"==s&&\"defaultValue\"in k||\"checked\"==s&&\"defaultChecked\"in k||N(u,s,null,y,o);for(s in k)y=k[s],\"children\"==s?v=y:\"dangerouslySetInnerHTML\"==s?h=y:\"value\"==s?w=y:\"checked\"==s?_=y:c&&\"function\"!=typeof y||m[s]===y||N(u,s,y,m[s],o);if(h)c||p&&(h.__html==p.__html||h.__html==u.innerHTML)||(u.innerHTML=h.__html),t.__k=[];else if(p&&(u.innerHTML=\"\"),L(\"template\"==t.type?u.content:u,g(v)?v:[v],t,i,r,\"foreignObject\"==x?\"http://www.w3.org/1999/xhtml\":o,e,f,e?e[0]:i.__k&&$(i,0),c,a),null!=e)for(s=e.length;s--;)b(e[s]);c&&\"textarea\"!=x||(s=\"value\",\"progress\"==x&&null==w?u.removeAttribute(\"value\"):null!=w&&(w!==u[s]||\"progress\"==x&&!w||\"option\"==x&&w!=m[s])&&N(u,s,w,m[s],o),s=\"checked\",null!=_&&_!=u[s]&&N(u,s,_,m[s],o))}return u}function J(n,u,t){try{if(\"function\"==typeof n){var i=\"function\"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function K(n,u,t){var i,r;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!=n.__e||J(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=i.__n=null}if(i=n.__k)for(r=0;r<i.length;r++)i[r]&&K(i[r],u,t||\"function\"!=typeof n.type);t||b(n.__e),n.__c=n.__=n.__e=void 0}function Q(n,l,u){return this.constructor(n,u)}function R(u,t,i){var r,o,e,f;t==document&&(t=document.documentElement),l.__&&l.__(u,t),o=(r=\"function\"==typeof i)?null:i&&i.__k||t.__k,e=[],f=[],q(t,u=(!r&&i||t).__k=k(S,null,[u]),o||d,d,t.namespaceURI,!r&&i?[i]:o?null:t.firstChild?n.call(t.childNodes):null,e,!r&&i?i:o?o.__e:t.firstChild,r,f),D(e,u,f),u.props.children=null}function U(n,l){R(n,l,U)}function W(l,u,t){var i,r,o,e,f=m({},l.props);for(o in l.type&&l.type.defaultProps&&(e=l.type.defaultProps),u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:f[o]=void 0===u[o]&&null!=e?e[o]:u[o];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),x(l.type,f,i||l.key,r||l.ref,null)}function X(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,A(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+y++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=w.slice,l={__e:function(n,l,u,t){for(var i,r,o;l=l.__;)if((i=l.__c)&&!i.__)try{if((r=i.constructor)&&null!=r.getDerivedStateFromError&&(i.setState(r.getDerivedStateFromError(n)),o=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),o=i.__d),o)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&void 0===n.constructor},C.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=m({},this.state),\"function\"==typeof n&&(n=n(m({},u),this.props)),n&&m(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),A(this))},C.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),A(this))},C.prototype.render=S,i=[],o=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},H.__r=0,f=Math.random().toString(8),c=\"__d\"+f,a=\"__a\"+f,s=/(PointerCapture)$|Capture$/i,h=0,p=V(!1),v=V(!0),y=0;export{C as Component,S as Fragment,W as cloneElement,X as createContext,k as createElement,M as createRef,k as h,U as hydrate,t as isValidElement,l as options,R as render,F as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=n,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,p=c.__;function s(n,t){c.__h&&c.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({}),u.__[n]}function d(n){return o=1,y(D,n)}function y(n,u,i){var o=s(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.__f)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=!1,i=o.__c.props!==n;if(o.__c.__H.__.some(function(n){if(n.__N){u=!0;var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),c){var f=c.call(this,n,t,r);return u?f||i:f}return!u||i};r.__f=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function h(n,u){var i=s(t++,3);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__H.__h.push(i))}function _(n,u){var i=s(t++,4);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__h.push(i))}function A(n){return o=5,T(function(){return{current:n}},[])}function F(n,t,r){o=6,_(function(){if(\"function\"==typeof n){var r=n(t());return function(){n(null),r&&\"function\"==typeof r&&r()}}if(n)return n.current=t(),function(){return n.current=null}},null==r?r:r.concat(n))}function T(n,r){var u=s(t++,7);return C(u.__H,r)&&(u.__=n(),u.__H=r,u.__h=n),u.__}function q(n,t){return o=8,T(function(){return n},t)}function x(n){var u=r.context[n.__c],i=s(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function P(n,t){c.useDebugValue&&c.useDebugValue(t?t(n):n)}function b(n){var u=s(t++,10),i=d();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=s(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();){var t=n.__H;if(n.__P&&t)try{t.__h.some(z),t.__h.some(B),t.__h=[]}catch(r){t.__h=[],c.__e(r,n.__v)}}}c.__b=function(n){r=null,e&&e(n)},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),p&&p(n,t)},c.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(i.__h.some(z),i.__h.some(B),i.__h=[],t=0)),u=r},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j)),t.__H.__.some(function(n){n.u&&(n.__H=n.u,n.u=void 0)})),u=r=null},c.__c=function(n,t){t.some(function(n){try{n.__h.some(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],c.__e(r,n.__v)}}),l&&l(n,t)},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.some(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&c.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,35);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{q as useCallback,x as useContext,P as useDebugValue,h as useEffect,b as useErrorBoundary,g as useId,F as useImperativeHandle,_ as useLayoutEffect,T as useMemo,y as useReducer,A as useRef,d as useState};\n//# sourceMappingURL=hooks.module.js.map\n","import{options as r,Fragment as e}from\"preact\";export{Fragment}from\"preact\";var t=/[\"&<]/;function n(r){if(0===r.length||!1===t.test(r))return r;for(var e=0,n=0,o=\"\",f=\"\";n<r.length;n++){switch(r.charCodeAt(n)){case 34:f=\"&quot;\";break;case 38:f=\"&amp;\";break;case 60:f=\"&lt;\";break;default:continue}n!==e&&(o+=r.slice(e,n)),o+=f,e=n+1}return n!==e&&(o+=r.slice(e,n)),o}var o=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,f=0,i=Array.isArray;function u(e,t,n,o,i,u){t||(t={});var a,c,p=t;if(\"ref\"in p)for(c in p={},t)\"ref\"==c?a=t[c]:p[c]=t[c];var l={type:e,props:p,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--f,__i:-1,__u:0,__source:i,__self:u};if(\"function\"==typeof e&&(a=e.defaultProps))for(c in a)void 0===p[c]&&(p[c]=a[c]);return r.vnode&&r.vnode(l),l}function a(r){var t=u(e,{tpl:r,exprs:[].slice.call(arguments,1)});return t.key=t.__v,t}var c={},p=/[A-Z]/g;function l(e,t){if(r.attr){var f=r.attr(e,t);if(\"string\"==typeof f)return f}if(t=function(r){return null!==r&&\"object\"==typeof r&&\"function\"==typeof r.valueOf?r.valueOf():r}(t),\"ref\"===e||\"key\"===e)return\"\";if(\"style\"===e&&\"object\"==typeof t){var i=\"\";for(var u in t){var a=t[u];if(null!=a&&\"\"!==a){var l=\"-\"==u[0]?u:c[u]||(c[u]=u.replace(p,\"-$&\").toLowerCase()),s=\";\";\"number\"!=typeof a||l.startsWith(\"--\")||o.test(l)||(s=\"px;\"),i=i+l+\":\"+a+s}}return e+'=\"'+n(i)+'\"'}return null==t||!1===t||\"function\"==typeof t||\"object\"==typeof t?\"\":!0===t?e:e+'=\"'+n(\"\"+t)+'\"'}function s(r){if(null==r||\"boolean\"==typeof r||\"function\"==typeof r)return null;if(\"object\"==typeof r){if(void 0===r.constructor)return r;if(i(r)){for(var e=0;e<r.length;e++)r[e]=s(r[e]);return r}}return n(\"\"+r)}export{u as jsx,l as jsxAttr,u as jsxDEV,s as jsxEscape,a as jsxTemplate,u as jsxs};\n//# sourceMappingURL=jsxRuntime.module.js.map\n","/** @jsxImportSource preact */\n/**\n * The panel's icons: stroked, 24px grid, inheriting `currentColor`, so a theme\n * colours them without a second set.\n */\n\nconst PATHS = {\n lifebuoy: 'M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18Zm0-5a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm2.8-6.8L18.4 5.6M9.2 9.2 5.6 5.6m3.6 9.2-3.6 3.6m9.2-3.6 3.6 3.6',\n bug: 'M9 9V8a3 3 0 0 1 6 0v1M8 9h8a6 6 0 0 1 1 3v3a5 5 0 0 1-10 0v-3a6 6 0 0 1 1-3ZM3 13h4m10 0h4M12 20v-6M4 19l3.35-2M20 19l-3.35-2M4 7l3.75 2.4M20 7l-3.75 2.4',\n bulb: 'M3 12h1m8-9v1m8 8h1M5.6 5.6l.7.7m12.1-.7-.7.7M9 16a5 5 0 1 1 6 0 3.5 3.5 0 0 0-1 3 2 2 0 0 1-4 0 3.5 3.5 0 0 0-1-3M9.7 17h4.6',\n question: 'M8 9h8M8 13h6M9 18H6a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3h-3l-3 3-3-3Z',\n chevronRight: 'm9 6 6 6-6 6',\n chevronLeft: 'm15 6-6 6 6 6',\n arrowLeft: 'M5 12h14M5 12l6 6M5 12l6-6',\n x: 'M18 6 6 18M6 6l12 12',\n check: 'm5 12 5 5L20 7',\n checkCircle: 'M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18Zm-3-9 2 2 4-4',\n camera: 'M5 7h1a2 2 0 0 0 2-2 1 1 0 0 1 1-1h6a1 1 0 0 1 1 1 2 2 0 0 0 2 2h1a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2Zm7 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z',\n monitor: 'M3 5a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V5Zm4 15h10M9 16v4m6-4v4',\n history: 'M12 8v4l2 2M3.05 11a9 9 0 1 1 .5 4m-.5 5v-5h5',\n cpu: 'M5 6a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V6Zm4 3h6v6H9V9ZM3 10h2m-2 4h2m14-4h2m-2 4h2M10 3v2m4-2v2m-4 14v2m4-2v2',\n send: 'M10 14 21 3M21 3l-6.5 18a.55.55 0 0 1-1 0L10 14l-7-3.5a.55.55 0 0 1 0-1L21 3',\n search: 'M10 17a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm11 4-6-6',\n thumbUp: 'M7 11v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1h3Zm0 0a4 4 0 0 0 4-4V6a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1-2 2h-7a3 3 0 0 1-3-3',\n refresh: 'M20 11A8.1 8.1 0 0 0 4.5 9M4 5v4h4m-4 4a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4',\n download: 'M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2M7 11l5 5 5-5M12 4v12',\n external: 'M12 6H6a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-6m-7 1 9-9m-5 0h5v5',\n book: 'M3 19a9 9 0 0 1 9 0 9 9 0 0 1 9 0M3 6a9 9 0 0 1 9 0 9 9 0 0 1 9 0M3 6v13M12 6v13M21 6v13',\n message:'M8 9h8M8 13h6M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3h-5l-5 3v-3H6a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3h12Z',\n} as const;\n\nexport type IconName = keyof typeof PATHS;\n\n/** Whether a host-supplied name is one of ours, rather than an image URL. */\nexport function isIconName(name: string): name is IconName {\n return Object.prototype.hasOwnProperty.call(PATHS, name);\n}\n\nexport function Icon({ name, size = 16, stroke = 1.8 }: { name: IconName; size?: number; stroke?: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={stroke} stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d={PATHS[name]} />\n </svg>\n );\n}\n","/** @jsxImportSource preact */\nimport type { ComponentChildren, Ref } from 'preact';\n\nimport type { StatusView, Tone } from '../model.js';\nimport { Icon, type IconName } from './icons.js';\n\n/** The few pieces every screen shares. Classes only; every value is a theme token. */\n\nexport function Tile({ icon, tone, small }: { icon: IconName; tone: Tone; small?: boolean }) {\n return (\n <span class={`sg-tile sg-t-${tone}${small ? ' sg-sm' : ''}`}>\n <Icon name={icon} size={small ? 14 : 17} />\n </span>\n );\n}\n\nexport function Pill({ tone, children }: { tone: Tone; children: ComponentChildren }) {\n return <span class={`sg-pill sg-t-${tone}`}>{children}</span>;\n}\n\nexport function Button({\n children,\n onClick,\n variant = 'primary',\n disabled,\n busy,\n icon,\n type = 'button',\n testId,\n btnRef,\n label,\n}: {\n children: ComponentChildren;\n onClick?: () => void;\n variant?: 'primary' | 'ghost' | 'danger';\n disabled?: boolean;\n busy?: boolean;\n icon?: IconName;\n type?: 'button' | 'submit';\n testId?: string;\n btnRef?: Ref<HTMLButtonElement>;\n /** An accessible name, for when the visible label can be hidden (the capture bar's Cancel on a phone). */\n label?: string;\n}) {\n return (\n <button\n ref={btnRef}\n type={type}\n class={variant === 'primary' ? 'sg-btn' : variant === 'ghost' ? 'sg-btn sg-btn-ghost' : 'sg-btn sg-btn-danger'}\n onClick={onClick}\n disabled={disabled || busy}\n data-testid={testId}\n aria-label={label}\n >\n {busy ? <span class=\"sg-spin\" aria-hidden=\"true\" /> : icon ? <Icon name={icon} size={15} /> : null}\n {children}\n </button>\n );\n}\n\nexport function Field({\n label,\n hint,\n error,\n children,\n}: {\n label: string;\n hint?: string;\n error?: string | null;\n children: ComponentChildren;\n}) {\n return (\n <label class=\"sg-field\">\n <span class=\"sg-label\">{label}</span>\n {children}\n {error ? <span class=\"sg-err\" role=\"alert\">{error}</span> : hint ? <span class=\"sg-hint\">{hint}</span> : null}\n </label>\n );\n}\n\n/**\n * Where a host's own content appears. A native `<slot>`, so the content stays\n * in the host's document: its CSS styles it and its framework renders it. Only\n * drawn when filled, so an unused slot leaves no gap.\n */\nexport function SlotPoint({ name, filled }: { name: string; filled: ReadonlySet<string> }) {\n if (!filled.has(name)) return null;\n return (\n <div class={`sg-slot sg-slot-${name}`} data-testid={`sg-slot-${name}`}>\n <slot name={name} />\n </div>\n );\n}\n\nexport function Switch({ on, onChange, label }: { on: boolean; onChange: (on: boolean) => void; label: string }) {\n return (\n <button type=\"button\" role=\"switch\" aria-checked={on} aria-label={label} class=\"sg-switch\" onClick={() => onChange(!on)} />\n );\n}\n\n/**\n * A report's journey as a drawn path.\n *\n * The line between the nodes is the information: \"how far along is this, and\n * what comes next\" is the question someone opening their own report has, and\n * a status word alone cannot answer it. The last node is theirs, dashed until\n * it is their turn.\n */\nexport function Rail({ view }: { view: StatusView }) {\n const n = view.stages.length;\n return (\n <div class={`sg-rail sg-t-${view.offPath ? 'neutral' : view.tone}`} role=\"img\" aria-label={`${view.label}: stage ${view.stage + 1} of ${n}`}>\n {view.stages.map((label, i) => {\n const reached = i <= view.stage;\n const here = i === view.stage;\n const yours = i === n - 1 && !view.offPath && i > view.stage;\n return (\n <div class=\"sg-rail-stage\" key={label}>\n <div class=\"sg-rail-line\">\n <span class={`sg-rail-seg ${i === 0 ? 'sg-none' : i <= view.stage ? 'sg-on' : ''}`} />\n <span\n class={`sg-rail-node${reached ? ' sg-on' : ''}${here ? ' sg-here' : ''}${here && view.active ? ' sg-pulse' : ''}${yours ? ' sg-yours' : ''}`}\n />\n <span class={`sg-rail-seg ${i === n - 1 ? 'sg-none' : i < view.stage ? 'sg-on' : ''}`} />\n </div>\n <span class={`sg-rail-label${reached ? ' sg-on' : ''}`}>{view.offPath && i > view.stage ? '' : label}</span>\n </div>\n );\n })}\n </div>\n );\n}\n","/** @jsxImportSource preact */\nimport { useMemo, useState } from 'preact/hooks';\n\nimport type { Ctx } from '../ctx.js';\nimport { Icon } from '../icons.js';\nimport { Button } from '../ui.js';\n\n/**\n * Answers first, a report second. Built on <details>, so it is keyboard\n * operable, announced correctly, and findable by the browser's own search.\n */\nexport function Faq({ w }: { w: Ctx }) {\n const [q, setQ] = useState('');\n const items = useMemo(() => {\n const needle = q.trim().toLowerCase();\n if (!needle) return w.faq;\n return w.faq.filter((f) => `${f.q} ${f.a} ${(f.tags ?? []).join(' ')}`.toLowerCase().includes(needle));\n }, [q, w.faq]);\n\n return (\n <div class=\"sg-body\">\n <div class=\"sg-pad\">\n <div style={{ position: 'relative', marginBottom: '12px' }}>\n <span class=\"sg-dim\" style={{ position: 'absolute', left: '10px', top: '9px' }}>\n <Icon name=\"search\" size={15} />\n </span>\n <input\n class=\"sg-input\"\n style={{ paddingLeft: '32px' }}\n placeholder={w.copy.faqSearch}\n aria-label={w.copy.faqSearch}\n value={q}\n onInput={(e) => setQ(e.currentTarget.value)}\n data-testid=\"sg-faq-search\"\n />\n </div>\n {items.length === 0 && <p class=\"sg-p sg-dim sg-small\">{w.copy.faqEmpty}</p>}\n {items.map((f) => (\n <details class=\"sg-faq\" key={f.q}>\n <summary>\n {f.q}\n <span class=\"sg-chev\"><Icon name=\"chevronRight\" size={14} /></span>\n </summary>\n <div class=\"sg-faq-a\">{f.a}</div>\n </details>\n ))}\n {w.features.report && (\n <div class=\"sg-banner sg-t-accent\" style={{ marginTop: '16px', alignItems: 'center' }}>\n <span style={{ flex: 1 }} class=\"sg-banner-title\">{w.copy.faqNotFound}</span>\n <Button variant=\"ghost\" icon=\"bug\" onClick={() => w.go({ name: 'report' })}>\n {w.copy.reportAction}\n </Button>\n </div>\n )}\n </div>\n </div>\n );\n}\n","/** @jsxImportSource preact */\nimport { useState } from 'preact/hooks';\n\nimport { FEEDBACK_KINDS, type FeedbackKind } from '../../model.js';\nimport type { Ctx } from '../ctx.js';\nimport { Button, Field, SlotPoint } from '../ui.js';\n\n/**\n * Feedback: an idea, a frustration, or something worth protecting.\n *\n * Deliberately lighter than a report. It is not a fault to be tracked, so it\n * asks for one kind and one box, and offers a picture only if the reporter\n * wants to point at something.\n */\nexport function FeedbackForm({ w }: { w: Ctx }) {\n const { copy, support, state, features } = w;\n const [kind, setKind] = useState<FeedbackKind>('idea');\n const [body, setBody] = useState('');\n const [shot, setShot] = useState<string | null>(null);\n const [contact, setContact] = useState({ name: '', email: '' });\n const [busy, setBusy] = useState(false);\n const [touched, setTouched] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const tooShort = body.trim().length < 4;\n const anonymous = state.signedIn !== true;\n\n async function send() {\n setTouched(true);\n if (tooShort) return;\n setBusy(true);\n setError(null);\n try {\n const res = await support.submitFeedback({\n kind,\n body,\n screenshot: shot ?? undefined,\n contact: anonymous && (contact.name || contact.email) ? { name: contact.name || undefined, email: contact.email || undefined } : undefined,\n });\n w.emit('submitted', { ...res, type: 'feedback' });\n w.go({ name: 'thanks' });\n } catch (e) {\n setError(e instanceof Error ? e.message : copy.error);\n } finally {\n setBusy(false);\n }\n }\n\n return (\n <>\n <div class=\"sg-body\">\n <SlotPoint name=\"feedback-top\" filled={w.slots} />\n <div class=\"sg-pad sg-stack\">\n <div>\n <span class=\"sg-label\">{copy.feedbackKindLabel}</span>\n <div class=\"sg-chips\" role=\"radiogroup\" aria-label={copy.feedbackKindLabel}>\n {(Object.keys(FEEDBACK_KINDS) as FeedbackKind[]).map((k) => (\n <button key={k} type=\"button\" class=\"sg-chip\" role=\"radio\" aria-checked={kind === k} onClick={() => setKind(k)} data-testid={`sg-kind-${k}`}>\n {FEEDBACK_KINDS[k].label}\n </button>\n ))}\n </div>\n <span class=\"sg-hint\">{FEEDBACK_KINDS[kind].hint}</span>\n </div>\n <Field label={copy.feedbackLabel} error={touched && tooShort ? 'Say a little more.' : null}>\n <textarea\n class={`sg-textarea${touched && tooShort ? ' sg-invalid' : ''}`}\n value={body}\n onInput={(e) => setBody(e.currentTarget.value)}\n placeholder={copy.feedbackPlaceholder}\n data-testid=\"sg-feedback-body\"\n autoFocus\n />\n </Field>\n {features.screenshot && (\n <div>\n {shot ? (\n <>\n <img class=\"sg-shot\" src={shot} alt=\"The frame that will be attached\" />\n <button type=\"button\" class=\"sg-link\" style={{ marginTop: '6px' }} onClick={() => setShot(null)}>\n Remove\n </button>\n </>\n ) : (\n <button\n type=\"button\"\n class=\"sg-link\"\n onClick={async () => {\n const r = await w.capture();\n if (r.ok) setShot(r.dataUrl);\n }}\n >\n + {copy.capture}\n </button>\n )}\n </div>\n )}\n {anonymous && (\n <div>\n <span class=\"sg-label\">{copy.contactLabel}</span>\n <div class=\"sg-stack\">\n <input class=\"sg-input\" placeholder={copy.namePlaceholder} value={contact.name} onInput={(e) => setContact((c) => ({ ...c, name: e.currentTarget.value }))} />\n <input class=\"sg-input\" type=\"email\" placeholder={copy.emailPlaceholder} value={contact.email} onInput={(e) => setContact((c) => ({ ...c, email: e.currentTarget.value }))} />\n </div>\n <span class=\"sg-hint\">{copy.contactHint}</span>\n </div>\n )}\n {error && <p class=\"sg-err\" role=\"alert\">{error}</p>}\n </div>\n </div>\n <div class=\"sg-footer\">\n <Button variant=\"ghost\" onClick={() => w.go({ name: 'home' })}>\n {copy.cancel}\n </Button>\n <Button onClick={() => void send()} busy={busy} icon=\"send\" testId=\"sg-send-feedback\">\n {copy.sendFeedback}\n </Button>\n </div>\n </>\n );\n}\n","/** @jsxImportSource preact */\nimport { useEffect, useRef, useState } from 'preact/hooks';\n\nimport { awaitingUpdate, canVerify, canWithdraw, eventWords, formatAgo, readWords, reportParts, statusView, threadOf, type ReporterReport, type ReporterReportDetail } from '../../model.js';\nimport { fill } from '../copy.js';\nimport type { Ctx } from '../ctx.js';\nimport { Icon } from '../icons.js';\nimport { Button, Pill, Rail, Tile } from '../ui.js';\n\n/**\n * The reporter's own reports: the list, one report, the conversation, and the\n * check that closes the loop.\n *\n * ⚠ THE CHECK IS THE REASON THIS SCREEN EXISTS. \"We think we fixed it, you are\n * running the build that has the fix, does it work?\" can only be asked in the\n * product, to the person already looking at the thing, and it turns a tracker\n * into a loop that closes.\n */\n\n/**\n * Open reports first; closed ones folded away under \"Closed\".\n *\n * A closed report is history, and a list where \"Closed, you confirmed it\"\n * sits between two live ones makes the live ones harder to see. Folded, not\n * hidden: one tap shows them, nothing is lost. On the home screen only the\n * open ones are listed, with a way through to the rest.\n */\nexport function ReportList({ w, compact = false }: { w: Ctx; compact?: boolean }) {\n const all = w.state.reports;\n if (all.length === 0) {\n return (\n <div class=\"sg-empty\">\n <span class=\"sg-empty-icon\"><Icon name=\"bug\" size={20} /></span>\n <p class=\"sg-p\" style={{ marginTop: '10px', fontWeight: 600 }}>{w.copy.noReports}</p>\n <p class=\"sg-p sg-small sg-dim\" style={{ marginTop: '4px' }}>{w.copy.noReportsBody}</p>\n {w.features.report && (\n <div style={{ marginTop: '14px' }}>\n <Button variant=\"ghost\" icon=\"bug\" onClick={() => w.go({ name: 'report' })}>{w.copy.reportAction}</Button>\n </div>\n )}\n </div>\n );\n }\n const open = all.filter((r) => statusView(r, w.appVersion).open);\n const closed = all.filter((r) => !statusView(r, w.appVersion).open);\n\n if (compact) {\n return (\n <>\n {open.length > 0 ? <Rows w={w} reports={open.slice(0, 3)} /> : <p class=\"sg-p sg-small sg-dim sg-pad\">{w.copy.nothingOpen}</p>}\n {closed.length > 0 && (\n <button type=\"button\" class=\"sg-closed-link\" onClick={() => w.go({ name: 'reports' })} data-testid=\"sg-closed-link\">\n {w.copy.closedReports} · {closed.length}\n <Icon name=\"chevronRight\" size={14} />\n </button>\n )}\n </>\n );\n }\n return (\n <>\n {open.length > 0 ? <Rows w={w} reports={open} /> : <p class=\"sg-p sg-small sg-dim sg-pad\">{w.copy.nothingOpen}</p>}\n {closed.length > 0 && (\n <details class=\"sg-closed\" data-testid=\"sg-closed\">\n <summary>\n <Icon name=\"chevronRight\" size={14} />\n {w.copy.closedReports} · {closed.length}\n </summary>\n <Rows w={w} reports={closed} />\n </details>\n )}\n </>\n );\n}\n\nfunction Rows({ w, reports }: { w: Ctx; reports: ReporterReport[] }) {\n return (\n <ul class=\"sg-list\" data-testid=\"sg-report-list\">\n {reports.map((r) => {\n const v = statusView(r, w.appVersion);\n const unread = w.support.unread(r);\n const area = typeof r.source_context?.area === 'string' ? r.source_context.area : null;\n return (\n <li key={r.id}>\n <button type=\"button\" class=\"sg-row\" onClick={() => w.go({ name: 'detail', id: r.id })} data-testid=\"sg-report-row\">\n <div class=\"sg-row-main\">\n <div class=\"sg-row-top\">\n {unread && <span class=\"sg-dot\" style={{ marginTop: '7px' }} aria-label=\"New reply\" />}\n <span class=\"sg-row-title\">{r.subject}</span>\n <Pill tone={v.tone}>{v.label}</Pill>\n </div>\n <div class=\"sg-row-meta\">\n <span class=\"sg-mono\">{r.ref}</span>\n {area && <span>· {area}</span>}\n <span>· {formatAgo(r.created_at)}</span>\n </div>\n {v.needsYou && (\n <span class={`sg-row-cta sg-t-${r.status === 'waiting_user' ? 'warn' : 'success'}`}>\n <Icon name={r.status === 'waiting_user' ? 'message' : 'checkCircle'} size={13} />\n {r.status === 'waiting_user' ? 'Reply to the team' : 'Check the fix and tell the team'}\n </span>\n )}\n </div>\n <span class=\"sg-chev\" style={{ paddingTop: '2px' }}><Icon name=\"chevronRight\" /></span>\n </button>\n </li>\n );\n })}\n </ul>\n );\n}\n\n\nexport function ReportDetail({ w, id }: { w: Ctx; id: string }) {\n const { copy, support } = w;\n const [d, setD] = useState<ReporterReportDetail | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [reply, setReply] = useState('');\n const [sending, setSending] = useState(false);\n const [rejecting, setRejecting] = useState(false);\n const [note, setNote] = useState('');\n const [deciding, setDeciding] = useState(false);\n const [withdrawing, setWithdrawing] = useState(false);\n const [why, setWhy] = useState('');\n const [leaving, setLeaving] = useState(false);\n const end = useRef<HTMLDivElement>(null);\n\n // Fetched when opened, every 10 seconds while it stays open and visible,\n // when the window comes back into focus (the reporter was just acting\n // somewhere else, often the very change they are waiting for), and on the\n // header's refresh button, so a move or a reply from the team appears\n // without anyone reloading the page.\n useEffect(() => {\n let alive = true;\n const load = () =>\n support\n .detail(id)\n .then((next) => {\n if (!alive) return;\n setD(next);\n support.markSeen(id);\n })\n .catch((e: unknown) => alive && setError(e instanceof Error ? e.message : copy.error));\n void load();\n const t = setInterval(() => {\n if (document.visibilityState === 'visible') void load();\n }, 10_000);\n const onBack = () => {\n if (document.visibilityState === 'visible') void load();\n };\n window.addEventListener('focus', onBack);\n document.addEventListener('visibilitychange', onBack);\n return () => {\n alive = false;\n clearInterval(t);\n window.removeEventListener('focus', onBack);\n document.removeEventListener('visibilitychange', onBack);\n };\n }, [id, support, copy.error, w.tick]);\n\n const count = d?.timeline.length ?? 0;\n useEffect(() => {\n end.current?.scrollIntoView({ block: 'end' });\n }, [count]);\n\n if (!d) {\n return (\n <div class=\"sg-body\" aria-busy=\"true\">\n {error ? <p class=\"sg-err sg-pad\">{error}</p> : <><div class=\"sg-skeleton\" /><div class=\"sg-skeleton\" /></>}\n </div>\n );\n }\n\n const v = statusView(d, w.appVersion);\n const parts = reportParts(d.body);\n const verifying = canVerify(d, w.appVersion);\n const updating = awaitingUpdate(d, w.appVersion);\n const area = typeof d.source_context?.area === 'string' ? d.source_context.area : null;\n const reportedOn = typeof d.source_context?.app_version === 'string' ? d.source_context.app_version : null;\n\n async function decide(works: boolean) {\n setDeciding(true);\n setError(null);\n try {\n const next = await support.verify(id, works, works ? undefined : note.trim() || undefined);\n setD(next);\n setRejecting(false);\n setNote('');\n w.emit('verified', { id, works });\n } catch (e) {\n setError(e instanceof Error ? e.message : copy.error);\n } finally {\n setDeciding(false);\n }\n }\n\n async function withdraw() {\n setLeaving(true);\n setError(null);\n try {\n const next = await support.withdraw(id, why.trim() || undefined);\n setD(next);\n setWithdrawing(false);\n setWhy('');\n w.emit('withdrawn', { id });\n } catch (e) {\n setError(e instanceof Error ? e.message : copy.error);\n } finally {\n setLeaving(false);\n }\n }\n\n async function send() {\n const text = reply.trim();\n if (!text) return;\n setSending(true);\n setError(null);\n try {\n setD(await support.reply(id, text));\n setReply('');\n } catch (e) {\n setError(e instanceof Error ? e.message : copy.error);\n } finally {\n setSending(false);\n }\n }\n\n return (\n <>\n <div class=\"sg-body\" data-testid=\"sg-detail\">\n <div class=\"sg-pad sg-stack\">\n <div class=\"sg-rail-box\">\n <Rail view={v} />\n </div>\n <div>\n <Pill tone={v.tone}>{v.label}</Pill>\n <p class=\"sg-p sg-muted\" style={{ marginTop: '6px' }}>{v.blurb}</p>\n </div>\n\n {verifying && (\n <div class=\"sg-banner sg-t-success\" style={{ display: 'block' }} data-testid=\"sg-verify\">\n <p class=\"sg-banner-title\" style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\n <Icon name=\"checkCircle\" /> {copy.verifyTitle}\n </p>\n <p class=\"sg-banner-body\">\n {d.fixed_in_version && w.appVersion ? `Fixed in ${d.fixed_in_version}; you are on ${w.appVersion}. ` : ''}\n {copy.verifyBody}\n </p>\n {rejecting ? (\n <div style={{ marginTop: '10px' }} class=\"sg-stack\">\n <textarea class=\"sg-textarea\" value={note} onInput={(e) => setNote(e.currentTarget.value)} placeholder={copy.verifyNoPlaceholder} autoFocus data-testid=\"sg-verify-note\" />\n <div style={{ display: 'flex', gap: '8px' }}>\n <Button variant=\"danger\" onClick={() => void decide(false)} busy={deciding} testId=\"sg-verify-send-no\">{copy.verifySend}</Button>\n <Button variant=\"ghost\" onClick={() => setRejecting(false)}>{copy.cancel}</Button>\n </div>\n </div>\n ) : (\n <div style={{ marginTop: '10px', display: 'flex', gap: '8px', flexWrap: 'wrap' }}>\n <Button icon=\"thumbUp\" onClick={() => void decide(true)} busy={deciding} testId=\"sg-verify-yes\">{copy.verifyYes}</Button>\n <Button variant=\"danger\" onClick={() => setRejecting(true)} testId=\"sg-verify-no\">{copy.verifyNo}</Button>\n </div>\n )}\n </div>\n )}\n\n {updating && (\n <div class=\"sg-banner sg-t-warn\">\n <Tile icon=\"download\" tone=\"warn\" small />\n <div>\n <p class=\"sg-banner-title\">{fill(copy.updateTitle, { version: d.fixed_in_version ?? '', running: w.appVersion ?? '' })}</p>\n <p class=\"sg-banner-body\">{copy.updateBody}</p>\n </div>\n </div>\n )}\n\n <div>\n <span class=\"sg-label\">{copy.whatYouReported}</span>\n {parts.some((x) => x.label) ? (\n <dl class=\"sg-review\" style={{ margin: '4px 0 0' }}>\n {parts.map((x, i) => (\n <>\n {x.label && <dt key={`l${i}`}>{x.label}</dt>}\n <dd key={`t${i}`}>{x.text}</dd>\n </>\n ))}\n </dl>\n ) : (\n <>\n <p class=\"sg-p\" style={{ fontWeight: 600 }}>{d.subject}</p>\n {d.body && <p class=\"sg-p sg-muted\" style={{ whiteSpace: 'pre-wrap', marginTop: '4px' }}>{d.body}</p>}\n </>\n )}\n <div class=\"sg-row-meta\" style={{ marginTop: '6px' }}>\n <span class=\"sg-mono\">{d.ref}</span>\n {area && <span>· {area}</span>}\n {reportedOn && <span>· reported on {reportedOn}</span>}\n <span>· {formatAgo(d.created_at)}</span>\n </div>\n </div>\n\n <div>\n <span class=\"sg-label\">{copy.conversation}</span>\n <div class=\"sg-thread\" data-testid=\"sg-thread\">\n {threadOf(d).map((e, i) =>\n e.kind === 'read' ? (\n <div class=\"sg-event\" key={i} data-testid=\"sg-read\">\n {readWords(e.name)} · {formatAgo(e.at)}\n </div>\n ) : e.kind === 'status' ? (\n <div class=\"sg-event\" key={i}>\n {eventWords(e)} · {formatAgo(e.at)}\n </div>\n ) : (\n <div class={`sg-msg ${e.by === 'you' ? 'sg-you' : 'sg-team'}`} key={i} data-testid={`sg-msg-${e.by}`}>\n <span class=\"sg-msg-meta\">\n {e.by === 'you' ? copy.you : e.author_name} · {formatAgo(e.at)}\n </span>\n {e.body}\n </div>\n ),\n )}\n <div ref={end} />\n </div>\n </div>\n\n {/* Quiet on purpose: a way out, not a call to action. The confirm\n says what happens before anything does. */}\n {canWithdraw(d) && !verifying && (withdrawing ? (\n <div class=\"sg-banner\" style={{ display: 'block' }} data-testid=\"sg-withdraw\">\n <p class=\"sg-banner-title\">{copy.withdrawTitle}</p>\n <p class=\"sg-banner-body\">{copy.withdrawBody}</p>\n <div style={{ marginTop: '10px' }} class=\"sg-stack\">\n <textarea class=\"sg-textarea\" value={why} onInput={(e) => setWhy(e.currentTarget.value)} placeholder={copy.withdrawPlaceholder} autoFocus data-testid=\"sg-withdraw-note\" />\n <div style={{ display: 'flex', gap: '8px' }}>\n <Button variant=\"danger\" onClick={() => void withdraw()} busy={leaving} testId=\"sg-withdraw-confirm\">{copy.withdrawConfirm}</Button>\n <Button variant=\"ghost\" onClick={() => setWithdrawing(false)}>{copy.withdrawKeep}</Button>\n </div>\n </div>\n </div>\n ) : (\n <button type=\"button\" class=\"sg-quiet-link\" onClick={() => setWithdrawing(true)} data-testid=\"sg-withdraw-open\">\n {copy.withdrawAction}\n </button>\n ))}\n {error && <p class=\"sg-err\" role=\"alert\">{error}</p>}\n </div>\n </div>\n\n {v.open ? (\n <form\n class=\"sg-composer\"\n onSubmit={(e) => {\n e.preventDefault();\n void send();\n }}\n >\n <textarea\n class=\"sg-textarea\"\n rows={1}\n value={reply}\n onInput={(e) => setReply(e.currentTarget.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n void send();\n }\n }}\n placeholder={copy.replyPlaceholder}\n aria-label={copy.replyPlaceholder}\n data-testid=\"sg-reply\"\n />\n <Button type=\"submit\" icon=\"send\" busy={sending} disabled={!reply.trim()} testId=\"sg-reply-send\">\n {copy.send}\n </Button>\n </form>\n ) : (\n <div class=\"sg-footer sg-small sg-dim\">{copy.closedNote}</div>\n )}\n </>\n );\n}\n","/** @jsxImportSource preact */\nimport { statusView } from '../../model.js';\nimport { fill } from '../copy.js';\nimport type { Ctx, HomeAction } from '../ctx.js';\nimport { Icon, isIconName } from '../icons.js';\nimport { Rail, SlotPoint, Tile } from '../ui.js';\nimport { ReportList } from './reports.js';\n\n/**\n * The first screen: what can be done, and what is waiting on you.\n *\n * ⚠ THE EMPTY STATE DRAWS THE JOURNEY. \"You have not reported anything\" over\n * an empty panel argues for doing nothing; the same space spent showing what a\n * report actually does, ending with the reporter's own check, is the strongest\n * case for filing one, and the only moment it gets read unhurried.\n */\nexport function Home({ w }: { w: Ctx }) {\n const { copy, features, state } = w;\n const reports = state.reports;\n const fixes = reports.filter((r) => r.status === 'resolved' && statusView(r, w.appVersion).needsYou);\n const asked = reports.filter((r) => r.status === 'waiting_user');\n const showReports = features.reports && state.signedIn !== false;\n // The heading counts what is still going on; closed ones are folded below.\n const openCount = reports.filter((r) => statusView(r, w.appVersion).open).length;\n\n return (\n <div class=\"sg-body\" data-testid=\"sg-home\">\n <SlotPoint name=\"home-top\" filled={w.slots} />\n <section class=\"sg-section\">\n <div class=\"sg-section-head\">\n <h3 class=\"sg-section-title\">{copy.homeTitle}</h3>\n </div>\n {features.report && (\n <button type=\"button\" class=\"sg-action\" onClick={() => w.go({ name: 'report' })} data-testid=\"sg-open-report\">\n <Tile icon=\"bug\" tone=\"danger\" />\n <span class=\"sg-action-text\">\n <span class=\"sg-action-label\">{copy.reportAction}</span>\n <span class=\"sg-action-hint\">{copy.reportHint}</span>\n </span>\n <span class=\"sg-chev\"><Icon name=\"chevronRight\" /></span>\n </button>\n )}\n {features.feedback && (\n <button type=\"button\" class=\"sg-action\" onClick={() => w.go({ name: 'feedback' })} data-testid=\"sg-open-feedback\">\n <Tile icon=\"bulb\" tone=\"warn\" />\n <span class=\"sg-action-text\">\n <span class=\"sg-action-label\">{copy.feedbackAction}</span>\n <span class=\"sg-action-hint\">{copy.feedbackHint}</span>\n </span>\n <span class=\"sg-chev\"><Icon name=\"chevronRight\" /></span>\n </button>\n )}\n {features.faq && w.faq.length > 0 && (\n <button type=\"button\" class=\"sg-action\" onClick={() => w.go({ name: 'faq' })} data-testid=\"sg-open-faq\">\n <Tile icon=\"question\" tone=\"accent\" />\n <span class=\"sg-action-text\">\n <span class=\"sg-action-label\">{copy.faqAction}</span>\n <span class=\"sg-action-hint\">{copy.faqHint}</span>\n </span>\n <span class=\"sg-chev\"><Icon name=\"chevronRight\" /></span>\n </button>\n )}\n {w.actions.map((a, i) => (\n <HostAction key={`${a.label}-${i}`} action={a} index={i} />\n ))}\n </section>\n\n {showReports && (\n <section class=\"sg-section\" style={{ paddingLeft: 0, paddingRight: 0 }}>\n <div class=\"sg-section-head\" style={{ padding: '0 16px' }}>\n <h3 class=\"sg-section-title\">\n {copy.yourReports}\n {openCount ? ` · ${openCount}` : ''}\n </h3>\n {openCount > 3 && (\n <button type=\"button\" class=\"sg-link\" onClick={() => w.go({ name: 'reports' })}>\n {copy.seeAll} {openCount}\n </button>\n )}\n </div>\n\n {(fixes.length > 0 || asked.length > 0) && (\n <div style={{ padding: '0 16px 10px' }}>\n <button\n type=\"button\"\n class={`sg-banner sg-t-${fixes.length ? 'success' : 'warn'}`}\n onClick={() => w.go(fixes.length + asked.length === 1 ? { name: 'detail', id: (fixes[0] ?? asked[0])!.id } : { name: 'reports' })}\n data-testid=\"sg-attention\"\n >\n <Tile icon={fixes.length ? 'checkCircle' : 'message'} tone={fixes.length ? 'success' : 'warn'} small />\n <span>\n <span class=\"sg-banner-title\">\n {fixes.length\n ? fixes.length === 1\n ? copy.fixesWaitingOne\n : fill(copy.fixesWaitingMany, { n: fixes.length })\n : copy.questionWaiting}\n </span>\n </span>\n </button>\n </div>\n )}\n\n {state.signedIn === null || (state.loading && reports.length === 0) ? (\n <div aria-busy=\"true\">\n <div class=\"sg-skeleton\" />\n <div class=\"sg-skeleton\" />\n </div>\n ) : reports.length === 0 ? (\n <Explainer w={w} />\n ) : (\n <ReportList w={w} compact />\n )}\n </section>\n )}\n\n {features.reports && state.signedIn === false && (\n <section class=\"sg-section\">\n <p class=\"sg-p sg-small sg-dim\">{copy.signedOutReports}</p>\n </section>\n )}\n <SlotPoint name=\"home-bottom\" filled={w.slots} />\n </div>\n );\n}\n\n/**\n * A host's own entry, drawn exactly like the built-in ones so it reads as part\n * of the panel. A link opens in a new tab; anything else is the host's click.\n */\nfunction HostAction({ action: a, index }: { action: HomeAction; index: number }) {\n const icon = a.icon && isIconName(a.icon) ? a.icon : null;\n const image = a.icon && !icon ? a.icon : null;\n const inner = (\n <>\n {image ? (\n <span class=\"sg-tile sg-t-accent\"><img src={image} alt=\"\" class=\"sg-tile-img\" /></span>\n ) : (\n <Tile icon={icon ?? (a.href ? 'external' : 'chevronRight')} tone=\"accent\" />\n )}\n <span class=\"sg-action-text\">\n <span class=\"sg-action-label\">{a.label}</span>\n {a.hint && <span class=\"sg-action-hint\">{a.hint}</span>}\n </span>\n <span class=\"sg-chev\"><Icon name={a.href ? 'external' : 'chevronRight'} /></span>\n </>\n );\n return a.href ? (\n <a class=\"sg-action\" href={a.href} target=\"_blank\" rel=\"noopener noreferrer\" data-testid={`sg-host-action-${index}`}>\n {inner}\n </a>\n ) : (\n <button type=\"button\" class=\"sg-action\" onClick={() => a.onClick?.()} data-testid={`sg-host-action-${index}`}>\n {inner}\n </button>\n );\n}\n\n/** What happens to a report, drawn before anyone has filed one. */\nfunction Explainer({ w }: { w: Ctx }) {\n return (\n <div style={{ padding: '0 16px' }}>\n <div class=\"sg-rail-box\">\n <Rail\n view={{\n label: 'How a report travels',\n blurb: '',\n tone: 'accent',\n stages: ['Sent', 'Read', 'Accepted', 'Fixed', 'You check'],\n // Nothing filed yet, so no stage is reached; the last node is still drawn as theirs.\n stage: -1,\n active: false,\n offPath: false,\n open: true,\n needsYou: false,\n }}\n />\n <p class=\"sg-p sg-small sg-muted\" style={{ marginTop: '10px' }}>\n {w.copy.noReportsBody}\n </p>\n </div>\n </div>\n );\n}\n","/** @jsxImportSource preact */\nimport { useState } from 'preact/hooks';\n\nimport { describeBrowser, describeSystem, formatBytes } from '../../evidence.js';\nimport { SEVERITY, formatAgo, validateIssue, type Severity } from '../../model.js';\nimport type { Collected } from '../../support.js';\nimport type { Ctx } from '../ctx.js';\nimport { Icon, type IconName } from '../icons.js';\nimport { Button, Field, SlotPoint, Switch } from '../ui.js';\n\n/**\n * Report an issue: describe, then choose what to attach, then send.\n *\n * ⚠ THREE STEPS RATHER THAN ONE FORM, AND THE ORDER IS THE ARGUMENT. Someone\n * opens this because something just went wrong; the first thing in front of\n * them has to be the box to say so, not a consent checklist. Evidence comes\n * second, when the urgent part is written down and they have the patience to\n * read what is being attached. Review comes third, because \"what exactly am I\n * sending\" deserves a page, not a footnote.\n *\n * ⚠ EVIDENCE IS READ ON THE PRESS THAT OPENS STEP 2, never in the background.\n * The button the reporter pressed says what is about to happen.\n */\n\ntype Step = 1 | 2 | 3;\ninterface Shot {\n dataUrl: string;\n width: number;\n height: number;\n bytes: number;\n mime: string;\n}\ninterface Include {\n screenshot: boolean;\n system: boolean;\n trail: boolean;\n extra: boolean;\n}\n\nconst SEVERITIES: Severity[] = ['blocking', 'major', 'minor', 'cosmetic'];\n\nexport function ReportFlow({ w }: { w: Ctx }) {\n const { copy, support, state, features } = w;\n const [step, setStep] = useState<Step>(1);\n const [what, setWhat] = useState('');\n const [expected, setExpected] = useState('');\n const [severity, setSeverity] = useState<Severity>('major');\n const [where, setWhere] = useState(String(support.context().area ?? ''));\n const [touched, setTouched] = useState(false);\n const [collected, setCollected] = useState<Collected | null>(null);\n const [shot, setShot] = useState<Shot | null>(null);\n const [shotError, setShotError] = useState<string | null>(null);\n const [capturing, setCapturing] = useState(false);\n const [include, setInclude] = useState<Include>({ screenshot: true, system: true, trail: true, extra: true });\n const [contact, setContact] = useState({ name: '', email: '' });\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const anonymous = state.signedIn !== true;\n\n const problem = validateIssue({ what, expected });\n\n async function toAttach() {\n setTouched(true);\n if (problem) return;\n setBusy(true);\n try {\n setCollected(await support.collect());\n } catch {\n setCollected({ trail: support.trail.recent(10) });\n } finally {\n setBusy(false);\n setStep(2);\n }\n }\n\n async function capture() {\n setCapturing(true);\n setShotError(null);\n const r = await w.capture();\n setCapturing(false);\n if (r.ok) {\n setShot({ dataUrl: r.dataUrl, width: r.width, height: r.height, bytes: r.bytes, mime: r.mime });\n setInclude((p) => ({ ...p, screenshot: true }));\n } else if (r.reason !== 'cancelled') {\n setShotError(r.message);\n }\n }\n\n async function send() {\n setBusy(true);\n setError(null);\n try {\n const res = await support.submitIssue({\n what,\n expected,\n severity,\n area: where,\n screenshot: include.screenshot && shot ? shot.dataUrl : undefined,\n include: { screenshot: include.screenshot && !!shot, system: include.system, browser: include.system, trail: include.trail, extra: include.extra },\n contact: anonymous && (contact.name || contact.email) ? { name: contact.name || undefined, email: contact.email || undefined } : undefined,\n });\n w.emit('submitted', { ...res, type: 'incident' });\n w.go({ name: 'sent', id: res.id, ref: res.ref });\n } catch (e) {\n setError(e instanceof Error ? e.message : copy.error);\n } finally {\n setBusy(false);\n }\n }\n\n const trail = collected?.trail ?? [];\n const extraKeys = collected?.extra ? Object.keys(collected.extra) : [];\n\n return (\n <>\n <Steps step={step} labels={[copy.stepDescribe, copy.stepAttach, copy.stepReview]} />\n <div class=\"sg-body\">\n {step === 1 && <SlotPoint name=\"report-top\" filled={w.slots} />}\n {step === 1 && (\n <div class=\"sg-pad sg-stack\">\n <Field label={copy.whatLabel} hint={copy.whatHint} error={touched && problem?.field === 'what' ? problem.message : null}>\n <textarea\n class={`sg-textarea${touched && problem?.field === 'what' ? ' sg-invalid' : ''}`}\n value={what}\n onInput={(e) => setWhat(e.currentTarget.value)}\n placeholder={copy.whatPlaceholder}\n data-testid=\"sg-what\"\n autoFocus\n />\n </Field>\n <Field label={copy.expectedLabel} hint={copy.expectedHint} error={touched && problem?.field === 'expected' ? problem.message : null}>\n <textarea\n class={`sg-textarea${touched && problem?.field === 'expected' ? ' sg-invalid' : ''}`}\n value={expected}\n onInput={(e) => setExpected(e.currentTarget.value)}\n placeholder={copy.expectedPlaceholder}\n data-testid=\"sg-expected\"\n />\n </Field>\n <div>\n <span class=\"sg-label\">{copy.severityLabel}</span>\n <div class=\"sg-chips\" role=\"radiogroup\" aria-label={copy.severityLabel}>\n {SEVERITIES.map((s) => (\n <button\n key={s}\n type=\"button\"\n class=\"sg-chip\"\n role=\"radio\"\n aria-checked={severity === s}\n onClick={() => setSeverity(s)}\n data-testid={`sg-sev-${s}`}\n >\n <span class={`sg-dot sg-t-${SEVERITY[s].tone}`} />\n {SEVERITY[s].label}\n </button>\n ))}\n </div>\n <span class=\"sg-hint\">{SEVERITY[severity].hint}</span>\n </div>\n <Field label={copy.whereLabel} hint={copy.whereHint}>\n <input class=\"sg-input\" value={where} onInput={(e) => setWhere(e.currentTarget.value)} data-testid=\"sg-where\" />\n </Field>\n </div>\n )}\n\n {step === 2 && (\n <div class=\"sg-pad\">\n <p class=\"sg-p sg-small sg-muted\" style={{ marginBottom: '12px' }}>{copy.attachIntro}</p>\n\n {features.screenshot && (\n <Card\n icon=\"camera\"\n title={copy.screenshot}\n summary={shot ? `${shot.width}×${shot.height} · ${formatBytes(shot.bytes)}` : copy.screenshotNone}\n on={include.screenshot && !!shot}\n onToggle={(on) => (shot ? setInclude((p) => ({ ...p, screenshot: on })) : void capture())}\n accessory={\n <button type=\"button\" class=\"sg-link\" onClick={() => void capture()} disabled={capturing} data-testid=\"sg-capture\">\n {capturing ? copy.capturing : shot ? copy.retake : copy.capture}\n </button>\n }\n >\n {shot && <img class=\"sg-shot\" src={shot.dataUrl} alt=\"The frame that will be attached\" data-testid=\"sg-shot\" />}\n {shotError && <span class=\"sg-err\">{shotError}</span>}\n </Card>\n )}\n\n <Card\n icon=\"monitor\"\n title={copy.system}\n summary={`${describeSystem(collected?.system)} · ${describeBrowser(collected?.browser)}`}\n on={include.system}\n onToggle={(on) => setInclude((p) => ({ ...p, system: on }))}\n >\n <pre class=\"sg-json\">{JSON.stringify({ system: collected?.system, browser: collected?.browser }, null, 2)}</pre>\n </Card>\n\n <Card\n icon=\"history\"\n title={copy.trail}\n summary={trail.length ? `${trail.length} steps, ending with “${trail[trail.length - 1]!.label}”` : copy.trailNone}\n on={include.trail && trail.length > 0}\n onToggle={(on) => setInclude((p) => ({ ...p, trail: on }))}\n >\n {trail.length > 0 && (\n <ol class=\"sg-steplist\">\n {trail.map((t, i) => (\n <li key={i}>\n <span class=\"sg-when\">{formatAgo(t.at)}</span>\n <span class={t.kind === 'error' ? 'sg-err-step' : ''}>{t.label}</span>\n </li>\n ))}\n </ol>\n )}\n </Card>\n\n {extraKeys.length > 0 && (\n <Card\n icon=\"cpu\"\n title={copy.diagnostics}\n summary={extraKeys.join(', ')}\n on={include.extra}\n onToggle={(on) => setInclude((p) => ({ ...p, extra: on }))}\n >\n <pre class=\"sg-json\">{JSON.stringify(collected?.extra, null, 2)}</pre>\n </Card>\n )}\n </div>\n )}\n\n {step === 3 && (\n <div class=\"sg-pad\">\n <dl class=\"sg-review\" style={{ margin: 0 }}>\n <dt>{copy.whatLabel}</dt>\n <dd>{what.trim()}</dd>\n <dt>{copy.expectedLabel}</dt>\n <dd>{expected.trim()}</dd>\n <dt>{copy.severityLabel}</dt>\n <dd>{SEVERITY[severity].label}</dd>\n {where.trim() && (\n <>\n <dt>{copy.whereLabel}</dt>\n <dd>{where.trim()}</dd>\n </>\n )}\n {w.appVersion && (\n <>\n <dt>Version</dt>\n <dd>{w.appVersion}</dd>\n </>\n )}\n </dl>\n <span class=\"sg-label\">{copy.attached}</span>\n <ul class=\"sg-attached\">\n {features.screenshot && <Attached on={include.screenshot && !!shot} label={copy.screenshot} copy={copy.notAttached} />}\n <Attached on={include.system} label={copy.system} copy={copy.notAttached} />\n <Attached on={include.trail && trail.length > 0} label={copy.trail} copy={copy.notAttached} />\n {extraKeys.length > 0 && <Attached on={include.extra} label={copy.diagnostics} copy={copy.notAttached} />}\n </ul>\n {anonymous && (\n <div style={{ marginTop: '16px' }}>\n <span class=\"sg-label\">{copy.contactLabel}</span>\n <div class=\"sg-stack\">\n <input class=\"sg-input\" placeholder={copy.namePlaceholder} value={contact.name} onInput={(e) => setContact((c) => ({ ...c, name: e.currentTarget.value }))} />\n <input class=\"sg-input\" type=\"email\" placeholder={copy.emailPlaceholder} value={contact.email} onInput={(e) => setContact((c) => ({ ...c, email: e.currentTarget.value }))} />\n </div>\n <span class=\"sg-hint\">{copy.contactHint}</span>\n </div>\n )}\n {error && <p class=\"sg-err\" role=\"alert\" style={{ marginTop: '12px' }}>{error}</p>}\n </div>\n )}\n </div>\n\n <div class=\"sg-footer\">\n <Button variant=\"ghost\" icon={step === 1 ? undefined : 'chevronLeft'} onClick={() => (step === 1 ? w.go({ name: 'home' }) : setStep((s) => (s - 1) as Step))}>\n {step === 1 ? copy.cancel : copy.back}\n </Button>\n {step === 1 && (\n <Button onClick={() => void toAttach()} busy={busy} testId=\"sg-next\">\n {copy.next}\n </Button>\n )}\n {step === 2 && (\n <Button onClick={() => setStep(3)} testId=\"sg-next\">\n {copy.next}\n </Button>\n )}\n {step === 3 && (\n <Button onClick={() => void send()} busy={busy} icon=\"send\" testId=\"sg-submit\">\n {copy.submitReport}\n </Button>\n )}\n </div>\n </>\n );\n}\n\n/** The step rail: a line that fills, because \"how much is left\" is the question mid-form. */\nexport function Steps({ step, labels }: { step: number; labels: string[] }) {\n return (\n <div class=\"sg-steps\" aria-label={`Step ${step} of ${labels.length}`}>\n {labels.map((label, i) => {\n const n = i + 1;\n const done = n < step;\n const now = n === step;\n return (\n <div class=\"sg-step\" key={label}>\n <div class=\"sg-step-line\">\n <span class={`sg-step-seg ${i === 0 ? 'sg-none' : done || now ? 'sg-on' : ''}`} />\n <span class={`sg-step-node${now ? ' sg-now' : done ? ' sg-done' : ''}`}>{done ? <Icon name=\"check\" size={11} stroke={2.6} /> : n}</span>\n <span class={`sg-step-seg ${i === labels.length - 1 ? 'sg-none' : done ? 'sg-on' : ''}`} />\n </div>\n <span class={`sg-step-label${now ? ' sg-now' : ''}`}>{label}</span>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction Card({\n icon,\n title,\n summary,\n on,\n onToggle,\n accessory,\n children,\n}: {\n icon: IconName;\n title: string;\n summary: string;\n on: boolean;\n onToggle: (on: boolean) => void;\n accessory?: preact.ComponentChildren;\n children?: preact.ComponentChildren;\n}) {\n return (\n <div class={`sg-card${on ? '' : ' sg-off'}`}>\n <div class=\"sg-card-head\">\n <span class=\"sg-dim\" style={{ paddingTop: '2px' }}><Icon name={icon} /></span>\n <div class=\"sg-card-text\">\n <p class=\"sg-card-title\">{title}</p>\n <p class=\"sg-card-sum\">{summary}</p>\n {accessory && <div style={{ marginTop: '4px' }}>{accessory}</div>}\n </div>\n <Switch on={on} onChange={onToggle} label={`Attach ${title}`} />\n </div>\n {children && <div class=\"sg-card-body\">{children}</div>}\n </div>\n );\n}\n\nfunction Attached({ on, label, copy }: { on: boolean; label: string; copy: string }) {\n return (\n <li class={on ? '' : 'sg-dim'}>\n <span style={{ color: on ? 'var(--sg-success)' : 'var(--sg-dim)' }}>{on ? <Icon name=\"check\" size={14} stroke={2.4} /> : '–'}</span>\n {label}\n {!on && <span class=\"sg-small sg-dim\">{copy}</span>}\n </li>\n );\n}\n","import type { CaptureResult } from '../evidence.js';\nimport type { UiStore } from './store.js';\n\n/**\n * Capture mode: the panel steps aside so the person can go to the screen they\n * mean, and a small bar stays up with Capture and Cancel.\n *\n * A capture taken from inside the panel shows whatever was behind it, which is\n * rarely the screen the report is about. Here the panel is only HIDDEN (still\n * mounted), so the half-written report survives the person changing tabs,\n * scrolling or opening a menu in the product, and the panel comes back on the\n * same step with the frame in it.\n *\n * The browser's permission prompt is asked on Capture, not on entering the\n * mode: Capture is the user gesture `getDisplayMedia` needs, and the stream is\n * live for one frame rather than for the whole walk round the product.\n *\n * `start()` resolves once: with the frame, with `cancelled` (Cancel, Escape,\n * the panel closed), or with the error that ended it. Declining the browser's\n * own prompt is NOT an end: the bar stays up, to try again or cancel.\n */\nexport interface Picker {\n start(): Promise<CaptureResult>;\n capture(): Promise<void>;\n cancel(): void;\n readonly active: boolean;\n}\n\nconst CANCELLED: CaptureResult = { ok: false, reason: 'cancelled', message: 'Capture was cancelled.' };\n\nexport function createPicker(\n ui: UiStore,\n grab: (hooks: { beforeCapture: () => void; afterCapture: () => void }) => Promise<CaptureResult>,\n supported: () => boolean,\n): Picker {\n let settle: ((r: CaptureResult) => void) | null = null;\n let busy = false;\n\n function end(r: CaptureResult) {\n const done = settle;\n settle = null;\n busy = false;\n ui.set({ picking: false, hidden: false });\n done?.(r);\n }\n\n return {\n get active() {\n return settle !== null;\n },\n start() {\n if (!supported()) {\n return Promise.resolve({ ok: false, reason: 'unsupported', message: 'This browser cannot capture the screen.' });\n }\n // A second start while one is open answers the first as cancelled.\n if (settle) end(CANCELLED);\n return new Promise<CaptureResult>((resolve) => {\n settle = resolve;\n ui.set({ picking: true, hidden: false });\n });\n },\n async capture() {\n if (!settle || busy) return;\n busy = true;\n // The bar leaves the picture BEFORE the stream exists, not once it does:\n // a tab stream's first frames can predate a hide made after it started\n // (measured in Roster: the bar was in the frame), and the browser's\n // prompt draws over the page anyway.\n ui.set({ hidden: true });\n const r = await grab({\n beforeCapture: () => ui.set({ hidden: true }),\n afterCapture: () => {},\n });\n busy = false;\n if (!settle) return; // cancelled while the prompt was up\n if (!r.ok && r.reason === 'cancelled') {\n ui.set({ hidden: false }); // the prompt was declined: the bar comes back\n return;\n }\n end(r);\n },\n cancel() {\n if (settle) end(CANCELLED);\n },\n };\n}\n","/**\n * The panel's stylesheet, inside its own shadow root.\n *\n * ⚠ SHADOW DOM, SO NOTHING LEAKS EITHER WAY. The product's CSS cannot reach in\n * (a global `button { … }` or a reset will not restyle the panel) and nothing\n * here can reach out. The product's font still inherits through, which is what\n * makes `font: inherit` look native. Every colour, radius and size is a token\n * from the theme.\n */\nexport const STYLES = /* css */ `\n/* Reset everything the page could push in, except the font: the panel should\n speak in the product's typeface, so that one is inherited on purpose. */\n:host { all: initial; font-family: inherit; }\n.sg-root { font-family: var(--sg-font); font-size: var(--sg-size); line-height: 1.5; color: var(--sg-text);\n -webkit-font-smoothing: antialiased; }\n.sg-root *, .sg-root *::before, .sg-root *::after { box-sizing: border-box; }\n.sg-root button, .sg-root input, .sg-root textarea { font: inherit; color: inherit; }\n.sg-root :focus-visible { outline: 2px solid var(--sg-accent); outline-offset: 2px; }\n\n/* ---------------------------------------------------------- launcher */\n.sg-launcher { position: fixed; bottom: 20px; z-index: var(--sg-z); display: inline-flex; align-items: center; gap: 8px;\n height: 44px; padding: 0 16px 0 14px; border: 0; border-radius: 999px; cursor: pointer;\n background: var(--sg-accent); color: var(--sg-accent-text); font-weight: 600; font-size: calc(var(--sg-size) + 0.5px);\n box-shadow: 0 10px 30px -10px color-mix(in srgb, var(--sg-accent) 70%, black), 0 2px 6px rgba(0,0,0,0.18);\n transition: transform .16s ease, box-shadow .16s ease; }\n.sg-launcher:hover { transform: translateY(-1px); }\n.sg-launcher.sg-right { right: 20px; } .sg-launcher.sg-left { left: 20px; }\n.sg-launcher[data-hidden=\"true\"] { opacity: 0; pointer-events: none; transform: scale(.9); }\n.sg-badge { min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px; background: var(--sg-danger); color: #fff;\n font-size: 11px; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; line-height: 1; }\n.sg-launcher .sg-badge { margin-left: 2px; box-shadow: 0 0 0 2px var(--sg-accent); }\n\n/* ------------------------------------------------------------ frame */\n.sg-scrim { position: fixed; inset: 0; z-index: var(--sg-z); background: var(--sg-scrim); opacity: 0; transition: opacity .18s ease;\n backdrop-filter: blur(1.5px); }\n.sg-open .sg-scrim { opacity: 1; }\n.sg-panel { position: fixed; z-index: calc(var(--sg-z) + 1); display: flex; flex-direction: column; overflow: hidden;\n background: var(--sg-bg); color: var(--sg-text); border: 1px solid var(--sg-border); box-shadow: var(--sg-shadow);\n transition: transform .24s cubic-bezier(.22,1,.36,1), opacity .2s ease; }\n.sg-panel[hidden] { display: none; }\n/* The panel takes focus on open so Tab starts inside it; the container itself needs no ring. */\n.sg-panel:focus { outline: none; }\n.sg-drawer { top: 0; bottom: 0; width: min(var(--sg-width), 100vw); border-top: 0; border-bottom: 0; }\n.sg-drawer.sg-right { right: 0; border-right: 0; transform: translateX(100%); }\n.sg-drawer.sg-left { left: 0; border-left: 0; transform: translateX(-100%); }\n.sg-open .sg-drawer { transform: none; }\n.sg-modal { left: 50%; top: 50%; width: min(560px, calc(100vw - 32px)); height: min(720px, calc(100vh - 48px));\n border-radius: calc(var(--sg-radius) + 4px); transform: translate(-50%, -48%) scale(.98); opacity: 0; }\n.sg-open .sg-modal { transform: translate(-50%, -50%); opacity: 1; }\n.sg-popover { bottom: 80px; width: min(calc(var(--sg-width) - 40px), calc(100vw - 32px)); height: min(680px, calc(100vh - 110px));\n border-radius: calc(var(--sg-radius) + 4px); transform: translateY(12px) scale(.98); opacity: 0; transform-origin: bottom right; }\n.sg-popover.sg-right { right: 20px; } .sg-popover.sg-left { left: 20px; transform-origin: bottom left; }\n.sg-open .sg-popover { transform: none; opacity: 1; }\n.sg-sheet { left: 0; right: 0; bottom: 0; height: min(88vh, 760px); border-radius: calc(var(--sg-radius) + 6px) calc(var(--sg-radius) + 6px) 0 0;\n border-bottom: 0; transform: translateY(100%); }\n.sg-open .sg-sheet { transform: none; }\n.sg-grabber { width: 36px; height: 4px; border-radius: 4px; background: var(--sg-border); margin: 8px auto 0; flex: none; }\n.sg-accentline { position: absolute; inset: 0 0 auto 0; height: 1px; pointer-events: none;\n background: linear-gradient(90deg, var(--sg-accent), color-mix(in srgb, var(--sg-accent) 30%, transparent), transparent); }\n\n/* -------------------------------------------------------- structure */\n.sg-header { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border-bottom: 1px solid var(--sg-border); flex: none; position: relative; }\n.sg-brand { width: 28px; height: 28px; border-radius: var(--sg-radius-sm); object-fit: contain; flex: none; }\n.sg-head-text { min-width: 0; flex: 1; }\n.sg-title { margin: 0; font-size: calc(var(--sg-size) + 1.5px); font-weight: 650; letter-spacing: -0.01em; line-height: 1.25;\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.sg-sub { margin: 1px 0 0; font-size: calc(var(--sg-size) - 2.5px); color: var(--sg-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.sg-iconbtn { width: 30px; height: 30px; border: 0; background: transparent; border-radius: var(--sg-radius-sm); color: var(--sg-muted);\n display: inline-flex; align-items: center; justify-content: center; cursor: pointer; flex: none; }\n.sg-iconbtn:hover { background: var(--sg-raised); color: var(--sg-text); }\n.sg-body { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; }\n.sg-pad { padding: 14px 16px; }\n.sg-stack > * + * { margin-top: 14px; }\n.sg-footer { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 10px 14px;\n border-top: 1px solid var(--sg-border); flex: none; }\n.sg-section { padding: 14px 16px; }\n.sg-section + .sg-section { border-top: 1px solid var(--sg-border); }\n.sg-section-head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 10px; }\n.sg-section-title { margin: 0; font-size: calc(var(--sg-size) - 2px); font-weight: 650; letter-spacing: .06em; text-transform: uppercase; color: var(--sg-dim); }\n.sg-muted { color: var(--sg-muted); } .sg-dim { color: var(--sg-dim); }\n.sg-small { font-size: calc(var(--sg-size) - 1.5px); }\n.sg-mono { font-family: var(--sg-mono); font-size: calc(var(--sg-size) - 2px); letter-spacing: .02em; }\n.sg-p { margin: 0; }\n\n/* ----------------------------------------------------------- actions */\n.sg-action { width: 100%; display: flex; align-items: center; gap: 12px; padding: 11px 12px; border: 1px solid var(--sg-border);\n border-radius: var(--sg-radius); background: var(--sg-surface); cursor: pointer; text-align: left; transition: background .12s ease, border-color .12s ease; }\n.sg-action + .sg-action { margin-top: 8px; }\n.sg-action:hover { background: var(--sg-raised); border-color: color-mix(in srgb, var(--sg-accent) 35%, var(--sg-border)); }\n.sg-action-text { flex: 1; min-width: 0; }\n.sg-action-label { display: block; font-weight: 600; }\n.sg-action-hint { display: block; font-size: calc(var(--sg-size) - 1.5px); color: var(--sg-dim); }\n.sg-chev { color: var(--sg-dim); flex: none; }\n.sg-tile { width: 34px; height: 34px; border-radius: var(--sg-radius-sm); display: inline-flex; align-items: center; justify-content: center; flex: none; }\n.sg-tile.sg-sm { width: 28px; height: 28px; }\n.sg-tile-img { width: 20px; height: 20px; object-fit: contain; }\na.sg-action { color: inherit; text-decoration: none; }\n\n/* Host content, in the host's own styles. The wrapper only spaces it. */\n.sg-slot { padding: 12px 16px 0; }\n.sg-slot-header { padding: 0; display: flex; align-items: center; flex: none; }\n.sg-slot-footer { padding: 10px 14px; border-top: 1px solid var(--sg-border); flex: none; }\n.sg-slot-sent { padding: 18px 0 0; width: 100%; }\n.sg-slot-home-bottom { padding: 12px 16px 16px; }\n\n/* tones */\n.sg-t-accent { --sg-tone: var(--sg-accent); } .sg-t-info { --sg-tone: var(--sg-info); } .sg-t-warn { --sg-tone: var(--sg-warning); }\n.sg-t-danger { --sg-tone: var(--sg-danger); } .sg-t-success { --sg-tone: var(--sg-success); } .sg-t-neutral { --sg-tone: var(--sg-muted); }\n.sg-tile[class*=\"sg-t-\"] { color: var(--sg-tone); background: color-mix(in srgb, var(--sg-tone) 15%, transparent); }\n.sg-pill { display: inline-flex; align-items: center; gap: 5px; padding: 2px 8px; border-radius: 999px; white-space: nowrap;\n font-size: calc(var(--sg-size) - 2.5px); font-weight: 600; color: var(--sg-tone); background: color-mix(in srgb, var(--sg-tone) 14%, transparent);\n border: 1px solid color-mix(in srgb, var(--sg-tone) 30%, transparent); }\n.sg-banner { display: flex; gap: 10px; align-items: flex-start; padding: 11px 12px; border-radius: var(--sg-radius);\n background: color-mix(in srgb, var(--sg-tone) 11%, transparent); border: 1px solid color-mix(in srgb, var(--sg-tone) 32%, transparent); }\n.sg-banner-title { margin: 0; font-weight: 600; } .sg-banner-body { margin: 2px 0 0; color: var(--sg-muted); font-size: calc(var(--sg-size) - 1px); }\nbutton.sg-banner { width: 100%; text-align: left; cursor: pointer; }\n\n/* ---------------------------------------------------------- controls */\n.sg-btn { display: inline-flex; align-items: center; justify-content: center; gap: 7px; height: 34px; padding: 0 14px; border-radius: var(--sg-radius-sm);\n border: 1px solid transparent; background: var(--sg-accent); color: var(--sg-accent-text); font-weight: 600; cursor: pointer; white-space: nowrap;\n transition: filter .12s ease, opacity .12s ease; }\n.sg-btn:hover { filter: brightness(1.08); }\n.sg-btn:disabled { opacity: .45; cursor: default; filter: none; }\n.sg-btn-ghost { background: transparent; color: var(--sg-muted); border-color: var(--sg-border); }\n.sg-btn-ghost:hover { background: var(--sg-raised); color: var(--sg-text); filter: none; }\n.sg-btn-danger { background: transparent; color: var(--sg-danger); border-color: color-mix(in srgb, var(--sg-danger) 40%, transparent); }\n.sg-link { border: 0; background: none; padding: 0; color: var(--sg-accent); cursor: pointer; font-weight: 600; font-size: calc(var(--sg-size) - 1px); }\n.sg-link:hover { text-decoration: underline; }\n.sg-quiet-link { align-self: flex-start; border: 0; background: none; padding: 0; color: var(--sg-dim); cursor: pointer; font: inherit; font-size: calc(var(--sg-size) - 1.5px); text-decoration: underline; text-underline-offset: 3px; text-decoration-color: color-mix(in srgb, currentColor 40%, transparent); }\n.sg-quiet-link:hover { color: var(--sg-text); }\n.sg-closed { border-top: 1px solid var(--sg-border); }\n.sg-closed > summary, .sg-closed-link { display: flex; align-items: center; gap: 6px; width: 100%; padding: 12px 16px; list-style: none; cursor: pointer;\n border: 0; background: none; color: var(--sg-muted); font: inherit; font-weight: 600; font-size: calc(var(--sg-size) - 1.5px); text-align: left; }\n.sg-closed > summary::-webkit-details-marker { display: none; }\n.sg-closed > summary:hover, .sg-closed-link:hover { color: var(--sg-text); }\n.sg-closed > summary svg { transition: transform .15s ease; }\n.sg-closed[open] > summary svg { transform: rotate(90deg); }\n.sg-closed-link { justify-content: space-between; border-top: 1px solid var(--sg-border); }\n.sg-back { border: 0; background: none; padding: 0; color: var(--sg-muted); cursor: pointer; display: inline-flex; align-items: center; gap: 4px; }\n.sg-back:hover { color: var(--sg-text); }\n.sg-field { display: block; }\n.sg-label { display: block; font-weight: 600; margin-bottom: 4px; }\n.sg-hint { display: block; color: var(--sg-dim); font-size: calc(var(--sg-size) - 1.5px); margin-top: 4px; }\n.sg-err { display: block; color: var(--sg-danger); font-size: calc(var(--sg-size) - 1.5px); margin-top: 4px; }\n.sg-input, .sg-textarea { width: 100%; border: 1px solid var(--sg-border); background: var(--sg-surface); border-radius: var(--sg-radius-sm);\n padding: 8px 10px; outline: none; transition: border-color .12s ease, box-shadow .12s ease; }\n.sg-textarea { min-height: 84px; resize: vertical; line-height: 1.45; }\n.sg-input:focus, .sg-textarea:focus { border-color: var(--sg-accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--sg-accent) 22%, transparent); }\n.sg-input::placeholder, .sg-textarea::placeholder { color: var(--sg-dim); }\n.sg-invalid { border-color: var(--sg-danger) !important; }\n.sg-chips { display: flex; flex-wrap: wrap; gap: 6px; }\n.sg-chip { display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; border-radius: 999px; border: 1px solid var(--sg-border);\n background: var(--sg-surface); cursor: pointer; font-size: calc(var(--sg-size) - 1px); }\n.sg-chip:hover { background: var(--sg-raised); }\n.sg-chip[aria-pressed=\"true\"], .sg-chip[aria-checked=\"true\"] { border-color: var(--sg-accent); background: color-mix(in srgb, var(--sg-accent) 16%, transparent); color: var(--sg-text); }\n.sg-dot { width: 7px; height: 7px; border-radius: 999px; background: var(--sg-tone, var(--sg-accent)); flex: none; display: inline-block; }\n\n/* -------------------------------------------------------- step rail */\n.sg-steps { display: flex; padding: 12px 16px 10px; border-bottom: 1px solid var(--sg-border); flex: none; }\n.sg-step { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: center; }\n.sg-step-line { display: flex; align-items: center; width: 100%; }\n.sg-step-seg { flex: 1; height: 1px; background: var(--sg-border); }\n.sg-step-seg.sg-on { background: color-mix(in srgb, var(--sg-accent) 70%, transparent); }\n.sg-step-seg.sg-none { background: transparent; }\n.sg-step-node { width: 20px; height: 20px; border-radius: 999px; border: 1px solid var(--sg-border); display: inline-flex; align-items: center;\n justify-content: center; font-size: 10px; font-weight: 700; color: var(--sg-dim); flex: none; }\n.sg-step-node.sg-now { background: var(--sg-accent); border-color: var(--sg-accent); color: var(--sg-accent-text);\n box-shadow: 0 0 14px -2px color-mix(in srgb, var(--sg-accent) 85%, transparent); }\n.sg-step-node.sg-done { background: color-mix(in srgb, var(--sg-accent) 20%, transparent); border-color: color-mix(in srgb, var(--sg-accent) 60%, transparent); color: var(--sg-accent); }\n.sg-step-label { margin-top: 5px; font-size: calc(var(--sg-size) - 3px); color: var(--sg-dim); letter-spacing: .02em; }\n.sg-step-label.sg-now { color: var(--sg-text); font-weight: 600; }\n\n/* --------------------------------------------------- evidence cards */\n.sg-card { border: 1px solid var(--sg-border); border-radius: var(--sg-radius); background: var(--sg-surface); overflow: hidden; }\n.sg-card + .sg-card { margin-top: 8px; }\n.sg-card-head { display: flex; align-items: flex-start; gap: 10px; padding: 10px 12px; }\n.sg-card-text { flex: 1; min-width: 0; }\n.sg-card-title { margin: 0; font-weight: 600; }\n.sg-card-sum { margin: 1px 0 0; color: var(--sg-dim); font-size: calc(var(--sg-size) - 1.5px); }\n.sg-card-body { padding: 0 12px 12px; }\n.sg-card.sg-off .sg-card-body, .sg-card.sg-off .sg-card-title { opacity: .55; }\n.sg-switch { position: relative; width: 34px; height: 20px; border-radius: 999px; border: 0; background: var(--sg-raised); cursor: pointer; flex: none;\n box-shadow: inset 0 0 0 1px var(--sg-border); transition: background .15s ease; }\n.sg-switch::after { content: ''; position: absolute; top: 3px; left: 3px; width: 14px; height: 14px; border-radius: 999px; background: var(--sg-muted);\n transition: transform .15s ease, background .15s ease; }\n.sg-switch[aria-checked=\"true\"] { background: var(--sg-accent); box-shadow: none; }\n.sg-switch[aria-checked=\"true\"]::after { transform: translateX(14px); background: var(--sg-accent-text); }\n.sg-shot { display: block; width: 100%; max-height: 220px; object-fit: contain; border-radius: var(--sg-radius-sm); border: 1px solid var(--sg-border); background: var(--sg-bg); }\n.sg-json { margin: 0; max-height: 180px; overflow: auto; padding: 8px 10px; border-radius: var(--sg-radius-sm); background: var(--sg-bg);\n border: 1px solid var(--sg-border); font-family: var(--sg-mono); font-size: calc(var(--sg-size) - 2.5px); line-height: 1.5; color: var(--sg-muted); white-space: pre-wrap; word-break: break-word; }\n.sg-steplist { margin: 0; padding: 0; list-style: none; }\n.sg-steplist li { display: flex; gap: 8px; font-size: calc(var(--sg-size) - 1px); padding: 2px 0; }\n.sg-steplist .sg-when { width: 54px; flex: none; text-align: right; color: var(--sg-dim); font-size: calc(var(--sg-size) - 2.5px); padding-top: 1px; }\n.sg-steplist .sg-err-step { color: var(--sg-danger); }\n.sg-review dt { font-size: calc(var(--sg-size) - 3px); text-transform: uppercase; letter-spacing: .07em; color: var(--sg-dim); font-weight: 650; }\n.sg-review dd { margin: 2px 0 12px; white-space: pre-wrap; word-break: break-word; }\n.sg-attached { margin: 0; padding: 0; list-style: none; }\n.sg-attached li { display: flex; gap: 8px; align-items: center; padding: 2px 0; }\n\n/* ------------------------------------------------------------ lists */\n.sg-list { margin: 0; padding: 0; list-style: none; }\n.sg-row { width: 100%; display: flex; gap: 10px; align-items: flex-start; padding: 11px 16px; border: 0; background: transparent; cursor: pointer; text-align: left; }\n.sg-row:hover { background: var(--sg-surface); }\n.sg-list li + li .sg-row { border-top: 1px solid var(--sg-border); }\n.sg-row-main { flex: 1; min-width: 0; }\n.sg-row-top { display: flex; align-items: flex-start; gap: 8px; }\n.sg-row-title { flex: 1; min-width: 0; font-weight: 550; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.sg-row-meta { margin-top: 2px; color: var(--sg-dim); font-size: calc(var(--sg-size) - 2.5px); display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }\n.sg-row-cta { margin-top: 6px; display: inline-flex; align-items: center; gap: 6px; padding: 3px 8px; border-radius: var(--sg-radius-sm);\n font-size: calc(var(--sg-size) - 2px); font-weight: 600; color: var(--sg-tone); background: color-mix(in srgb, var(--sg-tone) 13%, transparent); }\n.sg-empty { text-align: center; padding: 34px 20px; }\n.sg-empty-icon { width: 44px; height: 44px; border-radius: 999px; border: 1px solid var(--sg-border); display: inline-flex; align-items: center; justify-content: center; color: var(--sg-dim); }\n\n/* ---------------------------------------------------- lifecycle rail */\n.sg-rail { display: flex; align-items: flex-start; }\n.sg-rail-stage { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: center; text-align: center; }\n.sg-rail-line { display: flex; align-items: center; width: 100%; }\n.sg-rail-seg { flex: 1; height: 2px; border-radius: 2px; background: var(--sg-border); }\n.sg-rail-seg.sg-on { background: var(--sg-tone, var(--sg-accent)); }\n.sg-rail-seg.sg-none { background: transparent; }\n.sg-rail-node { width: 12px; height: 12px; border-radius: 999px; border: 2px solid var(--sg-border); background: var(--sg-bg); flex: none; }\n.sg-rail-node.sg-on { border-color: var(--sg-tone, var(--sg-accent)); background: var(--sg-tone, var(--sg-accent)); }\n.sg-rail-node.sg-here { box-shadow: 0 0 0 4px color-mix(in srgb, var(--sg-tone, var(--sg-accent)) 25%, transparent); }\n.sg-rail-node.sg-yours { border-color: var(--sg-tone, var(--sg-accent)); border-style: dashed; }\n.sg-rail-node.sg-pulse { animation: sg-pulse 1.6s ease-in-out infinite; }\n.sg-rail-label { margin-top: 6px; font-size: calc(var(--sg-size) - 3px); color: var(--sg-dim); line-height: 1.2; }\n.sg-rail-label.sg-on { color: var(--sg-text); }\n.sg-rail-box { padding: 12px 10px 10px; border-radius: var(--sg-radius); border: 1px solid var(--sg-border);\n background: linear-gradient(180deg, var(--sg-surface), transparent); }\n@keyframes sg-pulse { 0%,100% { box-shadow: 0 0 0 3px color-mix(in srgb, var(--sg-tone, var(--sg-accent)) 15%, transparent); }\n 50% { box-shadow: 0 0 0 7px color-mix(in srgb, var(--sg-tone, var(--sg-accent)) 28%, transparent); } }\n\n/* ----------------------------------------------------- conversation */\n.sg-thread { display: flex; flex-direction: column; gap: 10px; }\n.sg-event { display: flex; align-items: center; gap: 8px; color: var(--sg-dim); font-size: calc(var(--sg-size) - 2px); }\n.sg-event::before, .sg-event::after { content: ''; flex: 1; height: 1px; background: var(--sg-border); }\n.sg-msg { max-width: 88%; padding: 9px 11px; border-radius: var(--sg-radius); white-space: pre-wrap; word-break: break-word; }\n.sg-msg-meta { display: block; font-size: calc(var(--sg-size) - 3px); color: var(--sg-dim); margin-bottom: 2px; }\n.sg-msg.sg-team { align-self: flex-start; background: var(--sg-surface); border: 1px solid var(--sg-border); border-top-left-radius: 4px; }\n.sg-msg.sg-you { align-self: flex-end; background: color-mix(in srgb, var(--sg-accent) 18%, var(--sg-bg));\n border: 1px solid color-mix(in srgb, var(--sg-accent) 35%, transparent); border-top-right-radius: 4px; }\n.sg-composer { display: flex; gap: 8px; align-items: flex-end; padding: 10px 14px; border-top: 1px solid var(--sg-border); flex: none; }\n.sg-composer .sg-textarea { min-height: 38px; max-height: 140px; }\n\n/* -------------------------------------------------------- confirmed */\n.sg-confirm { height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: 24px; }\n.sg-ring { width: 50px; height: 50px; border-radius: 999px; display: inline-flex; align-items: center; justify-content: center; color: var(--sg-success);\n background: color-mix(in srgb, var(--sg-success) 12%, transparent); border: 1px solid color-mix(in srgb, var(--sg-success) 40%, transparent); }\n.sg-ref { margin-top: 8px; padding: 3px 10px; border-radius: 999px; border: 1px solid var(--sg-border); background: var(--sg-surface); font-family: var(--sg-mono); font-size: calc(var(--sg-size) - 2px); }\n\n/* ------------------------------------------------------------- faq */\n.sg-faq { border: 1px solid var(--sg-border); border-radius: var(--sg-radius); background: var(--sg-surface); }\n.sg-faq + .sg-faq { margin-top: 8px; }\n.sg-faq summary { list-style: none; cursor: pointer; padding: 10px 12px; font-weight: 600; display: flex; gap: 8px; align-items: center; }\n.sg-faq summary::-webkit-details-marker { display: none; }\n.sg-faq summary .sg-chev { margin-left: auto; transition: transform .15s ease; }\n.sg-faq[open] summary .sg-chev { transform: rotate(90deg); }\n.sg-faq-a { padding: 0 12px 12px; color: var(--sg-muted); white-space: pre-wrap; }\n\n.sg-skeleton { height: 46px; border-radius: var(--sg-radius-sm); background: var(--sg-surface); margin: 8px 16px; animation: sg-shimmer 1.2s ease-in-out infinite; }\n@keyframes sg-shimmer { 50% { opacity: .55; } }\n.sg-spin { width: 14px; height: 14px; border-radius: 999px; border: 2px solid currentColor; border-right-color: transparent; animation: sg-rot .7s linear infinite; }\n@keyframes sg-rot { to { transform: rotate(360deg); } }\n.sg-refresh.sg-busy svg { animation: sg-rot .7s linear infinite; }\n.sg-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }\n\n/* A phone gets a sheet whatever the layout asked for: a drawer at 375px is\n a full screen without a way to see what is behind it. */\n@media (max-width: 560px) {\n .sg-panel.sg-drawer, .sg-panel.sg-modal, .sg-panel.sg-popover { left: 0; right: 0; top: auto; bottom: 0; width: 100%; height: min(90vh, 760px);\n border-radius: calc(var(--sg-radius) + 6px) calc(var(--sg-radius) + 6px) 0 0; border: 1px solid var(--sg-border); border-bottom: 0;\n transform: translateY(100%); opacity: 1; }\n .sg-open .sg-panel { transform: none; }\n .sg-launcher { bottom: calc(16px + env(safe-area-inset-bottom)); }\n}\n/* ------------------------------------------------------------ capture mode */\n/* The bar sits over the product while the person goes to the screen they mean.\n The root is visibility:hidden then; this opts back in. Small and centred so it\n covers as little of the product as it can. */\n.sg-pickbar { visibility: visible; position: fixed; top: 12px; left: 50%; transform: translateX(-50%);\n z-index: calc(var(--sg-z) + 2); display: flex; align-items: center; gap: 10px; max-width: calc(100vw - 24px);\n padding: 6px 6px 6px 14px; border-radius: 999px; background: var(--sg-bg); color: var(--sg-text);\n border: 1px solid var(--sg-border); box-shadow: var(--sg-shadow); }\n.sg-pickdot { flex: none; width: 8px; height: 8px; border-radius: 50%; background: var(--sg-accent);\n box-shadow: 0 0 0 0 color-mix(in srgb, var(--sg-accent) 60%, transparent); animation: sg-pickpulse 1.6s ease-out infinite; }\n@keyframes sg-pickpulse { 70% { box-shadow: 0 0 0 7px transparent; } 100% { box-shadow: 0 0 0 0 transparent; } }\n.sg-pickhint { min-width: 0; font-size: calc(var(--sg-size) - 0.5px); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.sg-pickbar .sg-btn { border-radius: 999px; }\n.sg-pickbar .sg-btn-ghost { padding: 0 12px; }\n/* A phone: the bar takes the width, the hint gets two lines, Cancel is its × alone. */\n@media (max-width: 480px) {\n .sg-pickbar { left: 12px; right: 12px; transform: none; border-radius: 22px; }\n .sg-pickhint { flex: 1; white-space: normal; line-height: 1.25; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }\n .sg-pick-cancel-label { display: none; }\n .sg-pickbar .sg-btn-ghost { padding: 0; width: 34px; }\n}\n@media (max-width: 480px) and (pointer: coarse) { .sg-pickbar .sg-btn-ghost { width: 44px; } }\n/* A finger, not a cursor: every control gets a 44px target (WCAG 2.5.5, Apple\n HIG), and text fields at least 16px so iOS does not zoom the page on focus.\n Visual sizes stay; where a control is drawn small, its hit area grows. */\n@media (pointer: coarse) {\n .sg-iconbtn { width: 44px; height: 44px; }\n .sg-btn { height: 44px; padding: 0 16px; }\n .sg-chip { min-height: 44px; padding: 8px 14px; }\n .sg-link, .sg-back, .sg-quiet-link { min-height: 44px; display: inline-flex; align-items: center; }\n .sg-closed > summary, .sg-closed-link { min-height: 44px; }\n .sg-switch::before { content: ''; position: absolute; inset: -12px -5px; }\n /* .sg-root-qualified: the base rule giving form fields \"font: inherit\" is\n .sg-root input, which outranks a bare class and kept them at 12.5px. */\n .sg-root .sg-input, .sg-root .sg-textarea { font-size: max(16px, var(--sg-size)); }\n .sg-input { min-height: 44px; }\n .sg-composer .sg-textarea { min-height: 44px; }\n .sg-faq summary { min-height: 44px; }\n .sg-row, .sg-action { min-height: 44px; }\n}\n@media (prefers-reduced-motion: reduce) {\n .sg-panel, .sg-scrim, .sg-launcher { transition: none; }\n .sg-rail-node.sg-pulse, .sg-skeleton, .sg-spin, .sg-refresh.sg-busy svg, .sg-pickdot { animation: none; }\n}\n`;\n","/** @jsxImportSource preact */\nimport { render } from 'preact';\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks';\n\nimport { captureFrom, captureScreen } from '../evidence.js';\nimport { formatAgo } from '../model.js';\nimport type { Support, SupportState } from '../support.js';\nimport { fill, type Copy } from './copy.js';\nimport type { Ctx, FaqItem, Features, HomeAction, Screen } from './ctx.js';\nimport { Icon } from './icons.js';\nimport { Faq } from './screens/faq.js';\nimport { FeedbackForm } from './screens/feedback.js';\nimport { Home } from './screens/home.js';\nimport { ReportFlow } from './screens/report.js';\nimport { ReportDetail, ReportList } from './screens/reports.js';\nimport { resolveTheme, themeVars, type ThemeInput } from './theme.js';\nimport { Button, SlotPoint, Tile } from './ui.js';\nimport { exposeParts } from './parts.js';\nimport { createPicker } from './pick.js';\nimport { STYLES } from './styles.js';\nimport type { Layout, UiStore } from './store.js';\n\nexport type { Layout } from './store.js';\n\nexport interface AppProps {\n ui: UiStore;\n support: Support;\n copy: Copy;\n features: Features;\n faq: FaqItem[];\n actions: HomeAction[];\n layout: Layout;\n side: 'left' | 'right';\n launcher: false | { position: 'bottom-right' | 'bottom-left'; label?: string };\n brand?: { name?: string; logo?: string };\n zIndex: number;\n /** The host's own frame source (a desktop shell); `WidgetConfig.captureFrame`. */\n captureFrame?: () => Promise<string>;\n emit: (event: string, detail?: unknown) => void;\n root: ShadowRoot;\n}\n\nfunction useStore<T>(subscribe: (fn: () => void) => () => void, get: () => T): T {\n const [, force] = useState(0);\n useEffect(() => subscribe(() => force((n) => n + 1)), [subscribe]);\n return get();\n}\n\nfunction usePrefersDark(): boolean {\n const query = typeof matchMedia === 'undefined' ? null : matchMedia('(prefers-color-scheme: dark)');\n const [dark, setDark] = useState(query?.matches ?? true);\n useEffect(() => {\n if (!query) return;\n const on = () => setDark(query.matches);\n query.addEventListener('change', on);\n return () => query.removeEventListener('change', on);\n }, []);\n return dark;\n}\n\nexport function App(p: AppProps) {\n const ui = useStore(p.ui.subscribe, p.ui.get);\n const state: SupportState = useStore(p.support.subscribe, p.support.getState);\n const prefersDark = usePrefersDark();\n const theme = useMemo(() => resolveTheme(ui.theme, prefersDark), [ui.theme, prefersDark]);\n const panel = useRef<HTMLDivElement>(null);\n const openerRef = useRef<Element | null>(null);\n const screen = ui.history[ui.history.length - 1] ?? { name: 'home' };\n const picker = useMemo(\n () => {\n const own = p.captureFrame;\n return own\n ? createPicker(p.ui, (hooks) => captureFrom(own, hooks), () => true)\n : createPicker(p.ui, captureScreen, () => typeof navigator !== 'undefined' && !!navigator.mediaDevices?.getDisplayMedia);\n },\n [p.ui],\n );\n const captureBtn = useRef<HTMLButtonElement>(null);\n const pickbar = useRef<HTMLDivElement>(null);\n\n const go = (s: Screen) =>\n p.ui.set({ history: s.name === 'home' ? [s] : [...ui.history.filter((h) => h.name !== s.name || s.name === 'detail'), s] });\n const back = () => p.ui.set({ history: ui.history.length > 1 ? ui.history.slice(0, -1) : [{ name: 'home' }] });\n const close = () => p.ui.set({ open: false });\n\n // Fresh data each time it opens; the badge has its own slower refresh.\n useEffect(() => {\n if (ui.open) void p.support.refresh();\n }, [ui.open, ui.session]);\n\n // While it is open, the list is what the person is looking at, so it keeps\n // up far faster than the closed badge's two minutes.\n useEffect(() => {\n if (!ui.open) return;\n const t = setInterval(() => {\n if (document.visibilityState === 'visible') void p.support.refresh();\n }, 15_000);\n return () => clearInterval(t);\n }, [ui.open, p.support]);\n\n // The refresh button. Spins for at least a beat, so a fast answer still\n // reads as \"checked\" rather than as a button that did nothing.\n const [checking, setChecking] = useState(false);\n const [checked, setChecked] = useState(0);\n async function check() {\n if (checking) return;\n setChecking(true);\n p.ui.set({ tick: ui.tick + 1 });\n await Promise.all([p.support.refresh(), new Promise((r) => setTimeout(r, 600))]);\n setChecking(false);\n setChecked(Date.now());\n }\n\n // Signed out while reading their reports: the detail screen holds its own\n // copy of the report, so leave those screens rather than keep showing it.\n useEffect(() => {\n if (state.signedIn !== false) return;\n const kept = ui.history.filter((h) => h.name !== 'reports' && h.name !== 'detail');\n if (kept.length !== ui.history.length) p.ui.set({ history: kept.length ? kept : [{ name: 'home' }] });\n }, [state.signedIn, ui.history, p.ui]);\n\n // Focus in on open, back where it was on close; Escape closes; Tab stays in.\n useEffect(() => {\n if (!ui.open) return;\n openerRef.current = document.activeElement;\n const t = setTimeout(() => {\n // A form's own first field when it asks for one; otherwise the panel\n // itself, so nothing looks pre-selected and Tab starts at the top.\n const first = panel.current?.querySelector<HTMLElement>('[autofocus]');\n (first ?? panel.current)?.focus({ preventScroll: true });\n }, 60);\n const onKey = (e: KeyboardEvent) => {\n // In capture mode the product is the person's to use: Escape leaves the\n // mode (back to the panel), and Tab is not held inside a hidden panel.\n if (p.ui.get().picking) {\n if (e.key === 'Escape') {\n e.stopPropagation();\n e.preventDefault();\n picker.cancel();\n }\n return;\n }\n if (e.key === 'Escape') {\n e.stopPropagation();\n e.preventDefault();\n close();\n return;\n }\n if (e.key !== 'Tab' || !panel.current || p.layout === 'popover') return;\n const focusables = [...panel.current.querySelectorAll<HTMLElement>('button:not([disabled]), input, textarea, summary, [tabindex=\"0\"]')].filter(\n (el) => el.offsetParent !== null,\n );\n if (!focusables.length) return;\n const active = p.root.activeElement;\n const first = focusables[0]!;\n const last = focusables[focusables.length - 1]!;\n if (e.shiftKey && active === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n };\n // Capture: the product has its own Escape handlers, and an open panel owns Escape.\n window.addEventListener('keydown', onKey, true);\n return () => {\n clearTimeout(t);\n window.removeEventListener('keydown', onKey, true);\n (openerRef.current as HTMLElement | null)?.focus?.({ preventScroll: true });\n };\n }, [ui.open]);\n\n // Closed from outside (the host's close(), a sign-out) while picking: the form waiting on it hears cancelled.\n useEffect(() => {\n if (!ui.open && picker.active) picker.cancel();\n }, [ui.open, picker]);\n\n // Into capture mode: the bar's Capture takes focus. Back out: the panel does.\n const wasPickingRef = useRef(false);\n useEffect(() => {\n if (ui.picking && !wasPickingRef.current) captureBtn.current?.focus({ preventScroll: true });\n if (!ui.picking && wasPickingRef.current) panel.current?.focus({ preventScroll: true });\n wasPickingRef.current = ui.picking;\n }, [ui.picking]);\n\n // While the bar is up, the page makes room for it: whatever sat under the\n // bar (a header, its buttons) moves below it and stays reachable. Taken off\n // for the frame itself (hidden), so the capture shows the page as it is.\n // Reported 2026-10-09 in Roster's tray: the bar covered the header's buttons.\n useEffect(() => {\n if (!ui.picking || ui.hidden || !pickbar.current) return;\n const html = document.documentElement;\n const prev = html.style.getPropertyValue('padding-top');\n const prevPriority = html.style.getPropertyPriority('padding-top');\n const base = parseFloat(getComputedStyle(html).paddingTop) || 0;\n const room = Math.ceil(pickbar.current.getBoundingClientRect().bottom) + 8;\n html.style.setProperty('padding-top', `${base + room}px`, 'important');\n return () => {\n if (prev) html.style.setProperty('padding-top', prev, prevPriority);\n else html.style.removeProperty('padding-top');\n };\n }, [ui.picking, ui.hidden]);\n\n const w: Ctx = {\n support: p.support,\n state,\n tick: ui.tick,\n copy: p.copy,\n features: { ...p.features, reports: p.features.reports },\n faq: p.faq,\n actions: p.actions,\n slots: new Set(ui.slots),\n appVersion: p.support.appVersion,\n go,\n capture: () => picker.start(),\n emit: p.emit,\n };\n\n const title =\n screen.name === 'report' ? p.copy.reportAction :\n screen.name === 'feedback' ? p.copy.feedbackAction :\n screen.name === 'faq' ? 'FAQs' :\n screen.name === 'reports' ? p.copy.yourReports :\n screen.name === 'detail' ? (state.reports.find((r) => r.id === screen.id)?.ref ?? 'Report') :\n p.copy.title;\n const ctx = p.support.context();\n const subtitle = [ctx.area, p.support.appVersion ? `v${p.support.appVersion}` : null].filter(Boolean).join(' · ') || p.brand?.name || '';\n const showBack = screen.name === 'faq' || screen.name === 'reports' || screen.name === 'detail';\n // Only where there is something of theirs to be out of date: their reports.\n const showRefresh = state.signedIn === true && (screen.name === 'reports' || screen.name === 'detail' || (screen.name === 'home' && state.reports.length > 0));\n const refreshLabel = state.updatedAt ? `${p.copy.refresh} · ${fill(p.copy.updatedAgo, { ago: formatAgo(new Date(state.updatedAt).toISOString()) })}` : p.copy.refresh;\n const scrim = p.layout !== 'popover';\n const launcherSide = p.launcher ? (p.launcher.position === 'bottom-left' ? 'sg-left' : 'sg-right') : 'sg-right';\n const panelSide = p.layout === 'popover' && p.launcher ? launcherSide : p.side === 'left' ? 'sg-left' : 'sg-right';\n\n return (\n <div\n class={`sg-root${ui.open ? ' sg-open' : ''}`}\n style={`${themeVars(theme)};--sg-z:${p.zIndex};${ui.hidden || ui.picking ? 'visibility:hidden;' : ''}`}\n data-theme={theme.scheme}\n >\n {p.launcher && !(ui.open && scrim) && (\n <button\n type=\"button\"\n class={`sg-launcher ${launcherSide}`}\n onClick={() => (ui.open ? close() : p.ui.set({ open: true, history: [{ name: 'home' }], session: ui.session + 1 }))}\n aria-label={state.attention ? `${p.launcher.label ?? p.copy.launcher}, ${state.attention} need you` : (p.launcher.label ?? p.copy.launcher)}\n aria-expanded={ui.open}\n data-testid=\"sg-launcher\"\n >\n <Icon name={ui.open ? 'x' : 'lifebuoy'} size={18} stroke={2} />\n {p.launcher.label ?? p.copy.launcher}\n {state.attention > 0 && !ui.open && <span class=\"sg-badge\">{state.attention > 9 ? '9+' : state.attention}</span>}\n </button>\n )}\n\n {scrim && ui.open && <div class=\"sg-scrim\" onClick={close} aria-hidden=\"true\" />}\n\n <div\n ref={panel}\n class={`sg-panel sg-${p.layout} ${panelSide}`}\n role=\"dialog\"\n aria-modal={scrim ? 'true' : undefined}\n aria-label={p.copy.title}\n hidden={!ui.open}\n tabIndex={-1}\n data-testid=\"sg-panel\"\n >\n {p.layout === 'sheet' && <span class=\"sg-grabber\" aria-hidden=\"true\" />}\n <span class=\"sg-accentline\" aria-hidden=\"true\" />\n <div class=\"sg-header\">\n {showBack ? (\n <button type=\"button\" class=\"sg-iconbtn\" onClick={back} aria-label=\"Back\" data-testid=\"sg-back\">\n <Icon name=\"arrowLeft\" />\n </button>\n ) : p.brand?.logo ? (\n <img class=\"sg-brand\" src={p.brand.logo} alt=\"\" />\n ) : (\n <Tile icon=\"lifebuoy\" tone=\"accent\" small />\n )}\n <div class=\"sg-head-text\">\n <h2 class=\"sg-title\">{title}</h2>\n {subtitle && <p class=\"sg-sub\">{subtitle}</p>}\n </div>\n <SlotPoint name=\"header\" filled={w.slots} />\n {showRefresh && (\n <button\n type=\"button\"\n class={`sg-iconbtn sg-refresh${checking ? ' sg-busy' : ''}`}\n onClick={() => void check()}\n aria-label={refreshLabel}\n title={refreshLabel}\n aria-busy={checking ? 'true' : undefined}\n data-testid=\"sg-refresh\"\n >\n <Icon name=\"refresh\" />\n </button>\n )}\n <span class=\"sg-sr\" aria-live=\"polite\">{checked && !checking ? p.copy.upToDate : ''}</span>\n <button type=\"button\" class=\"sg-iconbtn\" onClick={close} aria-label=\"Close\" data-testid=\"sg-close\">\n <Icon name=\"x\" />\n </button>\n </div>\n\n {ui.open && <Body key={ui.session} w={w} screen={screen} />}\n <SlotPoint name=\"footer\" filled={w.slots} />\n </div>\n\n {/* The capture bar opts back into visibility inside the hidden root, and\n is not rendered at all while the frame is read. */}\n {ui.picking && !ui.hidden && (\n <div ref={pickbar} class=\"sg-pickbar\" role=\"toolbar\" aria-label={p.copy.screenshot} data-testid=\"sg-pickbar\">\n <span class=\"sg-pickdot\" aria-hidden=\"true\" />\n <span class=\"sg-pickhint\">{p.copy.pickHint}</span>\n <Button onClick={() => void picker.capture()} icon=\"camera\" testId=\"sg-pick-capture\" btnRef={captureBtn}>\n {p.copy.pickCapture}\n </Button>\n <Button variant=\"ghost\" onClick={() => picker.cancel()} testId=\"sg-pick-cancel\" icon=\"x\" label={p.copy.cancel}>\n <span class=\"sg-pick-cancel-label\">{p.copy.cancel}</span>\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nfunction Body({ w, screen }: { w: Ctx; screen: Screen }) {\n switch (screen.name) {\n case 'report':\n return <ReportFlow w={w} />;\n case 'feedback':\n return <FeedbackForm w={w} />;\n case 'faq':\n return <Faq w={w} />;\n case 'reports':\n return (\n <div class=\"sg-body\">\n <ReportList w={w} />\n </div>\n );\n case 'detail':\n return <ReportDetail w={w} id={screen.id} />;\n case 'sent':\n return (\n <Confirmation\n heading={w.copy.reportSent}\n reference={screen.ref}\n body={w.state.signedIn ? w.copy.reportSentBody : w.copy.reportSentAnon}\n primary={w.state.signedIn ? { label: w.copy.track, onClick: () => w.go({ name: 'detail', id: screen.id }) } : undefined}\n onDone={() => w.go({ name: 'home' })}\n doneLabel={w.copy.done}\n slots={w.slots}\n />\n );\n case 'thanks':\n return <Confirmation heading={w.copy.thanks} body={w.copy.thanksBody} onDone={() => w.go({ name: 'home' })} doneLabel={w.copy.done} />;\n default:\n return <Home w={w} />;\n }\n}\n\nfunction Confirmation({\n heading,\n body,\n reference,\n primary,\n onDone,\n doneLabel,\n slots,\n}: {\n heading: string;\n body: string;\n reference?: string;\n primary?: { label: string; onClick: () => void };\n onDone: () => void;\n doneLabel: string;\n /** Only the \"report sent\" confirmation offers the `sent` slot. */\n slots?: ReadonlySet<string>;\n}) {\n return (\n <div class=\"sg-body\">\n <div class=\"sg-confirm\" data-testid=\"sg-confirm\">\n {/* A ring, not a filled disc: it should read as calm and finished, not as an alert. */}\n <span class=\"sg-ring\"><Icon name=\"checkCircle\" size={24} stroke={1.6} /></span>\n <p class=\"sg-p\" style={{ marginTop: '12px', fontWeight: 650, fontSize: 'calc(var(--sg-size) + 2px)' }}>{heading}</p>\n {reference && <span class=\"sg-ref\" data-testid=\"sg-ref\">{reference}</span>}\n <p class=\"sg-p sg-muted\" style={{ marginTop: '10px', maxWidth: '36ch' }}>{body}</p>\n <div style={{ marginTop: '18px', display: 'flex', gap: '8px' }}>\n {primary && <Button onClick={primary.onClick}>{primary.label}</Button>}\n <Button variant=\"ghost\" onClick={onDone}>{doneLabel}</Button>\n </div>\n {slots && <SlotPoint name=\"sent\" filled={slots} />}\n </div>\n </div>\n );\n}\n\n/**\n * Render the panel into its shadow root. This module is the lazily loaded\n * chunk: the shell (`index.ts`) imports it after the page has settled, or the\n * moment someone opens the panel, whichever comes first.\n *\n * Styles go in as a constructable stylesheet where the browser has them, so a\n * page with a strict Content-Security-Policy (no 'unsafe-inline' styles) still\n * gets a styled panel. Older browsers fall back to a <style> element.\n */\nconst stopParts = new WeakMap<HTMLElement, () => void>();\n\nexport function renderPanel(mountPoint: HTMLElement, root: ShadowRoot, props: AppProps): void {\n try {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(STYLES);\n // FIRST, ahead of any sheet the host already adopted through the `css`\n // option: at equal specificity the later sheet wins, and the host's must.\n root.adoptedStyleSheets = [sheet, ...root.adoptedStyleSheets];\n } catch {\n const style = document.createElement('style');\n style.textContent = STYLES;\n root.insertBefore(style, root.firstChild);\n }\n render(<App {...props} />, mountPoint);\n stopParts.set(mountPoint, exposeParts(root));\n}\n\nexport function unmountPanel(mountPoint: HTMLElement): void {\n stopParts.get(mountPoint)?.();\n render(null, mountPoint);\n}\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ function e(t){"@babel/helpers - typeof";return e=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},e(t)}function t(t,n){if(e(t)!=`object`||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var i=r.call(t,n||`default`);if(e(i)!=`object`)return i;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(n===`string`?String:Number)(t)}function n(n){var r=t(n,`string`);return e(r)==`symbol`?r:r+``}function r(e,t,r){return(t=n(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var i=class extends Error{constructor(e,t,n={}){super(t),r(this,`code`,void 0),r(this,`status`,void 0),r(this,`path`,void 0),r(this,`retryAfter`,void 0),this.name=`SignalError`,this.code=e,this.status=n.status,this.path=n.path,this.retryAfter=n.retryAfter}get retryable(){return this.status===void 0||this.status===429||this.status>=500}};async function a(e){let t=await e.json().catch(()=>null);if(!e.ok){let n=t?.error;throw new i(n?.code??`INTERNAL`,n?.message??`request failed with ${e.status}`,{status:e.status,path:n?.path,retryAfter:Number(e.headers.get(`retry-after`))||void 0})}if(!t||!(`data`in t))throw new i(`MALFORMED`,`the service answered outside the { message, data } envelope`,{status:e.status});return t.data}function o(e,t){return new i(`TRANSPORT`,`could not reach ${e}: ${t instanceof Error?t.message:String(t)}`)}var s=`https://signal-api.character.xyz`;export{r as a,o as i,i as n,a as r,s as t};
2
+ //# sourceMappingURL=constants-ClGbEpjT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants-ClGbEpjT.js","names":[],"sources":["../../src/errors.ts","../../src/constants.ts"],"sourcesContent":["/** A refusal the caller can act on, rather than a thrown string. */\nexport class SignalError extends Error {\n readonly code: string;\n readonly status?: number;\n /** The offending field, on a 422. */\n readonly path?: string;\n /** Seconds to wait, on a 429. */\n readonly retryAfter?: number;\n\n constructor(\n code: string,\n message: string,\n opts: { status?: number; path?: string; retryAfter?: number } = {},\n ) {\n super(message);\n this.name = 'SignalError';\n this.code = code;\n this.status = opts.status;\n this.path = opts.path;\n this.retryAfter = opts.retryAfter;\n }\n\n /**\n * Whether trying the same call again could plausibly work.\n *\n * A 422 never can: the body is wrong and will be wrong again. A 401 never\n * can: the key is wrong. Those two are the ones an unattended caller most\n * needs told, because retrying them is how an expensive loop starts.\n */\n get retryable(): boolean {\n return this.status === undefined || this.status === 429 || this.status >= 500;\n }\n}\n\n/** Read Signal's `{ message, data }` / `{ error }` envelope, or throw a SignalError. */\nexport async function readEnvelope<T>(response: Response): Promise<T> {\n const payload = (await response.json().catch(() => null)) as\n | { data?: T; error?: { code?: string; message?: string; path?: string } }\n | null;\n if (!response.ok) {\n const err = payload?.error;\n throw new SignalError(err?.code ?? 'INTERNAL', err?.message ?? `request failed with ${response.status}`, {\n status: response.status,\n path: err?.path,\n retryAfter: Number(response.headers.get('retry-after')) || undefined,\n });\n }\n if (!payload || !('data' in payload)) {\n throw new SignalError('MALFORMED', 'the service answered outside the { message, data } envelope', {\n status: response.status,\n });\n }\n return payload.data as T;\n}\n\nexport function transportError(base: string, cause: unknown): SignalError {\n return new SignalError(\n 'TRANSPORT',\n `could not reach ${base}: ${cause instanceof Error ? cause.message : String(cause)}`,\n );\n}\n","/** Signal's hosted API. Every entry defaults to it; each takes `apiBase` to point elsewhere. */\nexport const DEFAULT_API_BASE = 'https://signal-api.character.xyz';\n"],"mappings":"orBACA,IAAa,EAAb,cAAiC,KAAM,CAQrC,YACE,EACA,EACA,EAAgE,CAAC,EACjE,CACA,MAAM,CAAO,EAZf,EAAA,KAAA,OAAA,IAAA,EAAA,EACA,EAAA,KAAA,SAAA,IAAA,EAAA,EAEA,EAAA,KAAA,OAAA,IAAA,EAAA,EAEA,EAAA,KAAA,aAAA,IAAA,EAAA,EAQE,KAAK,KAAO,cACZ,KAAK,KAAO,EACZ,KAAK,OAAS,EAAK,OACnB,KAAK,KAAO,EAAK,KACjB,KAAK,WAAa,EAAK,UACzB,CASA,IAAI,WAAqB,CACvB,OAAO,KAAK,SAAW,IAAA,IAAa,KAAK,SAAW,KAAO,KAAK,QAAU,GAC5E,CACF,EAGA,eAAsB,EAAgB,EAAgC,CACpE,IAAM,EAAW,MAAM,EAAS,KAAK,CAAC,CAAC,UAAY,IAAI,EAGvD,GAAI,CAAC,EAAS,GAAI,CAChB,IAAM,EAAM,GAAS,MACrB,MAAM,IAAI,EAAY,GAAK,MAAQ,WAAY,GAAK,SAAW,uBAAuB,EAAS,SAAU,CACvG,OAAQ,EAAS,OACjB,KAAM,GAAK,KACX,WAAY,OAAO,EAAS,QAAQ,IAAI,aAAa,CAAC,GAAK,IAAA,EAC7D,CAAC,CACH,CACA,GAAI,CAAC,GAAW,EAAE,SAAU,GAC1B,MAAM,IAAI,EAAY,YAAa,8DAA+D,CAChG,OAAQ,EAAS,MACnB,CAAC,EAEH,OAAO,EAAQ,IACjB,CAEA,SAAgB,EAAe,EAAc,EAA6B,CACxE,OAAO,IAAI,EACT,YACA,mBAAmB,EAAK,IAAI,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GACnF,CACF,CC3DA,IAAa,EAAmB"}
@@ -0,0 +1,4 @@
1
+ import{a as e,i as t,n,r}from"./constants-ClGbEpjT.js";var i=Object.freeze({screenshot:!0,system:!0,browser:!0,network:!0,locale:!1,trail:!0,extra:!0});function a(...e){return e.reduce((e,t)=>t?{...e,...t}:e,{...i})}var o=()=>typeof navigator>`u`?void 0:navigator,s=()=>typeof window>`u`?void 0:window;function c(){let e=o();if(e)return{platform:e.userAgentData?.platform??e.platform,cores:e.hardwareConcurrency,memory:e.deviceMemory}}function l(){let e=o(),t=s();if(!(!e||!t))return{userAgent:e.userAgent,viewport:{width:t.innerWidth,height:t.innerHeight},pixelRatio:t.devicePixelRatio}}function u(){let e=o()?.connection;return e?{effectiveType:e.effectiveType,downlink:e.downlink,rtt:e.rtt}:void 0}function d(){let e=o();return e?{language:e.language,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone}:void 0}function f(e=c()){return e?[e.platform,e.cores?`${String(e.cores)} cores`:null,e.memory?`${String(e.memory)} GB`:null].filter(Boolean).join(` · `):`Not available here`}function p(e=l()){if(!e)return`Not available here`;let t=String(e.userAgent??``),n=/Edg\/(\d+)/.exec(t)?.[1]?`Edge ${/Edg\/(\d+)/.exec(t)[1]}`:/Firefox\/(\d+)/.exec(t)?.[1]?`Firefox ${/Firefox\/(\d+)/.exec(t)[1]}`:/Chrome\/(\d+)/.exec(t)?.[1]?`Chrome ${/Chrome\/(\d+)/.exec(t)[1]}`:/Version\/(\d+).*Safari/.exec(t)?.[1]?`Safari ${/Version\/(\d+)/.exec(t)[1]}`:`Browser`,r=e.viewport;return r?`${n} · ${r.width}×${r.height}`:n}async function m(e){if(!e)return;let t={};for(let[n,r]of Object.entries(e))try{let e=await r();e!==void 0&&(t[n]=e)}catch(e){t[n]={unavailable:e instanceof Error?e.message:String(e)}}return Object.keys(t).length?t:void 0}function h(e,t={}){let n=[],r={},i=(t,i,a)=>{if(!e[t]){n.push(t);return}let o=a();o!==void 0&&(r[i]=o)};return i(`system`,`system`,c),i(`browser`,`browser`,l),i(`network`,`network`,u),i(`locale`,`locale`,d),i(`trail`,`trail`,()=>t.trail),i(`extra`,`extra`,()=>t.extra),e.screenshot?(t.screenshot&&(r.screenshot=t.screenshot),t.screenshotKey&&(r.screenshot_key=t.screenshotKey)):n.push(`screenshot`),r.withheld=n,r}var g=1600,_=.72;function v(e,t){return new Promise(n=>{let r=setTimeout(n,t);e.then(()=>(clearTimeout(r),n()),()=>(clearTimeout(r),n()))})}function y(){if(typeof document>`u`||typeof requestAnimationFrame>`u`)return()=>{};let e=document.createElement(`div`);e.setAttribute(`aria-hidden`,`true`),e.style.cssText=`position:fixed;left:0;top:0;width:1px;height:1px;pointer-events:none;z-index:2147483647;`,document.body.appendChild(e);let t=!0,n=0,r=()=>{t=!t,e.style.background=t?`rgba(0,0,0,0.01)`:`rgba(0,0,0,0.02)`,n=requestAnimationFrame(r)};return n=requestAnimationFrame(r),()=>{cancelAnimationFrame(n),e.remove()}}function b(e,t){let n=e;return typeof n.requestVideoFrameCallback==`function`?new Promise(e=>{let r=setTimeout(e,1e3),i=t,a=()=>{--i<=0?(clearTimeout(r),e()):n.requestVideoFrameCallback(a)};n.requestVideoFrameCallback(a)}):new Promise(e=>setTimeout(e,150))}function x(e,t,n){let r=Math.min(1,g/Math.max(t,n)),i=Math.max(1,Math.round(t*r)),a=Math.max(1,Math.round(n*r)),o=document.createElement(`canvas`);o.width=i,o.height=a,o.getContext(`2d`).drawImage(e,0,0,i,a);let s=_,c=o.toDataURL(`image/webp`,s);for(c.startsWith(`data:image/webp`)||(c=o.toDataURL(`image/jpeg`,s));w(c)>14e5&&s>.3;)s-=.12,c=o.toDataURL(c.startsWith(`data:image/webp`)?`image/webp`:`image/jpeg`,s);let l=c.slice(5,c.indexOf(`;`));return{ok:!0,dataUrl:c,width:i,height:a,bytes:w(c),mime:l}}async function S(e,t={}){try{t.beforeCapture?.(),await new Promise(e=>requestAnimationFrame(()=>requestAnimationFrame(()=>e())));let n=``;if(await v(e().then(e=>void(n=e)),5e3),!n.startsWith(`data:image/`)&&!n.startsWith(`blob:`))throw Error(`The screen could not be captured.`);let r=new Image;return r.src=n,await r.decode(),x(r,r.naturalWidth,r.naturalHeight)}catch(e){return{ok:!1,reason:`failed`,message:e instanceof Error?e.message:`The screen could not be captured.`}}finally{t.afterCapture?.()}}async function C(e={}){let t=typeof navigator>`u`?void 0:navigator.mediaDevices;if(!t?.getDisplayMedia)return{ok:!1,reason:`unsupported`,message:`This browser cannot capture the screen.`};let n;try{n=await t.getDisplayMedia({video:{displaySurface:`browser`},audio:!1,preferCurrentTab:!0,selfBrowserSurface:`include`})}catch(e){let t=e instanceof Error?e.name:``;return t===`NotAllowedError`||t===`AbortError`?{ok:!1,reason:`cancelled`,message:`Capture was cancelled.`}:{ok:!1,reason:`failed`,message:e instanceof Error?e.message:`The screen could not be captured.`}}let r=y();try{e.beforeCapture?.();let t=document.createElement(`video`);if(t.muted=!0,t.playsInline=!0,t.srcObject=n,await v(t.play(),3e3),t.videoWidth||await v(new Promise(e=>t.addEventListener(`loadeddata`,e,{once:!0})),3e3),!t.videoWidth)throw Error(`The screen could not be captured: no picture arrived.`);return await new Promise(e=>setTimeout(e,350)),await b(t,2),x(t,t.videoWidth,t.videoHeight)}catch(e){return{ok:!1,reason:`failed`,message:e instanceof Error?e.message:`The screen could not be captured.`}}finally{r(),n.getTracks().forEach(e=>e.stop()),e.afterCapture?.()}}function w(e){let t=e.slice(e.indexOf(`,`)+1);return Math.floor(t.length*3/4)}function T(e){return e<1024?`${e} B`:e<1048576?`${Math.round(e/1024)} KB`:`${(e/1024/1024).toFixed(1)} MB`}var E=6e4;function D(e,t){let n=null,r=null;async function i(){if(!e)return null;let r;if(typeof e==`function`)r=await e();else{let n=t??globalThis.fetch?.bind(globalThis);if(!n)return null;let i=await n(e,{method:`POST`,credentials:`include`,headers:{accept:`application/json`}});if(!i.ok)return null;let a=await i.json().catch(()=>null);r=a?.data??a}if(!r)return null;let i=typeof r==`string`?{token:r}:r;if(!i.token)return null;let a=i.expires_at?Date.parse(i.expires_at)-E:1/0;return n={token:i.token,expiresAt:a},i.token}return{async get(e=!1){return!e&&n&&Date.now()<n.expiresAt?n.token:(r||(r=i().catch(()=>null).finally(()=>{r=null})),r)},clear(){n=null}}}var O=class{constructor(){e(this,`options`,null),e(this,`sessionCache`,null)}init(e){if(!e?.key&&!e?.session)throw new n(`CONFIG`,`Signal.init needs a key (sig_pub_ in a browser, sig_live_ on a server) or a session source.`);return typeof window<`u`&&e.key?.startsWith(`sig_live_`)&&console.warn(`[signal] a sig_live_ key is a SERVER credential and anyone can read it in a browser bundle. Use a sig_pub_ key here.`),this.options=e,this.sessionCache=D(e.session,e.fetchImpl),this}setUser(e){if(!this.options)throw k();return this.options={...this.options,user:e??void 0},this}setContext(e){if(!this.options)throw k();return this.options={...this.options,context:{...this.options.context,...e}},this}get initialised(){return this.options!==null}get apiBase(){return(this.options?.apiBase??`https://signal-api.character.xyz`).replace(/\/+$/,``)}get session(){if(!this.sessionCache)throw k();return this.sessionCache}async report(e){let i=this.options;if(!i)throw k();if(!e?.subject?.trim())throw new n(`VALIDATION`,`a signal needs a subject`,{path:`subject`,status:422});let o=a(i.consent,e.consent),s={...i.user,...e.reporter},c={...i.product?{product:i.product}:{},...i.context,...e.context},l={type:e.type??`incident`,subject:e.subject.trim(),body:e.body??``,impact:e.impact??`moderate`,urgency:e.urgency??`medium`,reporter:{external_id:s.id??null,name:s.name??`Anonymous`,email:s.email??null},reporter_kind:e.reporterKind??`person`,evidence:h(o,{screenshot:e.screenshot,screenshotKey:e.screenshotKey,trail:e.trail,extra:e.extra}),...Object.keys(c).length?{source_context:c}:{}},u=i.fetchImpl??globalThis.fetch?.bind(globalThis);if(!u)throw new n(`CONFIG`,`no fetch is available; pass fetchImpl on a runtime without one`);let d=i.session?await this.session.get():null,f=d??i.key;if(!f)throw new n(`NO_SESSION`,`nobody is signed in, and no publishable key was given for anonymous reports`,{status:401});let p=this.apiBase,m=e.idempotencyKey??A(),g=e=>u(`${p}/v1/intake/signal`,{method:`POST`,headers:{"content-type":`application/json`,authorization:`Bearer ${e}`,"x-idempotency-key":m},body:JSON.stringify(l)}),_;try{if(_=await g(f),_.status===401&&d){let e=await this.session.get(!0);e&&(_=await g(e))}}catch(e){throw t(p,e)}let v=await r(_);if(!v?.id)throw new n(`MALFORMED`,`the service answered outside the { message, data } envelope`,{status:_.status});return v}};function k(){return new n(`CONFIG`,`call Signal.init({ key }) before reporting`)}function A(){let e=globalThis.crypto;return e?.randomUUID?e.randomUUID():`idem_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var ee=new O;function te(e){return new O().init(e)}var j=[`Sent`,`Read`,`Accepted`,`Fixed`,`You check`],M=[`Sent`,`Read`,`Planned`,`Shipped`];function N(e,t){let n=e=>e.trim().replace(/^v/i,``).split(/[.+-]/).map(e=>Number.parseInt(e,10)).filter(e=>Number.isFinite(e)),r=n(e),i=n(t);for(let e=0;e<Math.max(r.length,i.length);e++){let t=(r[e]??0)-(i[e]??0);if(t!==0)return t<0?-1:1}return 0}function P(e,t){return e.status!==`resolved`||e.verified_at||!I(e)?!1:!e.fixed_in_version||!t||N(t,e.fixed_in_version)>=0}function F(e,t){return e.status===`resolved`&&!e.verified_at&&I(e)&&!!e.fixed_in_version&&!!t&&N(t,e.fixed_in_version)<0}function I(e){return e.disposition===null||e.disposition===`fixed`}var L={by_design:{label:`Working as intended`,blurb:`The team looked, and this is how it is meant to work. The reply below says why.`,tone:`neutral`},workaround:{label:`Workaround given`,blurb:`There is a way around this for now. The reply below has it.`,tone:`info`},answered:{label:`Answered`,blurb:`The team answered this. The reply is below.`,tone:`success`},cannot_reproduce:{label:`Could not reproduce`,blurb:`The team could not make it happen. If it happens again, reply with what you did.`,tone:`neutral`},wont_fix:{label:`Not being fixed`,blurb:`The team decided not to change this. The reply below says why.`,tone:`neutral`},out_of_scope:{label:`Out of scope`,blurb:`This is outside what the product covers.`,tone:`neutral`},insufficient_info:{label:`Needs more detail`,blurb:`There was not enough to go on. Reporting it again with steps will reopen the conversation.`,tone:`warn`},duplicate:{label:`Already reported`,blurb:`The same thing is tracked on another report, so the work happens there.`,tone:`neutral`},spam:{label:`Closed`,blurb:`This report was closed.`,tone:`neutral`},test:{label:`Closed`,blurb:`This was a test report.`,tone:`neutral`},withdrawn:{label:`Withdrawn`,blurb:`You withdrew this report, so the team is no longer working on it. If it comes back, report it again.`,tone:`neutral`}};function R(e){return z(e).open&&e.status!==`fix_pending_release`}function z(e,t){if(e.type===`feedback`)return B(e);let n={stages:j,active:!1,offPath:!1,open:!0,needsYou:!1},r=e.fixed_in_version?` in ${e.fixed_in_version}`:``;switch(e.status){case`triage`:return e.team_replies>0?{...n,label:`Being read`,blurb:`Someone on the team is reading this now.`,tone:`info`,stage:1,active:!0}:e.read_at?{...n,label:`Read`,blurb:`Someone on the team has read it. Next, they decide what happens with it.`,tone:`info`,stage:1}:{...n,label:`Received`,blurb:`The team has your report. Nobody has picked it up yet.`,tone:`info`,stage:0};case`open`:return{...n,label:e.reopens>0?`Reopened`:`Accepted`,blurb:e.reopens>0?`You told the team it is still wrong, so it went back on the list.`:`Taken as a real issue. It is on the list to fix.`,tone:e.reopens>0?`warn`:`accent`,stage:2};case`in_progress`:return{...n,label:`Being fixed`,blurb:`Someone is working on this right now.`,tone:`accent`,stage:2,active:!0};case`waiting_user`:return{...n,label:`Waiting for you`,blurb:`The team asked you something. Reply below and it goes straight back to them.`,tone:`warn`,stage:2,needsYou:!0};case`deferred`:return{...n,label:`On hold`,blurb:`Accepted, but not being worked on right now.`,tone:`neutral`,stage:2};case`fix_pending_release`:return{...n,label:`Fixed, shipping soon`,blurb:`The fix is done and goes out${r}. You will be asked to check it once you have it.`,tone:`success`,stage:3};case`resolved`:if(e.verified_at)return{...n,label:`Closed, you confirmed it`,blurb:`You confirmed the fix on your own machine. Thank you.`,tone:`success`,stage:4,open:!1};if(!I(e)){let t=L[e.disposition??``]??L.answered;return{...n,...t,stage:1,offPath:!0,open:!1}}return F(e,t)?{...n,label:`Fixed${r}`,blurb:`Fixed${r}; you are on ${t}. Update, and this will ask you to check it.`,tone:`success`,stage:3}:{...n,label:`Fixed: check it`,blurb:`The team believes this is fixed. Try what went wrong and tell them what you find.`,tone:`success`,stage:4,needsYou:!0};case`rejected`:{let t=L[e.disposition??``]??{label:`Not taken`,blurb:`The team is not treating this as a bug. The reply below says why.`,tone:`danger`};return{...n,...t,stage:1,offPath:!0,open:!1}}default:return B(e)}}function B(e){let t={stages:M,active:!1,offPath:!1,open:!0,needsYou:!1};if(e.disposition===`withdrawn`)return{...t,...L.withdrawn,stage:1,offPath:!0,open:!1};switch(e.status){case`under_review`:return{...t,label:`Being read`,blurb:`The team is reading this.`,tone:`info`,stage:1,active:!0};case`planned`:return{...t,label:`Planned`,blurb:`This is on the plan.`,tone:`accent`,stage:2};case`in_progress`:return{...t,label:`Being built`,blurb:`Someone is building this now.`,tone:`accent`,stage:2,active:!0};case`shipped`:return{...t,label:`Shipped`,blurb:`This is out. Thank you for asking for it.`,tone:`success`,stage:3,open:!1};case`declined`:return{...t,label:`Not planned`,blurb:`The team decided not to build this. The reply below says why.`,tone:`neutral`,stage:1,offPath:!0,open:!1};case`deferred`:return{...t,label:`Later`,blurb:`Not now, but not forgotten.`,tone:`neutral`,stage:1};default:return e.read_at?{...t,label:`Read`,blurb:`Someone on the team has read it.`,tone:`info`,stage:1}:{...t,label:`Received`,blurb:`The team has your feedback.`,tone:`info`,stage:0}}}function V(e){let t=[...e.timeline];if(!e.read_at)return t;let n=Date.parse(e.read_at);if(t.some(e=>e.by===`team`&&Date.parse(e.at)<n))return t;let r={kind:`read`,at:e.read_at,by:`team`,name:null},i=t.findIndex(e=>Date.parse(e.at)>=n);return t.splice(i<0?t.length:i,0,r),t}function H(e){return e?`Read by ${e}`:`Read by the team`}var U={blocking:{label:`Blocks me`,hint:`I cannot carry on working`,tone:`danger`,impact:`moderate`,urgency:`critical`},major:{label:`Major`,hint:`A real problem, I have a workaround`,tone:`warn`,impact:`moderate`,urgency:`high`},minor:{label:`Minor`,hint:`Annoying, but small`,tone:`info`,impact:`minor`,urgency:`medium`},cosmetic:{label:`Cosmetic`,hint:`It just looks wrong`,tone:`neutral`,impact:`minor`,urgency:`low`}},W={idea:{label:`An idea`,hint:`Something you wish this did`},praise:{label:`This works well`,hint:`Tell us what to protect`},confusing:{label:`This confused me`,hint:`You could not tell what it would do`},complaint:{label:`This frustrates me`,hint:`It works, and it is painful`}},G=12;function K(e){return e.what.trim().length<12?{field:`what`,message:`Say what happened. A sentence is enough, but one word is not.`}:e.expected.trim().length<12?{field:`expected`,message:`Say what you expected instead. This is the half that says what to build.`}:null}function q(e,t){return[...e].sort((e,n)=>{let r=z(e,t),i=z(n,t);return r.needsYou===i.needsYou?r.open===i.open?Date.parse(n.created_at)-Date.parse(e.created_at):r.open?-1:1:r.needsYou?-1:1})}function J(e,t=Date.now()){let n=Math.max(0,Math.round((t-(typeof e==`number`?e:Date.parse(e)))/1e3));if(n<10)return`just now`;if(n<60)return`${n}s ago`;let r=Math.round(n/60);if(r<60)return`${r}m ago`;let i=Math.round(r/60);return i<24?`${i}h ago`:`${Math.round(i/24)}d ago`}function ne(e){return e.by===`you`?e.from?e.from===`resolved`||e.from===`shipped`?`You reopened it`:e.from===`waiting_user`?`Back with the team after your reply`:e.to===`rejected`||e.to===`declined`||e.to===`resolved`?`You withdrew it`:`You moved it`:`You sent this`:e.to===`open`&&(e.from===`resolved`||e.from===`rejected`)?`Reopened`:re[e.to]??e.to}var re={triage:`Received`,open:`Accepted`,in_progress:`Being worked on`,waiting_user:`The team is waiting for you`,fix_pending_release:`Fixed, shipping soon`,deferred:`On hold`,resolved:`Marked fixed`,rejected:`Closed`,under_review:`Being read`,planned:`Planned`,shipped:`Shipped`,declined:`Not planned`};function ie(e){return e.split(/\n{2,}/).map(e=>{let[t,...n]=e.split(`
2
+ `);return n.length&&/^(What happened|Expected instead)$/.test(t.trim())?{label:t.trim(),text:n.join(`
3
+ `).trim()}:{label:null,text:e.trim()}}).filter(e=>e.text)}function Y(e,i,a){let o=()=>{let e=a??globalThis.fetch?.bind(globalThis);if(!e)throw new n(`CONFIG`,`no fetch is available; pass fetchImpl on a runtime without one`);return e};async function s(a,c,l,u=!1){let d=await i.get(u);if(!d)throw new n(`NO_SESSION`,`nobody is signed in, so there are no reports to read`,{status:401});let f;try{f=await o()(`${e}${c}`,{method:a,headers:{authorization:`Bearer ${d}`,accept:`application/json`,...l===void 0?{}:{"content-type":`application/json`}},body:l===void 0?void 0:JSON.stringify(l)})}catch(n){throw t(e,n)}return f.status===401&&!u?s(a,c,l,!0):r(f)}return{list:()=>s(`GET`,`/v1/reporter/signals`),get:e=>s(`GET`,`/v1/reporter/signals/${encodeURIComponent(e)}`),reply:(e,t)=>s(`POST`,`/v1/reporter/signals/${encodeURIComponent(e)}/replies`,{body:t}),verify:(e,t,n)=>s(`POST`,`/v1/reporter/signals/${encodeURIComponent(e)}/verify`,{works:t,...n?{note:n}:{}}),withdraw:(e,t)=>s(`POST`,`/v1/reporter/signals/${encodeURIComponent(e)}/withdraw`,t?{note:t}:{})}}function X(e=60){let t=[];return{record(n,r,i=Date.now()){let a=String(r).trim().slice(0,300);if(!a)return;let o=t[t.length-1];if(o&&o.kind===n&&o.label===a&&i-o.at<1500){o.at=i;return}t.push({at:i,kind:n,label:a}),t.length>e&&t.splice(0,t.length-e)},recent(e=10){return t.slice(-e).map(e=>({...e}))},size:()=>t.length,clear(){t.length=0},captureErrors(e=typeof window>`u`?void 0:window){if(!e)return()=>{};let t=e=>this.record(`error`,e.message||`Uncaught error`),n=e=>{let t=e.reason;this.record(`error`,typeof t==`string`?t:t?.message??`Unhandled promise rejection`)};return e.addEventListener(`error`,t),e.addEventListener(`unhandledrejection`,n),()=>{e.removeEventListener(`error`,t),e.removeEventListener(`unhandledrejection`,n)}}}}function Z(e){return`SG-${e.slice(-6).toUpperCase()}`}var Q=`signal.seen.v1`;function ae(e){let t=new O().init({...e,context:{...e.appVersion?{app_version:e.appVersion}:{},...e.context}}),r=Y(t.apiBase,t.session,e.fetchImpl),i=e.trail===!1?X(0):e.trail??X(),a=e.captureErrors===!1?()=>{}:i.captureErrors(),o={...e.context},s=oe(),u={signedIn:e.session?null:!1,loading:!1,reports:[],attention:0,error:null,updatedAt:null},d=new Set,f=e=>{u={...u,...e},u.attention=p(u.reports);for(let e of d)e(u)};function p(t){return t.filter(t=>z(t,e.appVersion).needsYou||h(t)).length}function h(e){return e.last_team_reply_at?Date.parse(e.last_team_reply_at)>(s[e.id]??0):!1}let g=0;async function _(){if(e.session){g=Date.now(),f({loading:!0});try{if(!await t.session.get()){f({signedIn:!1,loading:!1,reports:[],error:null});return}let n=await r.list();f({signedIn:!0,loading:!1,reports:q(n,e.appVersion),error:null,updatedAt:Date.now()})}catch(e){e instanceof n&&e.code===`NO_SESSION`?f({signedIn:!1,loading:!1,reports:[],error:null}):f({loading:!1,error:se(e)})}}}let v=null,y=()=>{document.visibilityState===`visible`&&_()},b=()=>{Date.now()-g>5e3&&_()};e.session&&typeof window<`u`&&(_(),v=setInterval(()=>{document.visibilityState===`visible`&&_()},e.refreshMs??12e4),document.addEventListener(`visibilitychange`,y),window.addEventListener(`focus`,b));function x(t){let{timeline:n,attached:r,...i}=t,a=u.reports.filter(e=>e.id!==i.id);f({reports:q([i,...a],e.appVersion)})}return{client:t,reporter:r,trail:i,appVersion:e.appVersion,getState:()=>u,subscribe(e){return d.add(e),()=>{d.delete(e)}},refresh:_,context:()=>({...o}),setContext(e){o={...o,...e}},record:(e,t)=>i.record(e,t),async collect(){return{system:c(),browser:l(),trail:i.recent(10),extra:await m(e.diagnostics)}},async submitIssue(n){let r=U[n.severity],a={system:!0,browser:!0,trail:!0,extra:!0,screenshot:!0,...n.include},s=a.extra?await m(e.diagnostics):void 0,c=n.area?.trim()||o.area,l=await t.report({type:`incident`,subject:$(n.what),body:`What happened\n${n.what.trim()}\n\nExpected instead\n${n.expected.trim()}`,impact:r.impact,urgency:r.urgency,reporter:n.contact,screenshot:a.screenshot?n.screenshot:void 0,trail:a.trail?i.recent(10):void 0,extra:s,consent:{system:a.system,browser:a.browser,trail:a.trail,extra:a.extra,screenshot:a.screenshot},context:{...o,...c?{area:c}:{},severity:n.severity}});return i.record(`note`,`Reported an issue (${Z(l.id)})`),_(),{id:l.id,ref:Z(l.id)}},async submitFeedback(e){let n=e.area?.trim()||o.area,r=await t.report({type:`feedback`,subject:`${W[e.kind].label}: ${$(e.body,100)}`,body:e.body.trim(),impact:`minor`,urgency:`low`,reporter:e.contact,screenshot:e.screenshot,consent:{trail:!1,extra:!1},context:{...o,...n?{area:n}:{},feedback_kind:e.kind}});return _(),{id:r.id,ref:Z(r.id)}},async detail(e){let t=await r.get(e);return x(t),t},async reply(e,t){let n=await r.reply(e,t);return x(n),n},async verify(e,t,n){let a=await r.verify(e,t,n);return i.record(`note`,t?`Confirmed the fix for ${Z(e)}`:`Said ${Z(e)} is still happening`),x(a),a},async withdraw(e,t){let n=await r.withdraw(e,t);return i.record(`note`,`Withdrew ${Z(e)}`),x(n),n},unread:h,markSeen(e){s={...s,[e]:Date.now()};try{localStorage.setItem(Q,JSON.stringify(s))}catch{}f({})},destroy(){a(),v&&clearInterval(v),typeof document<`u`&&document.removeEventListener(`visibilitychange`,y),typeof window<`u`&&window.removeEventListener(`focus`,b),d.clear()}}}function oe(){try{let e=JSON.parse(localStorage.getItem(Q)??`{}`);return e&&typeof e==`object`?e:{}}catch{return{}}}function $(e,t=120){let n=e.trim().split(/\r?\n/)[0]??``;return n.length>t?`${n.slice(0,t-1).trimEnd()}…`:n}function se(e){return e instanceof Error?e.message:String(e)}export{h as A,O as C,i as D,D as E,m as F,c as I,a as L,f as M,T as N,S as O,l as P,ee as S,A as T,ie as _,j as a,V as b,G as c,P as d,R as f,H as g,J as h,Y as i,p as j,C as k,U as l,ne as m,Z as n,W as o,N as p,X as r,M as s,ae as t,F as u,q as v,te as w,K as x,z as y};
4
+ //# sourceMappingURL=support-x7N-k02b.js.map