@zenovay/cli 1.0.0 → 1.0.2

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 (96) hide show
  1. package/README.md +1 -1
  2. package/dist/{agency-DHAyzKd-.js → agency-cNkRWBOo.js} +1 -1
  3. package/dist/{ai-xhCcy02q.js → ai-BkP3oeh2.js} +1 -1
  4. package/dist/{alerts-Be0XKEUX.js → alerts-BQ0EMdBT.js} +1 -1
  5. package/dist/{analytical-screen-BU2yCSg_.js → analytical-screen-BvQa8oH6.js} +1 -1
  6. package/dist/analytics-S6AFt20R.js +1 -0
  7. package/dist/{annotation-dveH657H.js → annotation-CZ2bEuyD.js} +1 -1
  8. package/dist/{api-hWp9s3Y8.js → api-CdcB84ie.js} +1 -1
  9. package/dist/{api-keys-DKQX5aL9.js → api-keys-CLol-4YC.js} +1 -1
  10. package/dist/api-v2-Co0dWAP5.js +1 -0
  11. package/dist/{api-v2-DqKh6FgZ.js → api-v2-D0mvt__4.js} +1 -1
  12. package/dist/{audit-DgHopH-O.js → audit-CFlSb0g5.js} +1 -1
  13. package/dist/bin.js +7 -7
  14. package/dist/{chat-panel-PSN5hjlF.js → chat-panel-D9IjovCR.js} +1 -1
  15. package/dist/{companies-uScE2uHf.js → companies-Cpb3yv2Q.js} +1 -1
  16. package/dist/{completions-DKyjFPMK.js → completions-XLznfo7H.js} +1 -1
  17. package/dist/{config-DB3jF5gG.js → config-B72_Kfe0.js} +1 -1
  18. package/dist/{config--JRu_jFq.js → config-JVhBplSX.js} +1 -1
  19. package/dist/{csv-emit-CmlDBfbA.js → csv-emit-B-5km-O-.js} +1 -1
  20. package/dist/{deploys-BqQmCzVb.js → deploys-DZ0IR9Re.js} +1 -1
  21. package/dist/{devices-CUgpkbAC.js → devices-C_NjBY89.js} +1 -1
  22. package/dist/{doctor-D1bGGwtN.js → doctor-BsEuqZTb.js} +1 -1
  23. package/dist/{domains-iRmYn9G7.js → domains-ByXV1O4R.js} +1 -1
  24. package/dist/error-codes-BiKo9PGm.js +1 -0
  25. package/dist/{error-codes-D4XO4okw.js → error-codes-ByhvHx2M.js} +1 -1
  26. package/dist/{errors-CEIyrEgF.js → errors-DPRcy7WT.js} +1 -1
  27. package/dist/{events-tail-CRgba_gO.js → events-tail-DEdVkmT0.js} +1 -1
  28. package/dist/{export-Csl7rWLW.js → export-DhSRfpg_.js} +1 -1
  29. package/dist/{funnel-B36lGX2i.js → funnel-Cb4-3RJB.js} +1 -1
  30. package/dist/{geo-CPt2etQd.js → geo-ReUNKl3F.js} +1 -1
  31. package/dist/{globe-yy_-G4K8.js → globe-DwaTDQns.js} +1 -1
  32. package/dist/{goals-BTzgvDOK.js → goals-Ds0QZ4H6.js} +1 -1
  33. package/dist/{health-D26VB-iZ.js → health-D6w7hF5q.js} +1 -1
  34. package/dist/{health-RsLcvYTb.js → health-DTR77eQW.js} +1 -1
  35. package/dist/{heatmaps-D4o0Ghjn.js → heatmaps-B-As729q.js} +1 -1
  36. package/dist/{home-B8CoN9Hd.js → home-DGYBSPWi.js} +1 -1
  37. package/dist/{init-Cee2-8Kd.js → init-igNlvq0N.js} +6 -6
  38. package/dist/init-x1CXZTzr.js +1 -0
  39. package/dist/{insights-B0L6kIxY.js → insights-BiqMftak.js} +1 -1
  40. package/dist/{integrations-CJ9Pa-II.js → integrations-CCvt4xb_.js} +1 -1
  41. package/dist/{journeys--jjaTA3C.js → journeys-CogDUObU.js} +1 -1
  42. package/dist/{live-CuVd6yRs.js → live-BNX4HBCf.js} +1 -1
  43. package/dist/login-CDAP0iKS.js +1 -0
  44. package/dist/{login-CsQ7fPVu.js → login-DU1fY88U.js} +1 -1
  45. package/dist/{logout-C3KOOdIM.js → logout-BoUfEnN9.js} +1 -1
  46. package/dist/{notes-jV1DYMp_.js → notes-BrY4efpr.js} +1 -1
  47. package/dist/{analytics-D7vhDrdG.js → overview-CmTIumZy.js} +2 -2
  48. package/dist/overview-L8jqiSuU.js +1 -0
  49. package/dist/{pages-0DLiuGYc.js → pages-BYVz90uO.js} +1 -1
  50. package/dist/{plans-D4o6-tbv.js → plans-DT8hilXl.js} +1 -1
  51. package/dist/{profile-Cm5RFs_L.js → profile-CDY3kFEq.js} +1 -1
  52. package/dist/{projects-BTTgnjOZ.js → projects-BdRZaLg8.js} +1 -1
  53. package/dist/{query-yn10M321.js → query-DLC0vi-K.js} +1 -1
  54. package/dist/{resolve-site-BLrtFOyW.js → resolve-site-BTVBMF1C.js} +1 -1
  55. package/dist/{retention-DpBuavgY.js → retention-DQHXVSG0.js} +1 -1
  56. package/dist/{revenue-Bv1Cqzjr.js → revenue-CitFZ4DN.js} +1 -1
  57. package/dist/{self-test-Cml0QXeA.js → self-test-BcCqMRQ9.js} +2 -2
  58. package/dist/{sessions-B0RwtHvP.js → sessions-dPZ32wpz.js} +1 -1
  59. package/dist/{settings-i4TqMmAY.js → settings-DO8UOasX.js} +1 -1
  60. package/dist/{share-DTHFqTzp.js → share-BkvKZuPo.js} +1 -1
  61. package/dist/{site-switcher-D_JBKFaR.js → site-switcher-BAoYWp18.js} +1 -1
  62. package/dist/{sources-B39BFFKF.js → sources-lvpcvTTz.js} +1 -1
  63. package/dist/{stats-Dh9MQAXx.js → stats-EeSDu70A.js} +1 -1
  64. package/dist/{status-agent-C3q7fOEs.js → status-agent-BLIJc81G.js} +1 -1
  65. package/dist/{team-DZtvClMF.js → team-Bw6dcpI2.js} +1 -1
  66. package/dist/{teams-CqJFecKB.js → teams-cwzXaqBH.js} +1 -1
  67. package/dist/{telemetry-DRh10SvO.js → telemetry-BV-xvfdt.js} +1 -1
  68. package/dist/telemetry-Bbh6Vtst.js +1 -0
  69. package/dist/{telemetry-BdWnMaJC.js → telemetry-CgyMy4hV.js} +1 -1
  70. package/dist/{tier-BneaO4vD.js → tier-DDIroQbc.js} +1 -1
  71. package/dist/{token-store-BQuGH0z2.js → token-store-BvSCse1t.js} +1 -1
  72. package/dist/token-store-QTNSg4TT.js +1 -0
  73. package/dist/{update-CoZzBsMu.js → update-DkMxLJbM.js} +1 -1
  74. package/dist/{uptime-Ck1GdjRR.js → uptime-BA8vRzJQ.js} +1 -1
  75. package/dist/{usage-BN_mEsal.js → usage-CkyXScnm.js} +1 -1
  76. package/dist/{use-NGqXzASp.js → use-BW8rVPgW.js} +1 -1
  77. package/dist/{visitors-BCz-O9rK.js → visitors-mjvSIKkI.js} +1 -1
  78. package/dist/{vitals-Dx_eY6tW.js → vitals-D3sMQksQ.js} +1 -1
  79. package/dist/{webhooks-BR1D3o5S.js → webhooks-D1PNfhgJ.js} +1 -1
  80. package/dist/{webhooks-forward-CpXm4GHn.js → webhooks-forward-B8nnKB4f.js} +1 -1
  81. package/dist/wizard-bin.js +1 -1
  82. package/package.json +1 -1
  83. package/dist/api-v2-C7-5GPx8.js +0 -1
  84. package/dist/error-codes-DpKbL-uM.js +0 -1
  85. package/dist/init-BrxmKAnU.js +0 -1
  86. package/dist/login-DeznxBjS.js +0 -1
  87. package/dist/telemetry-C1045t6Q.js +0 -1
  88. package/dist/token-store-TmBx42nv.js +0 -1
  89. package/dist/watch-CP-Klikt.js +0 -1
  90. /package/dist/{commands-BE8-kQ9U.js → commands-DVRYYbbn.js} +0 -0
  91. /package/dist/{csv-emit-C-9o-imN.js → csv-emit-BiRGo6SK.js} +0 -0
  92. /package/dist/{examples-DikBW-H2.js → examples-CsQBLv9W.js} +0 -0
  93. /package/dist/{range-tabs-BbJdVWNV.js → range-tabs-CH2cEXOf.js} +0 -0
  94. /package/dist/{themes-6H0KlK3b.js → themes-BC8U4Od4.js} +0 -0
  95. /package/dist/{tour-fOYY-mK0.js → tour-ChHRo89U.js} +0 -0
  96. /package/dist/{ui-C5Te-OTJ.js → ui-BTnLAro-.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenovay/cli",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Zenovay CLI — AI install wizard + full terminal analytics dashboard",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +0,0 @@
1
- import"./config--JRu_jFq.js";import{ApiError as e}from"./api-hWp9s3Y8.js";import"./token-store-BQuGH0z2.js";import{ApiV2Client as t}from"./api-v2-DqKh6FgZ.js";export{t as ApiV2Client};
@@ -1 +0,0 @@
1
- import"./config--JRu_jFq.js";import"./api-hWp9s3Y8.js";import"./token-store-BQuGH0z2.js";import{buildErrorEnvelope as e,emitErrorEnvelope as t,isJsonOutputMode as n,normalizeError as r}from"./error-codes-D4XO4okw.js";export{t as emitErrorEnvelope};
@@ -1 +0,0 @@
1
- import"./config--JRu_jFq.js";import"./api-hWp9s3Y8.js";import"./token-store-BQuGH0z2.js";import{initCommand as e}from"./init-Cee2-8Kd.js";import"./formatter-C4YSOKuq.js";import"./emit-D4YlMlzk.js";import"./open-url-BtI5aLgL.js";import"./secrets-ApB7yh2A.js";import"./client-ntsEXSVC.js";import"./login-CsQ7fPVu.js";import"./theme-Brz9wK0w.js";import"./panel-CTtQ2ue6.js";import"./progress-row-Afnt5Ng8.js";import"./prompt-BXvg2B4R.js";import"./keybar-DO5OoZy9.js";import"./sparkline-CpoBjjlc.js";export{e as initCommand};
@@ -1 +0,0 @@
1
- import"./config--JRu_jFq.js";import"./api-hWp9s3Y8.js";import"./token-store-BQuGH0z2.js";import"./formatter-C4YSOKuq.js";import"./emit-D4YlMlzk.js";import"./open-url-BtI5aLgL.js";import{loginCommand as e,maybeInstallCompletions as t}from"./login-CsQ7fPVu.js";export{e as loginCommand};
@@ -1 +0,0 @@
1
- import"./config--JRu_jFq.js";import{emit as e,flush as t,getProcessUptimeMs as n,getTelemetryStatus as r,initTelemetry as i,setTelemetry as a}from"./telemetry-DRh10SvO.js";export{e as emit,t as flush,n as getProcessUptimeMs,r as getTelemetryStatus,i as initTelemetry,a as setTelemetry};
@@ -1 +0,0 @@
1
- import"./config--JRu_jFq.js";import{authPath as e,clearToken as t,isExpired as n,readToken as r,tokenStateSchema as i,writeToken as a}from"./token-store-BQuGH0z2.js";export{r as readToken};
@@ -1 +0,0 @@
1
- import{readConfig as e}from"./config--JRu_jFq.js";import"./api-hWp9s3Y8.js";import{readToken as t}from"./token-store-BQuGH0z2.js";import{ApiV2Client as n}from"./api-v2-DqKh6FgZ.js";import"./formatter-C4YSOKuq.js";import{emit$1 as r,isHeadless as i}from"./emit-D4YlMlzk.js";import{openInBrowser as a}from"./open-url-BtI5aLgL.js";import{parseSseStream as o}from"./client-ntsEXSVC.js";import"./theme-Brz9wK0w.js";import{Banner as s,Panel as c,useTheme as l}from"./panel-CTtQ2ue6.js";import"./prompt-BXvg2B4R.js";import{Keybar as u}from"./keybar-DO5OoZy9.js";import{spark as d}from"./sparkline-CpoBjjlc.js";import{resolveSiteId as f}from"./resolve-site-BLrtFOyW.js";import{stripUrlPrefix as p}from"./fmt-xxIPQJX-.js";import{EmptyState as m}from"./empty-state-D-krMX62.js";import{tileWidths as h}from"./grid-CMwhs-Ms.js";import{deepLinkFor as g}from"./keybar-deep-link-B4VJn2ko.js";import{useFullscreen as _}from"./use-fullscreen-ucSyZkjO.js";import{z as v}from"zod";import{Box as y,Text as b,render as x,useApp as ee,useInput as te}from"ink";import S,{useEffect as C,useState as w}from"react";import ne from"ink-spinner";import T from"ink-text-input";const E=Math.PI*2;function D(e){let t=e,n=Math.PI*Math.sin(e);for(let e=0;e<6;e++){let e=2*t+Math.sin(2*t)-n,r=2+2*Math.cos(2*t);if(r===0)break;t-=e/r}return t}function O(e,t){if(e<-90||e>90||t<-180||t>180)return null;let n=e*Math.PI/180,r=t*Math.PI/180,i=D(n),a=r*Math.cos(i)/Math.PI,o=Math.sin(i);return{x:a,y:o}}function k(e){if(e)return!0;let t=process.env;if(t.NO_COLOR||t.ZENOVAY_GLOBE===`ascii`)return!0;let n=(t.LANG||t.LC_ALL||t.LC_CTYPE||``).toLowerCase();return!!(n&&!n.includes(`utf`))}function A(e,t){let n=e*2,r=t*4;return{dw:n,dh:r,bits:new Uint8Array(n*r)}}function j(e,t,n){t<0||t>=e.dw||n<0||n>=e.dh||(e.bits[n*e.dw+t]=1)}function M(e){let t=e.dw/2,n=e.dh/2,r=e.dw/2-1,i=e.dh/2-1,a=Math.max(e.dw,e.dh)*2;for(let o=0;o<a;o++){let s=o/a*E,c=Math.round(t+r*Math.cos(s)),l=Math.round(n+i*Math.sin(s));j(e,c,l)}}function N(e){let t=Math.floor(e.dh/2);for(let n=0;n<e.dw;n+=4)j(e,n,t)}function P(e,t){let n=e.dw/2,r=e.dh/2,i=e.dw/2-1,a=e.dh/2-1;for(let o of t){let t=O(o.lat,o.lng);if(!t)continue;let s=Math.round(n+t.x*i),c=Math.round(r-t.y*a);j(e,s,c),j(e,s+1,c),j(e,s,c+1),j(e,s+1,c+1)}}const F=[[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[0,3],[1,3]];function I(e,t,n){let r=0;for(let i=0;i<F.length;i++){let[a,o]=F[i],s=t*2+a,c=n*4+o;e.bits[c*e.dw+s]&&(r|=1<<i)}return r===0?` `:String.fromCodePoint(10240+r)}function L(e,t,n){let r=0;for(let i=0;i<4;i++)for(let a=0;a<2;a++){let o=t*2+a,s=n*4+i;e.bits[s*e.dw+o]&&r++}return r===0?` `:r<=2?`.`:r<=4?`:`:r<=6?`*`:`#`}function re({data:e,width:t=80,height:n=20,asciiOnly:r}){let{theme:i}=l(),a=k(r),o=A(t,n);M(o),N(o),P(o,e);let s=[];for(let e=0;e<n;e++){let n=``;for(let r=0;r<t;r++)n+=a?L(o,r,e):I(o,r,e);s.push(n)}return S.createElement(y,{flexDirection:`column`},s.map((e,t)=>S.createElement(b,{key:t,color:i.accent},e)),S.createElement(b,{color:i.muted},e.length,` live · `,a?`ascii mode`:`braille mode`))}function ie(e,t){let n=Math.max(0,Math.round((t-e)/1e3));if(n<5)return`just now`;if(n<60)return`${n}s ago`;let r=Math.floor(n/60);return r<60?`${r}m ago`:`${Math.floor(r/60)}h ago`}const ae=v.object({siteId:v.string().optional(),window:v.string().optional(),totalVisitors:v.number().optional(),visitors:v.object({count:v.number().optional(),series:v.array(v.number()).optional()}).optional(),topPages:v.array(v.object({path:v.string(),views:v.number().optional(),count:v.number().optional()})).optional(),sources:v.array(v.object({source:v.string(),visitors:v.number()})).optional()}).passthrough();async function R(a){let o=await e(),s=await t({strict:!1});if(!s)return process.stderr.write("Not logged in — run `zenovay login` first.\n"),2;let c=new n({config:o,cliVersion:a.cliVersion,token:s}),l;try{({siteId:l}=await f(c,{explicit:a.siteId,headless:!!a.json,cliVersion:a.cliVersion}))}catch(e){return process.stderr.write(`${e.message}\n`),2}if(i(a)){let e=await c.getDashboardSnapshot(l);return r({type:`watch.tick`,snapshot:e}),0}return new Promise(e=>{let{unmount:t}=x(S.createElement(z,{api:c,siteId:l,intervalMs:a.intervalMs??15e3,cliVersion:a.cliVersion,onExit:n=>{t(),e(n)}}))})}const z=({api:e,siteId:t,intervalMs:n,cliVersion:r,onExit:i})=>{_();let{theme:d}=l(),{exit:f}=ee(),[p,v]=w(null),[x,T]=w(null),[E,D]=w(null),[O,k]=w([]),[A,j]=w(!0),[M,N]=w(null),[P,F]=w(1),[I,L]=w(!1),[R,z]=w(!1),[B,W]=w(null),[ue,de]=w(()=>Date.now());te((e,n)=>{if(e===`o`||e===`O`){a(g(`watch`,{siteId:t}));return}if(e===`q`){f(),i(0);return}if(e===`?`||e===`/`){z(e=>!e);return}if(e===`g`){L(e=>!e);return}if(n.tab){F(e=>{let t=n.shift?(e+4)%6+1:e%6+1;return t});return}(e===`1`||e===`2`||e===`3`||e===`4`||e===`5`||e===`6`)&&F(Number(e))});let[fe,G]=w(!1);if(C(()=>{let r=!1,i=async()=>{try{let n=await e.getDashboardSnapshot(t);if(r)return;let i=ae.safeParse(n);if(!i.success){G(!0),j(!1);return}G(!1);let a=i.data,o={visitors:a.visitors??(typeof a.totalVisitors==`number`?{count:a.totalVisitors}:void 0),topPages:a.topPages?.map(e=>({path:e.path,views:e.views??e.count??0})),sources:a.sources};v(o),e.getVitals(t).then(e=>{r||T(e)},()=>{}),e.getGoals(t).then(e=>{r||D(e)},()=>{}),j(!1),N(null),W(Date.now())}catch(e){r||N(e.message)}};i();let a=setInterval(i,n);return()=>{r=!0,clearInterval(a)}},[e,t,n]),C(()=>{if(R)return;let e=setInterval(()=>de(Date.now()),5e3);return()=>clearInterval(e)},[R]),C(()=>{let n=new AbortController;return(async()=>{try{let r=await e.openEventsStream(t,n.signal);for await(let e of o(r))e.type===`error`&&k(t=>[...t,`[ERR ${e.code}] ${e.message}`].slice(-10))}catch{}})(),()=>n.abort()},[e,t]),A)return S.createElement(y,{flexDirection:`column`},S.createElement(s,{version:r,subtitle:`watch · ${t}`,live:!1}),S.createElement(c,{title:`Loading`,state:`busy`},S.createElement(y,null,S.createElement(b,{color:d.accent},S.createElement(ne,{type:`dots`})),S.createElement(b,null,` Fetching snapshot…`))));if(M&&!p)return S.createElement(y,{flexDirection:`column`},S.createElement(s,{version:r,subtitle:`watch · ${t}`,live:!1}),S.createElement(m,{reason:`error`,headline:`Failed to load`,hint:M}));if(fe&&!p)return S.createElement(y,{flexDirection:`column`},S.createElement(s,{version:r,subtitle:`watch · ${t}`,live:!1}),S.createElement(m,{reason:`error`,headline:`Couldn't load dashboard`,hint:"The server returned an unexpected shape. Try `zenovay update` to refresh the CLI."}));let K=process.stdout.columns??80,q=2,J=h(K,3,q),[Y,X,Z]=[J[0]??20,J[1]??20,J[2]??20],Q=process.stdout.rows??40,pe=Math.max(4,Q-16),$=Math.max(2,Math.min(8,Math.floor(pe/2))),me=[],he=(p?.visitors?.count??0)>0||(p?.topPages?.length??0)>0||(p?.sources?.length??0)>0;return S.createElement(y,{flexDirection:`column`},S.createElement(s,{version:r,subtitle:`watch · ${t}${I?` · globe`:``}`,live:he}),S.createElement(y,{flexDirection:`row`,width:K},S.createElement(y,{flexDirection:`column`,flexShrink:0,width:Y,marginRight:q},I?S.createElement(c,{title:`Live globe`,focused:P===1,width:Y},S.createElement(re,{data:me,width:Math.max(8,Y-4),height:Math.max(8,Math.min(12,$*2))})):S.createElement(se,{snapshot:p,focused:P===1,width:Y}),S.createElement(V,{events:O,focused:P===4,width:Y,rows:$})),S.createElement(y,{flexDirection:`column`,flexShrink:0,width:X,marginRight:q},S.createElement(ce,{snapshot:p,focused:P===2,width:X,rows:$}),S.createElement(H,{vitals:x,focused:P===5,width:X})),S.createElement(y,{flexDirection:`column`,flexShrink:0,width:Z},S.createElement(le,{snapshot:p,focused:P===3,width:Z,rows:$}),S.createElement(U,{goals:E,focused:P===6,width:Z,rows:$}))),R?S.createElement(oe,{api:e,siteId:t,width:K}):null,S.createElement(y,{marginTop:1},S.createElement(b,{color:d.dim},B===null?``:`↻ updated ${ie(B,ue)}`,` · watch is deprecated — use `,S.createElement(b,{color:d.accent},`zenovay overview`))),S.createElement(u,{items:[{key:`tab`,label:`next`},{key:`1-6`,label:`jump`},{key:`g`,label:I?`panels`:`globe`},{key:`?/`,label:R?`close chat`:`ai chat`},{key:`o`,label:`browser`},{key:`q`,label:`quit`}]}))},oe=({api:e,siteId:t,width:n})=>{let{theme:r}=l(),[i,a]=w(``),[s,u]=w([]),[d,f]=w(!1),[p,m]=w(``),[h,g]=w(null),_=async n=>{let r=n.trim();if(!r||d)return;g(null),a(``);let i=[...s,{role:`user`,content:r}];u(i),f(!0),m(``);try{let n=i.map(e=>({role:e.role,content:e.content})),r=await e.openAiStream(`chat`,{messages:n,siteId:t},void 0),a=``;for await(let e of o(r))if(e.type===`delta`)a+=e.content,m(a);else if(e.type===`error`)g(`${e.code}: ${e.message}`);else if(e.type===`done`)break;u([...i,{role:`assistant`,content:a}]),m(``)}catch(e){g(e instanceof Error?e.message:`chat failed`)}finally{f(!1)}};return S.createElement(y,{marginTop:1},S.createElement(c,{title:`AI chat (esc / ?/ to close)`,focused:!0,width:n},S.createElement(y,{flexDirection:`column`},s.slice(-6).map((e,t)=>S.createElement(y,{key:t,flexDirection:`column`,marginBottom:1},S.createElement(b,{color:e.role===`user`?r.accent:r.info,bold:!0},e.role===`user`?`you`:`zenovay`),S.createElement(b,null,e.content))),d&&p?S.createElement(y,{flexDirection:`column`,marginBottom:1},S.createElement(b,{color:r.info,bold:!0},`zenovay`),S.createElement(b,null,p)):null,h?S.createElement(b,{color:r.error},`✗ `,h):null,S.createElement(y,null,S.createElement(b,{color:r.accent},d?`⠋ `:`▸ `),S.createElement(T,{value:i,onChange:a,onSubmit:_,placeholder:d?`streaming…`:`ask anything about your analytics`})))))},B=({label:e,value:t})=>{let{theme:n}=l();return S.createElement(y,{flexDirection:`row`},S.createElement(y,{flexGrow:1,flexShrink:1,marginRight:1},S.createElement(b,{wrap:`truncate`},e)),S.createElement(y,{width:t.length,flexShrink:0},S.createElement(b,{color:n.fg},t)))},se=({snapshot:e,focused:t,width:n})=>{let{theme:r}=l(),i=e?.visitors?.count??0,a=e?.visitors?.series??[];return S.createElement(c,{title:`Visitors`,focused:t,width:n},S.createElement(b,{color:r.typography.headline.color,bold:r.typography.headline.bold},i.toLocaleString()),a.length>0?S.createElement(b,{color:r.accent},d(a,Math.max(8,n-6))):S.createElement(b,{color:r.dim},`no data yet`))},ce=({snapshot:e,focused:t,width:n,rows:r=5})=>{let i=e?.topPages??[],a=i.slice(0,r),o=i.length-a.length;return S.createElement(c,{title:`Top pages`,focused:t,width:n},i.length===0?S.createElement(m,{reason:`no-data`,headline:`No pages yet`}):S.createElement(S.Fragment,null,a.map(e=>S.createElement(B,{key:e.path,label:p(e.path),value:(e.views??0).toLocaleString()})),o>0?S.createElement(W,{count:o}):null))},le=({snapshot:e,focused:t,width:n,rows:r=5})=>{let i=e?.sources??[],a=i.slice(0,r),o=i.length-a.length;return S.createElement(c,{title:`Sources`,focused:t,width:n},i.length===0?S.createElement(m,{reason:`no-data`,headline:`No sources yet`}):S.createElement(S.Fragment,null,a.map(e=>S.createElement(B,{key:e.source,label:e.source,value:e.visitors.toLocaleString()})),o>0?S.createElement(W,{count:o}):null))},V=({events:e,focused:t,width:n,rows:r=5})=>{let{theme:i}=l(),a=e.slice(-r);return S.createElement(c,{title:`Errors`,focused:t,width:n},e.length===0?S.createElement(b,{color:i.dim},`no errors — stream healthy`):a.map((e,t)=>S.createElement(b,{key:t,wrap:`truncate`},e)))},H=({vitals:e,focused:t,width:n})=>{let{theme:r}=l(),i=(e,t,n)=>S.createElement(y,{key:e,flexDirection:`row`},S.createElement(y,{width:6},S.createElement(b,{color:r.dim},e)),S.createElement(y,{flexGrow:1,justifyContent:`flex-end`},S.createElement(b,{color:r.fg},typeof t==`number`?`${t.toFixed(0)}${n}`:`—`)));return S.createElement(c,{title:`Vitals`,focused:t,width:n},i(`LCP`,e?.lcpP75,`ms`),i(`INP`,e?.inpP75,`ms`),i(`CLS`,e?.clsP75?e.clsP75*1e3:void 0,`/1k`),i(`TTFB`,e?.ttfbP75,`ms`),i(`FCP`,e?.fcpP75,`ms`))},U=({goals:e,focused:t,width:n,rows:r=5})=>{let i=e?.goals??[],a=i.slice(0,r),o=i.length-a.length;return S.createElement(c,{title:`Goals`,focused:t,width:n},i.length===0?S.createElement(m,{reason:`no-data`,headline:`No goals yet`}):S.createElement(S.Fragment,null,a.map(e=>S.createElement(B,{key:e.name,label:e.name,value:e.completions.toLocaleString()})),o>0?S.createElement(W,{count:o}):null))},W=({count:e})=>{let{theme:t}=l();return S.createElement(b,{color:t.dim},` +${e} more`)};export{R as watchCommand};
File without changes
File without changes
File without changes