@ainyc/canonry 4.183.0 → 4.184.0

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 (31) hide show
  1. package/assets/assets/{AuditHistoryPanel-ClwYugEs.js → AuditHistoryPanel-BoQzQLdL.js} +1 -1
  2. package/assets/assets/{BacklinksPage-DaEn1w9_.js → BacklinksPage-BMtZIpQj.js} +1 -1
  3. package/assets/assets/{HistoryPage-B4WWIXmx.js → HistoryPage-CC4O1rGM.js} +1 -1
  4. package/assets/assets/MeasurementPropertyPage-C08ujTv1.js +1 -0
  5. package/assets/assets/ProjectPage-BUddJlIf.js +9 -0
  6. package/assets/assets/{RunRow-0HuBq5KN.js → RunRow-CKp9zNzz.js} +1 -1
  7. package/assets/assets/RunsPage-w-jscgI3.js +1 -0
  8. package/assets/assets/{SettingsPage-XzHCmYz4.js → SettingsPage-CtfgpUHc.js} +1 -1
  9. package/assets/assets/{SiteHealthSection-BODUx0bX.js → SiteHealthSection-C3M1bR9o.js} +3 -3
  10. package/assets/assets/{TrafficPage-2AKICLH_.js → TrafficPage-Bl0vIyDA.js} +1 -1
  11. package/assets/assets/{TrafficSourceDetailPage-CYVG7qZ0.js → TrafficSourceDetailPage-B7jgTW9v.js} +1 -1
  12. package/assets/assets/{extract-error-message-CtGLEBMO.js → extract-error-message-BViVqAMF.js} +1 -1
  13. package/assets/assets/{index-DwdK2e4e.css → index-D5UC9w71.css} +1 -1
  14. package/assets/assets/index-aLn_-ngN.js +86 -0
  15. package/assets/assets/{react-sigma_core.esm.min-D5Honb13.js → react-sigma_core.esm.min-COiFFO4S.js} +1 -1
  16. package/assets/index.html +2 -2
  17. package/dist/{chunk-RQSSKN5F.js → chunk-3BF373KE.js} +2 -2
  18. package/dist/{chunk-ISONU3FA.js → chunk-7ATZMDG2.js} +154 -39
  19. package/dist/{chunk-OF3PKBW4.js → chunk-AKWR2NKJ.js} +45 -4
  20. package/dist/{chunk-Z2HTLTQV.js → chunk-DU5Q5ZOX.js} +4571 -4386
  21. package/dist/{chunk-VFQPW2VX.js → chunk-ROSGBFKI.js} +543 -390
  22. package/dist/cli.js +13 -157
  23. package/dist/index.d.ts +2 -0
  24. package/dist/index.js +4 -4
  25. package/dist/{intelligence-service-4XQBUFBU.js → intelligence-service-BQIIWWQJ.js} +2 -2
  26. package/dist/mcp.js +3 -3
  27. package/package.json +9 -9
  28. package/assets/assets/MeasurementPropertyPage-DFvelKfS.js +0 -1
  29. package/assets/assets/ProjectPage-D3AuGcau.js +0 -9
  30. package/assets/assets/RunsPage-DhdjoIdK.js +0 -1
  31. package/assets/assets/index-B64WXjg8.js +0 -86
