1import { o as l, c as r, a as e, i as b, C as w, H as q, u as h, d as F, t as o, b as m, g as k, e as v, F as g, r as x, G as W, O as I, z as H, q as J, n as K, f as Q, w as D, P as T } from "./app-BKglPdKf.js"; 2import { _ as X } from "./DateRangeSelector-KLC_Vjru.js"; 3import { _ as ee } from "./ShowMoreWithNumber-D0fPcuFA.js"; 4import { _ as te } from "./CentralLayout-Cfktl9q5.js"; 5import { C as se, a as ae, L as le, B as ie, p as ne, b as re, c as oe, d as de } from "./index-C8efFojq.js"; 6import { g as $, j as ce } from "./functions-DEKvp7rT.js"; 7import "./BaseButton-Caq9VZqG.js"; 8import "./PopoverTrigger-D_HCg7ai.js"; 9import "./index-CtBxw2Tl.js"; 10import "./floating-ui.dom-BP3BqfQZ.js"; 11import "./index-XTnrROav.js"; 12import "./vue-tabler-icons.es-Bv8MaYy1.js"; 13import "./CheckIcon-md94eL4e.js"; 14import "./ChevronLeftIcon-COPWJbCi.js"; 15import "./ChevronRightIcon-DYhch3c0.js"; 16import "./UserAvatar-CXQnDhqV.js"; 17import "./ApplicationLogo-Bn8Q0Fjs.js"; 18import "./menu-BhkLU5HS.js"; 19import "./use-text-value-CdK-I_YB.js"; 20import "./use-tree-walker-DUGGusBP.js"; 21import "./ShieldCheckIcon-MlEwKNgN.js"; 22import "./HomeIcon-BzcvspE7.js"; 23function ue(t, i) { 24 return l(), r("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", "data-slot": "icon" }, [e("path", { "fill-rule": "evenodd", d: "M10 3a.75.75 0 0 1 .75.75v10.638l3.96-4.158a.75.75 0 1 1 1.08 1.04l-5.25 5.5a.75.75 0 0 1-1.08 0l-5.25-5.5a.75.75 0 1 1 1.08-1.04l3.96 4.158V3.75A.75.75 0 0 1 10 3Z", "clip-rule": "evenodd" })]); 25} 26function me(t, i) { 27 return l(), r("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", "data-slot": "icon" }, [e("path", { "fill-rule": "evenodd", d: "M10 17a.75.75 0 0 1-.75-.75V5.612L5.29 9.77a.75.75 0 0 1-1.08-1.04l5.25-5.5a.75.75 0 0 1 1.08 0l5.25 5.5a.75.75 0 1 1-1.08 1.04l-3.96-4.158V16.25A.75.75 0 0 1 10 17Z", "clip-rule": "evenodd" })]); 28} 29function pe(t, i) { 30 return l(), r("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", "data-slot": "icon" }, [e("path", { "fill-rule": "evenodd", d: "M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm3.857-9.809a.75.75 0 0 0-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 1 0-1.06 1.061l2.5 2.5a.75.75 0 0 0 1.137-.089l4-5.5Z", "clip-rule": "evenodd" })]); 31} 32function ge(t, i) { 33 return l(), r("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", "data-slot": "icon" }, [e("path", { "fill-rule": "evenodd", d: "M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0Zm-7-4a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM9 9a.75.75 0 0 0 0 1.5h.253a.25.25 0 0 1 .244.304l-.459 2.066A1.75 1.75 0 0 0 10.747 15H11a.75.75 0 0 0 0-1.5h-.253a.25.25 0 0 1-.244-.304l.459-2.066A1.75 1.75 0 0 0 9.253 9H9Z", "clip-rule": "evenodd" })]); 34} 35function ve(t, i) { 36 return l(), r("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", "data-slot": "icon" }, [e("path", { "fill-rule": "evenodd", d: "M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16ZM8.28 7.22a.75.75 0 0 0-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 1 0 1.06 1.06L10 11.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L11.06 10l1.72-1.72a.75.75 0 0 0-1.06-1.06L10 8.94 8.28 7.22Z", "clip-rule": "evenodd" })]); 37} 38const B = { __name: "DeltaBadge", props: { value: Number, suffix: { type: String, default: "" }, invert: { type: Boolean, default: false } }, setup(t) { 39 const i = t, y = k(() => i.invert ? i.value < 0 : i.value > 0); 40 return (u, c) => t.value && t.value !== 0 ? (l(), r("span", { key: 0, class: w(["inline-flex items-baseline rounded-full px-2 py-0.5 text-xs font-medium", y.value ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800"]) }, [(l(), b(q(y.value ? h(me) : h(ue)), { class: w(["-ml-0.5 mr-0.5 h-3 w-3 flex-shrink-0 self-center", y.value ? "text-green-500" : "text-red-500"]) }, null, 8, ["class"])), F(" " + o(Math.abs(t.value)) + o(t.suffix), 1)], 2)) : m("", true); 41} }, xe = { class: "px-4 py-5 sm:p-6" }, ye = { class: "flex items-center justify-between" }, fe = { class: "text-sm font-medium text-gray-500" }, be = { class: "group relative" }, he = { class: "pointer-events-none absolute right-0 top-full z-10 mt-1 hidden w-44 rounded-md bg-gray-900 px-3 py-2 text-xs text-white shadow-lg group-hover:block" }, we = { class: "mt-2 flex items-baseline gap-2" }, ke = { class: "text-sm text-gray-500" }, Me = { key: 0, class: "mt-1 text-xs text-gray-400" }, L = { __name: "StatusCard", props: { label: String, percentage: Number,
41count: Number, status: String, tooltip: String, delta: Number, prevLabel: String, small: { type: Boolean, default: false } }, setup(t) { 42 const i = t, y = { success: { bg: "bg-gradient-to-br from-green-50/40 to-white", badge: "text-green-700 bg-green-100", label: "SUCCESS" }, warning: { bg: "bg-gradient-to-br from-yellow-50/40 to-white", badge: "text-yellow-700 bg-yellow-100", label: "WARNING" }, danger: { bg: "bg-gradient-to-br from-red-50/40 to-white", badge: "text-red-700 bg-red-100", label: "DANGER" } }, u = k(() => y[i.status]), c = k(() => (i.tooltip || "").split(` 43`)); 44 return (p, S) => (l(), r("div", { class: w(["overflow-hidden rounded-lg shadow", u.value.bg]) }, [e("div", xe, [e("div", ye, [e("p", fe, o(t.label), 1), e("div", be, [e("span", { class: w(["inline-flex cursor-help items-center gap-1 rounded-md px-2 py-0.5 text-xs font-semibold", u.value.badge]) }, [F(o(u.value.label) + " ", 1), v(h(ge), { class: "h-3.5 w-3.5 opacity-60" })], 2), e("div", he, [(l(true), r(g, null, x(c.value, (_, A) => (l(), r("p", { key: A, class: "whitespace-nowrap" }, o(_), 1))), 128))])])]), e("div", we, [e("span", { class: w(["font-bold text-gray-900", t.small ? "text-2xl" : "text-3xl"]) }, o(t.percentage) + "% ", 3), e("span", ke, "(" + o(t.count) + ")", 1), t.delta != null ? (l(), b(B, { key: 0, value: t.delta, suffix: "%" }, null, 8, ["value"])) : m("", true)]), t.prevLabel ? (l(), r("p", Me, " vs " + o(t.prevLabel), 1)) : m("", true)])], 2)); 45} }, Ae = { class: "px-4 sm:px-6 lg:px-8" }, Ce = { class: "mt-6 grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4" }, Se = { class: "mt-1" }, _e = ["value"], Ne = ["value"], ze = ["value"], Re = { class: "mt-8 grid grid-cols-2 gap-4 lg:grid-cols-4" }, De = { class: "overflow-hidden rounded-lg bg-white shadow" }, Te = { class: "px-4 py-5 sm:p-6" }, $e = { class: "mt-2 flex items-baseline gap-2" }, Le = { class: "text-3xl font-bold text-gray-900" }, Be = { key: 0, class: "mt-1 flex items-center gap-2" }, Oe = { class: "text-xs text-gray-400" }, Ve = { key: 0, class: "overflow-hidden rounded-lg bg-white shadow" }, Pe = { class: "px-4 py-5 sm:p-6" }, Ee = { class: "mt-2 flex items-baseline gap-2" }, Fe = { class: "text-3xl font-bold text-gray-900" }, Ze = { key: 0, class: "mt-1 text-xs text-gray-400" }, Ge = { key: 0, class: "mt-8 rounded-lg bg-white p-6 shadow" }, Ye = { style: { height: "280px" } }, je = { class: "mt-6" }, Ue = { class: "mt-4 grid grid-cols-2 gap-4 lg:grid-cols-5" }, qe = { class: "mt-8" }, We = { class: "mt-4 overflow-x-auto rounded-lg bg-white shadow" }, Ie = { class: "min-w-full divide-y divide-gray-200" }, He = { class: "bg-gray-50" }, Je = { class: "divide-y divide-gray-200 bg-white" }, Ke = { class: "whitespace-nowrap px-4 py-4 text-sm font-medium text-gray-900" }, Qe = { class: "whitespace-nowrap px-4 py-4 text-sm text-gray-500" }, Xe = { class: "whitespace-nowrap px-4 py-4 text-sm text-gray-500" }, et = { class: "whitespace-nowrap px-4 py-4 text-sm text-gray-500" }, tt = { class: "whitespace-nowrap px-4 py-4 text-sm" }, st = { key: 0 }, at = ["colspan"], _t = { __name: "Analytics", props: { firstTenantDate: String, metrics: Object, previousMetrics: Object, timeSeries: Object, latestActivatedTenants: Array, filters: Object, filterOptions: Object }, setup(t) { 46 se.register(ae, le, ie, ne, re, oe), $.extend(ce); 47 const i = t, y = { start: $().startOf("isoWeek").format("YYYY-MM-DD"), end: $().endOf("isoWeek").format("YYYY-MM-DD") }, u = W(i.filters.start && i.filters.end ? { start: i.filters.start, end: i.filters.end } : y), c = I({ plan: i.filters.plan || "", company_type: i.filters.company_type || "", company_
47size: i.filters.company_size || "" }); 48 H(u, () => { 49 C(); 50 }); 51 const p = (n, s) => s ? Math.round(n / s * 1e3) / 10 : 0, S = (n) => n >= 25 ? "success" : n >= 15 ? "warning" : "danger", _ = (n) => n >= 12.5 ? "success" : n >= 8 ? "warning" : "danger", A = (n, s) => s == null ? null : n - s, O = (n, s, a, d) => { 52 const f = p(n, s), z = p(a, d); 53 return Math.round((f - z) * 10) / 10; 54 }, M = k(() => !i.previousMetrics || !i.previousMetrics.total ? null : Math.round((i.metrics.total - i.previousMetrics.total) / i.previousMetrics.total * 1e3) / 10), V = k(() => { 55 const n = i.timeSeries; 56 return !n || !n.labels.length ? null : { labels: n.labels, datasets: [{ label: "New Trials", data: n.trials, backgroundColor: "rgba(79,70,229,0.7)", borderRadius: 4 }, { label: "Activated", data: n.activated, backgroundColor: "rgba(16,185,129,0.7)", borderRadius: 4 }] }; 57 }), Z = { responsive: true, maintainAspectRatio: false, plugins: { tooltip: { mode: "index", intersect: false }, legend: { display: true, position: "top" } }, scales: { y: { beginAtZero: true, grid: { color: "#F0F0F0" }, ticks: { color: "#A3A3A3", maxTicksLimit: 5, precision: 0 } }, x: { grid: { color: "#F0F0F0" }, ticks: { color: "#A3A3A3", maxTicksLimit: 12, maxRotation: 45, minRotation: 45 } } } }, C = () => { 58 var _a, _b; 59 const n = {}; 60 ((_a = u.value) == null ? void 0 : _a.start) && (n.start = u.value.start), ((_b = u.value) == null ? void 0 : _b.end) && (n.end = u.value.end), c.plan && (n.plan = c.plan), c.company_type && (n.company_type = c.company_type), c.company_size && (n.company_size = c.company_size), J.visit(route("central.analytics.index"), { data: n, preserveState: true }); 61 }, N = [{ key: "connected_stripe", short: "Stripe" }, { key: "created_service", short: "Service" }, { key: "created_request", short: "Request" }, { key: "customized_portal", short: "Portal" }, { key: "invited_client", short: "Client" }], G = k(() => { 62 var _a, _b; 63 const n = i.metrics.total, s = ((_a = i.previousMetrics) == null ? void 0 : _a.total) || 0, a = i.metrics.milestones, d = (_b = i.previousMetrics) == null ? void 0 : _b.milestones, f = (z, Y, P, j) => { 64 const E = n > 0 ? Math.round(P / n * 1e3) / 10 : 0, R = d && s > 0 ? Math.round(j / s * 1e3) / 10 : null, U = R !== null ? Math.round((E - R) * 10) / 10 : null; 65 return { key: z, label: Y, count: P, percentage: E, prevPercentage: R, delta: U }; 66 }; 67 return [f("connected_stripe", "Connected Stripe", a.connected_stripe, d == null ? void 0 : d.connected_stripe), f("created_service", "Created a service", a.created_service, d == null ? void 0 : d.created_service), f("
67created_request", "Created request", a.created_request, d == null ? void 0 : d.created_request), f("customized_portal", "Customized portal", a.customized_portal, d == null ? void 0 : d.customized_portal), f("invited_client", "Invited client", a.invited_client, d == null ? void 0 : d.invited_client)]; 68 }); 69 return (n, s) => (l(), r(g, null, [v(h(K), { title: "Analytics" }), v(te, null, { default: Q(() => { 70 var _a, _b, _c, _d; 71 return [e("div", Ae, [s[24] || (s[24] = e("div", { class: "sm:flex sm:items-center" }, [e("div", { class: "sm:flex-auto" }, [e("h1", { class: "text-base font-semibold leading-6 text-gray-900" }, " Analytics "), e("p", { class: "mt-2 text-sm text-gray-700" }, " Tenant activation and conversion metrics ")])], -1)), e("div", Ce, [e("div", null, [s[4] || (s[4] = e("label", { class: "block text-sm font-medium text-gray-700" }, " Date range ", -1)), e("div", Se, [v(X, { modelValue: u.value, "onUpdate:modelValue": s[0] || (s[0] = (a) => u.value = a), "first-date": t.firstTenantDate, "button-class": "w-full" }, null, 8, ["modelValue", "first-date"])])]), e("div", null, [s[6] || (s[6] = e("label", { for: "plan", class: "block text-sm font-medium text-gray-700" }, " Plan ", -1)), D(e("select", { id: "plan", "onUpdate:modelValue": s[1] || (s[1] = (a) => c.plan = a), class: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm", onChange: C }, [s[5] || (s[5] = e("option", { value: "" }, "All plans", -1)), (l(true), r(g, null, x(t.filterOptions.plans, (a, d) => (l(), r("option", { key: d, value: d }, o(a), 9, _e))), 128))], 544), [[T, c.plan]])]), e("div", null, [s[8] || (s[8] = e("label", { for: "company_type", class: "block text-sm font-medium text-gray-700" }, " Agency type ", -1)), D(e("select", { id: "company_type", "onUpdate:modelValue": s[2] || (s[2] = (a) => c.company_type = a), class: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm", onChange: C }, [s[7] || (s[7] = e("option", { value: "" }, "All types", -1)), (l(true), r(g, null, x(t.filterOptions.companyTypes, (a, d) => (l(), r("option", { key: d, value: d }, o(a), 9, Ne))), 128))], 544), [[T, c.company_type]])]), e("div", null, [s[10] || (s[10] = e("label", { for: "company_size", class: "block text-sm font-medium text-gray-700" }, " Agency size ", -1)), D(e("select", { id: "company_size", "onUpdate:modelValue": s[3] || (s[3] = (a) => c.company_size = a), class: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm", onChange: C }, [s[9] || (s[9] = e("option", { value: "" }, "All sizes", -1)), (l(true), r(g, null, x(t.filterOptions.companySizes, (a, d) => (l(), r("option", { key: d, value: d }, o(a), 9, ze))), 128))], 544), [[T, c.company_size]])])]), e("div", Re, [e("div", De, [e("div", Te, [s[11] || (s[11] = e("p", { class: "text-sm font-medium text-gray-500" }, " New Trials ", -1)), e("div", $e, [e("span", Le, o(t.metrics.total), 1), t.previousMetrics ? (l(), b(B, { key: 0, value: A(t.metrics.total, t.previousMetrics.total) }, null, 8, ["value"])) : m("", true)]), t.previousMetrics ? (l(), r("div", Be, [M.value !== null ? (l(), r("span", { key: 0, class: w(["text-sm font-semibold", M.value > 0 ? "text-green-600" : M.value < 0 ? "text-red-600" : "text-gray-500"]) }, o(M.value > 0 ? "+" : "") + o(M.value) + "% growth ", 3)) : m("", true), e("span", Oe, " vs " + o(t.previousMetrics.total) + " prev ", 1)])) : m("", true)])]), v(L, { label: "Activated", percentage: p(t.metrics.activated, t.metrics.total), count: t.metrics.activated, status: S(p(t.metrics.activated, t.metrics.total)), tooltip: `SUCCESS: \u2265 25% 72WARNING: 15% \u2013 25% 73DANGER: < 15%`, delta: t.previousMetrics ? O(t.metrics.activated, t.metrics.total, t.previousMetrics.activated, t.previousMetrics.total) : null, "prev-label": t.previousMetrics ? p(t.previousMetrics.activated, t.previousMetrics.total) + "% previous period" : null }, null, 8, ["percentage", "count", "status", "delta", "prev-label"]), v(L, { label: "Converted to Paid", percentage: p(t.metrics.milestones.subscribed_paid_plan, t.metrics.total), count: t.metrics.milestones.subscribed_paid_plan, status: _(p(t.metrics.milestones.subscribed_paid_plan, t.metrics.total)), tooltip: `SUCCESS: \u2265 12.5% 74WARNING: 8% \u2013 12.5% 75DANGER: < 8%`, delta: t.previousMetrics ? O(t.metrics.milestones.subscribed_paid_plan, t.metrics.total, t.previousMetrics.milestones.subscribed_paid_plan, t.previousMetrics.total) : null, "prev-label": t.previousMetrics ? p(t.previousMetrics.milestones.subscribed_paid_plan, t.previousMetrics.total) + "% previous period" : null }, null, 8, ["percentage", "count", "status", "delta", "prev-label"]), t.metrics.median_conversion_days !== null ? (l(), r("div", Ve, [e("div", Pe, [s[13] || (s[13] = e("p", { class: "text-sm font-medium text-gray-500" }, " Median Time to Paid ", -1)), e("div", Ee, [e("span", Fe, o(t.metrics.median_conversion_days), 1
75), s[12] || (s[12] = e("span", { class: "text-sm text-gray-500" }, "days", -1)), ((_a = t.previousMetrics) == null ? void 0 : _a.median_conversion_days) != null ? (l(), b(B, { key: 0, value: A(t.metrics.median_conversion_days, (_b = t.previousMetrics) == null ? void 0 : _b.median_conversion_days), suffix: "d", invert: "" }, null, 8, ["value"])) : m("", true)]), ((_c = t.previousMetrics) == null ? void 0 : _c.median_conversion_days) != null ? (l(), r("p", Ze, " vs " + o((_d = t.previousMetrics) == null ? void 0 : _d.median_conversion_days) + " days previous period ", 1)) : m("", true)])])) : m("", true)]), V.value ? (l(), r("div", Ge, [s[14] || (s[14] = e("h3", { class: "mb-4 text-base font-semibold leading-6 text-gray-900" }, " Trials & Activated Over Time ", -1)), e("div", Ye, [v(h(de), { data: V.value, options: Z }, null, 8, ["data"])])])) : m("", true), e("div", je, [s[15] || (s[15] = e("h3", { class: "text-base font-semibold leading-6 text-gray-900" }, " Activation Funnel ", -1)), s[16] || (s[16] = e("p", { class: "mt-1 text-sm text-gray-500" }, " % of trials completing each step ", -1)), e("div", Ue, [(l(true), r(g, null, x(G.value, (a) => (l(), b(L, { key: a.key, label: a.label, percentage: a.percentage, count: a.count, status: S(a.percentage), tooltip: `SUCCESS: \u2265 25% 76WARNING: 15% \u2013 25% 77DANGER: < 15%`, delta: a.delta, "prev-label": a.prevPercentage !== null ? a.prevPercentage + "% prev" : null, small: "" }, null, 8, ["label", "percentage", "count", "status", "delta", "prev-label"]))), 128))])]), e("div", qe, [s[22] || (s[22] = e("h3", { class: "text-base font-semibold leading-6 text-gray-900" }, " Latest Activated Tenants ", -1)), s[23] || (s[23] = e("p", { class: "mt-1 text-sm text-gray-500" }, " 20 most recent tenants with 3+ activation steps completed ", -1)), e("div", We, [e("table", Ie, [e("thead", He, [e("tr", null, [s[17] || (s[17] = e("th", { scope: "col", class: "px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500" }, " Portal Name ", -1)), s[18] || (s[18] = e("th", { scope: "col", class: "px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500" }, " Admin Email ", -1)), s[19] || (s[19] = e("th", { scope: "col", class: "px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500" }, " Domains ", -1)), (l(), r(g, null, x(N, (a) => e("th", { key: a.key, scope: "col", class: "px-3 py-3 text-center text-xs font-medium uppercase tracking-wider text-gray-500" }, o(a.short), 1)), 64)), s[20] || (s[20] = e("th", { scope: "col", class: "px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500" }, " Created ", -1)), s[21] || (s[21] = e("th", { scope: "col", class: "px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500" }, " Paid ", -1))])]), e("tbody", Je, [(l(true), r(g, null, x(t.latestActivatedTenants, (a) => (l(), r("tr", { key: a.id }, [e("td", Ke, o(a.portal_name), 1), e("td", Qe, o(a.admin_email), 1), e("td", Xe, [v(ee, { lines: a.domains }, null, 8, ["lines"])]), (l(), r(g, null, x(N, (d) => e("td", { key: d.key, class: "whitespace-nowrap px-3 py-4 text-center text-sm" }, [a.milestones[d.key] ? (l(), b(h(pe), { key: 0, class: "inline h-5 w-5 text-green-500" })) : (l(), b(h(ve), { key: 1, class: "inline h-5 w-5 text-gray-300" }))])), 64)), e("td", et, o(a.created_at), 1), e("td", tt, [e("span", { class: w(["inline-flex rounded-full px-2 text-xs font-semibold leading-5", a.subscribed ? "bg-green-100 text-green-800" : "bg-yellow-100 text-yellow-800"]) }, o(a.subscribed ? "Yes" : "No"), 3)])]))), 128)), t.latestActivatedTenants.length === 0 ? (l(), r("tr", st, [e("td", { colspan: 7 + N.length, class: "px-4 py-4 text-center text-sm text-gray-500" }, " No activated tenants found ", 8, at)])) : m("", true)])])])])])]; 78 }), _: 1 })], 64)); 79} }; 80export { 81 _t as default 82};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.