@karan171996/metricflow 0.1.2 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +5 -2
- package/.next/build-manifest.json +3 -3
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +11 -11
- package/.next/routes-manifest.json +23 -3
- package/.next/server/app/_global-error/page.js +3 -3
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +2 -3
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +9 -10
- package/.next/server/app/_global-error.segments/_full.segment.rsc +2 -3
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +3 -3
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +10 -10
- package/.next/server/app/_not-found.segments/_full.segment.rsc +10 -10
- package/.next/server/app/_not-found.segments/_index.segment.rsc +8 -8
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/analyze/route.js +3 -2
- package/.next/server/app/api/analyze/route.js.nft.json +1 -1
- package/.next/server/app/api/connect/route.js +2 -2
- package/.next/server/app/api/connect/route.js.nft.json +1 -1
- package/.next/server/app/api/metrics/route.js +2 -2
- package/.next/server/app/api/metrics/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/settings/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/settings/route.js +6 -0
- package/.next/server/app/api/settings/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/setup/ai/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/setup/ai/route/build-manifest.json +12 -0
- package/.next/server/app/api/setup/ai/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/setup/ai/route.js +7 -0
- package/.next/server/app/api/setup/ai/route.js.nft.json +1 -0
- package/.next/server/app/api/setup/ai/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/setup/route.js +2 -2
- package/.next/server/app/api/setup/route.js.nft.json +1 -1
- package/.next/server/app/connect/page.js +3 -3
- package/.next/server/app/connect/page.js.nft.json +1 -1
- package/.next/server/app/connect/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connect.html +2 -2
- package/.next/server/app/connect.rsc +12 -12
- package/.next/server/app/connect.segments/_full.segment.rsc +12 -12
- package/.next/server/app/connect.segments/_index.segment.rsc +8 -8
- package/.next/server/app/connect.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connect.segments/connect/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/icon.svg/route/app-paths-manifest.json +3 -0
- package/.next/server/app/icon.svg/route/build-manifest.json +12 -0
- package/.next/server/app/icon.svg/route.js +7 -0
- package/.next/server/app/{favicon.ico → icon.svg}/route.js.nft.json +1 -1
- package/.next/server/app/icon.svg.body +4 -0
- package/.next/server/app/icon.svg.meta +1 -0
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +12 -12
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +12 -12
- package/.next/server/app/index.segments/_index.segment.rsc +8 -8
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/page.js +3 -3
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/performance/[slug]/page.js +5 -4
- package/.next/server/app/performance/[slug]/page.js.nft.json +1 -1
- package/.next/server/app/performance/[slug]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/performance/page.js +3 -3
- package/.next/server/app/performance/page.js.nft.json +1 -1
- package/.next/server/app/performance/page_client-reference-manifest.js +1 -1
- package/.next/server/app/performance.html +2 -2
- package/.next/server/app/performance.rsc +13 -13
- package/.next/server/app/performance.segments/_full.segment.rsc +13 -13
- package/.next/server/app/performance.segments/_index.segment.rsc +8 -8
- package/.next/server/app/performance.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/performance.segments/performance/__PAGE__.segment.rsc +27 -26
- package/.next/server/app/settings/page.js +4 -4
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +24 -24
- package/.next/server/app/settings.segments/_full.segment.rsc +24 -24
- package/.next/server/app/settings.segments/_index.segment.rsc +8 -8
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +20 -20
- package/.next/server/app/setup/page.js +3 -3
- package/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/server/app/setup.html +2 -2
- package/.next/server/app/setup.rsc +31 -30
- package/.next/server/app/setup.segments/_full.segment.rsc +31 -30
- package/.next/server/app/setup.segments/_index.segment.rsc +8 -8
- package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +25 -24
- package/.next/server/app/tools/[tool]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/tools/[tool]/page/build-manifest.json +19 -0
- package/.next/server/app/tools/[tool]/page/next-font-manifest.json +6 -0
- package/.next/server/app/tools/[tool]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/tools/[tool]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/tools/[tool]/page.js +17 -0
- package/.next/server/app/tools/[tool]/page.js.nft.json +1 -0
- package/.next/server/app/tools/[tool]/page_client-reference-manifest.js +3 -0
- package/.next/server/app-paths-manifest.json +5 -2
- package/.next/server/chunks/[root-of-the-server]__027a1hx._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0chxb6o._.js → [root-of-the-server]__0eo1oa6._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1l249st._.js → [root-of-the-server]__0vkb6_m._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__1d1y03f._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1lxxc0h._.js +3 -0
- package/.next/server/chunks/{node_modules_0jatszq._.js → _0g9k22b._.js} +4 -4
- package/.next/server/chunks/_0zwkfj-._.js +8 -0
- package/.next/server/chunks/_10b5gsp._.js +22 -0
- package/.next/server/chunks/_1f-783b._.js +158 -0
- package/.next/server/chunks/_1pe45_3._.js +7 -7
- package/.next/server/chunks/_next-internal_server_app_api_settings_route_actions_1bpm9ac.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_setup_ai_route_actions_0-ay8t8.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_icon_svg_route_actions_1r2h_ub.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__06gb9_u._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0d9igav._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0fufdy-._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__15_sjnx._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__18-cm6x._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1fxaeqo._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1io3bae._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1pm7uf6._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1q99mso._.js +3 -0
- package/.next/server/chunks/ssr/{_1r2qog2._.js → _0-bp5v7._.js} +3 -3
- package/.next/server/chunks/ssr/{_042xeoh._.js → _06r8zrg._.js} +2 -2
- package/.next/server/chunks/ssr/_1-6djlo._.js +3 -0
- package/.next/server/chunks/ssr/{_1n9m819._.js → _1a5owey._.js} +2 -2
- package/.next/server/chunks/ssr/_1b_fov9._.js +3 -0
- package/.next/server/chunks/ssr/_1d1ipgp._.js +1 -1
- package/.next/server/chunks/ssr/_1d74ud1._.js +3 -0
- package/.next/server/chunks/ssr/{_0dbmzjx._.js → _1ovns3l._.js} +3 -151
- package/.next/server/chunks/ssr/_1y-b2zm._.js +151 -0
- package/.next/server/chunks/ssr/_1zb40ot._.js +3 -0
- package/.next/server/chunks/ssr/_20txlee._.js +1 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_tools_[tool]_page_actions_0-u-_p-.js +3 -0
- package/.next/server/chunks/ssr/app_layout_tsx_2144vk_._.js +1 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_0drixxt._.js +151 -0
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/0ubjg1ka_080j.js +1 -0
- package/.next/static/chunks/{14pp7x-su_dnv.js → 19jmme1xtmib0.js} +2 -2
- package/.next/static/chunks/1jtdb3kujnm2_.css +1 -0
- package/.next/static/chunks/{0wyq7u3z0lfca.js → 1kpyel_do_nn_.js} +1 -1
- package/.next/static/chunks/1otvbjuxr6thq.js +1 -0
- package/.next/static/chunks/1wurvq5krow1k.js +1 -0
- package/.next/static/chunks/2bd8yoc_iosfu.js +1 -0
- package/.next/static/chunks/{3lqd2emjcxbd-.js → 2uf-bm2nz17t-.js} +1 -1
- package/.next/static/chunks/32d1qdgpjfhb0.js +4 -0
- package/.next/static/chunks/{2xy80eg_ueu_u.js → 41tx3tz7-8892.js} +1 -1
- package/.next/static/media/icon.23mz8iwcatff2.svg +4 -0
- package/.next/trace +1 -1
- package/.next/trace-build +1 -1
- package/LICENSE +21 -0
- package/bin/cli.mjs +7 -2
- package/package.json +4 -2
- package/.next/build/chunks/[root-of-the-server]__05i36w1._.js.map +0 -11
- package/.next/build/chunks/[root-of-the-server]__1kki86f._.js.map +0 -8
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_1gfkiq9._.js.map +0 -5
- package/.next/build/chunks/[turbopack]_runtime.js.map +0 -11
- package/.next/build/chunks/node_modules_20v-8wl._.js.map +0 -47
- package/.next/build/chunks/pool_entry-[turbopack-node]_transforms_postcss_ts_0tp-k2v._.js.map +0 -5
- package/.next/server/app/_global-error/page.js.map +0 -5
- package/.next/server/app/_not-found/page.js.map +0 -5
- package/.next/server/app/api/analyze/route.js.map +0 -5
- package/.next/server/app/api/connect/route.js.map +0 -5
- package/.next/server/app/api/health/route.js.map +0 -5
- package/.next/server/app/api/metrics/route.js.map +0 -5
- package/.next/server/app/api/setup/route.js.map +0 -5
- package/.next/server/app/api/timings/route.js.map +0 -5
- package/.next/server/app/connect/page.js.map +0 -5
- package/.next/server/app/favicon.ico/route/app-paths-manifest.json +0 -3
- package/.next/server/app/favicon.ico/route.js +0 -7
- package/.next/server/app/favicon.ico/route.js.map +0 -5
- package/.next/server/app/favicon.ico.body +0 -0
- package/.next/server/app/favicon.ico.meta +0 -1
- package/.next/server/app/page.js.map +0 -5
- package/.next/server/app/performance/[slug]/page.js.map +0 -5
- package/.next/server/app/performance/page.js.map +0 -5
- package/.next/server/app/settings/page.js.map +0 -5
- package/.next/server/app/setup/page.js.map +0 -5
- package/.next/server/chunks/[externals]__1o8qm3w._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0chxb6o._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__14tfjrn._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__1fj5wte._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__1i_tsds._.js +0 -22
- package/.next/server/chunks/[root-of-the-server]__1i_tsds._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__1l249st._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__1uv-wzy._.js.map +0 -1
- package/.next/server/chunks/[turbopack]_runtime.js.map +0 -10
- package/.next/server/chunks/_1494cut._.js.map +0 -1
- package/.next/server/chunks/_1gvvd7n._.js +0 -158
- package/.next/server/chunks/_1gvvd7n._.js.map +0 -1
- package/.next/server/chunks/_1pe45_3._.js.map +0 -1
- package/.next/server/chunks/_1qtlv__._.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_analyze_route_actions_0lx-23h.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_connect_route_actions_1r5w03m.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_health_route_actions_1ryftkb.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_metrics_route_actions_0qn5q3s.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_setup_route_actions_0txsuev.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_timings_route_actions_1tsq7j6.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_0g2jjls.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_0g2jjls.js.map +0 -1
- package/.next/server/chunks/node_modules_0jatszq._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__036j_vr._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__036j_vr._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0ev464o._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0ev464o._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0f5axvr._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0f5axvr._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0hg5gib._.js +0 -33
- package/.next/server/chunks/ssr/[root-of-the-server]__0hg5gib._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0tmkhxy._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0tmkhxy._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0ydfg18._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0ydfg18._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__18hr860._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__18w2nrx._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__18w2nrx._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1c8dejo._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1mwg_vi._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__1mwg_vi._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1p_6ezv._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1vxra_4._.js.map +0 -1
- package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +0 -10
- package/.next/server/chunks/ssr/_042xeoh._.js.map +0 -1
- package/.next/server/chunks/ssr/_0c7qo1d._.js +0 -3
- package/.next/server/chunks/ssr/_0c7qo1d._.js.map +0 -1
- package/.next/server/chunks/ssr/_0dbmzjx._.js.map +0 -1
- package/.next/server/chunks/ssr/_178o6nh._.js +0 -3
- package/.next/server/chunks/ssr/_178o6nh._.js.map +0 -1
- package/.next/server/chunks/ssr/_1bbiu24._.js +0 -3
- package/.next/server/chunks/ssr/_1bbiu24._.js.map +0 -1
- package/.next/server/chunks/ssr/_1d1ipgp._.js.map +0 -1
- package/.next/server/chunks/ssr/_1n9m819._.js.map +0 -1
- package/.next/server/chunks/ssr/_1p5i72g._.js +0 -151
- package/.next/server/chunks/ssr/_1p5i72g._.js.map +0 -1
- package/.next/server/chunks/ssr/_1r2qog2._.js.map +0 -1
- package/.next/server/chunks/ssr/_1rkc3oc._.js.map +0 -1
- package/.next/server/chunks/ssr/_20txlee._.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0zi5s8-.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0pt47yr.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_connect_page_actions_1g-s_3i.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_0hhsz1j.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_performance_[slug]_page_actions_1pzv3w1.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_performance_page_actions_0vi13cc.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_11x4dq5.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_setup_page_actions_0u1sm0s.js.map +0 -1
- package/.next/server/chunks/ssr/app_layout_tsx_2144vk_._.js.map +0 -1
- package/.next/server/chunks/ssr/app_loading_tsx_0a1flg9._.js.map +0 -1
- package/.next/server/chunks/ssr/app_performance_[slug]_loading_tsx_0d5z78a._.js.map +0 -1
- package/.next/server/chunks/ssr/app_performance_loading_tsx_1bq2nq9._.js.map +0 -1
- package/.next/server/chunks/ssr/app_settings_loading_tsx_0nv_78v._.js.map +0 -1
- package/.next/server/chunks/ssr/components_0j32dj5._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_1wax83z._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_cn_dist_index_166wuka.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_0nkkbfv._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_1v8aef8._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0q-w892.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_server-async-storage_0t1dato.js.map +0 -1
- package/.next/static/chunks/13ihwqjtq_hlo.js +0 -1
- package/.next/static/chunks/1clwpy-vw07cb.js +0 -1
- package/.next/static/chunks/2-llbg7gt2gi5.js +0 -4
- package/.next/static/chunks/28w-hz8hg8t4v.css +0 -1
- package/.next/static/chunks/3rfi1wruz0m51.js +0 -1
- package/.next/static/media/favicon.2vob68tjqpejf.ico +0 -0
- /package/.next/server/app/{favicon.ico → api/settings}/route/build-manifest.json +0 -0
- /package/.next/static/{edA9zyNvRjRViNxMJ7dlC → kitK02ca_n40lM28SxiCO}/_buildManifest.js +0 -0
- /package/.next/static/{edA9zyNvRjRViNxMJ7dlC → kitK02ca_n40lM28SxiCO}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{edA9zyNvRjRViNxMJ7dlC → kitK02ca_n40lM28SxiCO}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../components/EmptyState.tsx","../../../../components/PerformanceHub/HubMetrics.tsx","../../../../node_modules/lucide-react/src/icons/globe.ts","../../../../components/PerformanceHub/HubTable.tsx","../../../../components/PerformanceHub/PerformanceHub.tsx","../../../../components/ui/badge.tsx","../../../../components/ui/card.tsx","../../../../components/ui/table.tsx","../../../../lib/useMetrics.ts","../../../../node_modules/lucide-react/src/icons/clock.ts","../../../../node_modules/lucide-react/src/icons/triangle-alert.ts","../../../../node_modules/next/src/client/components/server-async-storage.ts"],"sourcesContent":["import Link from \"next/link\";\nimport { Card, CardContent } from \"@/components/ui/card\";\nimport { Button, buttonVariants } from \"@/components/ui/button\";\n\n/** Shared \"No data yet\" / error card for every /performance view. */\nexport function EmptyState({\n title = \"No data yet\",\n reason = \"Keys work, but no page events have arrived.\",\n href = \"/connect\",\n cta = \"Send your first events\",\n onRetry,\n}: {\n title?: string;\n reason?: string;\n href?: string;\n cta?: string;\n onRetry?: () => void;\n}) {\n return (\n <Card className=\"border-[#2d3748] bg-[#1a202c] shadow-md\">\n <CardContent className=\"flex flex-col items-center gap-3 p-10 text-center\">\n <h3 className=\"text-lg font-semibold text-white\">{title}</h3>\n <p className=\"max-w-md text-sm text-gray-400\">{reason}</p>\n <div className=\"flex gap-3\">\n <Link href={href} className={buttonVariants()}>\n {cta}\n </Link>\n {onRetry && (\n <Button variant=\"outline\" onClick={onRetry}>\n Retry\n </Button>\n )}\n </div>\n </CardContent>\n </Card>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Card, CardContent } from \"@/components/ui/card\";\nimport { Globe, Clock, AlertTriangle } from \"lucide-react\";\nimport { hasData } from \"@/lib/useMetrics\";\nimport type { MetricsPage } from \"@/lib/metricsHistory\";\n\nexport function HubMetrics({ pages }: { pages: MetricsPage[] }) {\n const live = pages.filter(hasData);\n const avgLoad = live.length ? live.reduce((s, p) => s + p.newRelic.loadTime, 0) / live.length : null;\n const errors = pages.reduce((s, p) => s + p.sentry.errorCount, 0);\n\n const metrics = [\n { label: \"Pages Reporting\", value: `${live.length} of ${pages.length}`, icon: <Globe className=\"h-4 w-4 text-[#3ee0a1]\" /> },\n { label: \"Avg Load Time\", value: avgLoad === null ? \"No data yet\" : `${Math.round(avgLoad)}ms`, icon: <Clock className=\"h-4 w-4 text-[#06b6d4]\" /> },\n { label: \"Open Errors\", value: live.length || errors ? String(errors) : \"No data yet\", icon: <AlertTriangle className=\"h-4 w-4 text-[#ef4444]\" /> },\n ];\n\n return (\n <div className=\"grid gap-6 md:grid-cols-3 mb-8 mt-4\">\n {metrics.map((m, i) => (\n <Card key={i} className=\"border-[#2d3748] bg-[#1a202c] shadow-md\">\n <CardContent className=\"p-6\">\n <div className=\"flex items-center justify-between mb-4\">\n <span className=\"text-sm font-medium text-gray-400\">{m.label}</span>\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-[#0f1419] border border-[#2d3748]\">\n {m.icon}\n </div>\n </div>\n <div className=\"flex items-baseline gap-3\">\n <span className=\"text-3xl font-bold text-white tracking-tight\">{m.value}</span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'globe',\n size: 24,\n node: [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20', key: '13o1zl' }],\n ['path', { d: 'M2 12h20', key: '9i4pu4' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Globe\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/globe\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Globe = createLucideIcon(__iconData);\n\nexport default Globe;\n","\"use client\";\n\nimport React from \"react\";\nimport { useRouter } from \"next/navigation\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/table\";\nimport { Card, CardHeader, CardTitle, CardContent } from \"@/components/ui/card\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { hasData } from \"@/lib/useMetrics\";\nimport type { MetricsPage } from \"@/lib/metricsHistory\";\n\nexport function HubTable({ pages }: { pages: MetricsPage[] }) {\n const router = useRouter();\n\n return (\n <Card className=\"border-[#2d3748] bg-[#1a202c] shadow-md flex-1\">\n <CardHeader>\n <CardTitle className=\"text-[18px] font-bold text-white tracking-tight\">Tracked Pages Overview</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"rounded-md border border-[#2d3748] overflow-hidden\">\n <Table>\n <TableHeader className=\"bg-[#0f1419]\">\n <TableRow className=\"border-[#2d3748] hover:bg-transparent\">\n <TableHead className=\"text-gray-400\">Page Name</TableHead>\n <TableHead className=\"text-gray-400\">Path</TableHead>\n <TableHead className=\"text-gray-400\">Visitors (24h)</TableHead>\n <TableHead className=\"text-gray-400\">Avg Load</TableHead>\n <TableHead className=\"text-gray-400\">Errors</TableHead>\n <TableHead className=\"text-right text-gray-400\">Status</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {pages.map((page) => {\n const live = hasData(page);\n return (\n <TableRow \n key={page.slug} \n className=\"border-[#2d3748] hover:bg-white/5 transition-colors cursor-pointer\"\n onClick={() => router.push(`/performance/${page.slug}`)}\n >\n <TableCell className=\"font-medium text-white\">{page.name}</TableCell>\n <TableCell className=\"text-gray-500 font-mono text-xs\">{page.url}</TableCell>\n <TableCell className=\"text-gray-400\">{live ? page.visitors : \"—\"}</TableCell>\n <TableCell className=\"text-gray-400\">{live ? `${Math.round(page.newRelic.loadTime)}ms` : \"—\"}</TableCell>\n <TableCell className=\"text-gray-400\">{live ? page.sentry.errorCount : \"—\"}</TableCell>\n <TableCell className=\"text-right\">\n {!live ? (\n <Badge variant=\"outline\" className=\"border-[#4a5568] text-gray-400\">No data yet</Badge>\n ) : (\n <Badge\n variant=\"outline\"\n className={`\n ${page.status === 'Healthy' ? 'border-[#3ee0a1] text-[#3ee0a1] bg-[#3ee0a1]/10' : ''}\n ${page.status === 'Warning' ? 'border-[#f59e0b] text-[#f59e0b] bg-[#f59e0b]/10' : ''}\n ${page.status === 'Critical' ? 'border-[#ef4444] text-[#ef4444] bg-[#ef4444]/10' : ''}\n `}\n >\n {page.status}\n </Badge>\n )}\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </div>\n </CardContent>\n </Card>\n );\n}\n","\"use client\";\n\nimport { EmptyState } from \"@/components/EmptyState\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { useMetrics, hasData } from \"@/lib/useMetrics\";\nimport { HubMetrics } from \"./HubMetrics\";\nimport { HubTable } from \"./HubTable\";\n\nexport function PerformanceHub() {\n const { state, retry } = useMetrics();\n\n if (state.status === \"loading\") return <Skeleton className=\"mt-6 h-64 w-full bg-[#2d3748]\" />;\n if (state.status === \"error\") {\n return <EmptyState title=\"Could not load metrics\" reason={state.message} onRetry={retry} />;\n }\n if (!state.configured) {\n return <EmptyState title=\"Connect your data\" reason=\"Add your New Relic and Sentry keys to see real numbers.\" href=\"/setup\" cta=\"Set up keys\" />;\n }\n if (!state.pages.length || !state.pages.some(hasData)) {\n return <EmptyState />;\n }\n return (\n <>\n <HubMetrics pages={state.pages} />\n <HubTable pages={state.pages} />\n </>\n );\n}\n","import { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\n\nconst badgeVariants = cva(\n \"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a]:hover:bg-primary/80\",\n secondary:\n \"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80\",\n destructive:\n \"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20\",\n outline:\n \"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground\",\n ghost:\n \"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant = \"default\",\n render,\n ...props\n}: useRender.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants>) {\n return useRender({\n defaultTagName: \"span\",\n props: mergeProps<\"span\">(\n {\n className: cn(badgeVariants({ variant }), className),\n },\n props\n ),\n render,\n state: {\n slot: \"badge\",\n variant,\n },\n })\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\n \"group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\n \"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-(--card-spacing)\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n \"flex items-center rounded-b-xl border-t bg-muted/50 p-(--card-spacing)\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { MetricsPage } from \"@/lib/metricsHistory\";\n\nexport type MetricsState =\n | { status: \"loading\" }\n | { status: \"error\"; message: string }\n | { status: \"ready\"; configured: boolean; pages: MetricsPage[] };\n\n/** A page that has never reported has no beacon hit: show \"No data yet\", never 0ms/Healthy. */\nexport function hasData(p: MetricsPage): boolean {\n return p.newRelic.throughput > 0 || p.newRelic.loadTime > 0 || p.sentry.errorCount > 0;\n}\n\nexport function useMetrics() {\n const [state, setState] = useState<MetricsState>({ status: \"loading\" });\n const [attempt, setAttempt] = useState(0);\n\n useEffect(() => {\n let cancelled = false;\n fetch(\"/api/metrics\")\n .then(async (res) => {\n const body = await res.json();\n if (!res.ok) throw new Error(body.error ?? `HTTP ${res.status}`);\n if (!cancelled) setState({ status: \"ready\", configured: body.configured, pages: body.pages });\n })\n .catch((e) => {\n if (!cancelled) setState({ status: \"error\", message: e instanceof Error ? e.message : \"Request failed\" });\n });\n return () => {\n cancelled = true;\n };\n }, [attempt]);\n\n const retry = () => {\n setState({ status: \"loading\" });\n setAttempt((n) => n + 1);\n };\n return { state, retry };\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'clock',\n size: 24,\n node: [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'M12 6v6l4 2', key: 'mmk7yg' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Clock\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/clock\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Clock = createLucideIcon(__iconData);\n\nexport default Clock;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'triangle-alert',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'm21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3',\n key: 'wmoenq',\n },\n ],\n ['path', { d: 'M12 9v4', key: 'juzpu7' }],\n ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n ],\n aliases: ['alert-triangle'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name TriangleAlert\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/triangle-alert\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst TriangleAlert = createLucideIcon(__iconData);\n\nexport default TriangleAlert;\n","// Client-safe access to the server-only async-storage singletons. On the\n// server these re-export the real storages; in the browser bundle this module\n// is aliased to `./server-async-storage.browser` (see\n// scripts/generate-browser-variant-aliases.mjs), which exports `undefined`\n// stubs so the AsyncLocalStorage modules are never bundled into the client.\n// Consumers must guard usage so the stubs are not dereferenced in the browser.\nexport { actionAsyncStorage } from '../../server/app-render/action-async-storage.external'\nexport { workAsyncStorage } from '../../server/app-render/work-async-storage.external'\nexport { workUnitAsyncStorage } from '../../server/app-render/work-unit-async-storage.external'\n"],"names":["EmptyState","title","reason","href","cta","onRetry","className","variant","onClick","key","HubTable","pages","router","map","page","live","push","slug","name","url","visitors","Math","round","newRelic","loadTime","sentry","errorCount","status","PerformanceHub","state","retry","message","configured","length","some","badgeVariants","variants","default","secondary","destructive","outline","ghost","link","defaultVariants","Badge","render","props","defaultTagName","slot","Card","size","CardHeader","CardTitle","CardDescription","CardAction","CardContent","CardFooter","Table","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption","hasData","p","throughput","useMetrics","setState","attempt","setAttempt","cancelled","fetch","then","res","body","json","ok","Error","error","catch","e","n","actionAsyncStorage","workAsyncStorage","workUnitAsyncStorage"],"mappings":"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","ignoreList":[2,9,10,11]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../components/Connect/ConnectPage.tsx","../../../../components/Connect/snippets.ts","../../../../components/ui/card.tsx","../../../../node_modules/next/src/client/components/server-async-storage.ts"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport Link from \"next/link\";\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Button, buttonVariants } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { BROWSER_SNIPPET, EMIT_SNIPPET, SENTRY_SNIPPET } from \"./snippets\";\n\ninterface Source {\n recent: number | null;\n lastEventAt: string | null;\n error?: string;\n}\ninterface Status {\n error?: string;\n configured: boolean;\n insertKeySet?: boolean;\n browser?: Source;\n custom?: Source;\n sentry?: Source;\n}\n\nconst POLL_MS = 5000;\nconst cardCls = \"border-[#2d3748] bg-[#1a202c] shadow-md\";\n\nfunction CopyBlock({ n, title, help, code }: { n: number; title: string; help: string; code: string }) {\n const [copied, setCopied] = useState<\"ok\" | \"fail\" | null>(null);\n return (\n <Card className={cardCls}>\n <CardHeader>\n <CardTitle className=\"text-base font-bold text-white\">{title}</CardTitle>\n <CardDescription className=\"text-sm text-gray-400\">{help}</CardDescription>\n </CardHeader>\n <CardContent className=\"flex flex-col gap-3\">\n <pre tabIndex={0} aria-label={`Code snippet ${n}`} className=\"overflow-x-auto rounded-md border border-[#2d3748] bg-[#0f1419] p-3 text-xs text-gray-300\">{code}</pre>\n <div className=\"flex items-center gap-3\">\n <Button\n variant=\"outline\"\n aria-label={`Copy snippet ${n}: ${title.replace(/^\\d+\\. /, \"\")}`}\n onClick={() => {\n navigator.clipboard.writeText(code).then(\n () => setCopied(\"ok\"),\n () => setCopied(\"fail\")\n );\n setTimeout(() => setCopied(null), 2500);\n }}\n >\n Copy\n </Button>\n <span aria-live=\"polite\" className={`text-sm ${copied === \"fail\" ? \"text-[#f87171]\" : \"text-[#3ee0a1]\"}`}>\n {copied === \"ok\" ? \"Copied\" : copied === \"fail\" ? \"Copy failed, select the text and copy manually\" : \"\"}\n </span>\n </div>\n </CardContent>\n </Card>\n );\n}\n\nfunction StatusRow({ label, s }: { label: string; s?: Source }) {\n let text = \"Checking…\";\n let tone = \"text-gray-400\";\n if (s?.error) {\n text = s.error;\n tone = \"text-[#f87171]\";\n } else if (s) {\n const seen = s.recent !== null && s.recent > 0;\n text = seen\n ? `Receiving data${s.lastEventAt ? ` · last event ${new Date(s.lastEventAt).toLocaleTimeString()}` : \"\"}`\n : s.lastEventAt\n ? `None in the last 5 minutes · last event ${new Date(s.lastEventAt).toLocaleString()}`\n : \"None yet\";\n tone = seen ? \"text-[#3ee0a1]\" : \"text-[#f59e0b]\";\n }\n return (\n <div className=\"flex items-center justify-between gap-4 border-b border-[#2d3748] py-2 last:border-0\">\n <span className=\"text-sm text-gray-300 shrink-0\">{label}</span>\n <span className={`min-w-0 break-words text-right text-sm ${tone}`}>{text}</span>\n </div>\n );\n}\n\nexport function ConnectPage() {\n const [status, setStatus] = useState<Status | null>(null);\n const [insertKey, setInsertKey] = useState(\"\");\n const [msg, setMsg] = useState<{ ok: boolean; text: string } | null>(null);\n const [busy, setBusy] = useState(false);\n const [replacing, setReplacing] = useState(false);\n\n const refresh = useCallback(() => {\n fetch(\"/api/connect\")\n .then((r) => r.json())\n .then(setStatus)\n .catch(() => {});\n }, []);\n\n useEffect(() => {\n refresh();\n const id = setInterval(() => {\n if (!document.hidden) refresh();\n }, POLL_MS);\n return () => clearInterval(id);\n }, [refresh]);\n\n async function saveInsertKey() {\n setBusy(true);\n setMsg(null);\n try {\n const res = await fetch(\"/api/setup\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ NEWRELIC_INSERT_KEY: insertKey }),\n });\n const body = await res.json();\n if (body.saved) {\n setInsertKey(\"\");\n setReplacing(false);\n setMsg({ ok: true, text: \"Insert key saved.\" });\n refresh();\n } else {\n setMsg({ ok: false, text: body.error ?? body.results?.NEWRELIC_INSERT_KEY?.error ?? \"Could not save the key.\" });\n }\n } catch {\n setMsg({ ok: false, text: \"Could not reach the dashboard server.\" });\n } finally {\n setBusy(false);\n }\n }\n\n async function sendTest() {\n setBusy(true);\n setMsg(null);\n try {\n const res = await fetch(\"/api/connect\", { method: \"POST\" });\n const body = await res.json();\n setMsg(body.sent ? { ok: true, text: \"Test event sent. It can take up to a minute to show below.\" } : { ok: false, text: body.error ?? \"Failed.\" });\n refresh();\n } catch {\n setMsg({ ok: false, text: \"Could not reach the dashboard server.\" });\n } finally {\n setBusy(false);\n }\n }\n\n if (status?.error) {\n return (\n <Card className={cardCls}>\n <CardContent className=\"p-10 text-center\" aria-live=\"polite\">\n <p className=\"text-sm text-[#f87171]\">{status.error}</p>\n </CardContent>\n </Card>\n );\n }\n\n if (status && !status.configured) {\n return (\n <Card className={cardCls}>\n <CardContent className=\"flex flex-col items-center gap-3 p-10 text-center\">\n <h3 className=\"text-lg font-semibold text-white\">Set up your keys first</h3>\n <p className=\"max-w-md text-sm text-gray-400\">Add your New Relic and Sentry keys, then come back to connect your site.</p>\n <Link href=\"/setup\" className={buttonVariants()}>Go to setup</Link>\n </CardContent>\n </Card>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-6 max-w-3xl\">\n <Card className={cardCls}>\n <CardHeader>\n <CardTitle className=\"text-base font-bold text-white\">Events received (last 5 minutes)</CardTitle>\n <CardDescription className=\"text-sm text-gray-400\">Updates every few seconds.</CardDescription>\n </CardHeader>\n <CardContent aria-live=\"polite\">\n <StatusRow label=\"Browser agent (page views)\" s={status?.browser} />\n <StatusRow label=\"Custom events (emitMetric / test event)\" s={status?.custom} />\n <StatusRow label=\"Sentry errors\" s={status?.sentry} />\n </CardContent>\n </Card>\n\n <Card className={cardCls}>\n <CardHeader>\n <CardTitle className=\"text-base font-bold text-white\">Two different New Relic keys</CardTitle>\n <CardDescription className=\"text-sm text-gray-400\">\n <strong className=\"text-gray-200\">User API key</strong> (set on Setup): lets this dashboard <em>read</em> your data.{\" \"}\n <strong className=\"text-gray-200\">Ingest - License key</strong> (below): lets a script <em>send</em> events. Only the Insert key is used by the test button. The Browser agent snippet uses a third key, the <strong className=\"text-gray-200\">Ingest - Browser</strong> key. Dashboards for US New Relic accounts only.\n </CardDescription>\n </CardHeader>\n <CardContent className=\"flex flex-col gap-3\">\n {status?.insertKeySet && !replacing ? (\n <p className=\"text-sm text-[#3ee0a1]\">\n ✓ Insert key is set{\" \"}\n <button type=\"button\" className=\"ml-2 text-gray-300 underline\" onClick={() => setReplacing(true)}>Replace</button>\n </p>\n ) : (\n <div className=\"flex flex-col gap-1.5\">\n <label htmlFor=\"insert-key\" className=\"text-sm font-medium text-gray-300\">Insert key · sends test events</label>\n <p id=\"insert-key-help\" className=\"text-xs text-gray-400\">Only needed for the test button and custom events. Different from the User key. Create it as type "Ingest - License".</p>\n <div className=\"flex items-center gap-2\">\n <Input\n id=\"insert-key\"\n aria-describedby=\"insert-key-help\"\n type=\"password\"\n autoComplete=\"off\"\n spellCheck={false}\n placeholder=\"Ingest - License key\"\n value={insertKey}\n onChange={(e) => setInsertKey(e.target.value)}\n className=\"bg-[#0f1419] border-[#2d3748] text-gray-200 font-mono text-xs\"\n />\n <Button onClick={saveInsertKey} disabled={busy || !insertKey.trim()}>Save</Button>\n </div>\n </div>\n )}\n <div className=\"flex items-center gap-4\">\n <Button onClick={sendTest} disabled={busy || !status?.insertKeySet}>Send test event</Button>\n {!status?.insertKeySet && <span className=\"text-sm text-gray-400\">Add an Insert key first</span>}\n {msg && <span aria-live=\"polite\" className={`text-sm ${msg.ok ? \"text-[#3ee0a1]\" : \"text-[#f87171]\"}`}>{msg.text}</span>}\n </div>\n </CardContent>\n </Card>\n\n <CopyBlock n={1} title=\"1. New Relic Browser agent\" help=\"Gives page views, load timing and Core Web Vitals. Replace the placeholders with values from New Relic.\" code={BROWSER_SNIPPET} />\n <CopyBlock n={2} title=\"2. emitMetric() helper\" help=\"Send your own numbers from your site. Uses the Browser agent above, so no key goes in your code.\" code={EMIT_SNIPPET} />\n <CopyBlock n={3} title=\"3. Sentry errors\" help=\"Send JavaScript errors to Sentry. Use your project's DSN.\" code={SENTRY_SNIPPET} />\n <Card className={cardCls}>\n <CardHeader>\n <CardTitle className=\"text-base font-bold text-white\">4. Verify</CardTitle>\n <CardDescription className=\"text-sm text-gray-400\">Reload your site, then watch "Events received" above turn green. Use Send test event to check the custom-event path.</CardDescription>\n </CardHeader>\n </Card>\n </div>\n );\n}\n","// Placeholders only. Never put a real key in these strings.\nexport const BROWSER_SNIPPET = `// npm i @newrelic/browser-agent (or paste the snippet from New Relic: Add data > Browser monitoring)\nimport { BrowserAgent } from '@newrelic/browser-agent/loaders/browser-agent';\n\nconst opts = {\n init: { distributed_tracing: { enabled: true }, privacy: { cookies_enabled: true } },\n info: { beacon: 'bam.nr-data.net', errorBeacon: 'bam.nr-data.net', licenseKey: '<INGEST_BROWSER_KEY>', applicationID: '<APP_ID>', sa: 1 },\n loader_config: { accountID: '<ACCOUNT_ID>', trustKey: '<ACCOUNT_ID>', agentID: '<APP_ID>', licenseKey: '<INGEST_BROWSER_KEY>', applicationID: '<APP_ID>' },\n};\nexport const agent = new BrowserAgent(opts); // gives you PageView, load timing, Core Web Vitals and JS errors with no more code`;\n\nexport const EMIT_SNIPPET = `// emitMetric.ts - sends a custom event through the New Relic browser agent (no key in your code)\n// Needs a recent @newrelic/browser-agent (recordCustomEvent). Using New Relic's copy-paste snippet instead? Call window.newrelic.recordCustomEvent the same way.\nimport { agent } from './newrelic'; // the file where you ran: export const agent = new BrowserAgent(opts)\n\nexport function emitMetric(name: string, value: number, attrs: Record<string, string | number | boolean> = {}) {\n agent.recordCustomEvent('MetricFlowEvent', { name, value, page: location.pathname, ...attrs });\n}\n\n// emitMetric('checkout_step', 2, { step: 'payment' });`;\n\nexport const SENTRY_SNIPPET = `// npm i @sentry/browser\nimport * as Sentry from '@sentry/browser';\n\nSentry.init({\n dsn: '<YOUR_SENTRY_DSN>', // Sentry > Project settings > Client Keys (DSN)\n tracesSampleRate: 0.1,\n});`;\n","import * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\n \"group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\n \"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-(--card-spacing)\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n \"flex items-center rounded-b-xl border-t bg-muted/50 p-(--card-spacing)\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","// Client-safe access to the server-only async-storage singletons. On the\n// server these re-export the real storages; in the browser bundle this module\n// is aliased to `./server-async-storage.browser` (see\n// scripts/generate-browser-variant-aliases.mjs), which exports `undefined`\n// stubs so the AsyncLocalStorage modules are never bundled into the client.\n// Consumers must guard usage so the stubs are not dereferenced in the browser.\nexport { actionAsyncStorage } from '../../server/app-render/action-async-storage.external'\nexport { workAsyncStorage } from '../../server/app-render/work-async-storage.external'\nexport { workUnitAsyncStorage } from '../../server/app-render/work-unit-async-storage.external'\n"],"names":["BROWSER_SNIPPET","EMIT_SNIPPET","SENTRY_SNIPPET","Card","className","size","props","CardHeader","CardTitle","CardDescription","CardAction","CardContent","CardFooter","actionAsyncStorage","workAsyncStorage","workUnitAsyncStorage"],"mappings":"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","ignoreList":[3]}
|