package/dist/cli.js CHANGED
@@ -28,11 +28,11 @@ import {
28
28
  trackCliCommandFinished,
29
29
  trackEvent,
30
30
  waitForServerRuntimeStartup
31
- } from "./chunk-OF3PKBW4.js";
31
+ } from "./chunk-AKWR2NKJ.js";
32
32
  import {
33
33
  autoSyncSkills,
34
34
  formatAutoSyncNotice
35
- } from "./chunk-RQSSKN5F.js";
35
+ } from "./chunk-3BF373KE.js";
36
36
  import {
37
37
  CliError,
38
38
  EXIT_SYSTEM_ERROR,
@@ -40,6 +40,7 @@ import {
40
40
  configExists,
41
41
  createApiClient,
42
42
  emitInstallSummary,
43
+ getBootstrapEnv,
43
44
  getConfigDir,
44
45
  getConfigPath,
45
46
  getMissingUserSkillsNudge,
@@ -57,7 +58,7 @@ import {
57
58
  saveConfigPatch,
58
59
  systemError,
59
60
  usageError
60
- } from "./chunk-VFQPW2VX.js";
61
+ } from "./chunk-ROSGBFKI.js";
61
62
  import {
62
63
  CLOUDFLARE_WORKER_BINDINGS,
63
64
  CLOUDFLARE_WORKER_GENERATED_MARKER,
@@ -71,7 +72,7 @@ import {
71
72
  projects,
72
73
  queries,
73
74
  renderReportHtml
74
- } from "./chunk-ISONU3FA.js";
75
+ } from "./chunk-7ATZMDG2.js";
75
76
  import {
76
77
  AdsDeliverySnapshotStatuses,
77
78
  AdsHistoricalCampaignRollupStatuses,
@@ -137,10 +138,9 @@ import {
137
138
  measurementQuestionResultQuerySchema,
138
139
  normalizeProjectAliases,
139
140
  notificationEventSchema,
140
- providerQuotaPolicySchema,
141
141
  resolveProviderInput,
142
142
  winnabilityClassSchema
143
- } from "./chunk-Z2HTLTQV.js";
143
+ } from "./chunk-DU5Q5ZOX.js";
144
144
 
145
145
  // src/cli.ts
146
146
  import { pathToFileURL } from "url";
@@ -14006,150 +14006,6 @@ import crypto from "crypto";
14006
14006
  import path9 from "path";
14007
14007
  import { isDeepStrictEqual } from "util";
14008
14008
  import { eq } from "drizzle-orm";
14009
-
14010
- // ../config/src/index.ts
14011
- import { z } from "zod";
14012
- var envSchema = z.object({
14013
- DATABASE_URL: z.string().default("postgresql://aeo:aeo@postgres:5432/aeo_platform"),
14014
- API_PORT: z.coerce.number().int().positive().default(3e3),
14015
- WORKER_PORT: z.coerce.number().int().positive().default(3001),
14016
- WEB_PORT: z.coerce.number().int().positive().default(4173),
14017
- BOOTSTRAP_SECRET: z.string().default("change-me"),
14018
- CANONRY_BASE_PATH: z.string().default("/"),
14019
- // Gemini
14020
- GEMINI_API_KEY: z.string().optional(),
14021
- GEMINI_MODEL: z.string().optional(),
14022
- GEMINI_BASE_URL: z.string().optional(),
14023
- GEMINI_MAX_CONCURRENCY: z.coerce.number().int().positive().default(2),
14024
- GEMINI_MAX_REQUESTS_PER_MINUTE: z.coerce.number().int().positive().default(10),
14025
- GEMINI_MAX_REQUESTS_PER_DAY: z.coerce.number().int().positive().default(1e3),
14026
- // Gemini Vertex AI (alternative to API key auth)
14027
- GEMINI_VERTEX_PROJECT: z.string().optional(),
14028
- GEMINI_VERTEX_REGION: z.string().optional(),
14029
- GEMINI_VERTEX_CREDENTIALS: z.string().optional(),
14030
- // OpenAI
14031
- OPENAI_API_KEY: z.string().optional(),
14032
- OPENAI_MODEL: z.string().optional(),
14033
- OPENAI_BASE_URL: z.string().optional(),
14034
- OPENAI_MAX_CONCURRENCY: z.coerce.number().int().positive().default(2),
14035
- OPENAI_MAX_REQUESTS_PER_MINUTE: z.coerce.number().int().positive().default(10),
14036
- OPENAI_MAX_REQUESTS_PER_DAY: z.coerce.number().int().positive().default(1e3),
14037
- // Anthropic / Claude
14038
- ANTHROPIC_API_KEY: z.string().optional(),
14039
- ANTHROPIC_MODEL: z.string().optional(),
14040
- ANTHROPIC_MAX_CONCURRENCY: z.coerce.number().int().positive().default(2),
14041
- ANTHROPIC_MAX_REQUESTS_PER_MINUTE: z.coerce.number().int().positive().default(10),
14042
- ANTHROPIC_MAX_REQUESTS_PER_DAY: z.coerce.number().int().positive().default(1e3),
14043
- // Perplexity
14044
- PERPLEXITY_API_KEY: z.string().optional(),
14045
- PERPLEXITY_MODEL: z.string().optional(),
14046
- PERPLEXITY_MAX_CONCURRENCY: z.coerce.number().int().positive().default(2),
14047
- PERPLEXITY_MAX_REQUESTS_PER_MINUTE: z.coerce.number().int().positive().default(10),
14048
- PERPLEXITY_MAX_REQUESTS_PER_DAY: z.coerce.number().int().positive().default(1e3),
14049
- // Secret for HMAC-signing Google OAuth state parameters. Required for
14050
- // cloud deployments that mount googleRoutes; the plugin refuses to register
14051
- // without it (see packages/api-routes/src/google.ts).
14052
- GOOGLE_STATE_SECRET: z.string().optional()
14053
- });
14054
- var bootstrapEnvSchema = z.object({
14055
- CANONRY_API_KEY: z.string().optional(),
14056
- CANONRY_API_URL: z.string().optional(),
14057
- CANONRY_DATABASE_PATH: z.string().optional(),
14058
- GEMINI_API_KEY: z.string().optional(),
14059
- GEMINI_MODEL: z.string().optional(),
14060
- GEMINI_BASE_URL: z.string().optional(),
14061
- GEMINI_VERTEX_PROJECT: z.string().optional(),
14062
- GEMINI_VERTEX_REGION: z.string().optional(),
14063
- GEMINI_VERTEX_CREDENTIALS: z.string().optional(),
14064
- OPENAI_API_KEY: z.string().optional(),
14065
- OPENAI_MODEL: z.string().optional(),
14066
- OPENAI_BASE_URL: z.string().optional(),
14067
- ANTHROPIC_API_KEY: z.string().optional(),
14068
- ANTHROPIC_MODEL: z.string().optional(),
14069
- PERPLEXITY_API_KEY: z.string().optional(),
14070
- PERPLEXITY_MODEL: z.string().optional(),
14071
- LOCAL_BASE_URL: z.string().optional(),
14072
- LOCAL_API_KEY: z.string().optional(),
14073
- LOCAL_MODEL: z.string().optional(),
14074
- GOOGLE_CLIENT_ID: z.string().optional(),
14075
- GOOGLE_CLIENT_SECRET: z.string().optional()
14076
- });
14077
- function getBootstrapEnv(source, overrides) {
14078
- const filtered = overrides ? Object.fromEntries(Object.entries(overrides).filter(([, v]) => v != null)) : {};
14079
- const parsed = bootstrapEnvSchema.parse({ ...source, ...filtered });
14080
- const providers = {};
14081
- if (parsed.GEMINI_API_KEY || parsed.GEMINI_VERTEX_PROJECT) {
14082
- providers.gemini = {
14083
- apiKey: parsed.GEMINI_API_KEY ?? "",
14084
- model: parsed.GEMINI_MODEL || "gemini-2.5-flash",
14085
- baseUrl: parsed.GEMINI_BASE_URL,
14086
- quota: providerQuotaPolicySchema.parse({
14087
- maxConcurrency: 2,
14088
- maxRequestsPerMinute: 10,
14089
- maxRequestsPerDay: 500
14090
- }),
14091
- vertexProject: parsed.GEMINI_VERTEX_PROJECT,
14092
- vertexRegion: parsed.GEMINI_VERTEX_REGION,
14093
- vertexCredentials: parsed.GEMINI_VERTEX_CREDENTIALS
14094
- };
14095
- }
14096
- if (parsed.OPENAI_API_KEY) {
14097
- providers.openai = {
14098
- apiKey: parsed.OPENAI_API_KEY,
14099
- model: parsed.OPENAI_MODEL || "gpt-5.4",
14100
- baseUrl: parsed.OPENAI_BASE_URL,
14101
- quota: providerQuotaPolicySchema.parse({
14102
- maxConcurrency: 2,
14103
- maxRequestsPerMinute: 10,
14104
- maxRequestsPerDay: 500
14105
- })
14106
- };
14107
- }
14108
- if (parsed.ANTHROPIC_API_KEY) {
14109
- providers.claude = {
14110
- apiKey: parsed.ANTHROPIC_API_KEY,
14111
- model: parsed.ANTHROPIC_MODEL || "claude-sonnet-4-6",
14112
- quota: providerQuotaPolicySchema.parse({
14113
- maxConcurrency: 2,
14114
- maxRequestsPerMinute: 10,
14115
- maxRequestsPerDay: 500
14116
- })
14117
- };
14118
- }
14119
- if (parsed.PERPLEXITY_API_KEY) {
14120
- providers.perplexity = {
14121
- apiKey: parsed.PERPLEXITY_API_KEY,
14122
- model: parsed.PERPLEXITY_MODEL || "sonar",
14123
- quota: providerQuotaPolicySchema.parse({
14124
- maxConcurrency: 2,
14125
- maxRequestsPerMinute: 10,
14126
- maxRequestsPerDay: 500
14127
- })
14128
- };
14129
- }
14130
- if (parsed.LOCAL_BASE_URL) {
14131
- providers.local = {
14132
- baseUrl: parsed.LOCAL_BASE_URL,
14133
- apiKey: parsed.LOCAL_API_KEY,
14134
- model: parsed.LOCAL_MODEL || "llama3",
14135
- quota: providerQuotaPolicySchema.parse({
14136
- maxConcurrency: 2,
14137
- maxRequestsPerMinute: 10,
14138
- maxRequestsPerDay: 500
14139
- })
14140
- };
14141
- }
14142
- return {
14143
- apiKey: parsed.CANONRY_API_KEY,
14144
- apiUrl: parsed.CANONRY_API_URL,
14145
- databasePath: parsed.CANONRY_DATABASE_PATH,
14146
- googleClientId: parsed.GOOGLE_CLIENT_ID,
14147
- googleClientSecret: parsed.GOOGLE_CLIENT_SECRET,
14148
- providers
14149
- };
14150
- }
14151
-
14152
- // src/commands/bootstrap.ts
14153
14009
  function persistedValue(value) {
14154
14010
  if (Array.isArray(value)) return value.map(persistedValue);
14155
14011
  if (value && typeof value === "object") {
@@ -18298,7 +18154,7 @@ Usage: ${usage}`, {
18298
18154
  import crypto3 from "crypto";
18299
18155
  import fs19 from "fs";
18300
18156
  import { parse } from "yaml";
18301
- import { z as z2 } from "zod";
18157
+ import { z } from "zod";
18302
18158
  function readPlan(source) {
18303
18159
  const content = source === "-" ? fs19.readFileSync(0, "utf8") : fs19.readFileSync(source, "utf8");
18304
18160
  const parsed = source.endsWith(".json") ? JSON.parse(content) : parse(content);
@@ -18333,14 +18189,14 @@ var ADVANCED_MEASUREMENT_OPERATIONS = [
18333
18189
  "query-template-delete",
18334
18190
  "query-template-apply"
18335
18191
  ];
18336
- var advancedIdempotencyKeySchema = z2.string().trim().min(1);
18337
- var advancedResourceIdSchema = z2.string().trim().min(1);
18338
- var advancedEmptyInputSchema = z2.object({}).strict();
18339
- var advancedQuerySetInputSchema = z2.object({ setId: advancedResourceIdSchema }).strict();
18192
+ var advancedIdempotencyKeySchema = z.string().trim().min(1);
18193
+ var advancedResourceIdSchema = z.string().trim().min(1);
18194
+ var advancedEmptyInputSchema = z.object({}).strict();
18195
+ var advancedQuerySetInputSchema = z.object({ setId: advancedResourceIdSchema }).strict();
18340
18196
  var advancedQuerySetUpsertInputSchema = advancedQuerySetInputSchema.extend({
18341
18197
  request: measurementQuerySetUpsertRequestSchema
18342
18198
  }).strict();
18343
- var advancedQueryTemplateInputSchema = z2.object({ templateId: advancedResourceIdSchema }).strict();
18199
+ var advancedQueryTemplateInputSchema = z.object({ templateId: advancedResourceIdSchema }).strict();
18344
18200
  var advancedQueryTemplateUpsertInputSchema = advancedQueryTemplateInputSchema.extend({
18345
18201
  request: measurementQueryTemplateUpsertRequestSchema
18346
18202
  }).strict();
@@ -18348,7 +18204,7 @@ var advancedQueryTemplateApplyInputSchema = advancedQueryTemplateInputSchema.ext
18348
18204
  request: measurementQueryTemplateApplyRequestSchema,
18349
18205
  idempotencyKey: advancedIdempotencyKeySchema
18350
18206
  }).strict();
18351
- var advancedDeactivateInputSchema = z2.object({
18207
+ var advancedDeactivateInputSchema = z.object({
18352
18208
  request: measurementPlanDeactivateRequestSchema,
18353
18209
  idempotencyKey: advancedIdempotencyKeySchema
18354
18210
  }).strict();
package/dist/index.d.ts CHANGED
@@ -306,6 +306,8 @@ interface DashboardConfigEntry {
306
306
  * or CLI update notice.
307
307
  */
308
308
  showUpdateNotification?: boolean;
309
+ /** Hide dashboard sweep controls; operators can still use `canonry run`. Defaults to false. */
310
+ managedSweeps?: boolean | null;
309
311
  }
310
312
  /**
311
313
  * Google Places API config — supplemental rendered-listing data for GBP
package/dist/index.js CHANGED
@@ -3,12 +3,12 @@ import {
3
3
  createGoogleMarketingCredentialStore,
4
4
  createGoogleMarketingRuntime,
5
5
  createServer
6
- } from "./chunk-OF3PKBW4.js";
6
+ } from "./chunk-AKWR2NKJ.js";
7
7
  import {
8
8
  loadConfig
9
- } from "./chunk-VFQPW2VX.js";
10
- import "./chunk-ISONU3FA.js";
11
- import "./chunk-Z2HTLTQV.js";
9
+ } from "./chunk-ROSGBFKI.js";
10
+ import "./chunk-7ATZMDG2.js";
11
+ import "./chunk-DU5Q5ZOX.js";
12
12
  export {
13
13
  GoogleMarketingRuntimeError,
14
14
  createGoogleMarketingCredentialStore,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  IntelligenceService
3
- } from "./chunk-ISONU3FA.js";
4
- import "./chunk-Z2HTLTQV.js";
3
+ } from "./chunk-7ATZMDG2.js";
4
+ import "./chunk-DU5Q5ZOX.js";
5
5
  export {
6
6
  IntelligenceService
7
7
  };
package/dist/mcp.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  autoSyncSkills
3
- } from "./chunk-RQSSKN5F.js";
3
+ } from "./chunk-3BF373KE.js";
4
4
  import {
5
5
  createApiClient,
6
6
  createCanonryMcpServer
7
- } from "./chunk-VFQPW2VX.js";
7
+ } from "./chunk-ROSGBFKI.js";
8
8
  import {
9
9
  isReadOnlyKey
10
- } from "./chunk-Z2HTLTQV.js";
10
+ } from "./chunk-DU5Q5ZOX.js";
11
11
 
12
12
  // src/mcp/cli.ts
13
13
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ainyc/canonry",
3
- "version": "4.183.0",
3
+ "version": "4.184.0",
4
4
  "type": "module",
5
5
  "description": "Self-hosted AI visibility (AEO) platform: track how ChatGPT, Claude, Gemini, and Perplexity cite your domain, join it with Search Console, GA4, server-side traffic, and paid media, and fix what you find through agent tools (CLI, REST, MCP). Local SQLite.",
6
6
  "license": "FSL-1.1-ALv2",
@@ -75,26 +75,26 @@
75
75
  "@ainyc/canonry-config": "0.0.0",
76
76
  "@ainyc/canonry-db": "0.0.0",
77
77
  "@ainyc/canonry-contracts": "0.0.0",
78
- "@ainyc/canonry-integration-cloud-run": "0.0.0",
79
78
  "@ainyc/canonry-integration-bing": "0.0.0",
79
+ "@ainyc/canonry-integration-cloud-run": "0.0.0",
80
+ "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
81
+ "@ainyc/canonry-integration-google": "0.0.0",
80
82
  "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
81
83
  "@ainyc/canonry-integration-commoncrawl": "0.0.0",
82
84
  "@ainyc/canonry-integration-google-ads": "0.0.0",
83
85
  "@ainyc/canonry-integration-google-places": "0.0.0",
84
- "@ainyc/canonry-integration-google": "0.0.0",
85
- "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
86
- "@ainyc/canonry-integration-google-business-profile": "0.0.0",
87
86
  "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
87
+ "@ainyc/canonry-integration-google-business-profile": "0.0.0",
88
88
  "@ainyc/canonry-integration-openai-ads": "0.0.0",
89
89
  "@ainyc/canonry-integration-traffic": "0.0.0",
90
+ "@ainyc/canonry-integration-wordpress": "0.0.0",
90
91
  "@ainyc/canonry-intelligence": "0.0.0",
91
92
  "@ainyc/canonry-provider-claude": "0.0.0",
92
- "@ainyc/canonry-integration-wordpress": "0.0.0",
93
- "@ainyc/canonry-provider-gemini": "0.0.0",
94
- "@ainyc/canonry-provider-cdp": "0.0.0",
95
93
  "@ainyc/canonry-provider-local": "0.0.0",
94
+ "@ainyc/canonry-provider-openai": "0.0.0",
95
+ "@ainyc/canonry-provider-gemini": "0.0.0",
96
96
  "@ainyc/canonry-provider-perplexity": "0.0.0",
97
- "@ainyc/canonry-provider-openai": "0.0.0"
97
+ "@ainyc/canonry-provider-cdp": "0.0.0"
98
98
  },
99
99
  "scripts": {
100
100
  "build": "tsx scripts/copy-agent-assets.ts && tsup && tsx build-web.ts",
@@ -1 +0,0 @@
1
- import{C as ie,r as w,u as L,D as oe,j as e,L as T}from"./vendor-tanstack-CYBjbqVr.js";import{aM as le,c7 as de,dj as ce,f as E,dk as he,cf as me,c1 as xe,B as j,T as N,I as P,dl as pe,dm as ue,dn as je}from"./index-B64WXjg8.js";import{j as ye,o as be}from"./ChartPrimitives-DLEICrrL.js";import{m as ve}from"./v2-overview-adapter-COMP5UGt.js";import{y as ge}from"./vendor-lucide-XjCNFK0x.js";import"./vendor-radix-BpmvLvpp.js";import"./vendor-recharts-FA0uySU7.js";import"./vendor-markdown-9tTeP8v7.js";import"./vendor-yaml-GWJz5H2G.js";const K=50,h={branded:{headline:"When they know your name",technical:"Branded queries"},"non-brand":{headline:"When they don't",technical:"Non-brand queries"}},Ne={plan_v1:"Setup update required",no_completed_run:"No completed measurement yet",no_population:"No queries of this type are assigned",evidence_incomplete:"Source evidence is incomplete",not_applicable:"Not applicable for this Property"},W={complete:{label:"Measured",tone:"positive"},partial:{label:"Partly measured",tone:"caution"},running:{label:"Measuring now",tone:"neutral"},queued:{label:"Measurement queued",tone:"neutral"},failed:{label:"Measurement failed",tone:"negative"},not_measured:{label:"Not measured",tone:"neutral"}},D={assigned:{label:"Matches this Property",tone:"positive"},sibling:{label:"Matches another Property",tone:"caution"},ownedUnmapped:{label:"Site URL not in a Property",tone:"caution"},external:{label:"External URL",tone:"neutral"},ambiguous:{label:"Matches multiple Properties",tone:"caution"},invalid:{label:"Invalid URL",tone:"negative"}};function fe(s){return[...s].sort((t,a)=>+(a.classification==="assigned")-+(t.classification==="assigned"))}function we(s){return`${s.expectedSlotId}:${s.usageEdgeId}`}function Pe({row:s}){return s.mentioned===null?e.jsxs("span",{className:"inline-flex flex-col items-start gap-0.5",children:[e.jsx(N,{tone:"neutral",children:"Not measured"}),e.jsx("span",{className:"text-xs text-muted",children:"No mention signal for this Property"})]}):e.jsx(N,{tone:s.mentioned?"positive":"neutral",children:s.mentioned?"Mentioned":"Not mentioned"})}const Ce="—";function Le({row:s}){return s.cited===null?e.jsxs("span",{className:"inline-flex flex-col items-start gap-0.5",children:[e.jsx(N,{tone:"neutral",children:"Not measured"}),e.jsx("span",{className:"text-xs text-muted",children:"Sources were not fully captured"})]}):e.jsx(N,{tone:s.cited?"positive":"neutral",children:s.cited?"Cited":"Not cited"})}function Ee({row:s}){return s.cited===null&&s.sources.length===0?e.jsx("p",{className:"py-2 text-sm text-secondary",children:"The sources for this answer were not fully captured, so none can be shown."}):s.sources.length===0?e.jsx("p",{className:"py-2 text-sm text-secondary",children:"This answer returned no source URLs at all."}):e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"evidence-table min-w-[420px]",children:[e.jsxs("caption",{className:"sr-only",children:["Source URLs for ",s.queryText]}),e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Match"}),e.jsx("th",{children:"URL"})]})}),e.jsx("tbody",{children:fe(s.sources).map(t=>e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx(N,{tone:D[t.classification].tone,children:D[t.classification].label})}),e.jsx("td",{className:"break-all text-secondary",children:t.sourceUrl})]},t.sourceUrl))})]})})}function Me({project:s,targetKey:t,row:a}){const n=L({...je({client:E,path:{name:s},query:{targetKey:t,resultId:a.observationId}})});if(n.isPending)return e.jsx("p",{className:"py-2 text-sm text-secondary",role:"status","aria-live":"polite",children:"Loading the answer…"});if(n.isError)return e.jsx("p",{className:"py-2 text-sm text-secondary",role:"alert",children:"Could not load this answer."});const o=n.data?.answer;return o==null||o.trim()===""?e.jsx("p",{className:"py-2 text-sm text-secondary",children:"This answer was measured, but its text was not stored."}):e.jsxs("div",{className:"py-2",children:[e.jsxs("h4",{className:"mb-1 text-xs font-medium tracking-wide text-muted uppercase",children:["What ",a.provider," answered"]}),e.jsx("p",{className:"max-h-64 overflow-y-auto whitespace-pre-wrap text-sm leading-relaxed text-secondary",children:o})]})}function q(s){return Ne[s.reason]??"Not measured"}function k({metric:s,emphasis:t=!1}){if(s.state==="unavailable")return e.jsxs("span",{className:"inline-flex flex-col gap-0.5",children:[e.jsx("span",{className:t?"text-lg font-semibold text-secondary":"text-sm font-medium text-secondary",children:"Not measured"}),e.jsx("span",{className:"text-sm text-secondary",children:q(s)})]});const a=`${Math.round(s.value*100)}%`,n=s.numerator===void 0||s.denominator===void 0?null:`${s.numerator} of ${s.denominator}`;return e.jsxs("span",{className:"inline-flex flex-col gap-0.5 tabular-nums",children:[e.jsx("span",{className:t?"text-lg font-semibold text-heading":"text-sm font-medium text-primary",children:a}),n?e.jsx("span",{className:"text-xs text-muted",children:n}):null]})}function H(s,t,a){return pe({client:E,path:{name:s},query:{scope:"property",targetKey:t,queryClass:a}})}function G(s){return s?.properties.items.at(0)}function Re({measuredAt:s,unmeasuredReason:t,queryClass:a}){const n=s===void 0?null:s===null?"No completed sweep yet":`Measured ${ye(be(s))}`;return n===null&&t===void 0?null:e.jsxs("p",{className:"supporting-copy",children:[[n,t].filter(Boolean).join(" · "),n!==null&&t===void 0?` · ${h[a].technical.toLocaleLowerCase()} only`:""]})}function Se({project:s,groups:t}){return t.length===0?null:e.jsxs("section",{"aria-labelledby":"property-market",className:"page-section-divider",children:[e.jsxs("div",{className:"section-head section-head-inline",children:[e.jsxs("div",{children:[e.jsx("p",{className:"eyebrow eyebrow-soft",children:"Competitive comparison"}),e.jsxs("h2",{id:"property-market",className:"text-base font-semibold text-heading",children:["Measured at the market level",e.jsx(P,{text:"Competitors are attached to a market rather than to a single Property, because one building has nobody to be compared against. Share of voice and competitor pressure are reported for the market this Property sits in."})]})]}),e.jsx(j,{asChild:!0,type:"button",size:"sm",variant:"outline",children:e.jsx(T,{to:"/projects/$projectName",params:{projectName:s},children:"Open measurement overview"})})]}),e.jsx("ul",{className:"flex flex-wrap gap-2",children:t.map(a=>e.jsxs("li",{className:"rounded-md border border-default px-3 py-1.5 text-sm text-strong",children:[a.label,e.jsxs("span",{className:"ml-2 text-xs text-muted",children:[a.competitors.length," ",a.competitors.length===1?"competitor":"competitors"]})]},a.stableKey))})]})}function S({label:s,metric:t,failed:a=!1}){if(t===void 0)return e.jsxs("div",{className:"aeo-hero-row",children:[e.jsx("p",{className:"aeo-hero-row-label",children:s}),e.jsx("p",{className:"aeo-hero-row-value text-base font-semibold text-secondary",children:a?"Unavailable":"…"}),a?e.jsx("div",{}):e.jsx("div",{className:"aeo-hero-row-bar","aria-hidden":"true"}),e.jsx("p",{className:"aeo-hero-row-detail",children:a?"Could not be loaded":"Loading"})]});if(t.state==="unavailable"){const m=q(t);return e.jsxs("div",{className:"aeo-hero-row",children:[e.jsx("p",{className:"aeo-hero-row-label",children:s}),e.jsx("p",{className:"aeo-hero-row-value text-base font-semibold text-secondary",children:"Not measured"}),e.jsx("div",{}),e.jsx("p",{className:"aeo-hero-row-detail",children:m==="Not measured"?"":m})]})}const n=Math.round(t.value*100),o=t.numerator===void 0||t.denominator===void 0?null:`${t.numerator} of ${t.denominator}`;return e.jsxs("div",{className:"aeo-hero-row",children:[e.jsx("p",{className:"aeo-hero-row-label",children:s}),e.jsxs("p",{className:"aeo-hero-row-value text-heading",children:[n,e.jsx("span",{className:"text-faint",children:"%"})]}),e.jsx("div",{className:"aeo-hero-row-bar","aria-hidden":"true",children:e.jsx("div",{className:"metric-card-bar-fill progress-fill-neutral",style:{width:`${n}%`}})}),e.jsx("p",{className:"aeo-hero-row-detail tabular-nums",children:o??""})]})}function Te({branded:s,nonBrand:t,brandedFailed:a=!1,nonBrandFailed:n=!1}){return e.jsxs("section",{"aria-labelledby":"property-coverage-hero",children:[e.jsx("h2",{id:"property-coverage-hero",className:"sr-only",children:"Coverage for this Property"}),e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"eyebrow eyebrow-soft",children:"Non-brand · the demand to earn"}),e.jsx(S,{label:"Mentioned",metric:t?.mentionCoverage,failed:n}),e.jsx(S,{label:"Cited",metric:t?.citationCoverage,failed:n})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"eyebrow eyebrow-soft",children:"Branded · already named"}),e.jsx(S,{label:"Mentioned",metric:s?.mentionCoverage,failed:a}),e.jsx(S,{label:"Cited",metric:s?.citationCoverage,failed:a})]})]})]})}function ke({branded:s,nonBrand:t,brandedError:a,nonBrandError:n,onRetry:o}){const m=[{queryClass:"branded",row:s,isError:a},{queryClass:"non-brand",row:t,isError:n}];return e.jsxs("section",{"aria-labelledby":"property-brand-contrast",children:[e.jsx("div",{className:"section-head section-head-inline",children:e.jsxs("div",{children:[e.jsx("p",{className:"eyebrow eyebrow-soft",children:"The gap"}),e.jsxs("h2",{id:"property-brand-contrast",className:"text-base font-semibold text-heading",children:["Named versus not named",e.jsx(P,{text:"Branded queries already contain your name, so an answer engine has an easy path back to you. Non-brand queries describe the need instead, and that is the demand you have to earn. Each row is measured only over the queries assigned to this Property in that class; a class with no assigned query reads Not measured rather than 0%."})]})]})}),e.jsx("div",{className:"overflow-x-auto rounded-md border border-default",children:e.jsxs("table",{className:"evidence-table min-w-[560px]",children:[e.jsx("caption",{className:"sr-only",children:"Mention and citation coverage for this Property, split by query class"}),e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Query type"}),e.jsx("th",{children:"Mentioned in the answer"}),e.jsx("th",{children:"Cited as a source"})]})}),e.jsx("tbody",{children:m.map(({queryClass:r,row:l,isError:y})=>e.jsxs("tr",{children:[e.jsxs("td",{children:[e.jsx("span",{className:"block font-medium text-heading",children:h[r].headline}),e.jsx("span",{className:"mt-0.5 block text-xs text-muted",children:h[r].technical}),l&&y?e.jsxs("span",{className:"mt-2 flex flex-wrap items-center gap-2 text-sm text-caution",children:[e.jsx("span",{role:"status",children:"Refresh failed."}),e.jsxs(j,{type:"button",size:"sm",variant:"ghost",className:"h-11 px-3 text-sm md:h-11",onClick:()=>o(r),children:["Retry ",h[r].technical.toLocaleLowerCase()]})]}):null]}),l?e.jsxs(e.Fragment,{children:[e.jsx("td",{children:e.jsx(k,{metric:l.mentionCoverage,emphasis:!0})}),e.jsx("td",{children:e.jsx(k,{metric:l.citationCoverage,emphasis:!0})})]}):y?e.jsx("td",{colSpan:2,children:e.jsxs("div",{className:"flex flex-wrap items-center gap-3 text-sm text-secondary",children:[e.jsxs("span",{role:"alert",children:["Could not load ",h[r].technical.toLocaleLowerCase(),"."]}),e.jsxs(j,{type:"button",size:"sm",variant:"outline",className:"h-11 px-4 text-sm md:h-11",onClick:()=>o(r),children:["Retry ",h[r].technical.toLocaleLowerCase()]})]})}):e.jsxs(e.Fragment,{children:[e.jsx("td",{children:e.jsx("span",{className:"text-sm text-secondary",children:"Loading…"})}),e.jsx("td",{children:e.jsx("span",{className:"text-sm text-secondary",children:"Loading…"})})]})]},r))})]})})]})}function qe({row:s,queryClass:t,isError:a}){return e.jsxs("section",{"aria-labelledby":"property-providers",className:"page-section-divider",children:[e.jsx("div",{className:"section-head section-head-inline",children:e.jsx("div",{children:e.jsxs("h2",{id:"property-providers",className:"text-base font-semibold text-heading",children:["Which engines answer for this Property",e.jsx(P,{text:"Each row is measured over the queries that engine actually answered for this Property, so the rows are a split of the same population rather than parts that add up to the Property total. An engine that answered nothing for this Property is absent instead of shown at 0%."})]})})}),s===void 0&&a?e.jsxs("p",{className:"text-sm text-secondary",children:["Details for ",h[t].technical.toLocaleLowerCase()," are unavailable. Retry that query type above."]}):s===void 0?e.jsx("p",{className:"text-sm text-secondary",children:"Loading…"}):s.providers.length===0?e.jsxs("p",{className:"text-sm text-secondary",children:["No answer engine has measured ",h[t].technical.toLocaleLowerCase()," for this Property.",s.mentionCoverage.state==="unavailable"?` ${q(s.mentionCoverage)}.`:""]}):e.jsx("div",{className:"overflow-x-auto rounded-md border border-default",children:e.jsxs("table",{className:"evidence-table min-w-[520px]",children:[e.jsx("caption",{className:"sr-only",children:"Per-engine mention and citation coverage"}),e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Engine"}),e.jsx("th",{children:"Mentioned"}),e.jsx("th",{children:"Cited"})]})}),e.jsx("tbody",{children:s.providers.map(n=>e.jsxs("tr",{children:[e.jsx("td",{className:"font-medium text-heading",children:n.provider}),e.jsx("td",{children:e.jsx(k,{metric:n.mentionCoverage})}),e.jsx("td",{children:e.jsx(k,{metric:n.citationCoverage})})]},n.provider))})]})})]})}function Ae(s){const t=s.questions.join(" · ");return s.questionsTruncated?`${t} +${s.questionTotal-s.questions.length} more`:t}function Be({project:s,targetKey:t,queryClass:a}){const n=L({...ue({client:E,path:{name:s},query:{targetKey:t,queryClass:a}})});if(n.isPending||n.isError)return null;const o=n.data?.competitors??[],m=n.data?.basis;return e.jsxs("section",{"aria-labelledby":"property-named-instead",className:"page-section-divider",children:[e.jsxs("div",{className:"section-head section-head-inline",children:[e.jsx("div",{children:e.jsxs("h2",{id:"property-named-instead",className:"text-base font-semibold text-heading",children:["Named instead of this Property",e.jsx(P,{text:"Counted from the answers that did not name this Property, so a name here is one an engine recommended in its place. Occurrences count answers, not positions: an engine naming the same rival in two answers counts twice, and one naming it twice in a single answer counts once."})]})}),o.length>0?e.jsxs("p",{className:"supporting-copy",children:[n.data?.total??o.length," named"]}):null]}),o.length===0?e.jsx("p",{className:"text-sm text-secondary",children:"No rival was named in the answers this Property missed. Nothing to compete with here yet."}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"overflow-x-auto rounded-md border border-default",children:e.jsxs("table",{className:"evidence-table min-w-[420px]",children:[e.jsx("caption",{className:"sr-only",children:"Names the engines gave instead of this Property"}),e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Named"}),e.jsx("th",{children:"Answers"}),e.jsx("th",{children:"Engines"}),e.jsx("th",{children:"Queries"})]})}),e.jsx("tbody",{children:o.map(r=>e.jsxs("tr",{children:[e.jsx("td",{className:"text-strong",children:r.name}),e.jsx("td",{className:"tabular-nums text-secondary",children:r.occurrences}),e.jsxs("td",{className:"text-secondary",children:[r.providers.join(", "),r.providersTruncated?` +${r.providerTotal-r.providers.length}`:""]}),e.jsx("td",{className:"text-right",children:e.jsxs("span",{className:"inline-flex items-center justify-end gap-1",children:[e.jsx("span",{className:"tabular-nums text-secondary",children:r.questionTotal}),e.jsx(P,{text:Ae(r)})]})})]},r.name))})]})}),m?.state==="available"?e.jsxs("p",{className:"supporting-copy mt-2",children:[m.targetMissResults," of ",m.answeredResults," answers to ",h[a].technical.toLocaleLowerCase()," did not name this Property."]}):null]})]})}function Ue({questions:s,queryClass:t}){return e.jsxs("section",{"aria-labelledby":"property-questions",className:"page-section-divider",children:[e.jsxs("div",{className:"section-head section-head-inline",children:[e.jsx("div",{children:e.jsxs("h2",{id:"property-questions",className:"text-base font-semibold text-heading",children:[h[t].technical," assigned to this Property"]})}),e.jsxs("p",{className:"supporting-copy",children:[s.length," assigned"]})]}),s.length===0?e.jsxs("p",{className:"text-sm text-secondary",children:["No ",h[t].technical.toLocaleLowerCase()," are assigned. Add one in advanced measurement setup to measure this class."]}):e.jsx("div",{className:"overflow-x-auto rounded-md border border-default",children:e.jsxs("table",{className:"evidence-table min-w-[420px]",children:[e.jsx("caption",{className:"sr-only",children:"Queries assigned to this Property"}),e.jsx("thead",{children:e.jsx("tr",{children:e.jsx("th",{children:"Query"})})}),e.jsx("tbody",{children:s.map(a=>e.jsx("tr",{children:e.jsx("td",{className:"text-secondary",children:a})},a))})]})})]})}function Ie({urls:s}){return e.jsxs("section",{"aria-labelledby":"property-urls",className:"page-section-divider",children:[e.jsxs("div",{className:"section-head section-head-inline",children:[e.jsx("div",{children:e.jsxs("h2",{id:"property-urls",className:"text-base font-semibold text-heading",children:["URLs that count as this Property",e.jsx(P,{text:"A cited source URL is credited to this Property when it matches one of these. The most specific matcher wins, so a URL covered by two Properties at the same specificity is flagged for review instead of being credited to either."})]})}),e.jsxs("p",{className:"supporting-copy",children:[s.length," configured"]})]}),s.length===0?e.jsx("p",{className:"text-sm text-secondary",children:"No URLs are configured for this Property."}):e.jsx("div",{className:"overflow-x-auto rounded-md border border-default",children:e.jsxs("table",{className:"evidence-table min-w-[420px]",children:[e.jsx("caption",{className:"sr-only",children:"URL matchers configured for this Property"}),e.jsx("thead",{children:e.jsx("tr",{children:e.jsx("th",{children:"URL"})})}),e.jsx("tbody",{children:s.map(t=>e.jsx("tr",{children:e.jsx("td",{className:"break-all text-secondary",children:t})},t))})]})})]})}function He(){const{projectName:s,targetKey:t}=ie({strict:!1}),[a,n]=w.useState("non-brand"),[o,m]=w.useState(new Set),r=s??"",l=t??"",y=!!r&&!!l,{canWrite:A}=le(),C=L({...de({client:E,path:{name:r}}),enabled:y}),b=L({...H(r,l,"branded"),enabled:y}),v=L({...H(r,l,"non-brand"),enabled:y}),B=G(b.data),U=G(v.data),x=a==="branded"?b.data:v.data,f=a==="branded"?B:U,O=(a==="branded"?b.isError:v.isError)&&f===void 0,Q=x?.measurement.displayedRunId,Z=f?.mentionCoverage.state==="unavailable"?q(f.mentionCoverage):void 0,J=x===void 0?void 0:x.measurement.completedAt??null,M={client:E,path:{name:r},query:{targetKey:l,queryClass:a,shape:ce.answers,limit:K,...Q?{runId:Q}:{}}},d=oe({...he(M),enabled:y&&x!==void 0,initialPageParam:M,getNextPageParam:i=>i.answers?.nextCursor?{path:M.path,query:{...M.query,cursor:i.answers.nextCursor}}:void 0}),I=C.data?.active??null,p=I?.plan.schemaVersion===2?I.plan:null,X=I!==null&&p===null,R=p?.targets.find(i=>i.stableKey===l)??null,Y=w.useMemo(()=>{if(!p)return[];const i=new Map(p.querySnapshots.map(c=>[c.queryId,c.queryText]));return[...new Set(p.assignments.filter(c=>c.targetKey===l&&c.queryClass===a).flatMap(c=>{const u=i.get(c.queryId);return u===void 0?[]:[u]}))].sort((c,u)=>c.localeCompare(u))},[p,l,a]),ee=w.useMemo(()=>R?.urlMatchers.map(ve)??[],[R]),se=w.useMemo(()=>p?.groups.filter(i=>i.targetKeys.includes(l))??[],[p,l]),g=w.useMemo(()=>(d.data?.pages??[]).flatMap(u=>u.answers?.items??[]),[d.data]),V=d.data?.pages[0]?.answers?.totalEstimate??g.length,te=(d.data?.pages??[]).length>0&&(d.data?.pages??[]).every(i=>i.answers===void 0),ae=d.data?.pages[0]?.measurement.state,$=e.jsxs(T,{to:"/projects/$projectName",params:{projectName:r},className:"inline-flex items-center gap-1 text-xs text-muted hover:text-strong",children:[e.jsx(ge,{className:"size-3.5","aria-hidden":"true"}),"Back to measurement overview"]});if(!y)return e.jsx("div",{className:"page-container",children:e.jsx("p",{className:"text-sm text-muted",children:"Missing project name or Property key in URL."})});if(!me("portfolio",xe()?.projectTabs))return e.jsx("div",{className:"page-container",children:e.jsx("p",{className:"text-sm text-muted",children:"This view is not available here."})});if(C.isPending&&!C.isError)return e.jsx("div",{className:"page-container",children:e.jsxs("div",{role:"status","aria-live":"polite",children:[e.jsx("span",{className:"sr-only",children:"Loading Property"}),e.jsx("div",{className:"h-32 animate-pulse rounded-md bg-surface-subtle","aria-hidden":"true"})]})});const ne=C.isError&&C.data===void 0,F=b.isError&&b.data===void 0,z=v.isError&&v.data===void 0;return ne||F&&z?e.jsxs("div",{className:"page-container space-y-3",children:[$,e.jsx("p",{role:"alert",className:"text-sm text-negative",children:"Could not load this Property."}),e.jsx(j,{type:"button",size:"sm",variant:"outline",className:"h-11 px-4 text-sm md:h-11",onClick:()=>{C.refetch(),b.refetch(),v.refetch()},children:"Try again"})]}):!p||!R?e.jsxs("div",{className:"page-container space-y-3",children:[$,e.jsx("p",{role:"status",className:"text-sm text-secondary",children:p?"This Property is not in the published setup. It may have been renamed or removed.":"A Property page needs a published advanced measurement setup. Republish setup from the project Portfolio tab."}),e.jsx(j,{asChild:!0,type:"button",variant:"outline",className:"h-11 px-4 text-sm md:h-11",children:e.jsx(T,{to:"/projects/$projectName/portfolio",params:{projectName:r},children:A?X?"Republish setup":"Open measurement setup":"View measurement setup"})})]}):e.jsxs("div",{className:"page-container space-y-8",children:[e.jsxs("div",{className:"page-header",children:[e.jsxs("div",{className:"page-header-left",children:[$,e.jsx("h1",{className:"page-title mt-2",children:R.label}),e.jsxs("p",{className:"page-subtitle",children:["Property in ",r]})]}),e.jsxs("div",{className:"page-header-right",children:[x?e.jsx(N,{tone:W[x.measurement.state].tone,children:W[x.measurement.state].label}):null,f&&f.flags>0?e.jsxs(N,{tone:"caution",children:[f.flags," flagged"]}):null]})]}),e.jsx(Te,{branded:B,nonBrand:U,brandedFailed:F,nonBrandFailed:z}),e.jsx(ke,{branded:B,nonBrand:U,brandedError:b.isError,nonBrandError:v.isError,onRetry:i=>{i==="branded"?b.refetch():v.refetch()}}),x&&(x.measurement.state==="not_measured"||x.nextAction.kind==="run_measurement")?e.jsxs("section",{className:"flex flex-wrap items-center justify-between gap-3 border-y border-default py-4","aria-label":"Measurement next step",children:[e.jsx("p",{className:"text-sm text-secondary",children:A?"Run a measurement from the project overview to collect this Property’s coverage and source evidence.":"This Property needs a new measurement before coverage and source evidence are available."}),e.jsx(j,{asChild:!0,type:"button",className:"h-11 px-4 text-sm md:h-11",children:e.jsx(T,{to:"/projects/$projectName",params:{projectName:r},children:A?"Go to measurement overview":"View measurement overview"})})]}):null,e.jsxs("div",{className:"flex flex-wrap items-end gap-4 border-y border-default py-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{htmlFor:"property-query-class",className:"block text-sm font-medium text-heading",children:"Query type"}),e.jsxs("select",{id:"property-query-class",value:a,onChange:i=>n(i.target.value==="branded"?"branded":"non-brand"),className:"h-11 rounded-md border border-default bg-surface px-3 text-sm text-primary focus:outline-none focus:ring-2 focus:ring-mono-400",children:[e.jsx("option",{value:"non-brand",children:h["non-brand"].technical}),e.jsx("option",{value:"branded",children:h.branded.technical})]})]}),e.jsx(Re,{measuredAt:J,unmeasuredReason:Z,queryClass:a})]}),e.jsx(qe,{row:f,queryClass:a,isError:O}),e.jsx(Be,{project:r,targetKey:l,queryClass:a}),e.jsx(Ue,{questions:Y,queryClass:a}),e.jsx(Ie,{urls:ee}),e.jsx(Se,{project:r,groups:se}),e.jsxs("section",{"aria-labelledby":"property-evidence",className:"page-section-divider",children:[e.jsxs("div",{className:"section-head section-head-inline",children:[e.jsx("div",{children:e.jsxs("h2",{id:"property-evidence",className:"text-base font-semibold text-heading",children:["Answers the engines gave",e.jsx(P,{text:"One row per answer an engine gave for the queries assigned to this Property in the displayed measurement. Mentioned and cited are independent: an answer can name this Property without linking it, or link it without naming it. Answers that did neither are listed first, because those are what a gap is made of. Where the answer text was not stored the mention reads Not measured, never a zero. Open a row to read what the engine actually said, followed by the source URLs it returned, this Property's own first. The answer is where a miss becomes actionable: a query this Property was not named in may still have named a sibling building."})]})}),g.length>0?e.jsxs("p",{className:"supporting-copy",children:[g.length," of ",V]}):null]}),O?e.jsxs("p",{className:"text-sm text-secondary",children:["Evidence for ",h[a].technical.toLocaleLowerCase()," is unavailable. Retry that query type above."]}):d.isPending&&g.length===0?e.jsx("p",{className:"text-sm text-secondary",children:"Loading evidence…"}):d.isError&&g.length===0?e.jsxs("div",{className:"flex flex-wrap items-center gap-3 text-sm text-secondary",children:[e.jsx("span",{role:"alert",children:"Evidence could not be loaded."}),e.jsx(j,{type:"button",size:"sm",variant:"outline",className:"h-11 px-4 text-sm md:h-11",onClick:()=>{d.refetch()},children:"Retry evidence"})]}):ae==="not_measured"?e.jsx("p",{className:"text-sm text-secondary",children:"Not measured yet. Run a measurement to collect the answers for this Property."}):te?e.jsx("p",{role:"alert",className:"text-sm text-caution",children:"This measurement was returned in an older format, so the answers cannot be shown here. The numbers above are unaffected."}):g.length===0?e.jsx("p",{className:"text-sm text-secondary",children:"No answers matched this Property in the displayed measurement."}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"overflow-x-auto rounded-md border border-default",children:e.jsxs("table",{className:"evidence-table min-w-[720px]",children:[e.jsx("caption",{className:"sr-only",children:"Answers measured for this Property"}),e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Query"}),e.jsx("th",{children:"Mentioned in the answer"}),e.jsx("th",{children:"Cited as a source"}),e.jsx("th",{children:"Sources"}),e.jsx("th",{children:e.jsx("span",{className:"sr-only",children:"Sources detail"})})]})}),e.jsx("tbody",{children:g.map(i=>{const c=we(i),u=o.has(c);return e.jsxs(w.Fragment,{children:[e.jsxs("tr",{children:[e.jsxs("td",{className:"text-secondary",children:[e.jsx("span",{className:"block",children:i.queryText}),e.jsx("span",{className:"mt-1 block text-xs text-muted",children:[i.provider,i.location].filter(Boolean).join(" · ")}),i.historical||i.bridged?e.jsx("span",{className:"mt-1 flex",children:e.jsx(N,{tone:"caution",children:"Historical"})}):null]}),e.jsx("td",{children:e.jsx(Pe,{row:i})}),e.jsx("td",{children:e.jsx(Le,{row:i})}),e.jsx("td",{className:"tabular-nums text-secondary",children:i.cited===null?Ce:i.sources.length}),e.jsx("td",{className:"text-right",children:e.jsx(j,{type:"button",size:"sm",variant:"ghost","aria-expanded":u,onClick:()=>m(re=>{const _=new Set(re);return _.delete(c)||_.add(c),_}),children:u?`Hide the answer for ${i.queryText}`:`Read the answer for ${i.queryText}`})})]}),u?e.jsx("tr",{children:e.jsxs("td",{colSpan:5,className:"bg-surface-subtle px-4",children:[e.jsx(Me,{project:r,targetKey:l,row:i}),e.jsx(Ee,{row:i})]})}):null]},c)})})]})}),d.hasNextPage?e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-3 text-sm text-secondary",children:[e.jsxs("span",{children:["Showing ",g.length," of ",V]}),d.isFetchNextPageError?e.jsx("span",{role:"alert",children:"Could not load more evidence."}):null,e.jsx(j,{size:"sm",variant:"outline",className:"h-11 px-4 text-sm md:h-11",disabled:d.isFetchingNextPage,onClick:()=>{d.fetchNextPage()},children:d.isFetchingNextPage?"Loading…":d.isFetchNextPageError?"Retry more evidence":`Show ${K} more`})]}):null]})]})]})}export{He as MeasurementPropertyPage};